【程序1】 ) t7 N, z2 B5 h7 p ~* e: c
題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
r: W; z4 N; X2 g7 U1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 # s. L) `4 A3 x1 H0 D+ k4 x
掉不滿足條件的排列。
# C' f, u5 ?& J& x6 f$ F. W/ J2.程序源代碼: $ s& D6 D% ?8 G. x% d
main() {
, w! v( y. X7 i9 h9 U! h7 |int i,j,k; ; W' K F3 x3 c: m" }! I8 j
printf("\n");
( L% j0 _3 Y6 s; _) i% gfor(i=1;i<5;i++) /*以下為三重循環*/ 0 W! y e5 g+ Z/ i4 D& N% d8 H
for(j=1;j<5;j++)
% q2 q- X* ^# W4 ` M" Wfor (k=1;k<5;k++) {
" q1 P( e# _2 m# E& ?% I/ m- ~8 Vif (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/ * a- _7 u; p2 ^( D" ^* Y# u U) F
printf("%d,%d,%d\n",i,j,k); }} / H- e9 x; Z* v. n# }
==============================================================
! V8 ]& \/ z6 u( l8 G4 T【程序2】 3 ]. A) ?4 `0 }4 o
題目:企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高 + _% u0 W! H+ R7 D+ F3 @
于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提
) V+ I7 @; T. q( c5 B成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于 ( ], ?4 o! Q3 z) m _
40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于 . B/ j' E8 H' ?) g
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
' t0 D) S" `5 d8 u, D1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。 , s+ @% m1 m7 f* g
2.程序源代碼:
; m+ {. G; a( c. O7 W5 A/ W2 s- Pmain() { ' R9 \ U% N N( \' n
long int i;
+ N/ }+ g* C* O0 S; X+ v! lint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
2 |( C. F9 n9 e5 o" V% E# b0 A! Lscanf("%ld",&i);
; g, K: c0 b8 w% W& ]8 n: L: ]bonus1=100000*0.1;bonus2=bonus1+100000*0.75; . g& F9 i+ }* p3 J# ^$ U' ^: \
bonus4=bonus2+200000*0.5; . h9 {5 M& z) a) j
bonus6=bonus4+200000*0.3; % a) G2 }- m+ r$ c1 I" M
bonus10=bonus6+400000*0.15; & e: Z6 _6 {3 B9 s2 L' U
if(i<=100000)
# p/ ^' q& Q4 [) k* e; Jbonus=i*0.1; % c r- e0 L+ z% Z b) v
else if(i<=200000)
& V8 m. W5 x& H1 i* a% ^bonus=bonus1+(i-100000)*0.075; 2 s4 r* p5 Q) G
else if(i<=400000)
' U, t/ A% c! y u2 ?# Ibonus=bonus2+(i-200000)*0.05;
& ` z( B3 R2 Y2 c% s x t8 ~4 Aelse if(i<=600000)
* f: [$ x- i% Q; m9 q4 ubonus=bonus4+(i-400000)*0.03;
[0 N8 T) p0 x# R( gelse if(i<=1000000)
4 a. O! ?1 f9 r n( D1 r! }6 L* Pbonus=bonus6+(i-600000)*0.015; - [" ]4 Q3 m) }5 O9 l* T+ M
else
* h: J; y+ W4 q3 K: E4 gbonus=bonus10+(i-1000000)*0.01;
2 m0 H+ l# q# E7 n, w Xprintf("bonus=%d",bonus); } 8 @; p+ X) b' s1 K. o/ M6 j7 P
==============================================================
/ u+ B2 z! U$ o4 Z+ \( G. w3 k0 u【程序3】
) j/ S1 L M, z1 Y5 z. y題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? % O4 c/ y3 L# @0 Y
1.程序分析:在10萬以內判斷,先將該數加上100后再開方,再將該數加上268后再開方,如果開方后 3 v# q% S8 n* w$ E# S
的結果滿足如下條件,即是結果。請看具體分析: 5 K' R7 J0 D8 }2 a2 t7 m
2.程序源代碼:
8 L8 D! A. m k9 B( i) T#include "math.h" 9 _5 g* {; H7 b# e$ v3 E' s( d
main() {
0 ^9 H; I8 h* t( Jlong int i,x,y,z;
_: c9 G' b3 m2 c; ofor (i=1;i<100000;i++) - v3 h4 X7 u# v2 ]; K) J! o4 y
{ x=sqrt(i+100); /*x為加上100后開方后的結果*/ ; @; O' ^1 v. ^. W z4 i( F( H9 [: ?
y=sqrt(i+268); /*y為再加上168后開方后的結果*/ * T: U& F9 }# z: C: {1 Q7 P
if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等于該數,這說明此數是完全平方數*/ ' D3 p, O5 b* y
printf("\n%ld\n",i); } } 2 l* P1 D% m; x" J* I- M: `
==============================================================
$ ~8 p3 K; q& y! L& a% [1 L【程序4】 ( s! L3 w5 k7 i X8 R/ o& Z: l
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
M0 a$ u5 i5 U1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊
# w$ \/ Z! Y6 ~( ]* K情況,閏年且輸入月份大于3時需考慮多加一天。 & f" x: o0 }4 N# W. i6 ^9 s
2.程序源代碼:
- v8 M: c& F" c% I4 V- J0 x, T& @main() {
1 P, | e+ X9 G( bint day,month,year,sum,leap;
1 b1 O5 e7 A$ s3 s2 z* v8 i/ E) Fprintf("\nplease input year,month,day\n");
9 N- Z7 M& ]+ n. e0 D7 D5 Oscanf("%d,%d,%d",&year,&month,&day); 2 k8 r, l: |; m+ q& Q
switch(month)/*先計算某月以前月份的總天數*/ { case 1:sum=0;break; - m0 B0 U6 n$ F8 q8 M' B3 s7 o
case 2:sum=31;break; " p1 ~2 ?7 T9 {( t1 j7 S& E2 V+ A
case 3:sum=59;break; o4 S" {% J0 }
case 4:sum=90;break;
8 _$ n0 r. G( \case 5:sum=120;break;
. `3 j0 j+ d- D" N- {0 K. w! Dcase 6:sum=151;break; + a2 i# d: \% _4 b7 _7 W; f9 O6 m
case 7:sum=181;break;
* f' z$ c# z' [case 8:sum=212;break;
: t2 g* L+ o, }2 t2 ~2 rcase 9:sum=243;break;
5 i t7 \/ q V7 V9 v* pcase 10:sum=273;break;
C, v5 u5 a% m3 L2 Y% kcase 11:sum=304;break;
+ U" T3 w; E+ \case 12:sum=334;break;
- j- Q0 c6 K5 H7 u" l# s. M1 @default:printf("data error");break; } : q1 m; f2 G- c0 O& G, A9 J o
sum=sum+day; /*再加上某天的天數*/ 4 G1 q# x7 d) q$ o9 Z6 m
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
4 g0 z, \7 o$ d. k' \leap=1;
7 c% L) i) k+ Y4 l9 B* Oelse
u- \4 y) ]; Y4 J+ j# kleap=0; 5 c0 e9 n& i- i) }; n+ V/ m
if(leap==1&&month>2)/*如果是閏年且月份大于2,總天數應該加一天*/
' n! C0 L% Q/ U5 s! w5 u9 Ssum++; ( K5 u: {/ w7 W/ W& K8 ?
printf("It is the %dth day.",sum);}
" w# w# q% m) {% M/ F==============================================================
: E/ x$ u, a+ \, O【程序5】
: M& l8 y0 U) W8 v- Z題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。 " {6 a: b% R0 _$ e+ Z8 ]
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換, 3 U! d1 b; H5 j) L
然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。 ! g& |$ L4 D; a
2.程序源代碼: ! p7 z# {# G1 U4 P8 ~$ z
main() { 8 w# \% S' }! J! W# j
int x,y,z,t; . i2 [; P7 a0 b5 X2 q5 V6 }! v
scanf("%d%d%d",&x,&y,&z);
+ ~- A+ A( s) S6 c) ^if (x>y)
. c/ Y( H: e) `) G: I{t=x;x=y;y=t;} /*交換x,y的值*/ 5 Y2 i) e1 v- s( D9 z R: O! Z8 N
if(x>z) . x* \0 j3 T* t, y
{t=z;z=x;x=t;}/*交換x,z的值*/
! p( s8 P1 \' Sif(y>z) 6 j8 J$ i0 Z! z- {; Y/ {* m5 R: Y
{t=y;y=z;z=t;}/*交換z,y的值*/
* t! j2 L. B" e: z) Y( Bprintf("small to big: %d %d %d\n",x,y,z); } 2 ^+ l% [' P- n6 }5 W7 @; n- l
==============================================================
; N& `, C3 t. V0 P" y【程序6】 : ~" F8 a- G6 S) h/ ~
題目:用*號輸出字母C的圖案。 5 y& t5 Z* @9 |4 I
1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。 7 b$ A% Z9 O& G5 {+ h" o
2.程序源代碼: $ `% m. f8 r' u: b
#include "stdio.h" * t5 W, n7 [1 q, Q8 u: D
main() {
% K* B8 O: `. }printf("Hello C-world!\n");
" H/ P% t `! k: J+ l, a- Sprintf(" ****\n"); * M& r1 n3 _0 o; i ^! U
printf(" *\n");
# T- P! Z5 I" ?7 f2 |) @! y1 l+ lprintf(" * \n"); 8 V6 _6 @' V3 w: r0 L @$ ^6 @
printf(" ****\n"); }
. t0 S |+ a! U9 R============================================================== - q- O& i& n/ |8 m/ S
【程序7】
* Z1 C' M7 O) v9 d+ P0 y+ z6 N5 Q題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
6 V9 c* S8 P/ k1.程序分析:字符共有256個。不同字符,圖形不一樣。 ! C" ^* |: x% \( X
2.程序源代碼:
: B( r3 f3 N2 {: G2 ~#include "stdio.h"
/ z# D N3 O" n7 Z4 K) Zmain() * o! `7 K( ]! d! R* Q- Y0 `
{
& ^. r' D: d. O1 w! ^# q- Kchar a=176,b=219; 2 }- A5 `; G+ S' s6 U
printf("%c%c%c%c%c\n",b,a,a,a,b); h6 M" i& I# a# J, W" T( A
printf("%c%c%c%c%c\n",a,b,a,b,a); - w* h8 m6 Q& h$ T& c$ B" R
printf("%c%c%c%c%c\n",a,a,b,a,a); : b7 t6 o" h$ E, [
printf("%c%c%c%c%c\n",a,b,a,b,a);
" I2 j3 t7 K# b0 Gprintf("%c%c%c%c%c\n",b,a,a,a,b);} ' R* E: X' Q1 a( d" `
==============================================================
2 b. q: d' i6 o7 Q! f【程序8】 ( }: z7 W0 [# u3 P* F
題目:輸出9*9口訣。 ' n+ A" ]: b8 B9 o
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。 6 ~/ ~* p6 \" G( J0 d8 x
2.程序源代碼: 1 e4 d% g% K5 z( n" B# h
#include "stdio.h"
+ ~+ i2 T$ r$ L/ c9 Jmain()
/ d3 B/ ^! i8 z; f* Y, \{ 9 {7 q% F: l: w+ f6 W' B
int i,j,result;
- C) A. \* u v# K; E+ nprintf("\n");
, ~9 l2 C7 g" C3 p4 d/ ^; ?! Wfor (i=1;i<10;i++)
+ I# x2 v9 z1 R{ for(j=1;j<10;j++)
, O$ r* g* @1 Z1 V/ D{
' ?. m4 I6 a6 x& ~. J6 S$ presult=i*j;
H6 u( {- }1 |$ X% ?printf("%d*%d=%-3d",i,j,result);/*-3d表示左對齊,占3位*/
) c6 c2 Z" `0 g3 x6 [* n4 u} 5 a* m) h7 W: h3 J8 U |" R
printf("\n");/*每一行后換行*/ : m$ b; F+ z/ j- Q+ J' g
} 3 d/ |) q4 E5 B5 R6 D
} % G! v$ n2 b8 F1 ^! x
===============================================
0 V+ [ f9 ?2 q- |( X9 T |