【程序1】 8 U7 f% D, d; z1 V7 ~# j1 F6 n
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? * g1 ]8 x4 I1 A5 Z. Q6 Z% o$ G
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
9 P5 }. T9 Z( |% Y' s# t掉不满足条件的排列。
# h7 n' w0 A' a) a' F2 g1 L2.程序源代码:
, N: F! c8 ~8 T8 @0 s/ T5 p3 Qmain() {
8 r) y+ M2 n. V2 L4 F( Jint i,j,k;
/ _: z- e7 g3 V+ u# _3 ^( eprintf("\n");
- g! d5 X* Q; h [0 c5 cfor(i=1;i<5;i++) /*以下为三重循环*/ ' @9 x8 N! Y( o# K4 X* j9 x# s" E
for(j=1;j<5;j++)
- v+ W( J5 t. G, U/ A. Efor (k=1;k<5;k++) { ) d/ S2 {( H& E) e1 b4 s/ _4 u* r
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ , T" C0 L3 E9 @ p
printf("%d,%d,%d\n",i,j,k); }}
' {! Z: a% k7 M+ C' t( d3 {==============================================================
0 l4 E5 M. D0 e, i【程序2】
( w7 T0 L- O4 \$ o) w) g j1 F题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
7 U+ C/ c" ^0 y# g% B- C i% ^于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
) k, U" G" w3 g& c# `成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
" M1 z4 {3 J! E40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
" p7 J+ I) U% D% y4 {% A100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
, Y$ X2 N5 x7 J1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 $ H" Z# F8 y& Z$ V' C
2.程序源代码: + Z4 H/ L3 g1 Y8 m
main() {
9 M" q9 A* y6 k4 P1 Along int i;
$ y* c2 m. Q' ^6 S( T7 ?0 k& a; \int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; * D, i( X( U' G8 y z; k) B3 y
scanf("%ld",&i);
( b7 h8 H! Q' [1 c3 W; obonus1=100000*0.1;bonus2=bonus1+100000*0.75;
z) R4 ~- {2 |9 b. G8 `: t2 e( rbonus4=bonus2+200000*0.5;
2 r1 O/ c9 W2 D4 ]bonus6=bonus4+200000*0.3; 8 l6 w! i" o5 K* ~, b
bonus10=bonus6+400000*0.15; / E, i0 d! p, C
if(i<=100000) 1 Z8 {$ r- ^9 d6 s6 _ j+ I
bonus=i*0.1;
+ ?; ^3 x9 ^% c% X: \. h; velse if(i<=200000)
, a) C4 A4 O4 {) P4 t: n* R& K2 ?, l8 Qbonus=bonus1+(i-100000)*0.075;
/ F( M$ W& \# x& Z2 k6 ^else if(i<=400000)
* a: B$ T' H& c2 P( K+ Z: \bonus=bonus2+(i-200000)*0.05;
4 E! ?0 S" D9 }$ f2 Ielse if(i<=600000) " V1 M9 h1 U# q8 K- f
bonus=bonus4+(i-400000)*0.03;
# q! U& w# @6 p; a7 j6 x6 |else if(i<=1000000) ; m) D3 N# Z- h6 d& J* w V
bonus=bonus6+(i-600000)*0.015; 7 O! K/ a* o; j. k; A8 A
else ' P, i& A0 [) ]+ \
bonus=bonus10+(i-1000000)*0.01;
3 k+ F% `! A( G- \! kprintf("bonus=%d",bonus); }
7 z! s5 s% a% u: |, e==============================================================
! ?! z0 r/ W8 a, T5 L+ E0 ?【程序3】 8 v- R6 s0 Q2 |& u7 t, M
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
( b5 ?9 G9 k9 B# w1 A1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
1 q( S) v4 u( b" U的结果满足如下条件,即是结果。请看具体分析:
) s+ F+ `! D0 }0 u y% C7 E2.程序源代码:
1 j! |! I) c8 E2 ^7 F#include "math.h" 5 f0 |) {3 ?( O3 c, u, f
main() { : N' j4 l+ r2 e; b$ |; `
long int i,x,y,z;
* U4 L! G7 l% N( \: p0 c0 efor (i=1;i<100000;i++)
4 k5 O, J5 l6 g- F8 P{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
% X9 g P+ v$ Qy=sqrt(i+268); /*y为再加上168后开方后的结果*/
9 @- W& Y- J- |. l8 w [& kif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ " N; y: I0 ^5 @6 M" L
printf("\n%ld\n",i); } }
/ {4 [$ o$ @' H Z- |4 a/ Z8 I============================================================== 8 l$ o4 L$ v4 \: c! @
【程序4】
0 b8 |# E# ]" y( L( U/ G题目:输入某年某月某日,判断这一天是这一年的第几天? - s& O9 { O4 G( s% W2 @
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
8 Z& ]& y4 \5 a6 S( O/ b% ] X情况,闰年且输入月份大于3时需考虑多加一天。 8 i, t) ^6 _, w) g0 R
2.程序源代码: / ]6 I5 M2 Q: H3 P) x E
main() { 7 z3 [7 f$ E" E8 O3 d
int day,month,year,sum,leap; 6 x* d: f. r6 l4 L! J% l8 M
printf("\nplease input year,month,day\n");
( s# I5 j* x$ g' M5 C/ ~0 `scanf("%d,%d,%d",&year,&month,&day);
# a' W7 Z! n0 {5 f. Eswitch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break;
- x6 i. G1 b! S* S7 dcase 2:sum=31;break;
. U' g; X( j2 P0 d5 vcase 3:sum=59;break;
# P$ I9 R6 H: {( Qcase 4:sum=90;break; J/ A2 ]6 F% k% a
case 5:sum=120;break; " m, _( T: P5 z) n: ^
case 6:sum=151;break; 6 M8 T2 R! M _& D4 ^4 N& ?
case 7:sum=181;break; - |* U* k0 m( K# h. _
case 8:sum=212;break; 4 G3 c# Z$ b- L& w& d) s
case 9:sum=243;break; " ?& ?$ H) N% N, g* X8 v/ C
case 10:sum=273;break;
/ Z1 n7 u4 b2 R1 u) U. V3 ncase 11:sum=304;break;
; b# X0 V4 b- X9 Y' B% x- A: Q: C* o& qcase 12:sum=334;break; 5 f& ]9 s; \ |8 L ]
default:printf("data error");break; } 2 {) B5 l; } P; I/ M9 n
sum=sum+day; /*再加上某天的天数*/ & t" o7 r j! f$ {
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
; S$ n9 ] f: Z5 [2 p5 zleap=1; 1 B$ x! [& o9 v/ w) S3 t. F
else 3 v4 U/ Y9 r- B( e0 z
leap=0;
. Q" a5 d4 d. B) L+ g5 U8 Mif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
- t$ Q( _- r, v- E) t7 M7 ?6 esum++;
3 u( B6 X3 W6 @! xprintf("It is the %dth day.",sum);} 4 Y3 q! g+ o5 z+ W' {# y3 O
==============================================================
* ? k2 T) y) P t【程序5】
* E" F0 i, m& d7 X: b1 P& C题目:输入三个整数x,y,z,请把这三个数由小到大输出。
6 t" F' {! I; u9 F+ X& x5 n7 I1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
7 Q% G N- p( u% u然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 ! d# x& Z) n7 K) j' R
2.程序源代码: # B; p- `, [; q
main() { ) O) b' [1 m; M
int x,y,z,t;
8 Q/ q# _% Z; w& Qscanf("%d%d%d",&x,&y,&z);
# c( b6 z) F4 ~9 hif (x>y)
j5 o ~8 b' e* ?* c/ m{t=x;x=y;y=t;} /*交换x,y的值*/
% U$ j; Q; o5 w3 i. nif(x>z)
% [9 g: o9 Y6 f4 ~{t=z;z=x;x=t;}/*交换x,z的值*/ # q# i( Y4 }- U- U2 o3 s8 W( A
if(y>z) ' s* s. a, e9 P. Y. q5 {, `
{t=y;y=z;z=t;}/*交换z,y的值*/ 9 P$ G9 _$ V! l
printf("small to big: %d %d %d\n",x,y,z); }
- h/ k1 {% f3 j% e0 M& o8 D9 o7 m' d- G============================================================== 2 C! O; c8 L5 ^! M( z
【程序6】 # f6 l: \" `8 K# X' j" t
题目:用*号输出字母C的图案。 # n7 \) ~4 i- T/ h: q
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 8 c0 K! p6 J* f8 Q8 _' I) D, @$ {: {
2.程序源代码: / |/ J8 l; R4 d
#include "stdio.h"
5 {" Y8 O: C" Q. Z% Hmain() { 9 h: D8 J: `6 x z3 P; m$ L
printf("Hello C-world!\n"); 6 h* v) m* J2 H0 A) u' M
printf(" ****\n"); 5 h- g% u$ R+ S5 U$ s
printf(" *\n");
" M0 _( k5 Q% }7 gprintf(" * \n");
5 }; f/ ~7 O, T6 W1 ~. aprintf(" ****\n"); }
: k! q% c- O. m& ^* p1 ^/ m==============================================================
9 l" C" y& B; s8 n5 t- V3 Z【程序7】
* Z1 N; c S( J+ | a( `9 f3 Q8 c题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! ; H% T# G7 @5 E! u& Z% k
1.程序分析:字符共有256个。不同字符,图形不一样。 7 C9 H* a$ E3 O+ R( g
2.程序源代码: 1 j% f5 w$ g: d/ [* U& K9 T
#include "stdio.h" 0 O- Y. K4 G; [" h% @! p
main()
9 u( [. X; B; h0 q{
0 n& n: f2 ?+ _9 g; V1 }* C7 Uchar a=176,b=219; $ ?. U+ X) @) K: M; ^4 [- s
printf("%c%c%c%c%c\n",b,a,a,a,b);
. u, Y" e7 K7 C9 }: T; s7 L( o8 Iprintf("%c%c%c%c%c\n",a,b,a,b,a); # R0 T& W4 {' d# b9 D
printf("%c%c%c%c%c\n",a,a,b,a,a); : h5 `+ G# s& U/ p3 ^7 p2 ?
printf("%c%c%c%c%c\n",a,b,a,b,a); 6 T; R. H/ E5 d9 |: V. T$ C
printf("%c%c%c%c%c\n",b,a,a,a,b);} # i9 n' P, {& R+ r0 `
============================================================== & @$ D6 O8 W9 |% D/ F* \9 [6 V5 n" A
【程序8】 + d k. e+ ~, Q* y9 f
题目:输出9*9口诀。
, O. |; \6 V3 K, u. N$ l W1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 6 Y' p0 c" p0 K
2.程序源代码: ^- s h8 e, P0 y# s6 d {, r
#include "stdio.h" & S# ?& h" m, y1 e4 c$ |
main()
% n& F& [! F( D: c! D{ - p1 g2 [7 c, j0 {7 I4 j
int i,j,result; * h* L" t8 Z" O* u- v$ b7 R
printf("\n");
" |8 X( t/ {$ T% {4 |0 ^* mfor (i=1;i<10;i++) . h. M1 @1 _' @: Y
{ for(j=1;j<10;j++)
! I5 ~3 z3 O& M+ h+ Z( G* }{
+ O# g7 q1 f" r7 T2 C6 xresult=i*j;
4 w. r3 U2 l* n8 fprintf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
8 [9 D& Y5 A. a/ z}
- L2 |# L. E& h+ ~printf("\n");/*每一行后换行*/
! ]" A5 ~! s! R' Y8 K; ^1 ^' d} 2 o( Z0 D, g+ N$ x
}
9 h+ u' K( p# \( S6 R3 P6 b9 k===============================================
* e( H; I, a9 ?: S2 { |