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

更新时间:2024-06-01 18:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章

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,并输出4321。再将得到的逆序数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=x/1000; b=x/100; c=x/10; d=x;

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分)

题目内容:

从键盘输入某人的身高(以厘米为单位,如174cm)和体重(以公斤为单位,如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=m/100; y=m0;

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.00\\n\ }

return 0; }

4.3

数据区间判断(5分)

题目内容:

从键盘输入一个int型的正整数n(已知:0

程序运行结果示例1:

\(先输入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 (n0!=0&&n%4==0||n@0==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

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

题目内容:

幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个5×5的矩阵并将其存入一个二维整型数组中,检验其是否为幻方矩阵,并将其按指定格式显示到屏幕上。 输入格式: \输出格式:

如果是幻方矩阵,输出提示信息: \ 矩阵元素的输出: \(换行使用\)

如果不是幻方矩阵,输出提示信息: \ 输入样例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;

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=n/5*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

本文来源:https://www.bwwdw.com/article/9mn6.html

Top