c语言习题及答案 爱课程mooc

温柔似野鬼°
661次浏览
2020年12月13日 03:45
最佳经验
本文由作者推荐

简单个人简历表格下载-四六级明天查分

2020年12月13日发(作者:詹剑峰)


第一章
1.1
题目内容:

使用printf()在屏幕上输出 hello world!
提示:

#include
int main()
{


}

printf(
return 0;
输入格式:



输出格式:

输出提示信息:

输入样例:



输出样例:

hello world!

#include
int main()
{
printf(
return 0;
}
1.2
在屏幕上输出多行信息(3分)
题目内容:
使用printf()函数在屏幕上输出以下多行信息:
hello world!
hello hit!


hello everyone!
提示:
在printf()函数中转义字符„n‟表示换行。

输入格式:


输出格式:
输出提示信息:



输入样例:


输出样例:
hello world!
hello hit!
hello everyone!

#include
int main()
{
printf(
printf(
printf(
return 0;
}
1.3
计算半圆弧的周长及半圆面积(3分)
题目内容:
编程并输出半径r=5.3的半圆弧的周长及该半圆的面积,

输入格式:


输出格式:
半圆的面积输出格式:
半圆弧的周长输出格式:
输入样例:


输出样例:
Area=44.123632
的取值为3.14159。要求半径r和必须利用宏常量表示。


circumference=16.650427

#include
#define PI 3.14159
#define R 5.3
int main()
{
printf(
printf(
return 0;
}
1.4
计算长方体体积(3分)
题目内容:
编程并输出长1.2、宽4 .3、高6.4的长方体的体积。要求长方体的长、宽、高必须利用const常量表示。

输入格式:


输出格式:
长方体的体积输出格式:

输入样例:


输出样例:

#include
int main()
{
const float l=1.2;
const float x=4.3;
const float y=6.4;
printf(
return 0;
}
第三章


3.1
计算两个数的平方和(3分)
题目内容:
从键盘读入两个实数,编程计算并输出它们的平方和,要求使用数学函数pow( x,y)计算平方值,输出结果保留2位小数。
提示:使用数学函数需要在程序中加入编译预处理命令 #include

以下为程序的输出示例:
please input x and y:
1.2,3.4↙
result=13.00

输入格式:


输出格式:
输入提示信息:
输出格式:

输入样例:


输出样例:

#include
#include
int main()
{
printf(
float x, y;
scanf(
printf(
return 0;
}
3.2
逆序数的拆分计算(3分)
题目内容:
从键盘输入一个4位数的整数,编程计算并 输出它的逆序数(忽略整数前的正负号)。例如,输入-1234,忽略负号,由1234分离出
其千位 1、百位2、十位3、个位4,然后计算4*1000+3*100+2*10+1 = 4321,并输出43 21。再将得到的逆序数4321拆分为两个2
位数的正整数43和21,计算并输出拆分后的两个数的 平方和的结果。

以下是程序的输出示例:


Input x:
-1234↙
y=4321
a=43,b=21
result=2290

输入格式:


输出格式:
输入提示信息:
逆序数输出格式:
逆序数拆分后的输出格式:
平方和的输出格 式:

输入样例:


输出样例:

#include
int main()
{
printf(
int x;
scanf(
if(x<=0)
{
x=-x;
}
int a, b, c, d;
a=x1000;
b=x100%10;
c=x10%10;
d=x%10;
printf(
printf(
printf(
return 0;
}
3.3
拆分英文名(3分)
题目内容:


从键盘输入某同学的英文名(小写输入,假设学生的英文名只包含3个字母。如: tom),编写程序在屏幕上输出该同学的英文名,且
首字母大写(如: Tom)。同时输出组成该英文名的所有英文字符在26个英文字母中的序号。
以下为程序的输出示例:
input your English name:
tom↙
Tom
t:20
o:15
m:13

输入格式:


输出格式:
输入提示信息:
首字母大写的 英文姓名的输出格式:
姓名中每个字母在26个英文字母中的序号的输出格式:

输入样例:


输出样例:

#include
int main()
{
printf(
char a, b, c;
scanf(
printf(
printf(
printf(
printf(
return 0;
}
3.4
计算体指数(3分)
题目内容:
从键盘输入某人的身高(以厘米为单位,如174 cm)和体重(以公斤为单位,如70公斤),将身高(以米为单位,如1.74m)和体
重(以斤为单 位,如140斤)输出在屏幕上,并按照以下公式计算并输出体指数,要求结果保留到小数点后2位。
假设体重为w公斤,身高为h米,则体指数的计算公式为:

以下是程序的输出示例:


input weight, height:
70,174↙
weight=140
height=1.74
t=23.12


输入格式:


输出格式:
输入提示信息: (注意:在height和逗号之间有一个空格)
体重输出格式:
身高输出格式:
体指数输出格式:

输入样例:


输出样例:

#include
int main()
{
int x, y;
printf(
scanf(
printf(
printf(
printf(
return 0;
}
第四章
4.1
数位拆分v2.0(4分)
题目内容:
从键盘 上输入一个4位数的整数n,编写程序将其拆分为两个2位数的整数a和b,计算并输出拆分后的两个数的加、减 、乘、除和
求余运算的结果。例如n=-4321,设拆分后的两个整数为a,b,则a=-43,b= -21。除法运算结果要求精确到小数点后2位。求余和除法运
算需要考虑除数为0的情况,即如果拆分 后b=0,则输出提示信息



程序的运行结果示例1:
please input n:
1200↙
12,0
sum=12,sub=12,multi=0
the second operater is zero!

程序的运行结果示例2:
please input n:
-2304↙
-23,-4
sum=-27,sub=-19,multi=92
dev=5.75,mod=-3

输入格式:


输出格式:
输入提示信息:
拆分后的两个整数的输出格式:
加法、减法、乘 法的输出格式:
除法和求余的输出格式:
除数为0的提示信息:

输入样例:


输出样例:

#include
main()
{
int m,x,y;
printf(
scanf(
x=m100;
y=m%100;

printf(
printf(
if (y!=0){
printf(

}
else{
printf(


}
}
4.2
快递费用计算(4分)
题目内容:
上海市的某快递公司根据投送目的地距离公司的远近,将全国划分成5个区域:


0区

同城

2区

1500公里(含)以
临近两省



北京,天津,河北,
辽宁,河南,安微,
江苏,浙
陕西,湖北,江西,


湖南,福建,广东,
山西。

1区

3区

4区

1500——2500公里

2500公里以上

吉林,辽宁,甘肃,
四川,重庆,青海,
广西,云南,海南,新疆,西藏。

内蒙古,黑龙江,贵
州。

上海



快递费按邮件重量计算,由起重费用、续重费用两部分构成:
(1) 起重(首重)1公斤按 起重资费计算(不足1公斤,按1公斤计算),超过首重的重量,按公斤(不足1公斤,按1公斤
计算) 收取续重费;
(2)
(3)
(4)
同城起重资费10元,续重3元公斤;
寄往1区(江浙两省)的邮件,起重资费10元,续重4元;
寄往其他地区的邮件,起重资费 统一为15元。而续重部分,不同区域价格不同:2区的续重5元公斤,3区的续重6.5元
公斤,4区 的续重10元公斤。

编写程序,从键盘输入邮件的目的区域编码和重量,计算并输出运费,计算结果保留2位小数。
提示:续重部分不足一公斤,按1公斤计算。因此,如包裹重量2.3公斤:1公斤算起重,剩余的1.3公斤 算续重,不足1公斤按1
公斤计算,1.3公斤折合续重为2公斤。如果重量应大于0、区域编号不能超 出0-4的范围。

程序运行结果示例1:
4,4.5↙
Price: 55.00


程序运行结果示例2:
5,3.2↙
Error in Area
Price: 0.00

输入格式:
用逗号分隔的两个数字,第一个表示区域、第二个是重量:

输出格式:
价格的输出格式:


区域错误的提示信息:

输入样例:


输出样例:

#include
#include
int main()
{
int area;
float weight,price,x1,x2;
scanf(
if (weight<=1){
x1=1.0;
}
else{
x1=1.0;
x2=ceil(weight-1);

}
if (area>0&&area<=4){
switch(area){
case(0):price=x1*10+x2*3;break;
case(1):price=x1*10+x2*4;break;
case(2):price=x1*15+x2*5;break;
case(3):price=x1*15+x2*6.5;break;
case(4):price=x1*15+x2*10;break;
}
printf(
}
else {
printf(
printf( 0.00n
}
return 0;
}
4.3
数据区间判断(5分)
题目内容: < br>从键盘输入一个int型的正整数n(已知:0程序输出 。例如,输入265,则该数属于区间 100-999。

程序运行结果示例1:


Please enter the number:
2563↙
2563: 1000-9999

程序运行结果示例2:
Please enter the number:
156↙
156: 100-999

程序运行结果示例3:
Please enter the number:
36↙
36: 10-99

程序运行结果示例4:
Please enter the number:
3↙
3: 0-9

程序运行结果示例5:
Please enter the number:
10923↙
error!

输入格式:


输出格式:
输入提示信息:
输出的区间判断:




输入错误提示信息:

输入样例:


输出样例:

#include
#include
int main()
{
int x;
printf(


scanf(
if (x>=1000&&x<=9999) printf(
else if (x>=0&&x<=9) printf(
else if (x>=10&&x<=99) printf(
else if (x>=100&&x<=999) printf(
else printf(
return 0;
}
4.4
计算一元二次方程的根v2.0(3分)
题目内容:
根据下面给 出的求根公式,计算并输出一元二次方程的两个实根,要求精确到小数点后4位。其中a,b,c
的值由 用户从键盘输入。如果用户输入的系数不满足求实根的要求,输出错误提示 。



程序运行结果示例1:
Please enter the coefficients a,b,c:
1,2,1↙
x1=-1.0000, x2=-1.0000

程序运行结果示例2:
Please enter the coefficients a,b,c:
2,6,1↙
x1=-0.1771, x2=-2.8229

程序运行结果示例3:
Please enter the coefficients a,b,c:
2,1,6↙
error!

输入格式:


输出格式:
输入提示信息:
输出格式:
输入错误提示信息:

输入样例:



输出样例:

#include
#include
int main()
{
float a,b,c,x1,x2,m;
printf(
scanf(
m=b*b-4*a*c;
if (m<0){
printf(
}
else{
x1=(-b+sqrt(m))(2*a);
x2=(-b-sqrt(m))(2*a);
printf(
}
return 0;
}
第五章
5.1
6位密码输入检测(3分)
题目内容:
从键盘输入6位仅由数字0~9组成的密码 。用户每输入一个密码并按回车键后,程序给出判断:如果是数字,则原样输出该数字,并
提示用户目前 已经输入了几位密码,同时继续输入下一位密码;否则,程序提示,并让用户继续输入下一位密码。直到用户输< br>入的密码全部是数字为止。
以下为程序的运行结果示例:
Input your password:
1↙
1, you have enter 1-bits number
6↙
6, you have enter 2-bits number
a↙
error
d↙
error
4↙
4, you have enter 3-bits number


6↙
6, you have enter 4-bits number
8↙
8, you have enter 5-bits number
2↙
2, you have enter 6-bits number

输入格式:
数字字符输入格式:

输出格式:
输入提示信息:
如果输入的是数 字,输出格式为:
如果输入的不是数字,输出提示信息:

输入样例:


输出样例:

#include
int main()
{
char a;
int i=0;
printf(
while(i<6)
{
scanf(
if (a>=48&&a<=57)
{
printf(
}
else
printf(
getchar();
}
return 0;
}
5.2
判断一个整型数据有几位v1.0(4分)
题目内容:
从键盘输入一个整型数据( int型),编写程序判断该整数共有几位。例如,从键盘输入整数16644,该整数共有5位。


程序运行结果示例1:
Please enter the number:
21125↙
21125: 5 bits


程序运行结果示例2:
Please enter the number:
-12234↙
-12234: 5 bits

输入格式:


输出格式:
输入提示信息:
判断该整数共有几位:

输入样例:


输出样例:

#include
int main(){
int x,y,n;
printf(
scanf(
n=x;
for(y=1;x=10;y++);
printf(
return 0;
}
5.3
检测输入数据中奇数和偶数的个数(4分)
题目内容:
从键盘输入一系列正整数,输入-1表示输入结束(-1本身不是输入的数据)。编写程序判断输入数据 中奇数和偶数的个数。如果用户
输入的第一个数据就是-1,则程序输出。否则。用户每输入一个数据, 输出该数据是奇数还是偶数,直到用户输入-1为止,分
别统计用户输入数据中奇数和偶数的个数。

程序运行结果示例1:
Please enter the number:
1↙
1:odd


5↙
5:odd
8↙
8:even
9↙
9:odd
12↙
12:even
17↙
17:odd
-1↙
The total number of odd is 4
The total number of even is 2


程序运行结果示例2:
Please enter the number:
-1↙
over!
The total number of odd is 0
The total number of even is 0

输入格式:


输出格式:
输入提示信息:
用户输入的第一个数据就是-1,输 出格式:
奇数的输出格式:
偶数的输出格式:
输入数据中奇数的个数统计:
输 入数据中偶数的个数统计:

输入样例:


输出样例:

#include
int main(){
int s,odd=0,even=0;
printf(
do{
scanf(
if (s==-1&&odd==0&&even==0) printf(
else if( s%2!=0 &&s!=-1) {printf(
else if (s%2==0){printf(


else even+=0;
}while (s!=-1);
printf(
printf(

return 0;
}
5.4
计算球的反弹高度(4分)
题目内容:
一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下并反弹 ......,求它在第5次和第10次落地时,分别共经过了
多少米?第5次和第10次反弹分别是多 高?要求计算结果保留到小数点后3位。用户从键盘输入想要计算的第n次(n<=15)。

程序运行结果示例1:

input:
5↙
5 times:
287.500
3.125

程序运行结果示例2:
input:
10↙
10 times:
299.609
0.098

输入格式:


输出格式:
反弹次数:
第n次反弹共经过多少米:
第n次的反弹高度:
输入提示信息:

输入样例:


输出样例:

#include
int main(){


int time,i;
float each=0,sum=0,h=100;
printf(
scanf(
for (i=0;i sum+=h;
h=2;
each=h;
sum+=each;
}
printf(
printf(
printf(

return 0;
}
第六章
6.1
程序改错v2.0(5分) < br>下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理 区间内的数据(例如输入
的是a,或者102,或-45等),则程序输出 Input error! ,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。
目前程序存在错误,请将其 修改正确。并按照下面给出的运行示例检查程序。
1. #include
2. int main()
3. {
4. int score;
5. char grade;
6. printf(
7. scanf(
8. if (score < 0 || score > 100)
9. printf(
10. else if (score >= 90)
11. grade = 'A’;
12. else if (score >= 80)
13. grade = 'B';
14. else if (score >= 70)
15. grade = 'C';
16. else if (score >= 60)
17. grade = 'D';
18. else
19. grade = 'E';


20. printf(
21. return 0;
22. }

程序运行结果示例1:
Please input score:
a↙
Input error!
Please input score:
-12↙
Input error!
Please input score:
230↙
Input error!
Please input score:
92↙
grade: A

程序运行结果示例2:
Please input score:
88↙
grade: B

程序运行结果示例3:

Please input score:
73↙
grade: C

程序运行结果示例4:

Please input score:
65↙
grade: D

程序运行结果示例5:

Please input score:
27↙
grade: E

输入格式:


输出格式:
输入提示信息:


输入错误提示信息:
输出格式:注意:%c前面有一个空格)

输入样例:


输出样例:

#include
int main()
{
int score,m=0;
char grade;
printf(
do{
m=scanf(
getchar();
if (m!=1 ||score < 0 || score > 100)
{ printf(
}while (m==0);
if (score >= 90)
grade = 'A';
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'E';
printf(
return 0;
}
6.2
编程计算 a+aa+aaa+…+aa…a(n个a)的值(4分)
题目内容:
编程计算 a+aa +aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。例如,当n=4,a=2,表示计算2+22 +222+2222的值。

程序运行结果示例:
Input a,n:
2,4↙
sum=2468


输入格式:


(先输入a,后输入n)


输出格式:
输入提示信息:
输出格式:


输入样例:



输出样例:

#include
int main(){
int a,n,sum=0,tem=1;
printf(
scanf(
int i;
for (i=1;i<=n;i++)
{
sum+=(a*tem);
tem=tem*10+1;
}
printf(
return 0;
}
6.3
搬砖问题(4分)
题目内容:
36块砖,36人搬,男搬4,女搬3,两个小孩抬 一块砖,要求一次搬完,问男人、女人和小孩各需多少人?请用穷举法编程求解。

程序的运行结果示例:
men=3,women=3,children=30

输入格式:


输出格式:



输入样例:




输出样例:

#include
int main(){
int woman,man,kid;
for (woman=0;woman<=12;woman++)
{
for (man=0;man<=9;man++)
{
kid=36-man-woman;
if (4*man+3*woman+0.5*kid==36)
printf(
}
}
return 0;
}
6.4
编程输出某年某月有多少天(考虑闰年)。(5分)
题目内容:
从键盘输入一个年份和月份,输出该月有多少天(考虑闰年),用switch语句编程。




程序运行结果示例1:
Input year,month:
2015,3↙
31 days


程序运行结果示例2:
Input year,month:
2015,4↙
30 days


程序运行结果示例3:
Input year,month:
2016,2↙
29 days


程序运行结果示例4:


Input year,month:
2014,2↙
28 days

程序运行结果示例5:
Input year,month:
2015,13↙
Input error!

输入格式:



输出格式:
输入提示信息:
输入错误提示信息:
输出格式:





输入样例


输出样例

#include
int isleap(int n);
int main(){
int year,month;
printf(
scanf(
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: printf(
case 4:
case 6:
case 9:
case 11:printf(
case 2:if (isleap(year))
{
printf(


}
else{ printf(
}
default : printf(

}
return 0;

}
int isleap(int n)
{
if (n%100!=0&&n%4==0||n%400==0)
return 1;
else
return 0;
}
第七章
7.1
递归法计算游戏人员的年龄(4分)
题目内容:
有n个人围坐在 一起,问第n个人多大年纪,他说比第n-1个人大2岁;问第n-1个人,他说比第n-2个人大2岁,... ..,问第3个人,
他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。第1个人说自己10 岁,问第n个人多大年纪。
递归函数原型:unsigned int ComputeAge(unsigned int n);
提示:
递归公式

输入格式:

输出格式:


输入样例1:
5↙
输出样例1:
The_person's_age_is_18
输入样例2:
10↙


输出样例2:
The_person's_age_is_28
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)

#include
unsigned int Age(unsigned int age);
int main(){
unsigned int n=0;
scanf(
printf(
return 0;
}
unsigned int Age(unsigned int n)
{
if (n==1)
return 10;
else
return Age(n-1)+2;
}
7.2
魔术师猜数(4分)
题目内容:
在一种室内互动游戏中,魔术师要每位观众心里想一个三位数abc(a、b、c分别是百位、十位和个 位数字),然后魔术师让观众心
中记下acb、bac、bca、cab、cba五个数以及这5个数的 和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数
abc是多少。例如,观众甲 说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术
师说:“你算错了!”。请编程模拟这个数字魔术游戏。要求用函数实现,函数原型:int Magic(int m);其中形参m代表观众计算的和
值。
输入格式:

输出格式:
观众计算错误,魔术师给出的结论:
观众计算正确,魔术师给出的结论:
输入样例1:
1998↙
输出样例1:
The_sum_you_calculated_is_wrong!
输入样例2:
1999↙
输出样例2:
The_number_is_443
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)


#include
int Magic(int m);
int main(){
int m;
scanf(
if( Magic(m))
printf(
else
printf(
return 0;
}

int Magic(int n)
{
int m;
int a,b,c;
for (m=100;m<1000;m++){
a=m100;
c=m%10;
b=(m-a*100)10;
if ((a*122+b*212+c*221)==n)
return m;
}
return 0;
}
7.3

寻找中位数v1.0(4分)
题目内容:
编写一个函数返回三个整数中的中间数。函数原型:int mid(int a, int b, int c); 功能是返回a,b,c三数中大小位于中间的一个数。
输入格式:


输出格式:


输入样例1:
12 6 18↙
输出样例1:
The_result_is_12
输入样例2:
-9 7 -2↙
输出样例2:
The_result_is_-2
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(注意:在输出中,“_”代表空格,如果直接将上段示例粘贴到代码中,应将其替换为空格。)


#include
int mid(int a, int b, int c);
int main(){
int a,b,c;
scanf(
printf(
return 0;
}

int mid(int a, int b, int c)
{
int j,i,t;
int m[3]={a,b,c};
for (i=0;i<2;i++)
for (j=i;j<=2;j++)
if (m[j]>m[i])
{t=m[j];
m[j]=m[i];
m[i]=t;
}
return m[1];
}
7.4
还原算术表达式(4分)
题目内容:
编写程序求以下算式中XYZ的值。


输入格式:
输出格式:
输入样例:
输出样例:
X=3,Y=2,Z=1
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
int mid(int a, int b, int c);
int main(){
int x,y,z;
for (x=0;x<9;x++)


for (y=0;y<9;y++)
for (z=0;z<9;z++)
if ((x*100+y*110+z*12)==532)
printf(
return 0;
}
第八章
8.1
计算礼炮声响次数(4分)
题目内容: < br>在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放1次,B舰 每隔6秒
放1次,C舰每隔7秒放1次。假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听 到几次礼炮声。

输入格式:无
输出格式:
n=%d

输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
int main()
{
int t,n=0;
for (t=0;t<=140;t++)
{
if (t%5==0 && t<=21*5)
{
n++;
continue;
}
if (t%6==0 && t<=21*6)
{
n++;
continue;
}
if (t%7==0 && t<=21*7)
{
n++;
continue;
}


}
printf(

return 0;
}
8.2
兔子生崽问题(4分)
题目内容:
假设一对小兔的 成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的
小兔从 第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子(即当年12月份总计有多
少对兔子,含成兔和小兔)?请编程求解该问题。

参考答案:依题意,兔子的繁殖情况如图 所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图
可发现如下规 律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。
综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。

用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:

输入格式:无
输出格式:
每个月兔子对数的输出格式:
第12个月的兔子总数的输出格式:
输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
int creat(int n);
int main()
{
int each,total,i;
for (i=1;i<=12;i++)
printf(
printf(
return 0;


}
int creat(int n)
{
if (n==1 || n==2)
return 1;
else
return creat(n-1)+creat(n-2);
}
8.3
抓交通肇事犯(4分)
题目内容:
一辆卡车违犯交通规则,撞人后逃跑。现场有三 人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌
照的前两位数字是相同的;乙说:牌照 的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车
号刚好是一个整数的平方。现 在请根据以上线索帮助警方找出车号以便尽快破案。

[提示]:假设这个4位数的前两位数字都是i,后两位数字都是j,则这个可能的4位数

k = 1000*i + 100*i + 10*j + j

式中,i和j都在 0~9变化。此外,还应使k=m*m,m是整数。由于k是一个4位数,所以m值不可能小于31。

输入格式:无

输出格式:
k=%d,m=%dn

输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
int main()
{
int a,b,c,d,i,j;
for (i=31;i<100;i++)
{
j=i*i;
a=j1000;
d=j%10;
b=j%1000100;
c=j%10010;
if (a==b&&c==d&&a!=c)
printf(
}
return 0;
}
8.4
检验并打印幻方矩阵。(4分)


题目内容:
幻方矩阵是指该矩阵中 每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型< br>数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。
输入格式:
输出格式:
如果是幻方矩阵,输出提示信息:
矩阵元素的输出: (换行使用)
如果不是幻方矩阵,输出提示信息:
输入样例1:
17_24_1_8_15
23_5_7_14_16
4_6_13_20_22
10_12_19_21_3
11_18_25_2_9
(输人样例中“_”代表空格)
输出样例1:
It is a magic square!
**17**24***1**8**15
**23***5***7**14**16
***4***6**13**20**22
**10**12**19**21***3
**11**18**25***2***9
(输出样例中“*”代表空格)
输入样例2:
1_0_1_6_1
3_1_1_1_1
1_1_1_1_2
1_1_1_1_1
9_1_7_1_1
(输人样例中“_”代表空格)
输出样例2:
It is not a magic square!
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(输人样例中“_”代表空格,输出样例中“*”代表空格)

#include
int judge ();
int i,j;
int m[5][5]={0};
int main()
{
for(i=0;i<5;i++)
for (j=0;j<5;j++)
scanf(
if (judge()){
printf(
for(i=0;i<5;i++)


{
for (j=0;j<5;j++)
printf(
printf(
}
}
else
printf(

return 0;
}

int judge ()
{
int l=0,r=0;
int s[5]={0},t[5]={0};
for (i=0;i<5;i++)
for (j=0;j<5;j++)
{
s[i]+=m[i][j];
t[j]+=m[i][j];
if (i==j) l+=m[i][j];
if (i+j==4) r+=m[i][j];
}
if (l!=r) return 0;
for (i=0;i<5;i++) if (s[i]!=l||t[i]!=l) return 0;
return 1;
}
第九章
9.1
ISBN识别码判断(4分)
题目内容:
每一本正式出版的图书都有一个ISBN 号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx- x”,
其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162 -4就是一个标准的ISBN码。ISBN码的首位数字表
示书籍的出版语言,例如0代表英语;第一个 分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五
位数字代表 该书在该出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余 数为10,则识别码为
大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样 得到的:对067082162这9个数字,从左至右,分别乘以1,2,...,9,
再求和,即0× 1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。


你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅 输出“Right”;如果错误,则输出你认为是正确的ISBN
号码。
程序运行结果示例1:
0-123-41562-4↙
Right
程序运行结果示例2:
0-123-41562-7↙
0-123-41562-4
输入格式: 用gets()输入字符串
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN的格式要求)。
输出格式:
输入的ISBN号码的识别码正确,输出信息:
输入的ISBN号码 的识别码错误,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”),输出格式:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
输入样例:
输入样例:

#include
#include
int i=0,j=0;
int main()
{
char s[14],d[14];
int m[9]={0};
int n=0,l=0;
gets(s);
n=s[12]-48;
for (i=0;s[i]!='0';i++)
{
if (s[i]!='-')
{
m[j]=s[i];
j++;
}
}
for (j=1;j<=9;j++)
{
printf(
l+=(m[j-1]-48)*j;
}
l=l%11;

if (l==n)
printf(
else
{
strncpy(d,s,12);
d[12]=l+48;


d[13]='0';
printf(
}
return 0;
}
9.2
摘苹果(4分)
题目内容:
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板
凳,当她不能直接用手摘 到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
程序运行结果示例1:
100 110 130 200 140 150 156 187 197 149↙
110↙
4
程序运行结果示例2:
90 210 102 153 147 110 130 182 88 113↙
100↙
6
输入格式:
输入包括两行数据:
第1行包含10个100到200之间 的整数(包括100和200,以厘米为单位),分别表示10个苹果到地面的高度。两个相邻的整
数之 间用一个空格隔开。
第2行只包括一个100到120之间的整数(包含100和120,以 厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出格式:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
输入样例:
输出样例:
#include
int main(){
int m[10]={0};
int i,j=0,n;
for (i=0;i<10;i++)
scanf(
scanf(
for (i=0;i<10;i++)
if(m[i]<=n+30)
j++;
printf(
return 0;
}
9.3


求最大素数(4分)
题目内容:
求500以内的10个最大素数及其和,并分别输出这10个最大素数及其和。
要求10个素数按从大到小的顺序输出。
输入格式: 无
输出格式:
10个最大素数的输出格式:
总和的输出格式:
输入样例:
输出样例:

#include
#include
int judge(int n);
int main(){
int m[500];
int j,l=0,sum=0;
for (j=500;j>0;j--)
{
if (judge(j))
m[l++]=j;
}
for (j=0;j<10;j++)
{
sum+=m[j];
printf(
}
printf(
return 0;
}
int judge(int n)
{
int i;
for (i=2;i<=sqrt((double)n);i++)
{
if (n%i==0)
return 0;
}
return 1;
}
9.4
字符串逆序(4分)
题目内容:
用字符数组作函数参数编程,利用一个数组实现字符串(允许输入带空格的字符串 )的逆序存放。要求如下:
(1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符。


调用Inverse()函数将字符串逆序存放,然后在主函数中输出逆序后的字符串。
(2)在子函数Inverse()中实现字符串的逆序存放。函数原型为:
void Inverse(char str[]);
程序运行结果示例1:
Input a string:
abcde↙
Inversed results:
edcba
程序运行结果示例2:
Input a string:
hello↙
Inversed results:
olleh
输入格式: 用gets()输入字符串
输出格式:
输入提示信息:
输出提示信息:n
用puts()输出字符串
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
输入样例:
输出样例:

#include
#include
#define maxn 80
void Inverse(char str[]);
int main(){
char str[maxn];
printf(
gets(str);
printf(
Inverse(str);
puts(str);
return 0;
}
void Inverse(char str[])
{
char ch;
int len = strlen(str),i;
for(i = 0; i < len 2; i++)
{
ch = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = ch;
}
}


第十章
10.1
水手分椰子(4分)
题目内容: 五个水手在岛上发现一堆椰子,先由第1个水手把椰子分为等量的5堆,还剩下1个给了猴子,自己藏起1堆 。然后,第2个水手把
剩下的4堆混合后重新分为等量的5堆,还剩下1个给了猴子,自己藏起1堆。以 后第3、4个水手依次按此方法处理。最后,第5
个水手把剩下的椰子分为等量的5堆后,同样剩下1个 给了猴子。请用迭代法编程计算并输出原来这堆椰子至少有多少个。

输入格式: 无
输出格式:
输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
check(int n){
int i;
for(i=0; i<5; i++)
{
if(n%5!=1)
return 0;
n=n5*4;
}
return 1;
}
int main()
{
int i;
for(i=6; i<10000; i++)
{
if(check(i))
{
printf(
break;
}
}
return 0;
}


10.2
找最值(4分)
题目内容:
从键 盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原 型如下所示:
int FindMax(int num[], int n, int *pMaxPos);函数返回最大值,pMaxPos返回最大值所在的下标
int FindMin(int num[], int n, int *pMinPos);函数返回最小值,pMaxPos返回最小值所在的下标
程序运行结果示例:
Input 10 numbers:
-1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0

输入格式:
输出格式:
提示信息:
输出结果:
输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
时间限制:500ms内存限制:32000kb

#include
int FindMax(int num[], int n, int *pMaxPos);
int FindMin(int num[], int n, int *pMinPos);
int num[10];
int i,maxdex=0,mindex=0;

int main(){
int max,min;
int m,n;
printf(
for (i=0;i<10;i++)
scanf(
max=FindMax(num,10,&m);
min =FindMin(num,10,&n);
printf(
return 0;
}
int FindMax(int num[], int n, int *pMaxPos)
{
*pMaxPos=num[0];
for (i=1;i if (num[i]>*pMaxPos)
{*pMaxPos=num[i];
maxdex=i;
}


return maxdex;
}
int FindMin(int num[], int n, int *pMinPos)
{
*pMinPos=num[0];
for (i=1;i if (num[i]<*pMinPos)
{*pMinPos=num[i];
mindex=i;
}
return mindex;
}
10.3
星期查找(4分)
题目内容:
任意输入英文的星 期几,通过查找如图所示的星期表,输出其对应的数字,若查到表尾,仍未找到,则输出错误提示信息。

提示:用一个二维字符数组weekDay来存放如图所示的星期表的内容(字符串)。输入待查找的字 符串,然后在星期表中顺序查找与
输入字符串相匹配的字符串。找到的字符串在星期表数组中的第一维下 标(行号)即为题目所求。
程序运行结果示例1:
Please enter a string:
Friday↙
Friday is 5
程序运行结果示例2:
Please enter a string:
Fruday↙
Not found!
输入格式: 字符串输入采用gets()函数
输出格式:
输入提示信息::n
找到了,输出:
没找到,输出:
输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
#include
#define max 50



int main()
{
char week[7][10] ={
int i,flag=0;
char find[max];
printf(
gets(find);
for (i=0; i<7; i++)
if (strcmp(week[i],find)==0)
{
flag=1;
break;
}
if(flag==0)
printf(
else
printf(
return 0;
}
10.4
杨辉三角形(4分)
题目内容:
编程打印具有如下形式的杨辉三角形,其中输出数据的行数n从键盘输入,并且n<=10。
程序运行结果示例1:
Input n (n<=10):
5↙
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

程序运行结果示例2:
Input n (n<=10):
7↙
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1


输入格式:
输出格式:
输入提示信息:
输出数据格式:
数据换行:

输入样例:
输出样例:
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!

#include
int main()
{
int n;
int i,j,a[10][10];
printf(
scanf(
for(i=0; i for(j=0; j {
a[i][0]=1;
a[i][i]=1;
}
for(i=2; i for(j=1; j<=i-1; j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0; i {
for(j=0; j<=i; j++)
printf(
printf(
}
}
第十一章
11.1
找数组最值(4分)
题目内容:
按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的 最大值及其所在的行列下标值。其中,m和n的值
由用户键盘输入。已知m和n的值都不超过10。
void InputArray(int *p, int m, int n);


int FindMax(int *p, int m, int n, int *pRow, int *pCol);函数返回最大值,pRow和pCol分别返回最大值所在的行列下标
例如,程序的1次运行结果如下:
Input n:
3,4↙
Input 3*4 array:
1 2 3 4↙
5 6 7 8↙
9 0 -1 -2↙
max=9,row=2,col=0
输入格式:
提示信息:
输入数组维数:
提示信息:
输入数组元素:
输出格式:

输入样例:
输出样例:

#include
void InputArray(int (*p)[10], int m, int n);
int FindMax(int (*p)[10], int m, int n, int *pRow, int *pCol);
int i,j;
int num[10][10];
int main()
{
int m,n;
int max=0;
int row,col;
int *pRow=&row;
int *pCol=&col;
printf(
scanf(
printf(
InputArray(num,m,n);
max=FindMax(num,m,n,pRow,pCol);
printf(
return 0;
}
int FindMax(int (*p)[10], int m, int n, int *pRow, int *pCol)
{
int tem=p[0][0];
for(i=0;i for(j=0;j if (p[i][j]>tem){
tem=p[i][j];
*pRow=i;
*pCol=j;


}
return tem;
}

void InputArray(int (*p)[10], int m, int n)
{
for(i=0;i for(j=0;j scanf(
}
11.2
冒泡排序(4分)
题目内容:
采用 冒泡法进行升序排序法的基本原理是:对数组中的n个数执行n-1遍检查操作,在每一遍执行时,对数组中剩余 的尚未排好序的
元素进行如下操作:对相邻的两个元素进行比较,若排在后面的数小于排在前面的数,则 交换其位置,这样每一遍操作中都将参与比
较的数中的最大的数沉到数组的底部,经过n-1遍操作后就 将全部n个数按从小到大的顺序排好序了。程序的某次运行结果如下:
Input n:10↙
Input 10 numbers:2 9 3 4 0 6 8 7 5 1↙
Sorting results: 0 1 2 3 4 5 6 7 8 9
输入格式:

输出格式:
输入数据个数提示:
输 入数据提示:
输出提示:
输出格式:
输入样例:
输出样例:

#include
int i,j;
int num[10000];
void Swap(int *m,int *n);
int main()
{
int n;
printf(
scanf(
printf(
for(i=0;i scanf(
for(i=0;i for (j=i;j if (num[j] Swap(&num[j],&num[i]);


printf(
for (i=0;i printf(
return 0;
}
void Swap(int *m,int *n)
{
int tem;
tem=*m;
*m=*n;
*n=tem;
}
11.3
删除字符串中与某字符相同的字符(4分)
题目内容:
在字符串中删除与某字符相同的字符,要求用字符数组作函数参数。
程序运行结果示例:
Input a string:
hello, my friend!↙
Input a character:
!↙
Results:hello, my friend
输入格式:
字符串输入用 gets()函数
单个字符输入用 getchar()函数
输出格式:
输入字符串的提示信息:
输入单个字符的提示信息:
输出格式:
输入样例:
输出样例:

#include
#include
#define maxn 1000
void delete_string(char str[],char ch);
int main()
{
char m[maxn],l[maxn];
char n;
printf(
gets(m);
printf(
n=getchar();
delete_string(m,n);


printf(
return 0;
}
void delete_string(char str[],char ch)
{
int i,j;
for(i=j=0; str[i]!='0'; i++)
if(str[i]!=ch)
str[j++]=str[i];
str[j]='0';
}
11.4
求最大数和最小数的最大公约数(4分)
题目内容:
从键盘输入10个正整数,求出最大数,最小数,以及他们的最大公约数。要求用数组实现。
程序运行结果示例1:
Input 10 numbers:
15 23 56 87 94 105 78 19 22 43↙
maxNum=105
minNum=15
15


程序运行结果示例2:
Input 10 numbers:
33 1 2 9 8 7 5 4 0 10↙
maxNum=33
minNum=0


输入格式:
输出格式:
输入提示信息:Input 10 numbers:n
最大数输出格式:
最小数输出格式:
最大公约数输出格式:
输入样例:
输出样例:

#include
#include
#define maxn 10
void Swap(int *m,int *n);
int gcd(int x,int y);


int i,j=0;
int num[maxn];
int main()
{
int max,min;
printf(
for (i=0; i<10; i++)
scanf(
for(i=0; i<9; i++)
for (j=i; j<10; j++)
if (num[j] Swap(&num[j],&num[i]);
max=num[9];
min=num[0];
printf(
if (max!=0&&min!=0)
printf(
return 0;
}
void Swap(int *m,int *n)
{
int tem;
tem=*m;
*m=*n;
*n=tem;
}
int gcd(int x,int y)
{
int m;
if(x return gcd(y,x);
if(x%y!=0)
return gcd(y,x%y);
else
return y;
}
第十二章
12.1
百万富翁的换钱计划(4分)
题目内容:


有一天,一位百万富翁遇到一个陌生人,陌生人找他谈一个换钱的 计划,陌生人对百万富翁说:“我每天给你10万元,而你第一天只
需给我1分钱,第二天我仍给你10 万元,你给我2分钱,第三天我仍给你10万元,你给我4分钱……。你每天给我的钱是前一天的
两倍, 直到满一个月(30天)为止”,百万富翁很高兴,欣然接受了这个契约。请编程计算在这一个月中陌生人总计给 百万富翁多少
钱,百万富翁总计给陌生人多少钱。
输入格式:

输出格式:
输出百万富翁给陌生人的钱:
输出陌生人给百万富翁的钱:
输入样例:
输出样例:

#include
int main()
{
double each1=100000,each2=0.01,sum1=0,sum2=0;
int i;
for (i=1;i<=30;i++)
{
sum1+=each1;
sum2+=each2;
each2*=2;
}
printf(
printf(
return 0;
}
12.2
用计数控制的循环实现正数累加求和(4分)
题目内容:
输入一些整数,编程计算 并输出其中所有正数的和,输入负数时不累加,继续输入下一个数。输入零时,表示输入数据结束。要求最
后统计出累加的项数。
程序运行结果示例:
Input a number:
1↙
Input a number:
3↙
Input a number:
4↙
Input a number:
2↙
Input a number:
-8↙
Input a number:


-9↙
Input a number:
0↙
sum=10,count=4

输入格式:
输出格式:
输入提示信息:
输出格式:
输入样例:
输出样例:

#include
#define m 100000
int main()
{
int n,sum=0,count=0;
do{
printf(
if(n>0){
sum+=n;
count++;
}
}while(scanf(
printf(
return 0;
}
12.3
平方根表(4分)
题目内容:
按如下格式输出100以内整数的平方根表。


输入格式: 无
输出格式:
输出表头:


输出每行的开头数字:
输出第m行n列中的值:
输入样例:
输出样例:

#include
#include
int i,j;
int main()
{
for(i=0; i<10; i++)
printf(
putchar('n');
for (i=0; i<10; i++)
{
printf(
for (j=0; j<10; j++)
printf(
printf(

}
return 0;
}
12.4
最大公约数(4分)
题目内容:
按照如下函数原型编写子函数 计算正整数a和b的所有公约数。第一次调用,返回最大公约数。以后只要再使用相同参数调用,每次
返 回下一个小一些的公约数。无公约数时,函数CommonFactors()返回-1,主函数中不输出任何信 息。
函数原型: int CommonFactors(int a, int b)
程序运行结果示例1:
Input a and b:
100,50↙
Common factor 1 is 50
Common factor 2 is 25
Common factor 3 is 10
Common factor 4 is 5
Common factor 5 is 2
Common factor 6 is 1


程序运行结果示例2:
Input a and b:
7,-3↙


输入格式:
输出格式:
输出公约数:
输入提示信息:
输入样例:
输出样例:

#include
int MaxCommonFactor(int a,int b);
int CommonFactors(int a, int b);
int main()
{
int a,b;
printf(
scanf(
if (a>0 &&b>0)
CommonFactors(a, b);
return 0;
}
int CommonFactors(int a, int b)
{
int *gcd=(int *)malloc(sizeof(int)*512);
int i;
int index = 1;
b = MaxCommonFactor(a, b);
for(i=b; i>0; i--)
if((a%i == 0) && (b%i == 0))
gcd[index++] = i;
gcd[0] = index;
for (i=1; i printf(
return gcd;
}
int MaxCommonFactor(int a,int b)
{
int temp;
if(a<=0||b<=0) return -1;
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}

代的组词-clamped


耿莲凤个人资料-雾中的大海


红门院落-新挑战死神


毕业论文范例-最好听的男孩名字


热门音乐-五言诗大全


haozi-外国舞曲


舍不得你走-居里夫人的故事


音乐之声排行榜-如何关闭超级qq