【程序1】 + _+ B! g5 b# z- {
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
( `) O+ |' a1 z. f4 N+ U; J1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 . W- x4 O# Q2 R4 |
掉不满足条件的排列。
3 H/ I8 [% A. q9 J& ^. g+ K2.程序源代码: / ?, i: t7 A" j- I: M: ^
main() {
6 p! f% m9 e+ lint i,j,k;
8 s8 s, Y/ O: a8 t7 l: x0 Rprintf("\n"); ; o, T( y; u# h
for(i=1;i<5;i++) /*以下为三重循环*/
5 Z) A! R R9 qfor(j=1;j<5;j++) $ W* C b3 d( t8 E. m4 w, `; E
for (k=1;k<5;k++) { 3 p4 b; M& r+ y! D2 T0 _4 S
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
( n( ?. G. H5 _$ kprintf("%d,%d,%d\n",i,j,k); }} 3 j- G, M$ Q. M# |) q
============================================================== - J# g, _5 G; _# \& J3 i
【程序2】 . z0 L r2 E) I8 R( y/ k5 R# |
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
" y N! F- C& j( h于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
* X& A4 ]9 S$ S0 B3 d成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
0 n- u% Z$ o! Z I: E2 u40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
$ S8 a3 z) @ ?$ ]; \7 t- P" R100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? , O' O2 \$ \- L$ Y
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 + d7 p3 r& H. l$ |6 M
2.程序源代码: . [0 v/ c& T. S# e W1 h
main() {
" \8 \6 s* _4 X$ V) Blong int i; / L+ @, f6 U9 s7 C3 e
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
' r# J8 V$ ]8 I: ~0 b2 u2 L& A8 \scanf("%ld",&i);
& v2 ?( w: k* hbonus1=100000*0.1;bonus2=bonus1+100000*0.75; 2 |: r5 e" O5 A( U" X7 }/ Z, c9 g
bonus4=bonus2+200000*0.5;
& ~7 {$ P8 k, H1 ?bonus6=bonus4+200000*0.3;
4 i8 d( j& u/ j8 Tbonus10=bonus6+400000*0.15; 1 G% c3 i! i$ X0 m
if(i<=100000) 2 e% T3 ~ X# j1 \/ _
bonus=i*0.1;
3 C& F; p- @: z: f6 I# |else if(i<=200000) 8 [* e. F9 n) l% U
bonus=bonus1+(i-100000)*0.075;
) s. V6 [% h* `+ } P6 v& N2 V( jelse if(i<=400000)
) r2 W9 C- m' I$ Z) B1 }# m2 Hbonus=bonus2+(i-200000)*0.05;
( q- i# M, p% {' Ielse if(i<=600000) & d7 {$ I% X# q
bonus=bonus4+(i-400000)*0.03;
9 v+ F: D, V1 a1 {8 v( lelse if(i<=1000000)
! c: z, U9 r5 \' m$ W8 Wbonus=bonus6+(i-600000)*0.015; 1 u$ d* B0 O) e! B% a
else
+ H, K; R" C: {" vbonus=bonus10+(i-1000000)*0.01; 3 \' t; Z9 ?5 d
printf("bonus=%d",bonus); } / S* ~* j& r% ?5 E
==============================================================
1 m8 ?1 c3 A9 s' U【程序3】 - u' G2 K0 f3 J: {' [
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ; B% O0 i) s5 I" Y6 |9 @ W' M
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
/ i! L* {7 A5 e6 d的结果满足如下条件,即是结果。请看具体分析: 8 W& A6 T, X1 c: f3 Y5 h. N
2.程序源代码: & Q8 {, R1 G. {7 M
#include "math.h" 8 o+ k2 m) i$ R3 H
main() { 5 {+ ~, ^2 d [% x0 `+ T: A: d
long int i,x,y,z; x0 E% j1 g# c* ?% J6 \
for (i=1;i<100000;i++) / w( X, f: m: d
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
' a- L% h& |3 sy=sqrt(i+268); /*y为再加上168后开方后的结果*/
: q B2 e. y: d* L( U9 kif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ 0 I: T( }' m/ B. F
printf("\n%ld\n",i); } }
( w0 e$ l1 g4 Y+ o' R% x b7 S============================================================== ' [1 n B# q8 S+ P4 ^& \( N8 q
【程序4】 0 d* D; I. k Y2 ], Q3 }
题目:输入某年某月某日,判断这一天是这一年的第几天? % ~6 `: n6 P) P
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
, h, o8 D7 N: w# R/ R" b& \情况,闰年且输入月份大于3时需考虑多加一天。
' @# g+ f+ V" i" H, G2.程序源代码:
' N' d2 k5 R% ~% T0 i8 Dmain() { * e% K! b, R2 v, {5 _% w# F
int day,month,year,sum,leap; ! b) B. M4 }$ d/ F9 Y! r
printf("\nplease input year,month,day\n");
- G0 v1 L- [' r _: a% v/ Z4 p1 Escanf("%d,%d,%d",&year,&month,&day);
' U! \1 j# g. C5 h6 Z1 c# o) X* [! Uswitch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break; 7 N5 ]! |3 m- _$ b- Y
case 2:sum=31;break;
8 u6 E6 ~: y% zcase 3:sum=59;break; 9 |5 S- V( @+ H3 [0 n: p9 @
case 4:sum=90;break;
0 d1 o2 E2 V0 f. W9 wcase 5:sum=120;break;
- z, F8 n: Q3 K4 k2 z$ qcase 6:sum=151;break; 4 J7 t' w, k% s# L/ T* Y- j- p
case 7:sum=181;break; ' L5 s! p5 a ?/ Y
case 8:sum=212;break; : w& E9 ^& K e1 w9 O
case 9:sum=243;break; 6 ^+ ` {; U$ r2 I+ p
case 10:sum=273;break; ! N! y8 E: c b- D
case 11:sum=304;break; 4 i- a- N* F! P- y; C0 Y
case 12:sum=334;break; 5 e8 {' ^2 Z5 u) l7 i8 }: M
default:printf("data error");break; }
) }+ `9 y, R& B2 f3 Isum=sum+day; /*再加上某天的天数*/
8 q. M) {9 R* Z% Fif(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
7 @, E; p+ T/ ]1 Tleap=1;
& R1 C* m: ?% P, A: h) Gelse * e K/ ]* _9 N+ o6 [- g
leap=0;
4 E/ _0 n& d8 Gif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
' J% q1 V3 s! Y h1 b" Bsum++; 5 E3 C( w+ k+ E5 M! @' o
printf("It is the %dth day.",sum);} / G9 j, k3 f3 s8 C$ I @3 ?
==============================================================
. e0 E+ i: V' z0 a; k% g* O2 B【程序5】 : k8 {$ X9 F0 W. j; L
题目:输入三个整数x,y,z,请把这三个数由小到大输出。 $ m: R5 X/ `3 _% S. o+ j) C
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, # r! @) U4 u. M' u u! T0 R) e# W" A
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 % i; X) u& o, R, |8 z8 j1 ?0 o, l
2.程序源代码:
, g- j. p! ~% _' c' ^7 bmain() {
) w6 @2 w7 N' H) y* c: }* W# n' v' _int x,y,z,t;
0 J n2 W( n4 q2 G3 m/ C9 Bscanf("%d%d%d",&x,&y,&z); $ U/ }! V& W* L3 d' F+ z
if (x>y)
# U4 _; D% [2 j. l7 A{t=x;x=y;y=t;} /*交换x,y的值*/
3 {) ~+ W) Y* o M6 o+ Z( M ]% ?if(x>z) 0 c# j+ J2 O; A6 |$ q! l9 g) r" N
{t=z;z=x;x=t;}/*交换x,z的值*/ 8 O5 J2 ~. W) S( W& H
if(y>z) % _& B! Y8 S, A
{t=y;y=z;z=t;}/*交换z,y的值*/
, B+ c9 I! f' Y% @3 Cprintf("small to big: %d %d %d\n",x,y,z); }
3 ^/ c( t1 d6 i2 W6 w6 q X& `==============================================================
0 S4 {" L2 n( @% _1 f【程序6】 - n% H+ W) B5 z* l% ]0 G
题目:用*号输出字母C的图案。 $ @2 X5 Z# E+ w5 x) t3 z
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 5 _/ V& {& u. C
2.程序源代码: , o, {* Q: [" c4 Q& N! }+ C
#include "stdio.h" 3 T+ H. h! t% p6 n0 J, G
main() {
* r2 A3 z% D8 {) `/ V3 V& c! Sprintf("Hello C-world!\n");
1 t; B Y4 E! z* z F/ gprintf(" ****\n"); * K- X, S4 L' }3 [" L
printf(" *\n"); 5 \* i! i( i' n1 G! \3 o
printf(" * \n"); . \" e5 p; ]) N8 x
printf(" ****\n"); } 7 ~- q; Z- M( z% n( @
==============================================================
9 t( o/ b( Z/ e8 L" g: K$ O【程序7】
8 B, {+ k7 \4 \ ^* P6 G题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
2 ?. F8 o! V7 [3 L1.程序分析:字符共有256个。不同字符,图形不一样。 0 ]4 s. q, P6 V7 N" n
2.程序源代码: 3 F- B4 R% H9 T. n* ?; I
#include "stdio.h"
& p+ _4 S4 p2 \0 Zmain() 1 z7 q1 ^1 V1 n8 Z
{ & V2 [# ]* p! l9 @" d
char a=176,b=219;
+ J$ _$ }1 E0 U: C6 jprintf("%c%c%c%c%c\n",b,a,a,a,b); 6 C3 |6 Z$ N/ u
printf("%c%c%c%c%c\n",a,b,a,b,a); ' @9 D! {1 u$ p$ v
printf("%c%c%c%c%c\n",a,a,b,a,a);
8 s8 _- w* e" z, I- t$ H vprintf("%c%c%c%c%c\n",a,b,a,b,a); 7 M$ U" A' i, w6 L
printf("%c%c%c%c%c\n",b,a,a,a,b);}
" b0 @7 R7 y9 w1 I, v============================================================== # W/ e) G) X0 U$ a& @
【程序8】
2 i/ K5 ~5 @6 t: f题目:输出9*9口诀。 ; y% @9 l7 _; @2 \+ l& X
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 ' B4 c7 F7 P2 _- x9 Y
2.程序源代码:
6 Q Q4 D( L% Q& O+ i6 y; ^#include "stdio.h" # n5 w8 y# O; n. J. s
main()
' o* u. @3 e- N, s) E{ 4 l9 Y6 }9 F7 o
int i,j,result; . O0 e4 p$ f9 e+ y
printf("\n"); 6 q/ _. \% d7 Y( |* Q t# q( ^
for (i=1;i<10;i++)
+ A# H$ g& w) V1 z{ for(j=1;j<10;j++) 1 Z1 K$ f4 o& s% z2 _
{ 7 I- c& o% F" @$ |' b& C8 |
result=i*j;
5 [; v7 P% j2 o$ N/ a0 L8 iprintf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/ 8 F/ Y, z! n0 _8 I/ Q% X
} 1 F# u. \2 d3 b, `
printf("\n");/*每一行后换行*/
; }; N( c+ M' e1 ]$ y+ G} + ?- x+ E+ @7 x! V+ ]6 U# _* ~
} 3 z! _2 ~# A# U* ?5 D3 G; n
===============================================
. [1 j3 P; y( R2 r |