【程序1
】
1 ~( h2 P4 W! w# O2 E
题目:有1
、
2
、
3
、
4
个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
/ _5 ?; p3 |5 s1.
程序分析:可填在百位、十位、个位的数字都是
1
、
2
、
3
、
4
。组成所有的排列后再去
9 v: a0 {8 g4 _. E
掉不满足条件的排列。
$ F3 \* q% |( ~; J( O' b2.
程序源代码:
8 z& a5 @+ i6 @/ |
main() {
! q" y3 _ l0 C
int i,j,k;
8 C0 N) j; @% F2 pprintf("\n");
3 _; O. X2 @$ D+ @( Bfor(i=1;i<5;i++)
/
*
以下为三重循环
*/
" I4 k0 G; }% y; o" W$ N) ^! \/ _for(j=1;j<5;j++)
9 {7 f& p* m6 V" o |for (k=1;k<5;k++) {
+ y$ t: i% A1 O1 l. ?6 `' kif (i!=k&&i!=j&&j!=k) /*
确保
i
、
j
、
k
三位互不相同
*/
- x' {; Y3 E L7 ~- z
printf("%d,%d,%d\n",i,j,k); }}
0 z( ]: Q I; k* ]: k4 W0 E1 h==============================================================
5 [$ e6 \( k- z W; ?4 C4 n7 a! }
【程序2
】
+ U9 N# m4 M; h9 K4 s* \- R
题目:企业发放的奖金根据利润提成。利润(I)
低于或等于
10
万元时,奖金可提
10%
;利润高
2 w! } `5 W; J+ z9 D
于10
万元,低于
20
万元时,低于
10
万元的部分按
10%
提成,高于
10
万元的部分,可可提
! R' ^, @; @* O/ V* M0 u( V" A
成7.5%
;
20
万到
40
万之间时,高于
20
万元的部分,可提成
5%
;
40
万到
60
万之间时高于
5 @; i, d3 G5 g" C* Q. H
40
万元的部分,可提成
3%
;
60
万到
100
万之间时,高于
60
万元的部分,可提成
1.5%
,高于
" L9 R: O9 H$ u" [ T' t$ Q
100
万元时,超过
100
万元的部分按
1%
提成,从键盘输入当月利润
I
,求应发放奖金总数?
* Q5 V; a( m, V9 [" N" V1 g
1.
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
# o5 O! _/ L+ m3 d2.
程序源代码:
* \, h4 j4 ]$ b3 i, @/ H3 n
main() {
3 l5 l9 v0 v" q0 |" R% w) x$ wlong int i;
% k% R/ A" R5 D" C' v E8 Yint bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
5 M# o2 c* y# I9 j! K t
scanf("%ld",&i);
* A; f* A! j: d) ~7 d
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
+ ] d6 a" o: [
bonus4=bonus2+200000*0.5;
- }8 S. X) p+ x3 n: b5 B) Z B
bonus6=bonus4+200000*0.3;
5 B* |' R i# E S" C7 U: B
bonus10=bonus6+400000*0.15;
8 H3 v4 v; `+ Mif(i<=100000)
9 Y/ _9 d, a8 j8 M; d9 I
bonus=i*0.1;
3 }4 r- N- b1 [5 m4 M& l( y5 k
else if(i<=200000)
& w9 c6 \+ K( ?7 J; z3 D9 d* ?bonus=bonus1+(i-100000)*0.075;
" g/ m2 i4 ?& velse if(i<=400000)
; K) _& z' t* ?& p% ?5 Y, `4 Lbonus=bonus2+(i-200000)*0.05;
0 F- k5 K+ R& Celse if(i<=600000)
* o8 y* t" A R% A3 K' Y
bonus=bonus4+(i-400000)*0.03;
, u: O7 R7 z( x4 ?% w
else if(i<=1000000)
9 u& w. J3 L& _6 e/ x' U- U$ Y. wbonus=bonus6+(i-600000)*0.015;
2 `, O; @, u+ V3 B
else
+ n& Q( a4 h$ Q; Y: Dbonus=bonus10+(i-1000000)*0.01;
9 y( J; y# f8 r& l' I1 f uprintf("bonus=%d",bonus); }
" y/ p% i5 J8 {8 D
==============================================================
% a, r- C9 [: e: x" ^: h# ?
【程序3
】
9 H1 n2 ~0 j) C1 H) W% X) |4 @
题目:一个整数,它加上100
后是一个完全平方数,再加上
168
又是一个完全平方数,请问该数是多少?
2 Z2 o+ A; D& W5 `/ w9 d1.
程序分析:在
10
万以内判断,先将该数加上
100
后再开方,再将该数加上
268
后再开方,如果开方后
/ V- _5 W3 w3 b( s: B
的结果满足如下条件,即是结果。请看具体分析:
' j8 q2 | v1 t4 Y2 G4 U3 D- j
2.
程序源代码:
0 l. G" [* n& o2 `* y, J& H
#include "math.h"
( c B* ?# }7 \% R* zmain() {
" }/ k% x/ a% I) U6 c9 }& d
long int i,x,y,z;
: S0 u" a) O! S# E
for (i=1;i<100000;i++)
7 O; Q) I! s& f{ x=sqrt(i+100); /*x
为加上
100
后开方后的结果
*/
L7 d2 D! a4 E% u$ Jy=sqrt(i+268); /*y
为再加上
168
后开方后的结果
*/
3 N+ G, _' R+ k, r* Qif(x*x==i+100&&y*y==i+268)/*
如果一个数的平方根的平方等于该数,这说明此数是完全平方数
*/
& c; q$ \6 i, h/ i3 l2 F& cprintf("\n%ld\n",i); } }
: n- W4 F X; e1 p==============================================================
; K; q, S# x* U- N, `& M& S( i
【程序4
】
0 G6 Q& \ v4 @, M& S+ l
题目:输入某年某月某日,判断这一天是这一年的第几天?
% s; Q+ N* q# n8 M5 K) a: a5 f1.
程序分析:以
3
月
5
日为例,应该先把前两个月的加起来,然后再加上
5
天即本年的第几天,特殊
) @ T9 B0 t1 ~
情况,闰年且输入月份大于3
时需考虑多加一天。
5 z( L8 f6 Y h
2.
程序源代码:
7 s; V. O$ o$ H7 vmain() {
4 ^5 U; ^; G/ F0 ]int day,month,year,sum,leap;
0 Q+ ^$ ?# |. l% v: g# T* Q% |
printf("\nplease input year,month,day\n");
$ j2 n; z4 z8 t' h, J4 T
scanf("%d,%d,%d",&year,&month,&day);
' k I" S: {# Iswitch(month)/*
先计算某月以前月份的总天数
*/
{ case 1:sum=0;break;
6 P; ?' k8 A5 a" vcase 2:sum=31;break;
0 g! m4 ^& \0 l
case 3:sum=59;break;
, ~ y/ q# K& M9 W! q4 ^case 4:sum=90;break;
% H* e% p) |. c0 l0 P
case 5:sum=120;break;
& z1 _! f7 U! y" S3 j
case 6:sum=151;break;
% L. V. \4 U' |# O7 i& d4 z& R4 ?
case 7:sum=181;break;
. ^4 K& l! m( h. ]case 8:sum=212;break;
. ]) N4 d& m% acase 9:sum=243;break;
% e. c( |8 o' P8 q% r
case 10:sum=273;break;
6 x# y, W6 e6 q( { k/ ^
case 11:sum=304;break;
4 |& b# ~; E8 J5 bcase 12:sum=334;break;
+ m0 g, L' S, wdefault:printf("data error");break; }
8 G {0 d0 I3 m& t3 i* [/ ]! Osum=sum+day; /*
再加上某天的天数
*/
$ j; X" b* X, |" C
if(year%400==0||(year%4==0&&year%100!=0))/*
判断是不是闰年
*/
; G- [4 Y) k& H7 |8 E6 C% S; qleap=1;
+ f& A3 I/ R$ Kelse
+ \7 c9 S/ R7 p4 [
leap=0;
/ T+ N0 V8 y' e9 I& M2 ~; q" xif(leap==1&&month>2)/*
如果是闰年且月份大于
2,
总天数应该加一天
*/
1 V) J' w) O8 e
sum++;
* Q( a0 I5 k9 {+ b
printf("It is the %dth day.",sum);}
7 {& ~! |3 n: n0 F! _
==============================================================
# ^ g7 d6 J: g1 b3 D* ]0 T. m3 E* A' y7 A
【程序5
】
7 L4 X% |: _4 ]/ C3 i/ t) _2 c
题目:输入三个整数x,y,z
,请把这三个数由小到大输出。
7 Z: I% J% y/ r. z1.
程序分析:我们想办法把最小的数放到
x
上,先将
x
与
y
进行比较,如果
x>y
则将
x
与
y
的值进行交换,
( K# y4 [ Q4 L% W
然后再用x
与
z
进行比较,如果
x>z
则将
x
与
z
的值进行交换,这样能使
x
最小。
5 {2 q- k1 @9 W+ [
2.
程序源代码:
4 x: @+ Y8 [* F0 R& A: j% V! l. k1 e# L
main() {
6 R+ ]8 q+ k: l1 J6 dint x,y,z,t;
) c) ~$ k$ L* p" G$ H
scanf("%d%d%d",&x,&y,&z);
5 D( D& {: v" D) I, U! o1 Y: r
if (x>y)
4 T9 Z, S+ |9 }
{t=x;x=y;y=t;} /*
交换
x,y
的值
*/
0 R& ]. q* k2 w; X' x& D7 z
if(x>z)
& W; R5 h$ V' W" K
{t=z;z=x;x=t;}/*
交换
x,z
的值
*/
1 j! k/ G7 n C/ E- M+ f# Sif(y>z)
* [" e/ q, l* O0 d
{t=y;y=z;z=t;}/*
交换
z,y
的值
*/
- Z$ ?1 K4 K" e5 t& y
printf("small to big: %d %d %d\n",x,y,z); }
9 L; Y4 X" H% O, U2 ?
==============================================================
4 B: w# ^# P" F% t5 @
【程序6
】
$ u% Y/ F$ b7 @; n0 B' t
题目:用*
号输出字母
C
的图案。
3 a8 F) `3 k" w( @ e8 D% s5 z! U, H
1.
程序分析:可先用
'*'
号在纸上写出字母
C
,再分行输出。
! F7 ]$ I4 \, [ g6 Y; s" i* G* I2.
程序源代码:
2 p7 B5 f% S; r
#include "stdio.h"
1 q0 G5 ?4 u% H" J7 w) g3 K2 P
main() {
3 Z2 K4 L, h& o: J) A
printf("Hello C-world!\n");
" P2 F+ _7 H B5 D4 E4 q- t' lprintf(" ****\n");
. V$ t& ^4 k, c$ |( Q; l% i
printf(" *\n");
4 t3 J. O1 o+ B
printf(" * \n");
7 M. Y4 Q' Y6 G, T) m8 l7 U
printf(" ****\n"); }
* U7 {4 H' a5 e& m- B* L==============================================================
( m( J, k7 y2 k: {. c
【程序7
】
5 n& L" O$ p$ }# Y
题目:输出特殊图案,请在c
环境中运行,看一看,
Very Beautiful!
7 z$ k/ M+ s6 E
1.
程序分析:字符共有
256
个。不同字符,图形不一样。
+ Z& c, y+ L! e0 q7 k$ F7 W- K: c
2.
程序源代码:
e2 ?7 f. T) x- w#include "stdio.h"
! }/ h; r. H( G1 L6 l/ [6 m
main()
8 p4 Z0 m3 n1 x' c4 \
{
$ G: ?7 y6 x0 h+ ?" A2 ichar a=176,b=219;
5 q+ F/ Y" A. `5 K) }7 \' V' g# p8 [% ?printf("%c%c%c%c%c\n",b,a,a,a,b);
# D3 {0 p2 h- S# ]$ `9 T4 W3 \
printf("%c%c%c%c%c\n",a,b,a,b,a);
- H. P# B+ B) b
printf("%c%c%c%c%c\n",a,a,b,a,a);
+ H1 U# c6 L9 _+ V# A7 S- vprintf("%c%c%c%c%c\n",a,b,a,b,a);
# N' i! D- O0 g0 ~7 r* Mprintf("%c%c%c%c%c\n",b,a,a,a,b);}
% s. ~; r% p4 |" ]4 T; {" G! S
==============================================================
2 w6 f+ [7 f. r8 @
【程序8
】
* q) p8 @5 {2 y3 p4 s' [* X
题目:输出9*9
口诀。
) G/ D1 ^, g. m8 v( F A1.
程序分析:分行与列考虑,共
9
行
9
列,
i
控制行,
j
控制列。
$ ~7 }7 I0 h' A0 d6 f9 @% T
2.
程序源代码:
% v W$ {3 V* L' n/ W1 E+ X
#include "stdio.h"
' k" V: S; H/ _% g, @) tmain()
; R, E$ A! X0 @* N{
8 R$ I+ I: g; |$ y
int i,j,result;
$ J' c+ ~; U: Wprintf("\n");
2 X- K6 F7 j! {1 s- zfor (i=1;i<10;i++)
) s2 t9 v* u* l- R+ X/ ~4 N{ for(j=1;j<10;j++)
/ f! X# a- [; y, x, @. Y{
9 W4 Y( B7 }" Z4 N7 h8 [result=i*j;
' H# | T) [6 g7 yprintf("%d*%d=%-3d",i,j,result);/*-3d
表示左对齐,占
3
位
*/
/ p0 j, z2 `& x: \, K}
, Q- r. X2 i9 z$ K
printf("\n");/*
每一行后换行
*/
, ^/ }1 d" I7 l/ d' K8 Z0 M; C3 `" Q1 r7 C
}
- I @" {' |( v+ @. z}
& ]& I, E3 K4 c; D6 I& ]
===============================================
' ^5 A6 C( x o0 q8 r
|