EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【程序1】 - f2 r' n/ v& o' A9 K+ [
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 6 D. U" C5 q A! q
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
6 j. F6 q1 S5 D& c4 S掉不满足条件的排列。 , n( m" S9 c1 r
2.程序源代码: + n y! G/ U/ K
main() { 8 D4 m/ q$ `, q9 G
int i,j,k; 9 Y% ?" K7 j* c
printf("\n"); 7 ^" W- e: J+ _9 r3 f# I/ }2 _
for(i=1;i<5;i++) /*以下为三重循环*/
' O) c8 y+ P7 Y; L# W" F$ Q" i0 kfor(j=1;j<5;j++)
6 {: J; R- ]% G% z$ I) Z" [+ {/ {) Mfor (k=1;k<5;k++) { y& s# M* T7 m: S
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
. D5 ^2 s8 X" U. F. Dprintf("%d,%d,%d\n",i,j,k); }}
. T0 ~' E' w# z+ z- [# f============================================================== ! ], e0 }" [$ I7 N3 k8 x2 g$ E& J7 d
【程序2】
. f& V$ b, i6 C, `! g1 k6 u8 [题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
% q* R! ], o. {! ?于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 ' E0 ?) T( J7 q9 A' n
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
7 e) U; ~+ W- l) N5 U40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 3 n# Z, Y& e0 L
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
( n, A S( `/ W \" F1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
: ]+ f( q. H. d% L: H2.程序源代码:
: ~4 R: F: L/ e. D/ omain() { ; b6 _5 K9 d2 l% k s+ S: X
long int i;
& |) `" p6 L% \8 C6 L! N9 R) Fint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
4 J; J7 z1 t0 W( C6 S1 Sscanf("%ld",&i);
; K6 q1 V( z6 ?4 F& z6 A# ^& ]bonus1=100000*0.1;bonus2=bonus1+100000*0.75; # |% _8 o) B( ?' y! a
bonus4=bonus2+200000*0.5;
. h" ~8 v6 e* _+ @: q) abonus6=bonus4+200000*0.3;
+ s4 A: J& P/ Z& a% i3 L5 Y8 @: Dbonus10=bonus6+400000*0.15;
3 w2 ?" K, L# f1 i8 X; sif(i<=100000)
: x! X! R/ g% `* vbonus=i*0.1; ) ^7 W% B1 c e
else if(i<=200000) - Z, `5 w- D& a/ |& ]
bonus=bonus1+(i-100000)*0.075;
e/ Q, }. f$ aelse if(i<=400000) : y& r% O7 |( ]& M! q# l2 |
bonus=bonus2+(i-200000)*0.05; " i3 r, Q% X& r p7 c
else if(i<=600000) ) A* ~# ^, x6 f1 ?! `, R A
bonus=bonus4+(i-400000)*0.03; , C& J1 w$ [) ]' z' a- f1 K" w1 S6 s6 P
else if(i<=1000000) ) z$ k6 ^# d* l, e
bonus=bonus6+(i-600000)*0.015; . g+ D3 [3 h5 j% a7 E" C( a: @
else 6 [# h. u1 A; f& i3 i' k8 b2 Y
bonus=bonus10+(i-1000000)*0.01;
/ m3 f3 h! q4 W: rprintf("bonus=%d",bonus); } 6 L& L6 M# X% a0 i& c# V
============================================================== ) O. o- v$ N" P& Y3 l
【程序3】 ' d- H4 l6 b3 f
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
& E( ^+ V7 B+ w& G% F- H! Y: w( ^0 y1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 5 E, X. O$ j, r7 y: [, e
的结果满足如下条件,即是结果。请看具体分析: 3 n. Q3 \0 u6 N3 l
2.程序源代码: * }- b/ P% [8 J1 _3 ]
#include "math.h" 9 w0 {$ m. D" ^
main() {
# P: ~+ g7 _+ Clong int i,x,y,z;
0 G& o+ W3 e3 k# u2 Sfor (i=1;i<100000;i++) 8 _ C8 m) _; k$ p4 H8 s
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/ ! G* O6 [* h. c5 R7 H
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
+ k! E: z* M; o5 R, V" d' Pif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ 1 Y. D) J; l2 H+ v6 S9 Z3 I
printf("\n%ld\n",i); } } ( J/ s, W0 y7 }0 r- s: R
============================================================== 0 U# k+ n P7 D; D; B5 W( x
【程序4】 ! M- t }4 c5 H% m! J b1 v$ T* ~( M5 @
题目:输入某年某月某日,判断这一天是这一年的第几天? 8 G R3 }6 } w# G+ I: F% p
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
( Z* c; z W8 U W6 P情况,闰年且输入月份大于3时需考虑多加一天。
$ M' z, C7 v0 \4 X' z! z2.程序源代码:
p% y! U7 K, Z* m6 X0 cmain() {
1 x: s7 g1 W5 D) B1 N- O5 j/ ^: e: Uint day,month,year,sum,leap; 0 ~8 v0 ?+ @0 z
printf("\nplease input year,month,day\n"); 5 |; e, d# E5 v% j
scanf("%d,%d,%d",&year,&month,&day); ) R% p K. E$ ]" I. [
switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break;
7 S( Q, x: j; jcase 2:sum=31;break;
8 T6 g& `( [5 H8 n. `case 3:sum=59;break;
- q) w' v( e" J$ X5 |case 4:sum=90;break;
) X7 t5 O t" v3 E) o, S/ A: U" E% P& S5 ?case 5:sum=120;break;
! n7 D* H2 l* o; h# bcase 6:sum=151;break;
3 M5 ~( h. K9 B1 q/ d1 d, ?0 C7 n1 Ocase 7:sum=181;break;
% ~+ S M4 r5 X9 S: ~" U; Y/ E$ Ucase 8:sum=212;break;
' i' M( o1 \6 i$ Qcase 9:sum=243;break; . R' | [3 M1 h. J( M* U. V3 H
case 10:sum=273;break;
m; d$ t+ R% Gcase 11:sum=304;break; $ e- C- G* f. g p! Q, y
case 12:sum=334;break; 6 h A2 J/ Z3 x" u) U
default:printf("data error");break; } 1 ?: I) _# [6 q1 V& w4 x
sum=sum+day; /*再加上某天的天数*/ 2 E+ \( }6 g+ b5 X7 ?& R
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
+ A9 w9 z' h- h' f8 yleap=1; 3 ?& Y ~2 |* @" c* c
else " b7 ^, F. V5 x* u$ h+ X% I6 h
leap=0;
9 Z0 i1 A( ~3 p1 @0 m7 ]: f+ u( Hif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
* k- Z- h9 H2 Fsum++;
! U8 e9 ^- d( _* |& ~% ?printf("It is the %dth day.",sum);}
. t- \0 n6 Z2 r# N3 Y& W==============================================================
* j3 z: z; |. z# u: \1 |) r% _7 `【程序5】 # x& i Z7 @* v/ Y0 R2 ^% n5 [6 J9 [
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
) B! _: l/ l) @, F' J1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, " X- I, C( y6 J z
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 . N* Z3 c( P/ n' ?7 g0 }1 i
2.程序源代码: - M# q3 l* F* T" {3 r
main() {
( h$ p7 ]8 ~, x3 `* m' ]int x,y,z,t; * o& u7 c0 e5 Q+ ]: ?* J
scanf("%d%d%d",&x,&y,&z);
7 ~% _. p+ u9 J" jif (x>y) 0 K6 N" k5 J$ g1 O f
{t=x;x=y;y=t;} /*交换x,y的值*/ * i/ b) ~, z! i6 E! f4 F
if(x>z)
; K* b& n9 w" g1 {" ~; U1 N0 `' g* h{t=z;z=x;x=t;}/*交换x,z的值*/
. Y- l& Y) {7 u0 Mif(y>z)
/ T7 s, l4 |( Y/ |! W{t=y;y=z;z=t;}/*交换z,y的值*/ 9 q9 U$ I# |. z4 z) |5 D5 t! |
printf("small to big: %d %d %d\n",x,y,z); } 5 j# ]. R% A3 m$ h
! x. z" o$ ~$ G" U- J! l |