EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
【程序1】
' J9 Q5 _! e& z. c9 f' F2 u题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
9 w) U6 |# q- f2 V" D1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
: J: Q9 l+ n' [掉不满足条件的排列。 5 U# q; D+ u- P+ `% e- I. e
2.程序源代码: . G1 n1 q$ I3 a7 g0 @: e, |
main() { 6 W A- F. K2 Q+ q7 K, p
int i,j,k; , E8 `# X: U% {* e
printf("\n"); % ?! l! |' c1 ^' E# x$ a5 a
for(i=1;i<5;i++) /*以下为三重循环*/
t7 Q; s# Q% o2 Z" O0 Efor(j=1;j<5;j++) $ X# R2 S K- S* Q
for (k=1;k<5;k++) { ; ~ K5 ?, I' C( e' k/ B
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
* ]6 \ v$ E( R7 e: oprintf("%d,%d,%d\n",i,j,k); }} & R, \, E% t9 V$ k
============================================================== 7 S8 L5 V U) J# V
【程序2】 ; e# A! Y/ s" t* P, d6 h& d
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 ' l- x, N- R% `& E# x% v, O
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
- n& p3 f4 u# G成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
. z" T/ w: S7 m" S. S; m$ J: u40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
# x# I6 m6 S% v$ J9 Z100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
; U, Z+ x2 {6 r, s1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
h& I% O/ M9 q, w2.程序源代码: - X% v" L7 ^2 U3 A1 f( m
main() {
, m5 a' k, N% H4 K+ Blong int i; 1 s0 z0 ?5 ^/ o6 s+ n0 v
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; # M+ T! r/ M" R S# M, @4 C* {
scanf("%ld",&i);
- y3 {" q. A9 v b+ K% tbonus1=100000*0.1;bonus2=bonus1+100000*0.75;
0 @) U6 ?% P! o! ]5 ^4 Qbonus4=bonus2+200000*0.5; ( a) N; |# d; X* {8 J# s) |+ Z: j5 U6 D
bonus6=bonus4+200000*0.3;
: a& u% }% J* @$ V- V6 k. wbonus10=bonus6+400000*0.15; 0 @+ M% x& y9 |
if(i<=100000)
) Y8 p, Z, H, D/ A! J7 Ybonus=i*0.1;
5 t/ ?* C) P! F; F! U, b6 celse if(i<=200000) - a; n" N) r3 D7 p, D: A
bonus=bonus1+(i-100000)*0.075; : x& l H1 B: f: Z& L1 x
else if(i<=400000) ( V) R5 Q" u* [
bonus=bonus2+(i-200000)*0.05; . m' p5 Y# ^6 J q3 \8 p
else if(i<=600000)
/ S/ Y4 k% a) o' r0 Q! a0 Ybonus=bonus4+(i-400000)*0.03; 0 h4 ^) o1 d7 ?/ ]
else if(i<=1000000)
6 O/ U: i' U. g0 Lbonus=bonus6+(i-600000)*0.015;
4 r: C. k& _( L- felse 3 Y0 w9 B. M& ~* z/ M/ k5 m+ X
bonus=bonus10+(i-1000000)*0.01;
6 n$ `1 T- F( o) ?- ?2 Cprintf("bonus=%d",bonus); }
. I) O& d( `; f8 h! H0 J" z! @, j==============================================================
& a9 u: m4 k& N# g# R4 @! C【程序3】 ( u' M9 F' ]6 w# I5 K9 I& X
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1 F+ L& {0 Y% _5 f% { @1 u c( f4 ^
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
+ w0 m7 j% Z; D6 C的结果满足如下条件,即是结果。请看具体分析:
+ U; y( E2 j1 A/ O! B" m/ G2.程序源代码: 3 W. ~( B( z) H1 U) p
#include "math.h" ; |' Z- t/ g; w' H
main() { # q2 r+ o' w( _1 ]- P$ y
long int i,x,y,z; . ]- x8 k8 i9 r' e3 d. D
for (i=1;i<100000;i++) ) A9 l6 Z# p/ S
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
% g0 v: a( J5 s4 q- d8 {' U- Ly=sqrt(i+268); /*y为再加上168后开方后的结果*/
. q5 C# z# `2 m# J0 a8 D$ Jif(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
1 L8 z, f! Z6 ~1 hprintf("\n%ld\n",i); } }
! t0 J% _/ C3 F9 X+ _0 [; ?==============================================================
+ v. Y7 q I* o/ R# Z h; ]【程序4】 # h; X8 K, W, V
题目:输入某年某月某日,判断这一天是这一年的第几天?
+ k* E, l! b$ k7 ~+ S1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
1 g. v r: [* l( c" |情况,闰年且输入月份大于3时需考虑多加一天。
% H* z) {9 M) {* ~. q+ J0 Q2.程序源代码: * ^+ m# ~/ q0 t1 P9 T
main() { 0 t! L8 |* h( t, a! R6 W. s
int day,month,year,sum,leap; Z* W( \8 B; [7 Z) [- j" }+ t
printf("\nplease input year,month,day\n"); 3 `" [1 o1 S0 K% E" y d
scanf("%d,%d,%d",&year,&month,&day); ! }/ a0 M8 Y- c @7 ?; F% x7 r* q( ~
switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break;
1 i7 Q$ R1 Q P; s t# a7 ?case 2:sum=31;break;
* o) }% V1 o1 ^6 Rcase 3:sum=59;break;
- E% f+ R/ W. {/ x& i [- ^case 4:sum=90;break;
6 G3 b4 y# N$ c5 F3 Ycase 5:sum=120;break; ' F* Z( W0 \ w2 D) I2 {- [
case 6:sum=151;break;
4 k: T; X r" ^case 7:sum=181;break; 6 d: X+ J$ P' }# t
case 8:sum=212;break;
@; j/ h. ^! m. Bcase 9:sum=243;break;
9 [/ Y0 o0 {) a* g6 h: H% _case 10:sum=273;break; 6 l4 r- |# c) L# b
case 11:sum=304;break;
9 ]$ y, c, [* c h8 j7 h+ hcase 12:sum=334;break; 1 h# j* u2 E0 m3 a& S: Q7 a; ]3 \# B
default:printf("data error");break; }
8 ~9 }, s1 |4 |& psum=sum+day; /*再加上某天的天数*/ 4 i& b! W3 V. D |5 r
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
: K: X" F+ ~9 T/ R3 Lleap=1;
" Q# |$ V# S w4 Q% Celse $ D0 B. k- D3 J: f9 v
leap=0; ! t3 J' J- x; H/ R. G
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
; X$ T0 W! O/ B9 o% osum++;
; y' F* o# Y; y9 Oprintf("It is the %dth day.",sum);}
' |2 t8 t+ w% A% m==============================================================
! D) n2 F" f6 I& C* j u( A) n/ j【程序5】
$ g) m; e1 j/ O5 ]" K o题目:输入三个整数x,y,z,请把这三个数由小到大输出。
2 \) y: m! ]6 r1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
V( R* m7 p! L0 B/ \8 s然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
1 ~/ J Z6 k- g% ^; A2 P+ s! O2.程序源代码: / a+ D7 |6 ]* Q0 A
main() {
( _( Q/ d0 J, D$ g7 l. yint x,y,z,t;
1 C' v0 y% x |1 u! D }scanf("%d%d%d",&x,&y,&z);
: M6 g8 N. @; C; \# X' u: z" Hif (x>y)
2 B0 u, ]4 |! f+ e) l! R% S{t=x;x=y;y=t;} /*交换x,y的值*/ 9 x" l7 S! p) J1 u
if(x>z) " t8 O# a u" s
{t=z;z=x;x=t;}/*交换x,z的值*/
/ M8 {/ c& {) p# K2 vif(y>z)
F' o2 z, ]% _0 H" z9 G/ V{t=y;y=z;z=t;}/*交换z,y的值*/ 0 I) k4 l8 x8 R
printf("small to big: %d %d %d\n",x,y,z); }
! `# g- m, `2 ?/ O, E ! X* V* b* T! \. Q6 \: x
|