-
C
语言程序设计习题
授课对象:信息奥赛辅导成员
授课时间:
题目:古典问题:有一对
兔子,从出生后第
3
个月起每个月都生一对兔子,小兔
子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的
兔子总数
为多少?
______________________________________________
____________________
程序分析:兔子的规律为数列
1,1,2,3,5,8,13,21….
__
__________________________________________________
_______________
程序源代码:
main()
{
long
f1,f2;
int
i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf(“%12ld
%12ld”,f1,f2);
if(i%2==0)
printf(“
n”);/*
控制输出,每行四个
*/
f1=f1+f2;/*
前两个月加起来赋值给第三个月
*/
f2=f1+f2;/*
前两个
月加起来赋值给第三个月
*/
}
}
上题还可用一维数组处理,
you
try!
题目:判断
101-200
之间有多少个素数,并输出所有素数。
_________________________________________________
_________________
程序分析:判断素数的方法:用一个数分别去除
2
到
sqrt(
这个数
)
,如果能被整
除,则表明此数不是素数,反之是素数。
________________________________________________ ___________________
程序源代码:
#include
“math.h”
main()
{
int
m,i,k,h=0,leap=1;
p
rintf(“
n”);
for(m=101;m<=200;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap)
{printf(“%
-
4d”,m);h+
+;
if(h%10==0)
pr
intf(“
n”);
}
leap=1;
}
printf(“
nThe
total
is
%d”,h);
}
题目:打印出所有的
“
水仙花数
”
,所谓
“
水仙花数
”
是指一个三位数,其各位
数字立方和等于该数本身。例如:
153
是一个
“
水仙花数
”
,因为
153=1
的三次方
+
5
的三次方+
3
的三次方。
____________________
______________________________________________
程序分析:利用
for
循环控制
100-999
个数,每个数分解出个位,十位,百位。
____________________________________
_______________________________
程序源代码:
main()
{
int
i,j,k,n;
printf(“‘water
flower’number
is:”);
for(n=100;n<1000;n++)
{
i=n/100;/*
分解出百位
*/
j=n/10%10;/*
分解出十位
*/
k=n%10;/*
分解出个位
*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf(“%
-
5d”,n);
}
}
printf(“
n”);
}
题目:将一个正整数分解质因数。例如:输
入
90,
打印出
90=2*3*3*5
。
_______________
__________________________________________________
_
程序分析:对
n
进行分解质因数,应先找到一个最小的质数
k
,然后按
下述步骤完
成:
< br>(1)
如果这个质数恰等于
n
,
则说明分解质因数的过程已经结束,打印出即可。
(2)
p>
如果
n<>k
,但
n
能被
k
整除,则应打印出
k
的值,并用
n
除以
p>
k
的商
,
作为新的
正
整数你
n,
重复执行第一步。
(3)
如果
p>
n
不能被
k
整除,
则用
k+1
作为
k
的值
,
重复执行第一步。
__________________________________________
_________________________
程序源代码:
/*
zheng
int
is
divided
yinshu*/
main()
{
int
n,i;
printf(“
nplease
input
a
number:
n”);
scanf(“%d”,&n);
printf(“%d=”,n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf(“%d*”,i);
n=n/i;
}
else
break;
}
}
printf(“%d”,n);
}
题目:利用条件运算符的嵌套来完成此题:学习成绩
>=90<
/p>
分的同学用
A
表示,
60
-89
分之间的用
B
表示,
60
分以下的用
C
表示。
___________
__________________________________________________
_____
程序分析:
(a>b)?a:b
< br>这是条件运算符的基本例子。
___________
__________________________________________________
______
程序源代码:
main()
{
int
score;
char
grade;
printf(“pleas
e
input
a
score
n”);
scanf(“%d”,&score);
< br>grade=score>=90?’A’score>=60?’B':’C');
printf(“%d
belongs
to
%c”,score,grade);
}
题目:输入两个正整数
m
和
n
,求其最大公约数和最小公倍数。
_______________________________
___________________________________
程序分析:利用辗除法。
_____
__________________________________________________
____________
程序源代码:
main()
{
int
a,b,num1,num2,temp;
printf(“please
input
two
numbers:
n”);
scanf(“%d,%d”,&num1,&num2);
if(num1
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*
利用辗除法,直到
b
为
0
为止
*/
{
temp=a%b;
a=b;
b=temp;
}
printf(
“gongyueshu:%d
n”,a);
< br>
printf(“gongbeishu:%d
n”,num1*num2/a);
} <
/p>
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
。
________
__________________________________________________
________
程序分析:利用
while
语句
,
条件为输入的字符不为
’
n’.
_
__________________________________________________
________________
程序源代码:
#include
“stdio.h”
main()
{char
c;
int
letters=0,space=0,digit=0,others=0;
printf(“please
input
some
characters
p>
n”);
while((c=getch
ar())!=’
n’)
{
if(c>=’a'&&c<=’z'||c>=’A'&
&c<=’Z')
letters++;
else
if(c==’
‘)
space++;
else
if(c>=’0′&&c<=’9′)
digit++;
else
others++;
}
printf(“all
in
all:char=%d
space=%d
digit=%d
others=%
d
n”,letters,space,digit,othe
rs);
}
题目:求
s=a+aa+aaa+aaaa+aa…a
的值,其中
a
是一个数字。例如
2+22+
222+2222+22222(
此时共有
5
< br>个数相加
)
,几个数相加有键盘控制。
< br>
___________________________________
_______________________________
程序分析:关键是计算出每一项的值。
_________________________________________________
__________________
程序源代码:
main()
{
int
a,n,count=1;
long
int
sn=0,tn=0;
printf(“please
input
a
and
n
n”);
scanf(“%d,%d”,&a,&n);
printf(“a=%d,n=%d
n”,a,n
);
while(count<=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++count;
}
printf
(“a+aa+…=%ld
n”,sn);
}
题目:一个数如果恰好等
于它的因子之和,这个数就称为
“
完数
”
。例如
6=1
+
2
+
3.
编程找出
1000
以内的所有完数。
_________________________________________________
__________________
程序源代码:
main()
{
static
int
k[10];
int
i,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i
{
if((j%i)==0)
{
n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf(“%d
is
a
wanshu”,j);
for(i=0;i
printf(“%d,”,k);
printf(“%d
n”,k[n]);
}
}
}
< br>题目:一球从
100
米高度自由落下,每次落地后反跳回
原高度的一半;再落下,
求它在第
1
0
次落地时,共经过多少米?第
10
次
反弹多高?
______________________
_____________________________________________
程序源代码:
main()
{
float
sn=100.0,hn=sn/2;
int
n;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;/*
第<
/p>
n
次落地时共经过的米数
*/
hn=hn/2;
/*
第
n
次反跳高度
*/
}
printf(“the
total
of
road
is
%f
n
”,sn);
printf(“the
tenth
is
%f
meter
n”,hn);
}
题目:一只猴子摘了
N
个桃子第一天吃了一半又多吃了一个
,
第二天
又吃了余下的
一半又多吃了一个
,<
/p>
到第十天的时候发现还有一个
.
___
__________________________________________________
______________
程序源代码:
/*
猴子吃桃问题
*/
main()
{
int
i,s,n=1;
for(i=1;i<10;i++)
{
s=(n+1)*2
n=s;
}
printf(“
第一天共摘了
%d<
/p>
个桃
n”,s);
}
迭代法求方程根
____________________________________________ _______________________
/*
迭代法求一个数的平方根
*/
#define
Epsilon
1.0E-6
/*
控制解的精度
*/
#include
main()
{
float
a,x0,x1;
printf(“
请输入要求的数
:”
);
scanf(“%f”,&a);
x0=a/2;
x1=(x0+a/x0)/2;
while(fabs(x1-x0)>=Epsilon)
{
x0=x1;
x1=(x0+a/x0)/2;
}
printf(“%f
的平方根:
%f.5
< br>n”,x1);
}
/*
上题的另一种算法
*/
#define
Epsilon
1.0E-6
/*
控制解的精度
*/
#include
#include
main()
{
float
num,pre,this;
do
{
scanf(“%f”,&
num);/*
输入要求平方根的数
*/
}while(num<0);
if
(num==0)
printf(“the
root
is
0″);
else
{
this=1;
do
{
pre=this;
this=(pre+num/pre)/2;
}while(fabs(pre-this)>Epsilon);/*
用解的精度,控制循环次数
*/
}
printf(“the
root
is
%f”,this);
}
用牛顿迭代法
求方程
2*x*x*x-4*x*x+3*x-6
的根
/*
牛顿迭代法
*/
#define
Epsilon
1.0E-6
/*
控制解的精度
*/
#include
main()
{
float
x1,x0=1.5;
x1=x0-(2*x0*x0*x0
-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
while(fabs(x1-x0>=Epsilon)
{
x0=x1;
x1=x0-(2*x0*x0*x0-4*x
0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
}
printf(“
方程的根为
%f
< br>n”,x1);
}
用二分法求上题
/*
二分法
*/
#define
Epsilon
1.0E-5
/*
控制解的精度
*/
#include
main()
{
folat
x1,x2,x0,f1,f2,f0;
x0=(x1+x2)/2;
f0=2*x0*x0*x0-
4*x0*x0+3*x0-6;
/*
求中点的函数值
*/
while(fabs(f0)>=Epsilon)
{
if(f0*f1<0)
{
x2=x0;
f2=2*x2*x2*x2-4*x2*x2+3*x2-6;
}
if(f0*f2<0)
{
x1=x0;
f1=2*x1*x1*x1-4*x1*x1+3*x1-6;
}
x0=(x1+x2)/2;
f0=2*x0*x0*x0-4*x0*x0+3*x0-6;
}
printf(“
用二分法求得方
程的根:
%f
n”,x0);
}
题目:打印出如下图案(菱形)
*
***
******
********
******
***
*
___________
__________________________________________________
______
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规
律,利
用双重
for
循环,第一层控制行,第二层控制列。
______
__________________________________________________
___________
程序源代码:
main()
{
int
i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
printf(”
“);
for(k=0;k<=2*i;k++)
printf(“*”);
prin
tf(“
n”);
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf(”
“);
for(k=0;k<=4-2*i;k++)
printf(“*”);
prin
tf(“
n”);
}
}
题目:一个
< br>5
位数,判断它是不是回文数。即
12321
是回文数,个位与万位相同,
十位与千位相同。
________
__________________________________________________
_________
程序分析:同
29
例
_________________________
__________________________________________
程序源代码:
main(
)
{
long
ge,shi,qian,wan,x;
scanf(“%ld”,&x);
wan=x/10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
if
(ge==wan&&shi==qian)/*
个位等于万位并且十位等于千位
*/
printf(“this
number
is
a
huiwen
n”);
else
printf(“this
number
is
not
a
< br>huiwen
n”);
}
题目:请输入星期几的第一个字母来判断一下是星期几,如
果第一个字母一样,
则继续判断第二个字母。
_____
__________________________________________________
____________
程序分析:用情况语句比较好,如果第一个字母一样,则判
断用情况语句或
if
语
句判断第二个字母。
_____________________________________________
______________________
程序源代码:
#include
void
main()
{
char
letter;
printf(“please
input
the
first
letter
of
someday
n”);
while
((letter=
getch())!=’Y')
/*
当所按字母为
Y
时
才结束
*/
{
switch
(letter)
{case
‘S’:printf(“please
input
second
letter
n”);
if((letter=getch())==’a')
p>
printf(“saturday
n”)
;
else
if
((letter=getch())==’u')
printf(“sunday
n”);
else
printf(“data <
/p>
error
n”);
break;
case
‘F
’:printf(“frid
ay
n”);break;
p>
case
‘M’:printf(“m
onday
n”);break;
case
‘T’:printf(“please
input
second
lett
er
n”);
if((letter=getch())==’u')
p>
printf(“tuesday
n”);
else
if
((letter=getch())==’h')
printf(“thursday
n”);<
/p>
else
printf(“data
error
n”);
< br>
break;
case
‘
W’:printf(“wedn
esday
n”);brea
k;
default:
printf(“data
error
n”);
}
}
}
题目:
Press
any
key
to
change
color,
do
you
want
to
try
it.
Please
hurry
up!
________________________
___________________________________________
程序源代码:
#include
void
main(void)
{
int
color;
for
(color
=
0;
color
<
8;
color++)
{
textbackground(color);
/*
设置文本的背景颜色
*/
cprintf(“This
is
color
%d
r
n”,
color);
cprintf(“ress
any
key
to
continue
p>
r
n”);
getch();
/*
输入字符看不见
*/
}
}
题目:学习
< br>gotoxy()
与
clrscr()
< br>函数
______________________
_____________________________________________
程序源代码:
#include
void
main(void)
{
clrscr();
/*
清屏函数
*/
textbackground(2);
gotoxy(1,
5);
/*
定位函数
*/
cprintf(“Output
at
row
5
column
1
n”);
textbackground(3);
gotoxy(20,
10);
cprintf(“Output
at
row
10
column
20
n”);
}
题目:练习函数调用
____________________________________________ _______________________
程序源代码:
#include
void
hello_world(void)
{
printf(“Hello,
world!
n”);
}
void
three_hellos(void)
{
int
counter;
for
(counter
=
1;
counter
<=
3;
counter++)
hel
lo_world();/*
调用此函数
*/
}
void
main(void)
{
three_hellos();/*
调用此函数
*/
}
题目:文本颜色设置
_______
__________________________________________________
__________
-
-
-
-
-
-
-
-
-
上一篇:旅游经济活动——英文翻译
下一篇:2018中考英语真题单项选择动词辨析62题含答案