【程序1】
0 m; E' U( ^7 e' V6 e: d4 K9 Q题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
& H. ]# }' F+ ?1 I; X# W: }1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
- R' }1 |5 I( B, g1 q" v6 ?$ H/ W掉不满足条件的排列。
/ F! P" V, N$ V( ^( E! y2 i2.程序源代码:
/ z+ Z- G0 h: l( K. Z2 I. r* dmain() { 4 B$ c; M. R7 v' |" \0 m
int i,j,k; 5 ^8 D4 A* B: |9 j
printf("\n"); ! p) ?, L- G; H& t" N1 T
for(i=1;i<5;i++) /*以下为三重循环*/ 8 x: j4 }& ^& t( z5 w- i
for(j=1;j<5;j++)
7 Z0 H, J$ F- F9 Kfor (k=1;k<5;k++) {
B8 I/ K- x; f+ l/ T& eif (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
: p5 P2 b- |& j0 B: p [3 ]4 kprintf("%d,%d,%d\n",i,j,k); }} $ w5 [2 h3 K7 E' ~$ O
============================================================== 6 Y9 |! d# J; O* `6 k6 O* e4 ~# r
【程序2】
) j: P* Q! n1 O$ _题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
% Y( i! r1 Y# p @; Y4 b于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 " t+ n8 u! { W+ ]3 j1 N8 `
成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 : Q" Y- S0 n8 D5 e$ l
40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
9 S3 K3 h7 Q/ d; {* L/ I# }100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
. N/ i( Z1 x, |1 S, B2 B, [1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 4 E8 \# Z! l4 O+ I y6 x* A
2.程序源代码:
) D, l0 }) l2 H9 E. y) rmain() {
' k% w( w) G8 s9 s2 Ilong int i; 1 n6 w: f: J$ q, L
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
; N/ j8 p* i* S7 Iscanf("%ld",&i);
! c3 A1 y; A1 M, c: t1 T" ^$ C2 `bonus1=100000*0.1;bonus2=bonus1+100000*0.75; " w: S. y1 q8 s- o. J" U
bonus4=bonus2+200000*0.5;
" o( x/ F+ j3 z; A; e( y+ Pbonus6=bonus4+200000*0.3;
- ?/ w4 M+ k2 T% @0 O8 _bonus10=bonus6+400000*0.15;
% H2 t5 n- e& V4 uif(i<=100000)
( v6 J) A$ v9 k' e+ Q" |bonus=i*0.1;
1 L y& @$ n, Relse if(i<=200000)
8 a4 g8 g m' ?, p+ h4 obonus=bonus1+(i-100000)*0.075;
, o3 e' s1 m' {! melse if(i<=400000) 8 M7 |7 Q4 y7 r! |% w z3 a! u
bonus=bonus2+(i-200000)*0.05;
+ `" n+ c: }9 melse if(i<=600000)
0 r! R$ K$ {. Ybonus=bonus4+(i-400000)*0.03;
( M* ~" g9 p% b' |else if(i<=1000000)
% R: _; n7 g6 h* d& L& H. r1 v1 ?bonus=bonus6+(i-600000)*0.015; [* v5 O* V) e
else
8 J: g9 c S' j! I6 zbonus=bonus10+(i-1000000)*0.01;
$ m/ O. [/ b0 \$ l8 C/ b) Z0 yprintf("bonus=%d",bonus); } . W/ Q+ ?# n7 T2 r; {4 O9 U7 h
==============================================================
- w' `( |, h$ y, X# ?' W, a【程序3】 : w0 l+ d. R: O: L" H# G
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? ( s2 L6 k( E2 P! _+ H4 ]
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
& f' h9 h1 d7 j R6 t的结果满足如下条件,即是结果。请看具体分析:
* a8 Y& e2 r" b2.程序源代码:
6 Q6 H% o9 K+ d; }3 T- b8 d8 B#include "math.h" 2 B6 J- `. s, H8 ]7 _
main() {
8 [4 }2 P, B. m/ O5 Zlong int i,x,y,z; 5 m3 z) u7 i. E$ e1 Y! L
for (i=1;i<100000;i++)
( p& V, p1 O7 D/ `1 d{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
3 C4 G: `: g- v# v- E- Jy=sqrt(i+268); /*y为再加上168后开方后的结果*/ " R5 Z0 a) o- ?
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ 4 {& u& I' e" C6 u
printf("\n%ld\n",i); } } . a/ T; w8 ?5 Z$ H9 ?) l z
==============================================================
2 ~4 J6 I0 Y+ ~* W. t+ F6 o【程序4】
% L, X# ?. m7 q; Q题目:输入某年某月某日,判断这一天是这一年的第几天? 3 _+ \4 c/ x' O# H7 o$ |( g
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
( D. i' K$ s4 I情况,闰年且输入月份大于3时需考虑多加一天。 Z# Z, | n o ^0 y
2.程序源代码: ( b: |: M7 l0 y, a4 Z! o! A
main() { ( D; w$ m* Q: z/ x2 K5 N
int day,month,year,sum,leap; # L( Y9 l/ U2 b" f0 v4 t
printf("\nplease input year,month,day\n"); 9 I y# ]% Z- R9 m0 u
scanf("%d,%d,%d",&year,&month,&day);
: z7 Y) @% b0 W) f. Zswitch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break; & Y( J9 J0 M- b& y; D* X
case 2:sum=31;break;
' Z- t3 N( j, m9 R% Z# Icase 3:sum=59;break; " |) [4 V9 W6 |. m
case 4:sum=90;break;
8 Q5 ?" I$ k* s5 J' }case 5:sum=120;break; " l) [4 k" C7 H; n, }% ^
case 6:sum=151;break;
* B6 A' h9 G3 B1 qcase 7:sum=181;break;
3 @* m N4 b+ n- ^' Z0 P2 ~& C$ Jcase 8:sum=212;break; / C2 j1 B0 j' D5 ]% O; M/ R
case 9:sum=243;break;
' T$ A# x# e" m+ Tcase 10:sum=273;break;
5 U# o2 f1 [2 b( u: v5 L% rcase 11:sum=304;break; # F" d" l+ g/ s( d" R9 f
case 12:sum=334;break; 4 v; l+ [7 E$ A, O+ g$ u- r4 i3 g
default:printf("data error");break; }
# @9 O. x9 ~( T( j8 D- dsum=sum+day; /*再加上某天的天数*/ 4 }( k, N( Q/ X. Z- H
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
( U2 E* T2 I: [# S% {leap=1;
* X2 E8 }& s: s( n B6 y3 {1 y" ~else + |9 Y7 [2 k; X0 i, y
leap=0;
& ]$ O* V3 _; Q# J% c" @7 hif(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
+ R+ R; Z0 v$ s5 G# Ssum++;
# }* Q5 ]+ I4 p% Q. eprintf("It is the %dth day.",sum);}
$ \" h6 a- |+ n$ v5 r==============================================================
m6 @: L, [3 e7 c& Y( z$ I【程序5】 ; w: X+ x8 K$ j7 ]3 `
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
" p6 K& g- l, c C& `1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, . s8 ^& @9 t& F, q4 p
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 ) M( n' m" U/ L- }
2.程序源代码:
S. W+ e; c, j* K6 Y; Kmain() { 3 h+ r# I% O& k# n
int x,y,z,t;
" f8 z" O) {! q5 C" y& t. j4 P, Fscanf("%d%d%d",&x,&y,&z);
. g' B3 m- X5 M0 b4 s6 E3 o7 hif (x>y) ' R8 L$ o t4 L" C* K) l( k
{t=x;x=y;y=t;} /*交换x,y的值*/ ; Y: c: [, @: S: o
if(x>z) ; ?6 A7 N u- k! N
{t=z;z=x;x=t;}/*交换x,z的值*/
* w( S3 [ Q9 X' z1 w& p) L& xif(y>z)
' y2 G" A, ?+ G. q( W' m( D, E$ A{t=y;y=z;z=t;}/*交换z,y的值*/ 2 Y8 m9 w4 }7 S+ D5 Q P- `+ B
printf("small to big: %d %d %d\n",x,y,z); }
$ {3 N6 v0 d4 I v4 e# t' C% {============================================================== 8 Y+ m( U2 X, k$ h6 [7 D5 V3 f
【程序6】 1 T9 f& i; G* {
题目:用*号输出字母C的图案。 / n$ t7 Z9 W. J# R) r9 }' |
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 & v- l, L2 j" z ]. {. i
2.程序源代码: [! f3 k( |" g% Q
#include "stdio.h" ! }8 |9 u7 L; y# p; G3 |8 s: \ N0 p
main() {
' y& S/ A9 E* ?8 eprintf("Hello C-world!\n");
; ~- O1 v6 h9 lprintf(" ****\n");
- [: `- H! A: rprintf(" *\n");
/ t% l2 u* g" r4 z( b, W7 Gprintf(" * \n");
. J( j: K: h- n6 v5 L8 I8 Aprintf(" ****\n"); }
1 |* d! f& a7 B H5 M============================================================== + m9 l8 F3 @8 e3 }
【程序7】 ( Y$ t$ [5 q- Z# s. m) N' O ?* e! O- ]
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
% O5 ] Q7 c( r7 t1 L& y1.程序分析:字符共有256个。不同字符,图形不一样。
& X2 \" i7 k9 Q+ w: O- A% ]2.程序源代码:
+ G; r+ n i$ R#include "stdio.h" / p/ b1 y* [& i7 Z
main()
$ T% w* Q& Y" O$ K{ # J& y6 n1 o- R5 R3 [
char a=176,b=219; 2 j" d5 A" M( h [2 ~, `
printf("%c%c%c%c%c\n",b,a,a,a,b); 9 d- w Y) ?0 d/ {) r m+ v3 Q
printf("%c%c%c%c%c\n",a,b,a,b,a);
- ?& H$ H3 s, U! Q* F0 [2 [# [- |printf("%c%c%c%c%c\n",a,a,b,a,a); 1 w! h8 o2 z- L9 \: b$ F$ x
printf("%c%c%c%c%c\n",a,b,a,b,a); 4 m0 W7 a; ^/ B6 N/ B3 m4 U
printf("%c%c%c%c%c\n",b,a,a,a,b);} ) ^" Y( X2 a8 I0 k1 w1 h
============================================================== 3 D3 ^ x& W$ k
【程序8】 ( a" K1 d5 A* i9 P# {
题目:输出9*9口诀。
6 I) |" L, m) P8 X" R1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 , S) m6 _( P; ~, G: ~2 K
2.程序源代码: - u- v' x- _, ?8 }' K& H
#include "stdio.h"
5 D t5 N4 H/ S7 w, ]3 wmain() 1 ~1 R8 p: P2 i t
{
0 S! s+ e( }+ Q! V: `' X- L; s1 a3 Z7 }int i,j,result; - W. |& P* [1 n
printf("\n");
* r) P' |6 K9 L: U$ qfor (i=1;i<10;i++) 9 Q! c5 |+ i9 p0 X) [
{ for(j=1;j<10;j++)
& ]' [. O4 X$ O! Y{ ( L7 U' A0 J/ g- z& P
result=i*j; * ^& q/ m: I8 Z/ ?& |
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
* i( I- f5 \" {* [( W) V5 M$ \5 J; F} 8 w& R# {! t3 F! ~3 J: G
printf("\n");/*每一行后换行*/ 5 b& N- h/ g: a6 m! Y! I# d
} - |6 c( N1 K: R( j' T
} ' m3 N x0 y8 ]8 E- ~" A, j1 k
=============================================== # w) z# r6 X2 P; e4 _8 E. e
|