【程序1】
$ e* ?+ l# }" L8 g3 m; c1 C; D题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
3 H% l' B3 H! \' c! C" H1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
: u- W+ Y5 t8 r5 p掉不满足条件的排列。 9 i; W" W3 K& S, ? j
2.程序源代码:
$ z% K0 D p. j9 D5 F* w2 mmain() {
6 R1 }7 K! x1 o& ~6 u, ^int i,j,k; . b% W$ p! P7 w. j T1 r) o' K3 e
printf("\n");
# ~( |' \$ x3 [; H' M/ l. U2 ~for(i=1;i<5;i++) /*以下为三重循环*/
2 ]; A. n9 Q0 U: e6 mfor(j=1;j<5;j++)
5 K5 S% ?9 x8 l2 j1 gfor (k=1;k<5;k++) { 2 j7 i8 T9 l" T2 Y4 L: Z. |7 ?
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
+ V' v5 p& s0 b8 U1 X) t, ]printf("%d,%d,%d\n",i,j,k); }}
" Z$ N$ b: N* ?+ \4 Q& G==============================================================
% A/ f+ {& [" Y6 n1 b3 M【程序2】
3 y# F7 W2 Y1 U5 d2 ~6 |- C题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
4 V/ e& `$ S S7 ]1 T% L0 ^ G于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
1 g5 Z+ z V1 z/ T' `7 r成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
. s' N, S' L0 U40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 8 B% p4 p! V0 @
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
; O' Q+ o* Z4 l( H' ]. z1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
2 m$ X+ {4 b- C5 z" I2.程序源代码: 8 B; C) j2 s6 l
main() { ; z7 ^: y1 R ]! [" O; f( r; P8 M
long int i;
$ e5 _6 d* g" v3 M0 Z( Eint bonus1,bonus2,bonus4,bonus6,bonus10,bonus; " g# E6 A+ E# t# c. C
scanf("%ld",&i);
% f3 t1 g; ^+ W7 Ibonus1=100000*0.1;bonus2=bonus1+100000*0.75;
' }( Q! r/ V' p; @; D6 r6 |bonus4=bonus2+200000*0.5; % I* ?" S1 ^0 O, a
bonus6=bonus4+200000*0.3; * p% K: e% K0 q! j" O
bonus10=bonus6+400000*0.15; # L7 z; P% n6 N* i" l* g; e
if(i<=100000) 5 o$ M$ V. l" s. q4 x' V+ a4 E
bonus=i*0.1;
; h3 j y/ s$ U& s" Aelse if(i<=200000) 1 X* w9 z- @! d+ U+ |3 H$ ?: Y: J
bonus=bonus1+(i-100000)*0.075;
5 O1 l# ~& B1 z6 {* h4 L5 melse if(i<=400000)
/ b8 Y8 j: B$ s- g2 L0 G; i* ?bonus=bonus2+(i-200000)*0.05;
6 V4 g: T; ], h9 Celse if(i<=600000) 2 t- \& ~3 M9 }' w# ^% ^7 i
bonus=bonus4+(i-400000)*0.03;
. g6 {7 V( q+ D3 C, Felse if(i<=1000000) 2 N5 h9 d3 u5 _! C
bonus=bonus6+(i-600000)*0.015; 6 F e) }: f1 @1 w- n8 J5 I$ {
else
1 S8 ^6 J1 \' tbonus=bonus10+(i-1000000)*0.01; + k( ]( g4 ]- g; j
printf("bonus=%d",bonus); }
& h+ V+ G" [" d3 K: k0 ^============================================================== " j9 ~1 @: T- F0 t X0 E, |
【程序3】 2 y9 N5 y8 P% A+ c% z
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
[+ Y, M3 Y% B2 w, g4 `1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 " i$ I7 O1 ~1 ^7 X# y$ z
的结果满足如下条件,即是结果。请看具体分析: 8 ?9 p5 a0 s/ M+ B: B# g* X; c
2.程序源代码: ! u& v# ?* N2 O2 k0 l5 Q4 z4 y
#include "math.h" $ w' t- `( p, @5 J/ [- \- z$ `! N
main() { ' f- X. J2 E Z
long int i,x,y,z; {4 n" D) J- \0 I' @! C
for (i=1;i<100000;i++)
$ { v) w" n) J7 A/ u: Z{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
5 X) l3 {4 I! g! W; [9 l/ u9 Ny=sqrt(i+268); /*y为再加上168后开方后的结果*/
y2 I. y# Q, y5 o7 P/ k& Aif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
! Y$ k G. o; t4 D9 ]- |: @' v9 Yprintf("\n%ld\n",i); } }
' B' `6 ~. ^3 c- Q============================================================== 9 b# P. \1 O3 B8 K5 y7 B
【程序4】 0 z" \# K/ v# F
题目:输入某年某月某日,判断这一天是这一年的第几天?
4 m! H/ ~2 F7 f( M, I1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 9 T' V4 c, c5 u- M$ a7 `
情况,闰年且输入月份大于3时需考虑多加一天。 0 k+ B8 s7 T1 x- Y4 x V5 P8 K' ?! f
2.程序源代码:
, E4 A: ^: {/ `main() {
& Z* \6 b( J9 G3 Wint day,month,year,sum,leap;
0 }# h, J y; k/ b9 Z/ r" P( i4 vprintf("\nplease input year,month,day\n"); + i% R u; T( c
scanf("%d,%d,%d",&year,&month,&day); : s( M7 K! q+ Y7 ?1 W5 o
switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break; 6 d1 V& n9 J2 ]! ~; R
case 2:sum=31;break;
3 r3 Q/ J5 @2 _9 lcase 3:sum=59;break; 8 n% T- D- ]- b) t, |
case 4:sum=90;break;
8 B" z6 A% M: A! m' Vcase 5:sum=120;break; 3 |8 X: M$ S/ T- E
case 6:sum=151;break; 7 X6 G# P2 k8 V# y2 x9 I
case 7:sum=181;break;
% V' n2 d; o5 Y& R6 p, k$ J" Jcase 8:sum=212;break;
/ j( R2 g5 ]- N! D0 Q& f# C7 C: Ucase 9:sum=243;break;
) r4 `" H' V5 e. Vcase 10:sum=273;break;
, j4 j, r! A5 d4 K1 Y9 u$ Fcase 11:sum=304;break; 4 {! W: @ ]6 s. N) W! A2 i7 g1 n; F C
case 12:sum=334;break;
$ Q$ }6 M( L \default:printf("data error");break; } * ~/ f' T" Y+ v* b- w8 D- I5 w
sum=sum+day; /*再加上某天的天数*/ & @, M5 N/ e1 i. S. Z {0 g
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 8 c4 O* ^" B* x( C- J% V: ^- A
leap=1;
6 \" T& Y' O1 n! _1 Selse
' W; w1 i' b( Q% \/ Zleap=0; * i2 |0 B* ]1 k) r- X
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ 4 {2 G1 ~1 L. M( g, ]# J$ p8 V" a# H
sum++;
9 u w- b* e9 b% @2 e) C: Z; i; g# y. G3 ]printf("It is the %dth day.",sum);} ( A+ j2 t8 m; d
============================================================== - C" {' p+ f# u. N
【程序5】 , A/ J6 C; X6 Y9 i
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
. S# _: y' l) S* H( q( Q1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, , \% ^2 w0 u: s ~. ^5 s) n% m: P
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 - c! V0 n" `# S* ^3 |7 c
2.程序源代码:
+ L6 w" e0 `3 G. ~3 omain() {
: z) \+ e: E5 O: Jint x,y,z,t;
8 i1 d. W& Y: F( o& Z* [scanf("%d%d%d",&x,&y,&z); 3 A' u5 l% |5 b1 T2 d h, A
if (x>y) 5 n R1 l1 @+ y8 c
{t=x;x=y;y=t;} /*交换x,y的值*/ ( I7 n% h) T, B/ u( y4 V
if(x>z) ! I1 Q8 @* g8 V2 Z5 [1 F+ B! t/ Y
{t=z;z=x;x=t;}/*交换x,z的值*/ - F; }7 c8 V( L7 u4 U& N ^- s
if(y>z) * L, W5 s' a: m' v. \5 M
{t=y;y=z;z=t;}/*交换z,y的值*/ 8 N0 C0 T% ^7 W$ x& q& }
printf("small to big: %d %d %d\n",x,y,z); } ; V) `% g. `, G0 Y% c$ W' K
============================================================== ) G% J( o3 |+ T' g
【程序6】
' {3 b. c$ D; E' v题目:用*号输出字母C的图案。
: t& S7 u6 @ }8 B! m1 ~" s1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
) _" m! ?. G/ \2.程序源代码: 3 T$ h9 |0 ?: |! n
#include "stdio.h" 8 `$ I: N6 [; F; g% O1 x8 L
main() {
) W0 x2 d7 V, t1 pprintf("Hello C-world!\n");
; B4 U) j/ I: a$ W5 \3 Cprintf(" ****\n"); ! U7 }7 ^7 ~* f
printf(" *\n");
7 r1 N, T4 n: q2 P+ T3 P2 fprintf(" * \n");
) w) C) t, b Lprintf(" ****\n"); } * G' Q& X. j( C2 Y) }. {
==============================================================
6 y) }& Y( |& c【程序7】 * l7 \: R$ y$ Q& \% C: z
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
4 y+ s w8 J5 g1.程序分析:字符共有256个。不同字符,图形不一样。
) B4 o: i7 K- ?! v) R0 m2.程序源代码:
0 K) _+ L X9 n" Q#include "stdio.h"
7 _: L! p1 E8 P7 j; Dmain()
- a% X1 P! W; g{ ) {' ?4 ~; ] E( |9 _
char a=176,b=219; & M2 q% T$ E5 `8 [* i
printf("%c%c%c%c%c\n",b,a,a,a,b); 5 T: {- y( ?0 q
printf("%c%c%c%c%c\n",a,b,a,b,a); ( i+ J" }# R1 h) s3 `2 ]
printf("%c%c%c%c%c\n",a,a,b,a,a); 2 |8 X, b9 P/ [* ~4 _
printf("%c%c%c%c%c\n",a,b,a,b,a);
8 p- X# H9 B& P, o3 x" ~7 ?$ z) x! b* aprintf("%c%c%c%c%c\n",b,a,a,a,b);} 5 M, [/ W+ `* F: l' s
============================================================== ' l! U8 R2 ?. }! h9 E0 C) o1 D
【程序8】 " M& m) r* ~$ O& V( A9 j) |
题目:输出9*9口诀。
" ?6 i( `% W( L! D1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
: p$ V2 @( C; N5 }2.程序源代码: 0 g, X. w; V. U2 r6 f1 `& g6 k
#include "stdio.h" 2 q' W( }4 b1 ? k( N2 U% }
main()
`$ C2 i; V0 i( k, A+ G9 d9 R{
* `1 d$ U1 _' [, P; g6 ~2 Y+ {int i,j,result;
' I- x# f G$ k2 lprintf("\n"); , I' ?0 T( C4 [( Z: b
for (i=1;i<10;i++)
% [. ~3 Y) M: y# w{ for(j=1;j<10;j++) 4 c0 s3 Y6 C J* x# m2 R
{ $ O5 w/ A" R1 O' v x7 p' A; ]% z; g$ k
result=i*j; ' I* K" n |; q) v* b1 ?
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
9 ?9 j/ I0 U4 Q6 i2 R8 R0 t} 0 @" y8 f7 g: K
printf("\n");/*每一行后换行*/ : C. j' k* a+ a5 O2 B: Q5 U2 k
}
: H! `' R% g% R+ M} ' ^3 C, i# P1 }9 ~3 G
===============================================
0 g4 Z4 Q$ t' Y: h |