【程序1】
+ [. A. F$ L+ M. i题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 3 e3 B% B4 s. w/ h) W
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 - b# c1 K) M) g# S
掉不满足条件的排列。 . _, A# X" K7 z
2.程序源代码: % [, V7 s5 D" \$ I3 n
main() {
- p2 [$ `/ }6 V, Z& l1 iint i,j,k; ' V% \! [' _5 h
printf("\n"); - u: E8 E5 O p* N) H/ O! J
for(i=1;i<5;i++) /*以下为三重循环*/
" W4 ~7 a6 s1 H6 ?2 `. L3 I' F. ffor(j=1;j<5;j++) 9 K! V4 r! g9 ]
for (k=1;k<5;k++) { 6 A0 n( M; V/ _7 N% c8 c! S0 B
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
& K+ z6 k) e& y8 D: gprintf("%d,%d,%d\n",i,j,k); }}
3 b3 T+ v" K9 U# K' w4 d============================================================== ) J, b% [& I& K3 M) e
【程序2】 / E. `# T- W0 F2 @8 M
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 ( w# h. C; z% a
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
# S) y& t" V. V+ M2 Q成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
" x! a& O- }4 ~& x* A, Z9 V40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
! H, L+ P! l0 @, L100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? : O+ b0 J( y5 J& C$ S2 T
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
! k( y' s* @3 z2.程序源代码:
) ]5 B5 \1 X& w$ imain() { ; f* o- i9 C6 d
long int i; & U1 Z* @3 |* s
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
0 E) u) J0 U% c% X: f+ ascanf("%ld",&i);
3 w* }& ^8 ^8 l/ ?bonus1=100000*0.1;bonus2=bonus1+100000*0.75; , o) t: { ^0 `# {# l* j
bonus4=bonus2+200000*0.5;
3 \) y% Y) B* dbonus6=bonus4+200000*0.3;
, y" C- L8 K5 nbonus10=bonus6+400000*0.15; 6 b `! |+ `* N* j0 r/ l
if(i<=100000)
( v# o9 E& }) C* M$ a' Q" e: gbonus=i*0.1; 6 c( l! p) x) J0 z, b+ V$ H2 b
else if(i<=200000) 8 S; [6 T, \! n; F' J9 z
bonus=bonus1+(i-100000)*0.075;
; k# l$ T9 ]" w9 z ` }0 O+ eelse if(i<=400000) 0 k% L G1 j+ F1 Q# Z
bonus=bonus2+(i-200000)*0.05; ' D5 B, h' `1 s
else if(i<=600000)
) b* J/ _0 O+ \( _# b6 d6 c/ f+ Ebonus=bonus4+(i-400000)*0.03; 3 e2 v: p( B% `9 p; K- ]8 |+ J/ |
else if(i<=1000000) * q K' P* x0 `: A! }
bonus=bonus6+(i-600000)*0.015;
/ B. ]* d, p% i e/ U3 Selse ; B* D6 F$ U/ M- r: P# R% l
bonus=bonus10+(i-1000000)*0.01; 9 ]/ Y$ b$ s* N0 j5 h
printf("bonus=%d",bonus); }
7 `7 g! W; A( @4 |2 Z: S% \1 T# [) I==============================================================
: Y9 F$ x* f1 q0 U& J ?1 w【程序3】
' K- ^ p1 q% o% [! Q" _题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
% l8 [, w. A# b$ R1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
3 v0 B/ q" \ U0 M5 e的结果满足如下条件,即是结果。请看具体分析: - B) d+ X7 O6 \: {; j% q- B2 M
2.程序源代码: # ?2 E6 G z$ B5 r" O
#include "math.h" ! M/ t# B" V$ o! s1 t0 G
main() { $ F4 p2 ]! Z, E( H3 e8 n$ O/ N
long int i,x,y,z;
( j8 O. F6 X# cfor (i=1;i<100000;i++)
1 X: N, r. ^, D _{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ 7 O& n# f/ c& d4 U: ]3 w
y=sqrt(i+268); /*y为再加上168后开方后的结果*/ $ O: u0 T' r# }! i8 T/ m4 ~
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
+ J8 \- D! J/ u5 a2 wprintf("\n%ld\n",i); } } * t: G0 b- i) g8 Y# S5 @# s; T
============================================================== ( `. ^8 R- M" u! S# e
【程序4】 E7 N; i" D- F) ?* G4 C& L
题目:输入某年某月某日,判断这一天是这一年的第几天?
9 i. e- o ~ P) |' C1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 9 j4 w9 Z7 i/ e+ G! a3 H9 W
情况,闰年且输入月份大于3时需考虑多加一天。 , d/ }# q: h9 _! V1 h3 n* ] M) X7 c
2.程序源代码:
" d; u2 Q; j; o9 ^) d* X6 ]main() {
- x! A4 s: i8 V& B1 e/ Mint day,month,year,sum,leap;
! l# s, k$ b6 b, Q9 [. g9 oprintf("\nplease input year,month,day\n");
+ m1 V" O( z7 iscanf("%d,%d,%d",&year,&month,&day); * O% W$ j$ ^, U8 R! m9 v; Q
switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break;
" X% @: U- j. D/ d3 [+ V0 Z. ~( Wcase 2:sum=31;break; 3 D) w; W8 G1 g1 K
case 3:sum=59;break;
9 c6 h, h+ k! v; X# V! A0 wcase 4:sum=90;break;
$ C; q- x( M! g, Q% q9 V1 @case 5:sum=120;break; $ k5 s c0 f2 Z7 ]2 v5 l1 `: V
case 6:sum=151;break; 3 V/ k$ q4 c$ h. p* U- o/ Z9 p" n: }, w: _
case 7:sum=181;break; : V& S4 J) ]# [- v5 `9 n4 S1 t
case 8:sum=212;break; 8 u" q. \( U( V6 K; s& c
case 9:sum=243;break;
7 Q9 [; B8 a3 G$ V% W) t' ?case 10:sum=273;break;
& A2 ~. D, m F6 v) rcase 11:sum=304;break; : W4 i# m) l' O( T" I( l; B8 Z2 }
case 12:sum=334;break; 2 q" T7 l& I+ x! j' F
default:printf("data error");break; } : h6 U8 j8 u5 X
sum=sum+day; /*再加上某天的天数*/
. j @6 x; T' ^& ^* G' Dif(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 1 F5 D6 g5 F1 m' M
leap=1; 7 T8 I+ Z, D3 t. U% l
else
/ V' S" _* [; B$ Q2 h7 w) vleap=0; 0 \: d# O0 T) }" G3 {9 i: Y
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
- ^- m5 p$ ~" [7 s! q. Rsum++; $ j5 x* y( H" y1 a+ q3 r
printf("It is the %dth day.",sum);} , K) M0 i" n+ ~9 u
============================================================== - P6 _$ b$ P1 j
【程序5】
' b% W* a7 F& D& q: X! E题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1 l% t0 @" |: ~1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
) _! f, S4 C; h% O2 r' M2 `2 t然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
" r6 P3 `. `" ]6 |, h+ @. x! V2.程序源代码: " l2 P6 m8 N2 ^1 l2 k8 c$ o
main() { 2 a1 r; C" c y& T
int x,y,z,t;
1 Z9 u% O$ W- y8 `8 T uscanf("%d%d%d",&x,&y,&z); ' n( e3 S. E6 _; h" m
if (x>y)
& U0 S% Y5 r, v0 c6 C8 U{t=x;x=y;y=t;} /*交换x,y的值*/ : O" u( c4 `: b0 T n+ w
if(x>z)
0 |; ^3 @6 h7 I/ @, a4 l{t=z;z=x;x=t;}/*交换x,z的值*/
8 d9 Q2 j$ B, D2 ^7 F" H% Bif(y>z)
! W1 _$ f8 C6 m( [2 U/ T{t=y;y=z;z=t;}/*交换z,y的值*/ ! D5 B3 z$ K" U6 R& F3 x
printf("small to big: %d %d %d\n",x,y,z); }
6 V9 K0 p, O% c! O6 Z==============================================================
% h8 p9 n' n. A6 r【程序6】 : d2 O. A7 I& V" c5 ^- H( l! O
题目:用*号输出字母C的图案。
) x; l1 V r/ f3 D8 G/ X1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
; X# s4 T2 N$ d$ ]4 c1 t5 C2.程序源代码:
, T' [+ k. @! ]. A, H4 ]8 P8 [$ I1 ?#include "stdio.h" ! k6 w1 c9 Z+ m; t! E
main() { + B4 p$ @3 H0 k) V: V( d
printf("Hello C-world!\n");
; o# ]( I2 A, W+ w" W" H$ Pprintf(" ****\n"); ' m% f+ i" e: K" T4 H+ F; Z* E
printf(" *\n");
8 Y' `; \/ u: z' [$ Jprintf(" * \n");
5 \% U/ V6 r" O) J- O4 Dprintf(" ****\n"); }
8 E! q4 G! R8 D( ]============================================================== 9 I' f1 a' k: Z& u1 m& |
【程序7】 5 }# R# J1 n' I
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! ' R, H4 t6 h B( P/ v0 A
1.程序分析:字符共有256个。不同字符,图形不一样。 z& Y2 ^; X) V8 b. n u$ @' ]
2.程序源代码:
8 R/ G8 n# V, V/ i& z7 w8 N#include "stdio.h"
( \* m2 _8 _+ V3 Q' B) J5 _+ amain() - h( l- ~& S1 x) _3 {7 T
{
$ m9 o( ?! C" z3 a0 Q: N3 Vchar a=176,b=219;
' o, C! \4 R- G, d. x, [! T5 nprintf("%c%c%c%c%c\n",b,a,a,a,b);
, h& k. ^$ ~6 p7 L2 j2 M0 {printf("%c%c%c%c%c\n",a,b,a,b,a); 5 }! s, t6 B$ r. b: o& ]$ y+ B
printf("%c%c%c%c%c\n",a,a,b,a,a); 1 o, q" N! a) n, I. n, b, W6 b
printf("%c%c%c%c%c\n",a,b,a,b,a);
) g% C5 ?) n; ]2 {0 e. R$ Vprintf("%c%c%c%c%c\n",b,a,a,a,b);}
; d7 @% r3 _" u- i% M6 f============================================================== 2 B' H, S6 V6 M$ k+ b
【程序8】 ; p- H! U1 m6 A& ]- S3 v
题目:输出9*9口诀。
& O3 ^ v3 h+ }: Z) d6 e/ F4 |; P+ J1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 / W, | i. h* Y# c4 |3 m! @
2.程序源代码: 0 g2 m1 X# k8 V& j. p
#include "stdio.h" , c% g& N" |: a X- W8 \& r
main() " Y( ?+ j% w: u0 A7 \# g% V) _
{
& u) s+ d& i$ `1 l9 Vint i,j,result; 5 i, m: D% y% T6 @0 v/ X4 J
printf("\n"); 6 F# j1 c' h& h( g: ~0 N( s, z& _
for (i=1;i<10;i++) . Y! \$ S8 Z4 i4 {- r9 s
{ for(j=1;j<10;j++)
$ `, S1 s- ?8 H6 D: C3 c/ y8 a{
) P9 B7 F3 g* Aresult=i*j;
3 _! M5 }( U" f6 @6 lprintf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/ 0 k- k5 q' M. N( B6 @) t2 ~
} " M3 W5 X$ b6 B
printf("\n");/*每一行后换行*/ 2 x1 }# Y- e( n) I! i$ q9 Z
}
, a# u$ {# j1 D7 D5 X} + ], S4 W B' s; H* i
=============================================== 2 G. `7 Z0 N$ t* Z8 L3 ~1 k! n
|