第3周编程题在线测试
1 计算两个数的平方和(3分) 题目内容:
从键盘读入两个实数,编程计算并输出它们的平方和,要求使用数学函数pow(x,y)计算平方值,输出结果保留2位小数。程序中所有浮点数的数据类型均为float。 提示:使用数学函数需要在程序中加入编译预处理命令 #include
以下为程序的运行结果示例: please input x and y: 1.2,3.4↙ Result=13.00
输入格式: \输出格式:
输入提示信息:\输出格式:\
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include #include int main() { float x,y; printf(\ scanf(\ printf(\ return 0; }
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 % 10; c = x / 10 % 10; d = x % 10; printf(\ printf(\ printf(\ return 0; }
3拆分英文名(3分) 题目内容:
从键盘输入某同学的英文名(小写输入,假设学生的英文名只包含3个字母。如: tom),编写程序在屏幕上输出该同学的英文名,且首字母大写(如: Tom)。同时输出组成该英文名的所有英文字符在26个英文字母中的序号。 以下为程序的运行结果示例: Input your English name: tom↙ Tom t:20 o:15 m:13
输入格式: \输出格式:
输入提示信息:\
首字母大写的英文姓名的输出格式:\
姓名中每个字母在26个英文字母中的序号的输出格式:\
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 #include int main() { char a, b, c; printf(\ scanf(\ printf(\ printf(\ printf(\ printf(\ return 0; }
4计算体指数(3分) 题目内容:
从键盘输入某人的身高(以厘米为单位,如174cm)和体重(以公斤为单位,如70公斤),将身高(以米为单位,如1.74m)和体重(以斤为单位,如140斤)输出在屏幕上,并按照以下公式计算并输出体指数,要求结果保留到小数点后2位。程序中所有浮点数的数据类型均为float。
假设体重为w公斤,身高为h米,则体指数的计算公式为:
以下是程序的运行结果示例: Input weight, height: 70,174↙ weight=140 height=1.74 t=23.12
输入格式: \输出格式:
输入提示信息:\ (注意:在height和逗号之间有一个空格) 体重输出格式:\身高输出格式:\体指数输出格式:\
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 #include #include int main() { float weight, height,t; printf(\ scanf(\ t = weight / pow((height / 100), 2); printf(\
}
printf(\printf(\ return 0;
第4周——无处不在的抉择 1数位拆分v2.0(4分) 题目内容:
从键盘上输入一个4位数的整数n,编写程序将其拆分为两个2位数的整数a和b,计算并输出拆分后的两个数的加、减、乘、除和求余运算的结果。例如n=-4321,设拆分后的两个整数为a,b,则a=-43,b=-21。除法运算结果要求精确到小数点后2位,数据类型为float。求余和除法运算需要考虑除数为0的情况,即如果拆分后b=0,则输出提示信息\is zero!\
程序的运行结果示例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的提示信息:\
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 时间限制:500ms内存限制:32000kb #include
int main() { int m, x, y; printf(\ scanf(\ x = m / 100;
}
y = m % 100;
printf(\
printf(\if (y != 0){ printf(\}
else{ printf(\ }
return 0;
2出租车计价(4分) 题目内容:
已知某城市普通出租车收费标准为:起步里程为3公里,起步费为8元,10公里以内超过起步里程的部分,每公里加收2元,超过10公里以上的部分加收50%的回空补贴费,即每公里3元。出租车营运过程中,因堵车和乘客要求临时停车等客的,按每5分钟加收2元 计算,不足5分钟的不计费。从键盘任意输入行驶里程(精确到0.1公里)和等待时间(精确到分钟),请编程计算并输出乘客应支付的车费,对结果进行四舍五入,精确到元。
程序运行结果示例1:
Input distance and time:2,2↙ fee = 8
程序运行结果示例2:
Input distance and time:5,5↙ fee = 14
程序运行结果示例3:
Input distance and time:12,15↙ fee = 34
程序运行结果示例4:
Input distance and time:20,0↙ fee = 52
输入提示信息:\输入格式:
用逗号分隔的两个数字,第一个表示距离、第二个表示时间:\输出格式:
价格的输出格式:\ (注意:等号的两边各有一个空格)
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。 #include #include ?
int main() { float f=0, fee=0; int d=0,dp=0; printf(\ scanf(\ if ((f>0)&&(f<10)) {
if (f <= 3 && d < 5) {
fee = 8;
printf(\ }
if (f<10&&d>=5) {
dp=d/5;
fee=(f-3)*2+8+2 * dp; printf(\ } } if (f >= 10 && d >= 5) { dp = d / 5; fee = (f - 10) * 3 + 22 + 2 * dp; printf(\ } if (f >= 10 && d < 5) { fee = (f - 10) * 3 + 22; printf(\ } return 0; }
3数据区间判断(6分) 题目内容:
从键盘输入一个int型的正整数n(已知:0程序运行结果示例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>=0&&x<=9)
printf(\ else if (x>=1000&&x<=9999)
printf(\ else if (x>=10&&x<=99) printf(\ else if (x>=100&&x<=999)
}
printf(\else printf(\return 0;
4计算一元二次方程的根v2.0(4分)
题目内容:
根据下面给出的求根公式,计算并输出一元二次方程
的两个实根,要求精确到小
数点后4位。其中a,b,c的值由用户从键盘输入。如果用户输入的系数不满足求实根的要求,输出错误提示 \。程序中所有的数据类型均为float。
程序运行结果示例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周——周而复始的循环之道
16位密码输入检测(4分)
题目内容:
从键盘输入6位仅由数字0~9组成的密码。用户每输入一个密码并按回车键后,程序给出判断:如果是数字,则原样输出该数字,并提示用户目前已经输入了几位密码,同时继续输入下一位密码;否则,程序提示\,并让用户继续输入下一位密码。直到用户输入的密码全部是数字为止。 以下为程序的运行结果示例: 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; }
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; }
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(\ odd++;}
else if (s%2==0)
{printf(\ even++;}
else even+=0; } while (s!=-1);
printf(\ printf(\ return 0; }
4计算球的反弹高度(4分)
题目内容:
一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下并反弹......,求它在第5次和第10次落地时,分别共经过了多少米?第5次和第10次反弹分别是多高?要求计算结果保留到小数点后3位。用户从键盘输入想要计算的第n次(n<=15)。程序中所有浮点数的数据类型均为float。
程序运行结果示例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分)
下面代码的功能是将百分制成绩转换为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 #include
int main(){
int score,m=0; char grade;
printf(\ do{
m=scanf(\ getchar();
if (m!=1||score<0||score>100) {
printf(\ m=0; }
}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; }
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; }
3搬砖问题(4分)
题目内容:
n块砖( 27程序的运行结果示例1: Input n(27men=0,women=4,children=32
程序的运行结果示例2: Input n(27men=3,women=3,children=30
程序的运行结果示例3: Input n(27men=2,women=14,children=20 men=7,women=7,children=22 men=12,women=0,children=24
输入提示: \
输入格式: \
输出格式:\
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
#include int main() {
int n,woman,man,kid;
printf(\ scanf(\
for(man=0;man<=19;man++) {
for (woman=0;woman<=22;woman++) {
kid=36-man-woman;
if(4*man+3*woman+0.5*kid==n)
printf(\ }
}
return 0; }
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(\ break;
case 4:case 6:case 9:case 11: printf(\ break; case 2:
if (isleap(year)){
printf(\ break; } else{
printf(\ break; }
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; }
2递归法计算两个数的最大公约数(4分)
题目内容:
利用最大公约数的性质计算。对正整数a和b,当a>b时,若a中含有与b相同的公约数,则a中去掉b后剩余的部分a-b中也应含有与b相同的公约数,对a-b和b计算公约数就相当于对a和b计算公约数。反复使用最大公约数的上述性质,直到a和b相等为止,这时,a或b就是它们的最大公约数。这三条性质,也可以表示为:
性质1 如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b) 性质2 如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a) 性质3 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b
程序运行结果示例1: Input a,b:16,24↙ 8
程序运行结果示例2: Input a,b:-2,-8↙ Input error!
输入提示信息:\输入格式:\ 输出格式:
输出最大公约数:\
输入错误提示信息:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include int Gcd(int a, int b); int main() {
int a, b, c;
printf(\ scanf(\ c = Gcd(a, b); if ( c!= -1)
printf(\ else
printf(\ return 0; }
int Gcd(int a, int b) {
if (a <= 0 || b <= 0) return -1; if (a == b)
return a;
else if (a > b)
return Gcd(a - b, b); else
return Gcd(a, b - a); }
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];
}
4还原算术表达式(4分)
题目内容:
编写程序求以下算式中XYZ的值,其中两数XYZ与YZZ相加的和n(99
程序运行结果示例1: Input n(n<1000): 532↙ X=3,Y=2,Z=1
程序运行结果示例2: Input n(n<1000): 977↙ Invalid
输入提示:\Input n(n<1000):\\n\ 输入格式: \
输出格式:\ 计算不成功(无解)的输出提示:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include
int mid(int a, int b, int c); int main() {
int x,y,z,n;
printf(\ scanf(\ for (x=1;x<=9;x++) {
for (y=1;y<=9;y++) {
for (z=1;z<=9;z++)
{
if ((x*100+y*10+z+y*100+z*10+z)==n) {
printf(\ return 0; } } } }
printf(\ return 0; }
第8周—— 一堆数据来了,你准备好了吗
1矩阵转置v1.0(4分)
题目内容:
用二维数组作为函数参数,编程计算并输出n×n阶矩阵的转置矩阵。其中,n的值不超过10,n的值由用户从键盘输入。
程序运行结果示例1: Input n:3↙ Input 3*3 matrix: 1 2 3↙ 4 5 6↙ 7 8 9↙
The transposed matrix is: 1 4 7 2 5 8 3 6 9
程序运行结果示例2: Input n:2↙ Input 2*2 matrix: 1 2↙ 4 5↙
The transposed matrix is: 1 4 2 5
输入提示信息:
提示输入矩阵的阶数:\
提示输入矩阵数据:\输入格式: \
输出提示信息:\输出格式:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include #define N 10
int main() {
int matrix[N][N]; int i,j,n;
printf(\ scanf(\
printf(\ for(i=0;i for(j=0;j scanf(\ } }
int k,q,temp; for(k=0;k for(q=k+1;q temp=matrix[k][q];
matrix[k][q]=matrix[q][k]; matrix[q][k]=temp; } }
printf(\ for(i=0;i for(j=0;j printf(\ }
printf(\
}
return 0; }
2兔子生崽问题(4分)
题目内容:
假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,n(n<=12)月以后可有多少对兔子(即当年第n月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题,n的值要求从键盘输入。
参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律: (1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。 综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
用fn(n=1,2,…)表示第n个月成兔对数,于是可将上述规律表示为如下递推公式:
程序运行示例: Input n(n<=12): 10↙
1 2 3 5 8 13 21 34 55 89 Total=89
输入提示:\
输入格式:\输出格式:
每个月兔子对数的输出格式: \
第12个月的兔子总数的输出格式: \
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include
int creat(int n); int main() {
int each,total,i,n;
printf(\ scanf(\ for (i=1;i<=n;i++)
printf(\
printf(\
return 0; }
int creat(int n) {
if (n==1 || n==2) return 1; else
return creat(n-1)+creat(n-2); }
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=%d\\n\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include int main() {
int a,b,c,d,i,j;
for (i=31;i<100;i++) {
j=i*i; a=j/1000;
d=j;
b=j00/100; c=j0/10;
if (a==b&&c==d&&a!=c)
printf(\ } return 0; }
4检验并打印幻方矩阵。(4分)
题目内容:
幻方矩阵是指该矩阵中每一行、每一列、每一对角线上的元素之和都是相等的。从键盘输入一个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周——呼风唤雨的指针:C语言世界中的“金箍棒”
1重复数字检查(4分)
题目内容:
从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。 已知函数原型:
int CountRepeatNum(int count[], int n); 若有重复数字,则该函数返回重复出现的数字;否则返回-1. 程序运行结果示例1: Input n: 28212↙ Repeated digit!
程序运行结果示例2: Input n: 12345↙
No repeated digit!
输入提示:\输入格式: \ 输出格式:
有重复数字,输出信息: \ 没有重复数字,输出信息: \
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include
int CountRepeatNum(int count[10], int n) {
int b,rtn=-1; while (n>0){ b = n % 10; if (count[b]) { rtn = b; break; } count[b] = 1; n /= 10; } return rtn; }
int main() { int a[10] = { 0 }; int rtn = 0; long int n; printf(\ scanf(\
rtn = CountRepeatNum(a,n); if (rtn!=-1) printf(\ else printf(\ return 0; }
2教授的课(4分)
题目内容:
教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。 已知函数原型:
//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0 int IsCancel(int a[], int n, int k); 程序运行结果示例1: Input n,k: 4,3↙ -1 -3 4 2↙ YES
程序运行结果示例2: Input n,k: 5,3↙ -1 -2 -3 0 4↙ NO
输入提示:\输入格式:
\ \
输入包括两行数据: 第1行是n,k的值。 第2行是学生的到达时间。 输出格式:
课程被取消,输出\ 课程不取消,输出\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include #define N 1000
int IsCancel(int a[], int n, int k) {
int i=0,j=0; for(i=0;i if (a[i]<=0) {
j++; } }
if (j return 1; } else {
return 0; } }
int main() {
int n = 0,k =0,i; int studentNum[N]; int temp,rtn;
printf(\ scanf(\ for(i=0;i scanf(\ studentNum[i] = temp; }
rtn = IsCancel(studentNum,n,k); if (rtn==1)
printf(\ else
printf(\ return 0; }
3寻找鞍点(4分)
题目内容:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”
已知函数原型:
void FindSaddlePoint(int a[][N], int m, int n); 在该函数中输出有无鞍点的信息。 程序运行结果示例1: Input m,n: 3,3↙ Input matrix: 1 2 3↙ 4 5 6↙ 7 8 9↙ a[0][2] is 3
程序运行结果示例2: Input m,n: 3,4↙ Input matrix: 3 4 7 5↙ 0 1 8 2↙ 9 3 2 6↙ No saddle point!
输入提示: \ “Input matrix:\\n\ 输入格式:
输入矩阵大小: \ 输入矩阵元素: \ 输出格式:
找到鞍点的输出格式:\
没找到鞍点的输出格式:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include int main() {
int i,j,k,a[100][100],max,maxj,flag; int m,n;
printf(\ scanf(\ printf(\ for(i=0;i scanf(\ for(i=0;i max=a[i][0]; maxj=0;
for(j=0;jmax) {
max=a[i][j]; maxj=j; }
flag=1;
for(k=0;ka[k][maxj]) {
flag=0; break; }
if(flag) {
printf(\ break; } }
if(!flag)
printf(\ return 0; }
4统计重复字符(4分)
题目内容:
输入一串字符(字符数小于80),以回车表示输入结束,编程计算并输出这串字符中连续重复次数最多的字符和重复次数。如果重复次数最多的字符有两个,则输出最后出现的那一个。 已知函数原型:
//函数功能:统计字符串中连续重复次数最多的字符及其重复的次数
//函数参数:str指向待统计的字符串,指针形参tag返回重复字符最后出现的下标位置 //函数返回值:返回字符重复的次数
int CountRepeatStr(char str[], int *tag);
求解思路:设置一个计数器,遍历字符串中的所有字符,若str[i] == str[i+1],则计数器加1,同时判断计数器的值是否大于记录的最大重复次数max,若大于,则用计数器的值更新max,并记录该字符最后出现的位置i+1.若str[i] != str[i+1],则计数器重新初始化为1。遍历结束时,函数返回max的值。
程序运行结果示例1: Input a string: 2344455555↙ 5:5
程序运行结果示例2: Input a string: sgf222257↙ 2:4
输入提示信息:\ 输入格式: 用gets()输入字符串 输出格式:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include
int CountRepeatStr(char str[], int *tag) {
int i=0; int max = 1; int count = 1;
for(i = 0;i if (str[i]==str[i+1]) {
count++; }
else {
count=1; }
if (count>max) {
max = count; *tag = i; } }
return max; }
int main() {
char inStr[80]; int tag=0; int max =0 ;
printf(\ gets(inStr);
max = CountRepeatStr(inStr,&tag); printf(\ return 0; }
第10周——大力水手指针
1数字字符串转换为整型数(4分)
题目内容:
从键盘输入一串字符(假设字符数少于8个),以回车表示输入结束,编程将其中的数字部分转换为整型数并以整型的形式输出。
函数原型为 int Myatoi(char str[]);
其中,形参数组str[]对应用户输入的字符串,函数返回值为转换后的整型数。
解题思路的关键是:1)判断字符串中的字符是否是数字字符;2)如何将数字字符转换为其对应的数字值;3)如何将每一个转换后的数字值加起来形成一个整型数。 程序运行结果示例1: Input a string:7hg09y↙ 709
程序运行结果示例2: Input a string:9w2k7m0↙ 9270
程序运行结果示例3:
Input a string:happy↙ 0
输入提示信息:\输入格式: \输出格式:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include #include
int Myatoi(char str[]) {
int rtn=0;
int i=0,j=0,k=0; int num[8];
while(str[i]!='\\0') {
if (str[i]>='0'&&str[i]<='9') {
num[j] = str[i]-48; j++; } i++; }
int b = 1;
for( k = j-1; k>=0; k--) {
rtn += b * num[k]; b *= 10; }
return rtn; }
int main() {
char inStr[8]; int rtn =0 ;
printf(\
gets(inStr);
rtn = Myatoi(inStr); printf(\ return 0; }
2奇偶数分离(4分)
题目内容:
输入n个整数(n从键盘输入,假设n的值不超过100),按奇偶数分成两组并输出。输出两行,第一行为所有奇数,第二行为所有偶数,保持数据的相对顺序与输入顺序相同。
函数原型如下所示:
void Seperate(int a[], int n); //数组a[]存放用户输入的n个整数
解题思路:用两个循环分别输出奇数和偶数,在输出第一个数时用\格式字符,在输出其余数时用\格式字符,用标志变量记录和判断是否是第一个奇数或偶数。 程序运行结果示例1: Input n:7↙
Input numbers:5 9 47 82 0 6 7↙ 5,9,47,7 82,0,6
程序运行结果示例2:
Input n:8↙
Input numbers:-2 3 5 0 23 62 79 83↙ 3,5,23,79,83 -2,0,62
输入提示信息:\
\输入格式: \
每行第一个数据的输出格式:\
每行第二个及以后数据的输出格式:\
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
#include \int main() {
void Seperate(int a[], int n,int js[],int os[],int *jsLength,int *osLength); int nums,i,j,k;int array[100]={0}; int js[100]={9999},os[100]={9999}; printf(\ scanf(\ printf(\
for(i=0;i scanf(\ }
int jsLength=0,osLength=0;
Seperate(array,nums,js,os,&jsLength,&osLength); int fNum = 1; //输出奇数 if (jsLength > 0) {
for(j=0;j if (fNum == 1) {
printf(\ fNum = 2; } else {
printf(\ } }
printf(\ }
//输出偶数 fNum = 1;
if (osLength > 0) {
for(k=0;k if (fNum == 1) {
printf(\ fNum = 2; } else {
printf(\ } } }
return 0; }
void Seperate(int a[],int n,int js[],int os[],int *jsLength,int *osLength) {
int j,m=0,k=0; for(j=0;j if(a[j]%2!=0) {
//??êy js[m] =a[j]; m++; } else {
os[k] =a[j]; k++; }
*jsLength = m; *osLength = k; } }
3颠倒句子中的单词顺序(4分)
题目内容:
从键盘输入一个句子(假设字符数小于100个),句子中的单词之间用空格分隔,句子必须以一个标点符号作为结尾,句子开头和末尾标点符号前均没有空格,以回车表示输入结束,请编程颠倒句中的单词顺序并输出。
函数原型:int Inverse(char str1[], char str2[][N])
函数功能:将str1中的单词颠倒顺序后分别存入str2的每一行,返回str1中的单词数。 程序运行结果示例1:
Input a sentence:you can cage a swallow can't you?↙ you can't swallow a cage can you?
程序运行结果示例2:
Input a string:you are my sunshine!↙ sunshine my are you!
程序运行结果示例3:
Input a sentence:I love you!↙ you love I!
本文来源:https://www.bwwdw.com/article/1kn6.html