EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【程序1】
/ Y! @4 \' P- }题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
0 S4 k# y8 U& }5 C1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
* \4 E$ @# P% M! W- n* h" A3 Q掉不满足条件的排列。
# m I7 W: `2 h, K4 {2.程序源代码: # l Z P! q* @
main() { ( f o" ]) j4 a* R& ~! d/ Q
int i,j,k; / b& M) j9 J# I7 o$ p% g: V r* W
printf("\n"); / \4 v" X9 S1 h) @* I% S5 `
for(i=1;i<5;i++) /*以下为三重循环*/
' D' K! H3 E4 D* U* mfor(j=1;j<5;j++)
: h, J+ ^ _: |- j& }/ Tfor (k=1;k<5;k++) { $ g7 l* |% @3 @1 u# ~$ {8 X
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
5 Y% n* j. \" C. O# H$ A* U: f3 v! zprintf("%d,%d,%d\n",i,j,k); }} 9 a5 G! [; i T+ b( R4 u$ P% j
==============================================================
" W7 W7 _& @4 e4 r【程序2】
7 P) N7 Y! Y7 |' W. C( a题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
$ ~: U; S3 m( C5 w2 b( }于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 2 I+ K3 c6 m0 Z3 f/ B' \
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
) }3 O: r9 c1 p7 u0 f: q/ m; E40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
L$ X: j, h; c100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 9 {" n$ e( e2 y9 ^3 T) v
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 + d8 Q2 M0 X4 @" U9 u( O$ D
2.程序源代码: ' M' R# t# }6 K3 _9 N+ j5 z( m
main() { 6 H6 _" R3 f- _( G9 p
long int i;
5 S7 ]& V* h3 rint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
# [% t i) |9 s& r5 gscanf("%ld",&i);
# Z( D5 c1 b3 Z8 q% |bonus1=100000*0.1;bonus2=bonus1+100000*0.75; ' f3 U [5 H: \+ ~9 D9 C+ X8 `6 |
bonus4=bonus2+200000*0.5;
; _0 L k2 c" a% d) ]bonus6=bonus4+200000*0.3;
2 Z2 l" c! s$ o. r0 vbonus10=bonus6+400000*0.15;
6 }' D# H/ F5 C' M0 o0 }, i" X2 Oif(i<=100000)
1 I. Q. }3 i0 r% P; T' Fbonus=i*0.1;
( T) U9 X/ o4 d' ]2 J. s# selse if(i<=200000)
% P3 {. n# x- I E; _7 v d( M; P- rbonus=bonus1+(i-100000)*0.075; / _4 ~5 |! V1 K/ A
else if(i<=400000) / u$ T$ B7 l( M5 f( f8 v
bonus=bonus2+(i-200000)*0.05;
2 |+ p) O" u/ |2 w7 W# s8 uelse if(i<=600000) 2 w) y3 {( g$ w5 J0 s8 Q& \
bonus=bonus4+(i-400000)*0.03;
! |! j* `: J- b6 u0 M4 ~2 U" Y8 Selse if(i<=1000000) # D" e- l' v/ j
bonus=bonus6+(i-600000)*0.015;
9 M1 B( \( E5 h, S" w; yelse
; \% A1 S' ?. \% q* v7 P2 ~* m' Bbonus=bonus10+(i-1000000)*0.01; ' h/ i- D- F/ m# k* |! ^1 Z$ r
printf("bonus=%d",bonus); } % X; R. p: d! p+ ?; e) T7 J4 B
============================================================== + w. b$ h. s: M: R% s5 C
【程序3】 . Q$ v5 ?6 R V8 k! {% p6 g
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ) X$ v7 k* W; N$ u6 J& n
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
3 J5 p; F3 k: p" |0 i的结果满足如下条件,即是结果。请看具体分析:
' f4 `* h1 S% U2.程序源代码:
. I; {4 t/ g9 V- d( K#include "math.h" . s" N; w. _6 q# G7 \
main() {
# y7 A6 \- l2 d4 Q$ @6 xlong int i,x,y,z; ' {6 P0 [7 T6 \3 y: y. i2 F3 W
for (i=1;i<100000;i++) ! z) ^0 \* a2 g8 f2 Y9 R; C
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
- }7 C8 {+ u& H# S! I9 vy=sqrt(i+268); /*y为再加上168后开方后的结果*/ $ E4 N$ I" Y6 A, U
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
+ k& o+ t, W1 {# l5 b# b- Jprintf("\n%ld\n",i); } }
& X y" u9 q6 P- F- o==============================================================
: A! D5 U% m3 @. w【程序4】
]2 _" ]* m# D' K% a9 ^题目:输入某年某月某日,判断这一天是这一年的第几天? 1 b- P7 Z, Z2 T s( j
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
+ n4 ^+ _0 N# H9 K9 Y, t9 B" W情况,闰年且输入月份大于3时需考虑多加一天。
# V6 X" L" g% [+ {! {; K( G2.程序源代码: ; u" F% j% Z0 ]+ t
main() { 6 O# ~4 A+ u, ~- n2 Q
int day,month,year,sum,leap;
) k5 [( H2 W, b9 \/ [printf("\nplease input year,month,day\n"); L! y9 |* G- F& ^, d! F. k' F: X
scanf("%d,%d,%d",&year,&month,&day); # j8 j2 o) p6 a' P9 ^
switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break;
' U1 W6 X2 Q7 C/ dcase 2:sum=31;break; + m/ x9 H" `. O2 J3 E. J$ E9 L
case 3:sum=59;break;
& m4 G9 |2 R$ \* U2 Q" _! L& mcase 4:sum=90;break;
2 Z" ]9 v; _7 a, [; G |case 5:sum=120;break; 5 ]$ q5 U. K3 C; a
case 6:sum=151;break;
' `6 r$ E! K+ n u8 @0 Icase 7:sum=181;break; 1 X h( d3 A0 r/ n
case 8:sum=212;break;
3 I5 E" b8 u7 L% p: B) Ucase 9:sum=243;break; Q% s$ ^% C+ |2 P) m* o- f: z0 i" g c
case 10:sum=273;break;
5 o7 S# S- R \' H3 pcase 11:sum=304;break;
) \9 a: n+ ]( e3 ucase 12:sum=334;break; , b. m2 [/ D4 h( I, A2 u5 h
default:printf("data error");break; } + R7 z3 t8 i% L: m
sum=sum+day; /*再加上某天的天数*/
; H4 _" l8 r/ e* [( Qif(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ 1 r3 o, V k3 d' Q% S
leap=1; / c+ K4 e d0 M0 S; Y
else
" z: G8 N! j* G# o2 Gleap=0;
, R( O9 a, g) u0 Y9 V+ a8 @! Eif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ ; @" J9 ~) h) U' w3 f7 Q# I
sum++; ) g& g; l" F3 X6 O
printf("It is the %dth day.",sum);} 7 |6 T) p: C, w1 `# t) K1 C
==============================================================
& Z& h$ v! p% B9 i$ g8 t【程序5】
$ `5 W2 b. J4 B7 F, T3 ~题目:输入三个整数x,y,z,请把这三个数由小到大输出。
: U3 E6 s3 V$ }* L3 I1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, 4 J6 }4 g9 `& A5 L/ d1 g+ ^( Y
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 4 C f! l) S, h
2.程序源代码: : k3 ]+ Z; T# h" v0 n
main() { 4 [2 p8 Y- C' g4 N$ _- ^& n
int x,y,z,t;
~4 v( g8 {7 U) x+ C, N Y5 Zscanf("%d%d%d",&x,&y,&z); * Q5 F2 E" r. a* p
if (x>y)
# e0 M- I5 p/ C& ~; ^( Y- E( F1 x# |{t=x;x=y;y=t;} /*交换x,y的值*/
+ R8 V6 d, m# ^. f0 yif(x>z)
' f' {' L: j: ]6 A3 ^& Q; n{t=z;z=x;x=t;}/*交换x,z的值*/
9 c: u# i6 K. B4 h) Bif(y>z) $ m+ G( ^7 f+ ]# Y: F( c3 I9 n; E
{t=y;y=z;z=t;}/*交换z,y的值*/ , H5 p1 |, E" ^& o8 w
printf("small to big: %d %d %d\n",x,y,z); }
3 [4 E5 N3 X" t5 ]" x ! O1 i+ y3 ]" G" }- L; z4 b$ V; q
|