- 10002 显示Hello World!
- 10003 显示What is a computer?
- 10004 显示图形 (字符图案输出)
- 10005 显示Welcome to You!(调试示例error01_1)
- 10006 显示"Programming in C is fun!"
- 10007 显示图案 (字符图案输出)
- 20011 求华氏温度100°F对应的摄氏温度。
- 20012 求华氏温度 150°F 对应的摄氏温度。
- 20013 求摄氏温度26°C对应的华氏温度。
- 20014 计算三门课程的平均成绩
- 20015 计算各位数字的值
- 20016 计算x的平方(改错题error02_2)
- 20021 计算分段函数的值(调试示例error02_3)
- 20022 计算摄氏温度(表达式)
- 20023 计算存款利息
- 20024 计算分段函数
- 20025 计算分段函数的值(改错题error02_4)
- 20026 输入2个整数 num1 和 num2,计算并输出它们的和、差、积、商与余数。
- 20027 计算旅途时间 (求余运算)
- 20028 数字加密(求余运算)
- 20031 求1+2+3+......+100(调试示例error02_5)
- 20032 求m+(m+1)+(m+2)+......+100
- 20033 求1/m+1/(m+1)+1/(m+2)+......+1/n
- 20034 求1 + 1/3 + 1/5 + ......的前n项和
- 20035 求1-1/4+1/7-1/10+……的前n项之和
- 20036 输出华氏-摄氏温度转换表(改错题error02_6)
- 20038 求x的n次幂
- 20041 生成 3 的乘方表
- 20043 使用函数求 n! /(m!* (n-m)!)
- 20044 求100^0.5+101^0.5+……+1000^0.5
- 20053 计算物体自由下落的距离
- 20055 计算分段函数
- 20057 求1+1/2+1/3+......+1/n
- 20061 阶梯电价
- 20062 求m*m+1/m+(m+1)*(m+1)+1/(m+1)+......+n*n+1/n
- 20063 求1-2/3+3/5-4/7+5/9-6/11+……
- 20064 求2^1+2^2+2^3+……+2^n
- 20065 求0!+1!+2!+……+n!
- 30001 求一元二次方程的根
- 30002 求分段函数的值
- 30004 显示五级记分制成绩所对应的百分制成绩区间(使用switch)
- 30005 显示水果的价格(使用switch)
- 30007 求三角形的面积和周长
- 30008 计算个人所得税
- 30009 统计学生成绩(对应教材习题3-4 ,统计学生成绩)
- 30010 对两个整数进行乘、除和求余运算
- 30053 分段计算水费(使用嵌套的if-else语句)
- 30061 出租车计费
- 30062 输出21世纪所有闰年
- 40011 求最小公倍数和最大公约数(调试示例error04_1)
- 40012 求1-1/4+1/7-1/10+1/13-1/16+……
- 40013 求奇数和
- 40014 求整数的位数
- 40016 求整数的位数以及各位数字之和
- 40017 求2/1+3/2+5/3+8/5+...
- 40019 高空坠球 (循环语句)
- 40021 使用嵌套循环求e = 1+1/1!+1/2!+....+1/n!
- 40023 换硬币 (多重循环语句)
- 40024 找出各位数字的立方和等于它本身的数
- 40025 找完数(改错题error04_2)
- 40026 验证歌德巴赫猜想(选作)
- 40027 从高位开始逐位输出一个整数的各位数字(选作)
- 40051 求平均成绩并统计不及格人数
- 40061 求偶数的和
- 40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……的值
- 40065 分解质因数
- 40067 打印图案
- 50001 求n!(调试示例error05_1)
- 50002 使用函数判断数的符号
- 50003 使用函数求奇数和
- 50004 使用函数计算两点间的距离
- 50005 使用函数统计素数并求和
- 50006 使用函数统计一个整数中数字的个数
- 50007 使用函数找水仙花数
- 50008 使用函数求1! + 2! + … + m!(改错题error05_2)
- 50009 使用函数求余弦函数的近似值
- 50051 数字金字塔
- 50052 使用函数找最大值
- 50061 使用函数求a+aa+aaa+aa…a
- 50062 使用函数输出指定范围内的 Fibonacci 数
- 50063 使用函数找出指定范围内的完数
- 50064 使用函数输出一个整数的逆序数
- 60001 使用函数求PI(调试示例源程序error06_1)
- 60002 整数的十进制、八进制和十六进制表现形式
- 60003 分类统计字符
- 60006 验证歌德巴赫猜想(本题与40026完全一样)
- 60007 使用函数输出整数的逆序数
- 60009 统计单词
- 60062 简单计算器
- 70011 简化的插入排序
- 70012 求平均值
- 70013 将数组中的数逆序存放
- 70014 求最大值及其下标
- 70015 交换最小值和最大值
- 70016 选择法排序
- 70017 在数组中查找指定的元素
- 70021 求矩阵各行元素之和
- 70022 矩阵运算
- 70023 九九乘法表
- 70024 判断上三角矩阵
- 70025 算算看,这是第几天?
- 70026 找鞍点(选作)
- 70031 将字符串逆序存放
- 70032 查找字符
- 70033 统计大写辅音字母
- 70034 字符串替换
- 70035 将十六进制字符串转换为十进制整数
- 70036 将十进制字符串转换为十进制整数
- 70051 找最大值并交换
- 70052 统计字符出现次数
- 80011 循环移动
- 80012 在数组中查找指定元素
- 80013 使用函数的选择法排序
- 80014 报数
- 80021 找最大的字符串
- 80022 找最长字符串
- 80023 使用函数删除字符串中的字符
- 80024 使用函数实现字符串复制
- 80025 判断回文字符串
- 80026 分类统计字符个数
- 90001 调试示例error09_1.cpp(结构)
- 90002 时间换算(结构)
- 90003 计算平均成绩(结构)
- 90004 计算两个复数之积(结构)
- 90005 查找书籍(结构)
- 90006 通讯录排序(结构)
- 90007 算算看,这是第几天?(结构)
- 90008 使用函数实现时间换算(结构)
- 90009 找出总分最高的学生(结构)
- 10012 函数程序设计
- 10014 计算函数P(n,x) (函数递归)
- 10015 计算函数Ack(m,n) (函数递归)
- 10016 十进制转换二进制
- 10017 递归函数程序设计求Fabonacci数列
- 10018 递归函数程序设计整数的逆序输出
- 10019 改错题error10_1.cpp(函数递归)
- 10021 调试示例error11_1.cpp (指针数组、内存动态分配)
- 10022 编程题(指针数组)
- 10023 编程题 (指针数组,查找相同的字符串)
- 10024 计算最长的字符串长度
- 10025 字符串的连接
- 10026 指定位置输出字符串
- 10027 藏尾诗(二维字符数组)
- 10028 改错题error11_2.cpp (矩阵操作)
- 10031 调试示例error11_3.cpp(用单向链表组织学生信息)
- 10032 编程题(单向链表)
- 10033 编程题(按数据的逆序建立一个链表并输出)
- 10034 编程题(单向链表操作)
- 10035 编程题 (单向链表按序合并)
- 10036 编程题 (单向链表)
程序填空。
在屏幕上显示一个短句Hello World!
int main(void) { /*---------*/ printf( "Hello World!"); return 0; } |
程序填空。
在屏幕上显示一个短句What is a computer?
int main(void) { /*------ ---*/ printf( "What is a computer?"); return 0; } |
程序填空。在屏幕上显示下列图形
****
***
**
*
int main(void) { /*---------*/ printf( "****\n" "***\n" "**\n" "*"); return 0; } |
10005 显示Welcome to You!(调试示例error01_1)
程序填空。
在屏幕上显示短句Welcome to You!
int main(void) { /*---------*/ printf("Welcome to You!"); return 0; } |
10006 显示"Programming in C is fun!"
编写程序,在屏幕上显示一个短句"Programming in C is fun!"
#include <stdio.h> int main(void) { printf("Programming in C is fun!"); return 0; } |
编写程序,在屏幕上显示如下图案。
* * * *
* * *
* *
*
#include <stdio.h> int main(void) { printf("* * * *\n" " * * *\n" " * *\n" " *\n"); /*---------*/ } |
计算公式如下,c=5*(f-32)/9,式中:c表示摄氏温度,f表示华氏温度。(源程序error02_1.cpp)
输入输出示例:
fahr=100,celsius=37
#include <stdio.h> int main(void) { int celsius, fahr; /*---------*/ fahr=100; celsius=5*(fahr-32)/9; printf("fahr = %d, celsius = %d\n", fahr, celsius); return 0; } |
计算公式:C = 5*F/9-5*32/9,式中:C表示摄氏温度,F表示华氏温度。
输入输出示例:
fahr=150, celsius=66
#include <stdio.h> int main(void) { int celsius, fahr; /*---------*/ fahr=150; celsius=5*fahr/9-5*32/9; printf("fahr = %d, celsius = %d\n",fahr, celsius); return 0; } |
计算公式如下,f=9*c/5+32,式中:c表示摄氏温度,f表示华氏温度。
输入输出示例:
celsius=26,fahr=78
#include <stdio.h> int main(void) { int celsius, fahr; /*---------*/ celsius=26; fahr=9*celsius/5+32; printf("celsius = %d, fahr = %d\n", celsius, fahr); return 0; } |
20014 计算三门课程的平均成绩
程序填空,不要改变与输入输出有关的语句。
已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。
输入输出示例:
math = 87, eng = 72, comp = 93, average = 84
#include <stdio.h> int main(void) { int math, eng, comp, average; /*---------*/ math = 87,eng = 72,comp = 93; average = (math+eng+comp)/3; printf("math = %d, eng = %d, comp = %d, average = %d\n", math, eng, comp, average); } |
输入输出示例:
整数152的个位数字是2,十位数字是5,百位数字是1
#include <stdio.h> int main(void) { int n,digit1,digit2,digit3; n=152; digit1=n%10; digit2=(n/10)%10; digit3=n/100; /*---------*/ printf("整数%d的个位数字是%d, 十位数字是%d, 百位数字是%d\n", n, digit1, digit2, digit3); return 0; } |
程序填空。
假设 x 的值为3,计算 x 的平方 y,并分别以"y = x * x"和"x * x = y"的形式输出 x 和 y 的值。
输入输出示例:
9 = 3 * 3
3 * 3 = 9
#include <stdio.h> int main(void) { int x,y; x=3; y=x*x; printf("%d = %d * %d \n",y,x,x); printf("%d * %d = %d \n",x,x,y); return 0; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入 x,计算并输出下列分段函数 f(x) 的值(保留1位小数)。
当 x 不等于0时,y = f(x) = 1/x,当 x 等于0时,y = f(x) = 0。
输入输出示例:括号内是说明
输入
2 (repeat=2)
10 (x=10)
0 (x=0)
输出
f(10.00) = 0.1
f(0.00) = 0.0
#include <stdio.h> int main(void) { int repeat, ri; double x, y; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf", &x); if(x!=0) y=1/x; else y=0; printf("f(%.2f) = %.1f\n", x, y); } } |
程序填空,不要改变与输入输出有关的语句。
输入华氏温度,输出对应的摄氏温度。计算公式:c = 5*(f-32)/9,式中:c表示摄氏温度,f表示华氏温度。
输入输出示例:括号内为说明
输入
150 (fahr=150)
输出
celsius = 65
#include <stdio.h> int main(void) { int celsius, fahr; /*---------*/ scanf("%d", &fahr); celsius = 5*(fahr-32)/9; printf("celsius = %d\n", celsius); } |
20023 计算存款利息
程序填空,不要改变与输入输出有关的语句。
输入存款金额 money、存期 year 和年利率 rate,根据下列公式计算存款到期时的利息 interest(税前),输出时保留2位小数。
interest = money(1+rate)^year - money
输入输出示例:括号内为说明
输入
1000 3 0.025 (money = 1000, year = 3, rate = 0.025)
输出
interest = 76.89
#include <stdio.h> #include <math.h> int main(void) { int money, year; double interest, rate; scanf("%d%d%lf",&money,&year,&rate); interest = money*pow((1+rate),year) - money; printf("interest = %.2f\n", interest); } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入 x,计算并输出下列分段函数 f(x) 的值(保留2位小数),请调用 sqrt 函数求平方根,调用 pow 函数求幂。
当x >= 0时,f(x) = x^0.5,当x小于0时,f(x) = (x+1)^2 + 2x + 1/x。
输入输出示例:括号内是说明
输入
3 (repeat=3)
10
-0.5
0
输出
f(10.00) = 3.16
f(-0.50) = -2.75
f(0.00) = 0.00
#include <stdio.h> #include <math.h> int main(void) { int repeat, ri; double x, y; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf",&x); if(x>=0) y = sqrt(x); else y = pow((x+1),2)+2*x+1.0/x; printf("f(%.2f) = %.2f\n", x, y); } } |
20025 计算分段函数的值(改错题error02_4)
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入实数 x,计算并输出下列分段函数 f(x) 的值,输出时保留1位小数。
当 x 不等于10时,y = f(x) = x,当 x 等于10时,y = f(x) = 1/x。
输入输出示例:括号内是说明
输入
2 (repeat=2)
10
234
输出
f(10.0) = 0.1
f(234.0) = 234.0
#include <stdio.h> int main(void) { int repeat, ri; double x, y; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ /*---------*/ scanf("%lf",&x); if(x!=10) y=x; else y=1/x; printf("f(%.1f) = %.1f\n", x, y); } return 0; } |
20026 输入2个整数 num1 和 num2,计算并输出它们的和、差、积、商与余数。
输出两个整数的余数可以用 printf("%d %% %d = %d\n", num1, num2, num1%num2);
输入输出示例:括号内是说明
输入
5 3 (num1=5,num2=3)
输出
5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
5 % 3 = 2
#include <stdio.h> int main(void) { int num1,num2; /*---------*/ scanf("%d%d",&num1,&num2); printf("%d + %d = %d\n",num1,num2,num1+num2); printf("%d - %d = %d\n",num1,num2,num1-num2); printf("%d * %d = %d\n",num1,num2,num1*num2); printf("%d / %d = %d\n",num1,num2,num1/num2); printf("%d % % %d = %d\n",num1,num2,num1%num2); return 0; } |
20027 计算旅途时间 (求余运算)
输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。
有效的时间范围是0000到2359(前两位表示小时,后两位表示分钟),不需要考虑出发时间晚于到达时间的情况。
例:括号内是说明
输入
712 1411 (出发时间是7:12,到达时间是14:11)
输出
The train journey time is 6 hours 59 minutes.
#include <stdio.h> int main(void) { int time1, time2, hour, minutes, t1, t2, result; scanf("%d%d", &time1, &time2); t1 = (time1 / 100) * 60 + time1 % 100; /* 统一化成minutes: */ t2 = (time2 / 100) * 60 + time2 % 100; result = t2 - t1; hour = result / 60; minutes = result % 60; printf("The train journey time is %d hours %d minutes.\n", hour, minutes); } |
20028 数字加密(求余运算)
输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。
例:括号内是说明
输入
1257
输出
The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601)
#include <stdio.h> int main(void) { int number, digit1, digit2, digit3, digit4, newnum; scanf("%d", &number); /*---------*/ digit1=(number%10+9)%10*100; /* 取个位+9之后除以10取余,然后变成百位(个位与百位交换) */ digit2=(number/10%10+9)%10*1000; /* 取十位+9之后除以10取余,然后变成千位,将千位和十位上的数字互换 */ digit3=(number/100%10+9)%10; /* 取百位+9之后除以10取余,变成个位,百位和个位上的数字互换*/ digit4=(number/1000+9)%10*10; /* 取千位+9之后除以10取余,变成十位,千位数字与十位数字交换 */ newnum=digit1+digit2+digit3+digit4; printf("The encrypted number is %d\n", newnum); return 0; } |
20031 求1+2+3+......+100(调试示例error02_5)
计算表达式 1 + 2 + 3 + ...... + 100的值。
输出示例:
sum = 5050
#include <stdio.h> int main(void) { int i, sum; sum=0; for(i=1;i<=100;i++) sum=sum+i; printf("sum = %d\n", sum); } |
20032 求m+(m+1)+(m+2)+......+100
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数m(0<=m<=100),计算表达式 m + (m+1) + (m+2) + ...... + 100的值。
输入输出示例:括号内为说明
输入
3 (repeat=3)
0 (计算0+1+2+...+100)
10 (计算10+11+12+...+100)
50 (计算50+51+52+...+100)
输出
sum = 5050
sum = 5005
sum = 3825
#include <stdio.h> int main(void) { int i, m, sum; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &m); sum=0; for(i=m;i<=100;i++) sum=sum+i; /*---------*/ printf("sum = %d\n", sum); } } |
20033 求1/m+1/(m+1)+1/(m+2)+......+1/n
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入2个正整数 m 和 n(m<=n),计算表达式 1/m + 1/(m+1) + 1/(m+2) + ...... + 1/n的值,输出时保留3位小数。
输入输出示例:括号内为说明
输入
3 (repeat=3)
5 15 (计算1/5+1/6+1/7+...+1/15)
10 20 (计算1/10+1/11+1/12+...+1/20)
1 3 (计算1+1/2+1/3)
输出
sum = 1.235
sum = 0.769
sum = 1.833
#include <stdio.h> int main(void) { int i, m, n; int repeat, ri; double sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); sum=0; for (i=m; i<=n; i++) sum=sum+1.0/i; printf("sum = %.3f\n", sum); } } |
20034 求1 + 1/3 + 1/5 + ......的前n项和
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数 n,计算表达式 1 + 1/3 + 1/5 + ...... 的前 n 项之和,输出时保留6位小数。
输入输出示例:括号内为说明
输入
2 (repeat=2)
5 (计算1+1/3+1/5+1/7+1/9)
23 (计算1+1/3+1/5+...+1/45)
输出
sum = 1.787302
sum = 2.549541
#include <stdio.h> int main(void) { int i, n; int denominator; int repeat, ri; double sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; denominator=1; for(i=1;i<=n;i++) { sum=sum+1.0/denominator; denominator=denominator+2; } printf("sum = %.6f\n", sum); } } |
20035 求1-1/4+1/7-1/10+……的前n项之和
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入一个正整数 n,计算1-1/4+1/7-1/10+……的前 n 项之和,输出时保留3位小数。
输入输出示例:括号内是说明
输入
2 (repeat=2)
3
10
输出
sum = 0.893
sum = 0.819
#include <stdio.h> int main(void) { int flag, i, n, t; int repeat, ri; double item, sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; flag=1; t=1; for(i=1;i<=n;i++){ item=flag*1.0/t; sum=sum+item; flag=-flag; t=t+3; }/*---------*/ printf("sum = %.3f\n", sum); } } |
20036 输出华氏-摄氏温度转换表(改错题error02_6)
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入2个整数 lower 和 upper,输出一张华氏—摄氏温度转换表,华氏温度的取值范围是[lower, upper],每次增加2F。
计算公式:c = 5 * (f - 32) / 9,其中:c表示摄氏温度,f表示华氏温度。
输出请使用语句 printf("%3.0f %6.1f\n", fahr, celsius);
输入输出示例:括号内是说明
输入
2 (repeat=2)
32 35 (lower=32,upper=35)
40 30 (lower=40,upper=30)
输出
fahr celsius
32 0.0
34 1.1
fahr Celsius
#include <stdio.h> int main(void) { int lower, upper; int repeat, ri; double celsius, fahr; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &lower, &upper); printf("fahr celsius\n"); for(fahr=lower;fahr<=upper; fahr++, fahr++) { celsius=5*(fahr-32)/9; printf("%3.0f%6.1f\n",fahr,celsius); }/*---------*/ } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入1 个实数x和正整数 n(n<=50),计算并输出 x 的 n 次幂(保留2位小数),不允许调用pow函数求幂。
输入输出示例:括号内是说明
输入
2 (repeat=2)
1.5 2 (x=1.5,n=2)
2 7 (x=2,n=7)
输出
2.25
128.00
#include <stdio.h> int main(void) { int i, n; int repeat, ri; double mypow, x; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%d", &x, &n); mypow=1; for(i=1;i<=n;i++) mypow=mypow*x; /*---------*/ printf("%.2f\n", mypow); } } |
输入一个正整数n,生成一张3的乘方表,输出3^0 ~ 3^n的值,可调用幂函数计算3的乘方。
输出使用语句 printf("pow(3,%d) = %.0f\n", i, mypow);
输入输出示例:括号内是说明
输入
3 (n=3)
输出
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
#include <stdio.h> #include <math.h> int main(void) { int i, n; double mypow; scanf("%d", &n); for(i=0;i<=n;i++) { mypow=pow(3,i); printf("pow(3,%d) = %.0f\n", i, mypow); } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入2个正整数 m 和 n(m<=n),计算 n! /(m!* (n-m)!) 。
要求定义并调用函数fact(n)计算n的阶乘, 其中 n 的类型是 int,函数类型是 double。
例:括号内是说明
输入:
2 (repeat=2)
2 7 (m=2, n=7)
5 12 (m=5, n=12)
输出:
result = 21
result = 792
#include "stdio.h" int main(void) { int m, n; int repeat, ri; double s; double fact(int n); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); s=fact(n)/(fact(m)*fact(n-m)); printf("result = %.0f\n", s); } } double fact(int n) { double result; int i; result=1; for(i=1;i<=n;i++) result=result*i; return result; } |
20044 求100^0.5+101^0.5+……+1000^0.5
计算 100^0.5+101^0.5+……+1000^0.5的值(保留2位小数),可调用sqrt函数计算平方根。
输入输出示例:括号内是说明
输出
sum = 20435.99
#include <stdio.h> #include <math.h> int main(void) { int i; double sum; sum=0; for(i=100;i<=1000;i++) sum=sum+sqrt(i); /*---------*/ printf("sum = %.2f\n",sum); } |
一个物体从 100m 的高空自由落下,编写程序,求它在前 3s 内下落的垂直距离(结果保留2位小数)。设重力加速度为10米/秒^2。
#include <stdio.h> int main(void) { double height; height=0.5 * 10 * 3* 3; /*---------*/ printf("height = %.2f\n", height); } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做repeat次下列运算:
输入 x,计算并输出下列分段函数f(x)的值(保留3位小数)。
当 x 不等于 0 时,y = f(x) = 1/x,当 x 等于 0 时,y = f(x) = 0。
输入输出示例:括号内是说明
输入
2 (repeat=2)
10
0
输出
f(10.00) = 0.100
f(0.00) = 0.000
#include <stdio.h> int main(void) { int repeat, ri; double x, y; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf", &x); /*---------*/ if (x != 0.0) y=1.0/x; else y=0.0; printf("f(%.2f) = %.3f\n", x, y); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
编写程序,输入一个正整数n,求1+1/2+1/3+......的前n项之和,输出时保留6位小数。
输入输出示例:括号内为说明
输入
2 (repeat=2)
6 (计算1+1/2+1/3+1/4+1/5+1/6)
2 (计算1+1/2)
输出
sum = 2.450000
sum = 1.500000
#include <stdio.h> int main(void) { int i, n; int repeat, ri; double sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; for(i=1;i<=n;i++) sum=sum+1.0/i; printf("sum = %.6f\n", sum); } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
为了提倡居民节约用电,某省电力公司执行"阶梯电价",安装一户一表的居民用户电价分为两个"阶梯":月用电量50千瓦时以内的,电价为0.53元/千瓦时;超过50千瓦时的用电量,电价上调0.05元/千瓦时。
输入用户的月用电量e(千瓦时),计算并输出该用户应支付的电费(元),结果保留2位小数。
输入输出示例:括号内是说明
输入
2 (repeat=2)
10 (e=10)
100 (e=100)
输出
cost = 5.30
cost = 55.50
#include <stdio.h> int main(void) { int repeat, ri; double cost, e; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf", &e); if(e<=50) cost=e*0.53; else cost=0.53*50+(e-50)*0.58; /*---------*/ printf("cost = %.2f\n", cost); } } |
20062 求m*m+1/m+(m+1)*(m+1)+1/(m+1)+......+n*n+1/n
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入两个正整数 m 和 n(m<=n),求 sum = m*m+1/m+(m+1)*(m+1)+1/(m+1)+(m+2)*(m+2)+1/(m+2)......+n*n+1/n,结果保留6位小数。
输入输出示例:括号内为说明
输入
3 (repeat=3)
1 2 (m=1,n=2)
2 5 (m=2,n=5)
5 10 (m=5,n=10)
输出
sum = 6.500000
sum = 55.283333
sum = 355.845635
#include <stdio.h> int main(void) { int i, m, n; int repeat, ri; double sum; scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); sum=0; for(i=m;i<=n;i++) sum=sum+i*i+1.0/i; /*---------*/ printf("sum = %.6f\n", sum); } } |
20063 求1-2/3+3/5-4/7+5/9-6/11+……
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数 n,计算1-2/3+3/5-4/7+5/9-6/11+……的前n项之和,输出时保留3位小数。
输入输出示例:括号内是说明
输入
3 (repeat=3)
1 (n=1)
3 (n=3)
5 (n=5)
输出
sum = 1.000
sum = 0.933
sum = 0.917
#include <stdio.h> int main(void) { int flag, i, n; float denominator; int repeat, ri; double item, sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; flag=1; denominator =1.0; for(i=1; i<=n; i++) { item=flag* i *1.0/ denominator; sum=sum+item; flag=-flag; denominator = denominator +2; } /*---------*/ printf("sum = %.3f\n", sum); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
编写一个程序,输入一个正整数 n,计算sum = 2^1+2^2+2^3+……的前 n 项之和,可以调用pow()函数求幂。
例:括号内是说明
输入
3 (repeat=3)
1
3
5
输出
sum = 2
sum = 14
sum = 62
#include <stdio.h> #include <math.h> int main(void) { int i,n; int repeat, ri; double sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; for(i=1;i<=n;i++) sum=sum+pow(2,i); /*---------*/ printf("sum = %.0f\n", sum); } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
编写一个程序,输入一个正整数 n,计算 e = 0!+1!+2!+……+n!,要求定义和调用函数fact(n)计算n!,函数类型是double。
例:括号内是说明
输入
3 (repeat=3)
1
2
4
输出
sum = 2
sum = 4
sum = 34
#include <stdio.h> int main(void) { int i,n; int repeat, ri; double sum; double fact(int n); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=1; for(i=1;i<=n;i++){ fact(i); sum=sum+fact(i); } /*---------*/ printf("sum = %.0f\n", sum); } } double fact(int n) { double result; int j; result=1; for(j=1;j<=n;j++) result=result*j; return result; } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入参数a,b,c,求一元二次方程a*x*x+b*x+c=0的根,结果保留2位小数。
输出使用以下语句:
printf("参数都为零,方程无意义!\n");
printf("a和b为0,c不为0,方程不成立\n");
printf("x = %0.2f\n", -c/b);
printf("x1 = %0.2f\n", (-b+sqrt(d))/(2*a));
printf("x2 = %0.2f\n", (-b-sqrt(d))/(2*a));
printf("x1 = %0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
printf("x2 = %0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
输入输出示例:括号内为说明
输入:
5 (repeat=5)
0 0 0 (a=0,b=0,c=0)
0 0 1 (a=0,b=0,c=1)
0 2 4 (a=0,b=2,c=4)
2.1 8.9 3.5 (a=2.1,b=8.9,c=3.5)
1 2 3 (a=1,b=2,c=3)
输出:
参数都为零,方程无意义!
a和b为0,c不为0,方程不成立
x = -2.00
x1 = -0.44
x2 = -3.80
x1 = -1.00+1.41i
x2 = -1.00-1.41i
#include <stdio.h> #include <math.h> int main(void) { int repeat, ri; double a, b, c, d; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%lf%lf", &a, &b, &c); d=b*b-4*a*c; if(a==0){ if(b==0){ if(c==0) printf("参数都为零,方程无意义!\n"); else printf("a和b为0,c不为0,方程不成立\n"); } else printf("x = %0.2f\n", -c/b); } else{ if(d>=0){ printf("x1 = %0.2f\n", (-b+sqrt(d))/(2*a)); printf("x2 = %0.2f\n", (-b-sqrt(d))/(2*a)); } else{ printf("x1 = %0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a)); printf("x2 = %0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a)); } } } } |
参考2
#include <stdio.h> #include <math.h> int main(void) { int repeat, ri; double a, b, c, d; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%lf%lf", &a, &b, &c); d=b*b-4*a*c; if(a==0&&b==0&&c==0) printf("参数都为零,方程无意义!\n"); if(a==0&&b==0&&c!=0) printf("a和b为0,c不为0,方程不成立\n"); if(a==0&&b!=0) printf("x = %0.2f\n", -c/b); if(a!=0&&d>=0){ printf("x1 = %0.2f\n", (-b+sqrt(d))/(2*a)); printf("x2 = %0.2f\n", (-b-sqrt(d))/(2*a)); } if(a!=0&&d<0){ printf("x1 = %0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a)); printf("x2 = %0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a)); } } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个整数 x,计算并输出下列分段函数 sign(x) 的值。
-1 x < 0
y = sign(x) = 0 x = 0
1 x > 0
输入输出示例:括号内是说明
输入
3 (repeat=3)
10 (x=10)
0 (x=0)
-98 (x=-98)
输出
sign(10) = 1 (x = 10时 y = 1)
sign(0) = 0 (x = 0时 y = 0)
sign(-98) = -1 (x = -98时y = -1)
#include <stdio.h> int main(void) { int repeat, ri; int x, y; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &x); if(x==0) y=0; else if(x>0) y=1; else y=-1; printf("sign(%d) = %d\n", x, y); } } |
30004 显示五级记分制成绩所对应的百分制成绩区间(使用switch)
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入五级制成绩(A-E),输出相应的百分制成绩(0-100)区间,要求使用switch语句。
五级制成绩对应的百分制成绩区间为:A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示"Invalid input"。
输出使用以下语句:
printf("90-100\n");
printf("80-89\n");
printf("70-79\n");
printf("60-69\n");
printf("0-59\n");
printf("Invalid input\n");
输入输出示例:括号内是说明
输入
6ABCDEj (repeat=6,输入的五级成绩分别为A、B、C、D、E和无效的字符j)
输出
90-100
80-89
70-79
60-69
0-59
Invalid input (输入数据不合法)
#include <stdio.h> int main(void) { char ch; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ ch = getchar(); switch(ch){ case'A': printf("90-100\n"); break; case'B': printf("80-89\n"); break; case'C': printf("70-79\n"); break; case'D': printf("60-69\n"); break; case'E': printf("0-59\n"); break; default: printf("Invalid input\n"); break; } } return 0; } |
查询水果的单价。有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是3.00元/公斤,2.50元/公斤,4.10元/公斤和10.20元/公斤。
在屏幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。
当用户输入编号1~4,显示相应水果的单价(保留1位小数);输入0,退出查询;输入其他编号,显示价格为0。
输入输出示例:括号内是说明
输入
3 (oranges的编号)
0 (退出查询)
输出
[1] apples
[2] pears
[3] oranges
[4] grapes
[0] Exit
price = 4.1
[1] apples
[2] pears
[3] oranges
[4] grapes
[0] Exit
#include <stdio.h> int main(void) { int choice, i; double price; for(i = 1; i <= 5; i++){ printf("[1] apples\n"); printf("[2] pears\n"); printf("[3] oranges\n"); printf("[4] grapes\n"); printf("[0] Exit\n"); scanf("%d", &choice); if(choice == 0) break; else{ switch (choice){ case 1: price= 3.00; break; case 2: price=2.50; break; case 3: price=4.10; break; case 4: price=10.20; break; default: price=0; break; } printf("price = %0.1f\n", price); } } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入三角形的3条边 a, b, c,如果能构成一个三角形,输出面积 area 和周长 perimeter(保留2位小数);否则,输出"These sides do not correspond to a valid triangle"。
在一个三角形中,任意两边之和大于第三边。三角形面积计算公式:area = (s(s-a)(s-b)(s-c))^0.5 ,其中s = (a+b+c)/2
输出使用以下语句:
printf("area = %.2f, perimeter = %.2f\n",area, perimeter);
printf("These sides do not correspond to a valid triangle\n");
输入输出示例:括号内是说明
输入
2 (repeat=2)
5 5 3 (a=5,b=5,c=3)
1 4 1 (a=1,b=4,c=1)
输出
area = 7.15, perimeter = 13.00
These sides do not correspond to a valid triangle
#include <stdio.h> #include <math.h> int main(void) { int a, b, c; int repeat, ri; double area, perimeter, s; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d%d", &a, &b, &c); if ((a+b>c)&& (a+c>b) && (b+c>a) ){ perimeter=a+b+c; s=(a+b+c)/2.00; area =sqrt(s*(s-a)*(s-b)*(s-c)); printf("area = %.2f, perimeter = %.2f\n",area, perimeter); } else printf("These sides do not correspond to a valid triangle\n"); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个职工的月薪 salary,输出应交的个人所得税 tax(保留2位小数)。
计算公式:tax = rate * (salary - 850)
当 salary ≤850 时,rate = 0
当 850 < salary ≤ 1350 时,rate = 5%
当 1350 < salary≤ 2850 时,rate = 10%
当 2850 < salary ≤ 5850 时,rate = 15%
当 5850 < salary 时,rate = 20%
输入输出示例:括号内是说明
输入
5 (repeat=5)
1010.87 (salary=1010.87)
32098.76 (salary=32098.76)
800 (salary=800)
4010 (salary=4010)
2850 (salary=2850)
输出
tax = 8.04
tax = 6249.75
tax = 0.00
tax = 474.00
tax = 200.00
#include <stdio.h> int main() { int ri, repeat; double rate, salary, tax; scanf("%d", &repeat); for(ri=1; ri<=repeat; ri++) { scanf("%lf", &salary); if (salary<=850) { rate=0; tax=rate*(salary-850); } else if (salary<=1350) { rate=0.05; tax=rate*(salary-850); } else if (salary<=2850) { rate=0.10; tax=rate*(salary-850); } else if (salary<=5850) { rate=0.15; tax=rate*(salary-850); } else { rate=0.20; tax=rate*(salary-850); } printf("tax = %0.2f\n", tax); } }
|
30009 统计学生成绩(对应教材习题3-4 ,统计学生成绩)
输入一个正整数 n,再输入 n 个学生的百分制成绩,统计各等级成绩的个数。成绩等级分为五级,分别为A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59)。
输入输出示例:括号内是说明
输入
5 (n=5)
77 54 92 73 60
输出
Number of A(90-100): 1
Number of B(80-89): 0
Number of C(70-79): 2
Number of D(60-69): 1
Number of E(0-59): 1
#include <stdio.h> int main(void) { int mark, n, i; int na,nb,nc,nd,ne; scanf("%d",&n); na=nb=nc=nd=ne=0; for(i=1; i<=n; i++){ scanf("%d",&mark); /*---------*/ if(mark>=90&&mark<=100) na++; else if(mark>=80&&mark<=89) nb++; else if(mark>=70&&mark<=79) nc++; else if(mark>=60&&mark<=69) nd++; else ne++; } printf("Number of A(90-100): %d\n", na); printf("Number of B(80-89): %d\n", nb); printf("Number of C(70-79): %d\n", nc); printf("Number of D(60-69): %d\n", nd); printf("Number of E(0-59): %d\n", ne); return 0; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个形式如"操作数 运算符 操作数"的表达式,对2个整数进行乘、除和求余运算。
输出使用以下语句:
printf("%d * %d = %d\n", x, y, x * y);
printf("%d / %d = %d\n", x, y, x / y);
printf("%d Mod %d = %d\n",x, y, x % y);
printf("Invalid operator\n");
输入输出示例:括号内是说明
输入
4 (repeat=4)
21*8
21/8
21%8
21!8
输出
21 * 8 = 168
21 / 8 = 2
21 Mod 8 = 5
Invalid operator
#include <stdio.h> int main(void) { char sign; int x, y; int repeat, ri; scanf("%d",&repeat); for(ri = 1;ri <= repeat; ri++){ scanf("%d%c%d", &x, &sign, &y); /*---------*/ switch (sign) { case '*': printf("%d * %d = %d\n", x, y, x * y); break; case '/': printf("%d / %d = %d\n", x, y, x / y); break; case '%': printf("%d Mod %d = %d\n",x, y, x % y);break; default: printf("Invalid operator\n");break; } } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)与月用水量x(吨)的函数关系式如下。
输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数)。要求用嵌套的if-else语句。
0 (x<0)
y = f(x) = 4x/3 (0<=x<=15)
2.5x-10.5 (x>15)
输入输出示例:括号内是说明
输入
3 (repeat=3)
-0.5 (x=-0.5)
9.5 (x=9.5)
21.3 (x=21.3)
输出
f(-0.50) = 0.00
f(9.50) = 12.67
f(21.30) = 42.75
#include <stdio.h> int main(void) { int repeat, ri; double x, y; scanf("%d", &repeat); for(ri = 1;ri <= repeat; ri++){ scanf("%lf", &x); if(x<0) y=0; else if(x>=0&&x<=15) y=4.0*x/3; else y=2.5*x-10.5; printf("f(%.2f) = %.2f\n", x, y); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
某城市普通出租车收费标准如下:"起步里程3公里,起步费10元;超起步里程后10公里内,每公里租费2元,超过10公里以上的部分加收50%的回空补贴费,即每公里租费3元。营运过程中,因路阻及乘客要求临时停车的,每5分钟按1公里租费计收。运价计费尾数四舍五入,保留到元。"。
编写程序,输入行驶里程(公里)与等待时间(分钟),计算并输出乘客应支付的车费(元)。
提示:先将等待的时间折算成公里数,与原公里数相加后再处理。
输入输出示例:括号内是说明
输入
3 (repeat=3)
1.6 2 52 (行驶1.6公里,等待2分52秒)
3.1 6 15 (行驶3.1公里,等待6分15秒)
11.8 2 30 (行驶11.8公里,等待2分30秒)
输出
cost = 10
cost = 13
cost = 31
#include <stdio.h> int main(void) { int repeat, ri; int minutes, seconds; double cost, mile; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%d%d", &mile, &minutes, &seconds); mile=mile+(minutes*60+seconds)*1.0/300; /*先将所有的等待时间转换成公里 */ if(mile<=3) cost=10; else if(mile<=10) cost=10+(mile-3)*2; else cost=10+7*2+(mile-10)*3; printf("cost = %.0f\n", cost); } } |
程序填空,不要改变与输入输出有关的语句。
输入21世纪所有的闰年。判断闰年的条件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。
输出使用语句 printf("%d\n",year);
输入输出示例:括号内是说明
输出
2000
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
2052
2056
2060
2064
2068
2072
2076
2080
2084
2088
2092
2096
#include <stdio.h> int main(void) { int year; for(year = 2000; year <= 2099; year++){ if((year%4==0 && year%100!=0)||(year%400==0)) printf("%d\n",year); } } |
40011 求最小公倍数和最大公约数(调试示例error04_1)
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入两个正整数m和n,输出它们的最小公倍数和最大公约数。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
3 7 (m=3,n=7)
24 4 (m=24,n=4)
24 18 (m=24,n=18)
输出:
21 is the least common multiple of 3 and 7, 1 is the greatest common divisor of 3 and 7.
24 is the least common multiple of 24 and 4, 4 is the greatest common divisor of 24 and 4.
72 is the least common multiple of 24 and 18, 6 is the greatest common divisor of 24 and 18.
#include <stdio.h> int main(void) { int gcd, lcm, m, n,c; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++) { scanf("%d", &m); scanf("%d", &n); for(lcm=1; ;lcm++) { if(lcm%m==0&&lcm%n==0) /* 最小共倍数 lcm */ break; } gcd = m*n/lcm; printf("%d is the least common multiple of %d and %d, %d is the greatest common divisor of %d and %d.\n", lcm, m, n, gcd, m, n); } return 0; } |
40012 求1-1/4+1/7-1/10+1/13-1/16+……
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入1个正实数 eps,计算并输出下式的值,精确到最后一项的绝对值小于 eps(保留6位小数)。请使用 while 语句实现循环。
计算:1-1/4+1/7-1/10+1/13-1/16+……
输入输出示例:括号内是说明
输入
2 (repeat=2)
2E-4 (eps=2E-4)
0.02 (eps=0.02)
输出
sum = 0.835549
sum = 0.826310
#include <stdio.h> #include <math.h> int main(void) { int denominator, flag; int repeat, ri; double eps, item, sum; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%le", &eps); sum=0; denominator=1; flag=1; item=1.0; while(fabs(item)>=eps){ item=flag*1.0/denominator; sum=sum+item; flag=-flag; denominator=denominator+3; } printf("sum = %.6f\n", sum); } return 0; } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入一批正整数(以零或负数为结束标志),求其中的奇数和。请使用while语句实现循环。
输入输出示例:括号内是说明
输入
2 (repeat=2)
1 3 90 7 0
8 7 4 3 70 5 6 101 -1
输出
The sum of the odd numbers is 11.
The sum of the odd numbers is 116.
#include <stdio.h> int main(void) { int x, sum; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++) { scanf("%d", &x); sum=0; while(x>0) { if(x%2!=0) sum+=x; scanf("%d", &x); } printf("The sum of the odd numbers is %d.\n", sum); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个整数 in,求它的位数。例如123的位数是3。请使用do-while语句实现循环。
输入输出示例:括号内是说明
输入
4 (repeat=4)
12345 (in=12345)
-100 (in=-100)
-1 (in=-1)
1290 (in=1290)
输出
count = 5 (12345的位数是5)
count = 3 (-100的位数是3)
count = 1 (-1的位数是1)
count = 4 (99的位数是2)
#include <stdio.h> int main(void) { int count, in; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &in); count=0; if(in<0) in=-in; do{ count++; in=in/10; } while (in!=0); printf("count = %d\n", count); } return 0; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个整数 in,求它的位数以及各位数字之和。例如 123 的各位数字之和是 6,位数是 3。
输入输出示例:括号内是说明
输入
4 (repeat=4)
0 (in=0)
23456 (in=23456)
-100 (in=-100)
-1 (in=-1)
输出
count = 1, sum = 0 (0的位数是1, 各位数字之和是0)
count = 5, sum = 20 (23456的位数是5, 各位数字之和是20)
count = 3, sum = 1 (-100的位数是3, 各位数字之和是1)
count = 1, sum = 1 (-1的位数是1, 各位数字之和是1)
#include <stdio.h> int main(void) { int count, in, sum; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &in); count=0; sum=0; if(in<0) in=-in; do{ count++; sum+=in%10; in=in/10; } while (in!=0); printf("count = %d, sum = %d\n", count, sum); } return 0; }
|
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n,输出 2/1+3/2+5/3+8/5+……前n项之和,保留2位小数。(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子)
输入输出示例:括号内是说明
输入
3 (repeat=3)
1 (n=1)
5 (n=5)
20 (n=20)
输出
sum = 2.00 (第1项是2.00)
sum = 8.39 (前5项的和是8.39)
sum = 32.66 (前20项的和是32.66)
#include <stdio.h> int main(void) { int i, n; int repeat, ri; double denominator, numerator, sum, temp; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); sum=0; denominator=1; numerator=2; for(i=1;i<=n;i++){ sum += numerator/denominator; temp = denominator; /* 为求下一项分子,保留当前项分母 */ denominator=numerator; numerator=numerator+temp; } printf("sum = %.2f\n",sum); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
皮球从 height(米)高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第 n 次落地时,在空中一共经过多少距离?第 n 次反弹的高度是多少?(输出保留1位小数)
输入输出示例:括号内是说明
输入
3 (repeat=3)
10 2 (height=10m, n=2)
4 1 (height=2m, n=1)
100 8 (height=100m, n=8)
输出
distance=20.0, height=2.5 (第2次落地时,空中经过距离为20米, 第2次反弹高度为2.5米)
distance=4.0, height=2.0 (第1次落地时,空中经过距离为4米,第1次反弹高度为2米)
distance=298.4, height=0.4 (第8次落地时,空中经过距离为298.4米,第8次反弹高度为0.4米)
#include <stdio.h> int main(void) { int i, n; int repeat, ri; double distance, height, bh; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%d", &height, &n); /*---------*/ distance = height; bh = height/2.0; if ( n>1 ) for (i = 2; i<=n; i++) { distance += bh*2; bh = bh/2; } printf("distance = %.1f, height = %.1f\n", distance, bh); } } |
40021 使用嵌套循环求e = 1+1/1!+1/2!+....+1/n!
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入1个正整数n,计算下式的前n+1项之和(保留4位小数)。要求使用嵌套循环。
e = 1+1/1!+1/2!+....+1/n!
输入输出示例:括号内为说明
输入:
2 (repeat=2)
2 (n=2)
10 (n=10)
输出:
e = 2.5000
e = 2.7183
#include "stdio.h" int main(void) { int i, j, n; int repeat, ri; double e, product; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); e = 1.0; for (i = 1; i<= n; i++) { product = 1; for (j = 1; j<=i ; j++) { product *= j; } e += 1.0/product; } /*---------*/ printf("e = %0.4f\n", e); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
将一笔零钱(大于8分,小于1元, 精确到分)换成5分、2分和1分的硬币。
输入金额,问有几种换法?针对每一种换法,每种硬币至少有一枚,请输出各种面额硬币的数量和硬币的总数量。
要求:硬币面值按5分、2分、1分顺序,各类硬币数量依次从大到小的顺序,输出各种换法。
输出使用语句:printf("fen5:%d,fen2:%d,fen1:%d,total:%d\n",fen5, fen2, fen1, fen5+fen2+fen1);
输入输出示例:括号内为说明
输入:
2 (repeat=2)
10 (money=10分)
13 (money=13分)
输出:
fen5:1,fen2:2,fen1:1,total:4
fen5:1,fen2:1,fen1:3,total:5
count = 2 (10分有2种换法)
fen5:2,fen2:1,fen1:1,total:4
fen5:1,fen2:3,fen1:2,total:6
fen5:1,fen2:2,fen1:4,total:7
fen5:1,fen2:1,fen1:6,total:8
count = 4 (13分有4种换法)
#include "stdio.h" int main(void) { int count, fen1, fen2, fen5, money; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &money); count=0; for(fen5=money/5;fen5>=1;fen5--) for(fen2=money/2;fen2>=1;fen2--) for(fen1=money/1;fen1>=1;fen1--) if(fen5*5+fen2*2+fen1*1==money){ printf("fen5:%d,fen2:%d,fen1:%d,total:%d\n",fen5, fen2, fen1, fen5+fen2+fen1); count++;} printf("count = %d\n", count); } return 0; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入两个正整数 m 和 n(1<=m, n<=1000),输出 m 到 n之间的所有满足各位数字的立方和等于它本身的数。
例如153的各位数字的立方和是 1^3+5^3+3^3=153 ,这里a^b表示a的b次方。
输出使用语句:printf("%d\n", i);
输入输出示例:括号内为说明
输入:
2 (repeat=2)
100 400 (m=100, n=400)
1 100 (m=1, n=100)
输出:
result:
153 (1*1*1+5*5*5+3*3*3=153)
370 (3*3*3+7*7*7=370)
371 (3*3*3+7*7*7+1*1*1=371)
result:
1 (1*1*1=1)
#include <stdio.h> int main(void) { int i, digit, m, n, number, sum; int repeat, ri; scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); printf("result:\n"); for(i=m;i<=n;i++){ number=i; sum=0; while(number>0){ digit=number%10; sum=sum+digit*digit*digit; number=number/10; } if(sum==i) printf("%d\n",i); } } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入两个正整数 m 和 n(1<=m, n<=1000),输出 m 到 n之间的所有完数,并输出其因子。一个数如恰好等于它的因子之和,这个数称为完数,例如,6=1+2+3,其中1、2、3为因子,6为因子和。
输出使用以下语句:
printf("%d = 1", number);
printf(" + %d", factor);
printf("\n");
输入输出示例:括号内为说明
输入:
2 (repeat=2)
1 30 (m=1, n=30)
400 500 (m=400, n=500)
输出
result:
1 = 1
6 = 1 + 2 + 3 // 此题目表述不够严谨,6也是6的约数
28 = 1 + 2 + 4 + 7 + 14
result:
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
#include <stdio.h> int main(void) { int factor, m, n, number, sum; int repeat, ri; scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); printf("result:\n"); for (number=m;number<=n;number++) { sum=1; for (factor=2;factor<=number/2;factor++) if (number%factor==0) sum=sum+factor; if (sum==number) { printf("%d = 1",number); for (factor=2;factor<number;factor++) if (number%factor==0) printf(" + %d",factor); printf("\n"); } } printf("\n"); } } |
程序填空,不要改变与输入输出有关的语句。
验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。
输入两个正整数 m 和 n(6<=m, n<=100),将 m 到 n 之间的偶数表示成两个素数之和,打印时一行打印5组。
输出使用语句:printf("%d=%d+%d ", number, i, number - i);
输入输出示例:括号内为说明
输入:
89 100 (m=90, n=100)
输出:
90=7+83 92=3+89 94=5+89 96=7+89 98=19+79
100=3+97
#include "stdio.h"
#include "math.h"
int main(void)
{
int count, i, j, k, m, n, number;
scanf("%d%d", &m, &n);
if(m % 2 != 0) m = m + 1;
if(m >= 6){
/*---------*/
}
}
#include <stdio.h> int prime(int m) { int i, ifPrime=0; if(m==1) return 0; for(i=2;i<=m/2;i++) { if(m%i==0) break; } if(i>m/2) ifPrime=1; return ifPrime; } int main(void) { int count, i, m, n, number; scanf("%d%d", &m, &n); if(m % 2 != 0) m = m + 1; if(m >= 6) { count=0; for(number=m;number<=n;number=number+2) { for(i=1;i<=number/2;i++) { if( prime(i) && prime(number-i) ) { printf("%d=%d+%d ", number, i, number-i); count++; if(count%5==0) printf("\n"); break; } } } } } |
注:此题标准答案是输出每个数的第一对满足条件的素数之和,但是:
90=7+83 90=11+79 90=17+73 90=19+71 90=23+67 ...90=83+7
也都是满足条件的, 而机器只对输出第一种为正确解
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个整数 in,从高位开始逐位分割并输出它的各位数字。
输出使用语句:printf("%-2d", digit);
输入输出示例:括号内为说明
输入
3 (repeat=3)
23456 (in=23456)
-600 (in=-600)
8 (in=8)
输出
2 3 4 5 6
6 0 0
8
#include <stdio.h> int main(void) { int digit, in, power, temp, k; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &in); if(in<0) in=-in; power=in; temp=0; k = 1; while(power>0) { power=power/10; temp++; k = k * 10; } power=in; while(temp>0) /* temp是控制循环次数 */ { temp --; k = k/10; digit = power / k; power = power % k; /* power向右推进 */ printf("%-2d",digit); } printf("\n"); } return 0; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
从键盘输入一批学生的成绩(以负数为结束标志),计算平均分(保留2位小数),并统计不及格成绩的个数。
输入输出示例:括号内为说明
输入
2 (repeat=2)
67 88 73 54 82 –3
8 7 4 3 70 5 6 100 -1
输出
Grade average is 72.80,the number of fail is 1
Grade average is 25.38,the number of fail is 6
#include <stdio.h> int main(void) { int fail, num; int repeat, ri; double grade, total; scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ total=0; num=0; fail=0; do{ scanf ("%lf", &grade); if(grade<0)break; num++; if(grade<60) fail++; total=total+grade; }while(grade>=0); if(num > 0) printf("Grade average is %.2f,the number of fail is %d\n", total/num, fail); } return 0; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一批正整数(以零或负数为结束标志),求其中的偶数和。
输入输出示例:括号内为说明
输入
2 (repeat=2)
1 3 90 7 0
8 7 4 3 70 5 6 101 -1
输出
The sum of the even numbers is 90.
The sum of the even numbers is 88.
#include <stdio.h> int even(int n); int main(void) { int n, sum; int ri, repeat; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ sum=0; scanf("%d",&n); while (n>0){ if (!(n % 2)) sum=sum+n; scanf("%d",&n); } printf("The sum of the even numbers is %d.\n", sum); } } |
40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……的值
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入1个实数 x,计算并输出下式的值,直到最后一项的绝对值小于0.00001(保留2位小数)。要求定义和调用函数fact(n)计算n的阶乘,可以调用pow函数求幂。
s = x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……
输入输出示例:括号内为说明
输入
3 (repeat=3)
0 (x=0)
1 (x=1)
0.1 (x=0.1)
输出
s = 0.00
s = 1.72
s = 0.11
#include <stdio.h> #define MY_EPS 0.00001 int main(void) { int i; int repeat, ri; double item, s, x; double fact(int n); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf", &x); i=2; item=x; s=x; while(item*x/fact(i)>= MY_EPS){ item=item*x; s+=item/fact(i); i++; } printf("s = %.2f\n", s); } } double fact(int n) { int j; double product; product = 1; for(j=1;j<=n;j++) product = product *j; return product; }
|
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数 m(1<m<1000),将 m 分解质因数。
输出使用以下语句:
printf("%d*", i);
输入输出示例:括号内为说明
输入
3 (repeat=3)
2 (m=2)
8 (m=8)
90 (m=90)
输出
2 = 2
8 = 2*2*2
90 = 2*3*3*5
#include "stdio.h" int prime(int n); int main(void) { int i, m; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &m); printf("%d = ", m); while ( (prime(m)!=1) && ( m != 1) ){ /* ( m != 1) 不考虑,会死机 , 永远while */ for(i=2;i<=m;i++){ if(m%i==0){printf("%d*", i); m=m/i; break;} } } printf("%d\n", m); } return 0; } int prime(int n) { int i; if (n == 1) return 0; for(i=2;i<=n/2;i++){ if(n%i==0) return 0; } return 1; } |
输入一个正整数repeat (0<repeat<10),做repeat次下列操作:
输入一个正整数n,打印一个边长为 n 的菱形图案。
输出使用以下语句:
printf(" ");
printf("* ");
printf("\n");
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
4 (n=4)
输出
* (n=3的菱形图案)
* * *
* * * * *
* * *
*
* (n=4的菱形图案)
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
#include <stdio.h> int main(void) { int n; int repeat, ri; int nRow, nVal, nCol; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for (nRow = 1; nRow <= n*2-1; nRow++) { if (nRow <= n) nVal = nRow; else nVal = 2*n - nRow; for (nCol=1; nCol <= n-nVal ;nCol++) printf(" "); for (nCol=1;nCol<= nVal*2-1; nCol++) printf("* "); printf("\n"); } } } |
程序填空,不要改变与输入输出有关的语句。
从键盘输入一个正整数n,计算 n! 的值。要求定义和调用函数fact(n),计算n!,函数形参n的类型是int,函数类型是double。
输入输出示例:括号内是说明
5 (n=5)
5! = 120.000000
#include <stdio.h>
int main(void)
{
int n;
double factorial;
double fact(int n);
scanf ("%d", &n);
/*---------*/
printf("%d! = %f\n", n, factorial);
}
#include <stdio.h> int main(void) { int n; double factorial; double fact(int n); scanf ("%d", &n); /*---------*/ factorial =fact(n); printf("%d! = %f\n", n, factorial); } double fact(int n) { int i; double product = 1; for (i = 1; i<= n; i++) product *= i; return product; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入1个整数 x,若 x 大于0,sign(x) = 1;若 x 等于0,sign(x) = 0;否则,sign(x) = -1,最后输出sign(x)的值。
要求定义和调用函数sign(x)实现该分段函数, 函数形参x的类型是int,函数类型是int。
输入输出示例:括号内是说明
输入
3 (repeat=3)
10 (x=10)
-5 (x=-5)
0 (x=0)
输出
sign(10) = 1 (x=10时sign(x)的值为1)
sign(-5) = -1 (x=-5时sign(x)的值为-1)
sign(0) = 0 (x=0时sign(x)的值为0)
#include <stdio.h> int sign(int x); int main(void) { int x, y; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d",&x); y=sign(x); printf("sign(%d) = %d\n", x, y); } } int sign(int x) { int t=0; if(x<0) t=-1; else if(x==0) t=0; else t=1; return t; }
|
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一批正整数(以零或负数为结束标志),求其中的奇数和。
要求定义和调用函数even(n) 判断数的奇偶性,当n为偶数时返回1,否则返回0,函数形参n的类型是int,函数类型是int。
输入输出示例:括号内是说明
输入
2 (repeat=2)
12 9 7 18 3 11 20 0
11 8 6 17 2 10 19 -1
输出
The sum of the odd numbers is 30.
The sum of the odd numbers is 47.
#include <stdio.h> int even(int n); int main(void) { int n, sum; int ri, repeat; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ sum=0; scanf("%d",&n); while (n>0){ if (even(n)==0) sum=sum+n; scanf("%d",&n); } printf("The sum of the odd numbers is %d.\n", sum); } } int even(int n) { int t; if (n%2==0) t=1; else t=0; return t; } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
给定平面任意两点坐标 (x1, y1) 和 (x2, y2),求这两点之间的距离(保留2位小数)。
要求定义和调用函数 dist(x1, y1, x2, y2)计算两点间的距离,函数形参x1、y1、x2和y2的类型都是double,函数类型是double。
输入输出示例:括号内是说明
输入
1 (repeat=1)
10 10 (x1=10, y1=10)
200 100 (x2=200, y2=100)
输出
Distance = 210.24
#include <stdio.h> #include <math.h> double dist(double x1, double y1, double x2, double y2); int main(void) { int repeat, ri; double distance, x1, y1, x2, y2; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2); distance=dist(x1, y1, x2, y2); printf("Distance = %.2f\n", distance); } } double dist(double x1, double y1, double x2, double y2) { double a,b,c; a=(x2-x1)*(x2-x1); b=(y1-y2)*(y1-y2); c=sqrt((a+b)); return c; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入2个正整数 m 和 n(1<=m,n<=500),统计并输出 m 到 n 之间的素数的个数以及这些素数的和。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
要求定义并调用函数 prime(m) 判断m是否为素数,当m为素数时返回1,否则返回0,函数形参 m 的类型是int,函数类型是int。
输入输出示例:括号内是说明
输入:
1 (repeat=1)
1 10 (m=1, n=10)
输出:
Count = 4, sum = 17 (1到10之间有4个素数:2,3,5,7)
#include "stdio.h" #include "math.h" int main(void) { int count, i, m, n, sum; int repeat, ri; int prime(int m); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); sum=0; count=0; if (m==1) m++; /* 若第一个数是1, 可直接判定下一个数 */ for(i=m;i<=n;i++){ if(prime(i)==1){ sum=sum+i; count++; } } printf("Count = %d, sum = %d\n", count, sum); } } int prime(int m) { int t, result; if (m == 1) return 0; result = 0; for ( t=2; t <= m/2; t++) if (m%t == 0) break; if (t>m/2) result=1; return result; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
读入1 个整数in,再输入一个数字digit(0≤digit<10),统计并输出整数 in 中数字 digit 的个数。
要求定义并调用函数countdigit(number,digit),它的功能是统计整数 number 中数字 digit 的个数 ,函数形参number和digit的类型是int,函数类型是int。例如,countdigit(10090,0)的返回值是3。
输入输出示例:括号内是说明
输入
2 (repeat=2)
21252 2 (number=21252, digit=2)
-1111 9 (number=-1111, digit=9)
输出
Number 21252 of digit 2: 3 (21252中有3个2)
Number -1111 of digit 9: 0 (-1111中有0个9)
#include "stdio.h" int main(void) { int count, digit, in; int repeat, ri; int countdigit(int number, int digit); scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &in, &digit); count=countdigit(in,digit); printf("Number %d of digit %d: %d\n", in, digit, count); } } int countdigit(int number,int digit) { int c,t; c=0; if(number<0) number=-number; do { t=number%10; number=number/10; if(t==digit) c++; } while (number!=0); return c; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入2 个正整数 m 和 n(1<=m,n<=1000),输出 m 到 n 之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。
要求定义并调用函数is(number)判断 number 的各位数字之立方和是否等于其自身,若相等则返回1,否则返回0,函数形参 number 的类型是int,函数类型是int。
输出使用语句:printf("%d\n", i);
输入输出示例:括号内是说明
输入:
2 (repeat=2)
100 400 (m=100, n=400)
1 100 (m=1, n=100)
输出:
result: (100 到400之间的水仙花数)
153 (1*1*1+5*5*5+3*3*3=153)
370 (3*3*3+7*7*7=370)
371 (3*3*3+7*7*7+1*1*1=371)
result: (1到100之间的水仙花数)
1 (1*1*1=1)
#include "stdio.h" int main(void) { int i, m, n; int repeat, ri; int is(int number); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); printf("result:\n"); for (i=m;i<=n;i++) { if(is(i)==1) printf("%d\n", i); } } } int is(int number) { int sum,res,t,j; res=1; sum=0; j=number; while (j!=0) { t=j%10; j=j/10; sum=sum+t*t*t; } if(sum!=number) res=0; return res; } |
50008 使用函数求1! + 2! + … + m!(改错题error05_2)
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 m(0<m<10),求1! + 2! + … + m!,要求定义并调用函数fact(n)计算 n!,函数形参 n 的类型是int,函数类型是double。
输入输出示例:括号内是说明
输入
5 (m=5)
输出:
1!+2!+...+5! = 153.000000
#include <stdio.h> double fact(int n); int main(void) { int i, m; double sum; scanf("%d", &m); sum=0; for(i=1;i<=m;i++) sum=sum+fact(i); printf("1!+2!+...+%d! = %f\n", m, sum); } double fact(int n) { int i; double x; if (n == 0) return 1.0; x=1; for(i=1;i<=n;i++) x=x*i; return x; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入精度 e 和 x,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。
cos(x) = x^0/0!-x^2/2!+x^4/4!-x^6/6!+……
要求定义并调用函数 funcos(e,x)计算 cos(x) 的值,函数形参e和x的类型均为double,函数类型是double。
输入输出示例:括号内是说明
输入:
2 (repeat=2)
0.001 0 (e=0.001, x=0)
0.0001 -3.14 (e=0.0001, x=-3.14)
输出:
sum = 1.000000
sum = -0.999999
#include "stdio.h" #include "math.h" double funcos(double e, double x); int main(void) { int repeat, ri; double e, sum, x; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%le%le", &e, &x); sum=funcos(e,x); printf("sum = %f\n", sum); } } double funcos(double e, double x) { int flag,n; double sum,t; sum=1; flag=-1; n=2; t=1; while(fabs(t)>=e){ t=flag*t*x*x/(n*n-n); sum=sum+t; n=n+2; } return sum; } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n(n<10),输出n行数字金字塔。要求定义并调用函数pyramid(n)输出n行数字金字塔,函数形参n的类型是int,函数类型是void。
输出使用以下语句:
printf(" ");
printf("%d ", i);
输入输出示例:括号内是说明
输入
2 (repeat=2)
5 (n=5)
2 (n=2)
输出:
1 (n=5时的数字金字塔)
2 2
3 3 3
4 4 4 4
5 5 5 5 5
1 (n=2时的数字金字塔)
2 2
#include <stdio.h> int main(void) { int n; int repeat, ri; int nRow, nCol; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for (nRow = 1; nRow <= n; nRow++) { for (nCol=1; nCol <= n-nRow ;nCol++) printf(" "); for (nCol=1;nCol<= nRow*2-1; nCol++) printf("%d ", nRow); printf("\n"); } } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入两个整数a和b,输出其中较大的数。要求定义和调用函数max(a, b)找出a、b中较大的数,函数形参a、b的类型是int,函数类型是int。
输入输出示例:括号内是说明
输入
3 (repeat=3)
输入:
5 8 (a=5, b=8)
-1 -10 (a=-1, b=-10)
1 1 (a=1, b=1)
输出:
max(5,8) = 8
max(-1,-10) = -1
max(1,1) = 1
#include <stdio.h> int main(void) { int a, b, maximum; int repeat, ri; int max(int a, int b); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d",&a, &b); maximum=max(a,b); printf("max(%d,%d) = %d\n", a, b, maximum); } } int max(int a, int b) { int c; c=a; if (c<b) c=b; return c; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入两个正整数 a 和 n, 求a+aa+aaa+aa…a(n个a)之和。
要求定义并调用函数fn(a, n),它的功能是返回 aa…a(n个a),函数形参a和n的类型是int,函数类型是long。例如,fn(3,2)的返回值是33。
输入输出示例:括号内是说明
输入
2 (repeat=2)
2 3 (a=2, n=3)
8 5 (a=8, n=5)
输出
246 (2+22+222)
98760 (8+88+888+8888+88888)
#include <stdio.h> int main(void) { int a, i, n; int ri, repeat; long sn; long fn(int a, int n); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%ld%d", &a, &n); sn=0; for(i=1;i<=n;i++) sn+=fn(a,i); printf("%ld\n", sn); } } long fn(int a, int n) { int sum,j,b; sum=a; b=a; for(j=1;j<n;j++) { b=b*10; sum+=b; } return sum; } |
50062 使用函数输出指定范围内的 Fibonacci 数
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入两个正整数 m 和 n(1<=m,n<=10000),输出 m 到 n 之间所有的Fibonacci数。
Fibonacci 序列(第一项起):1 1 2 3 5 8 13 21 ......
要求定义并调用函数fib(n),它的功能是返回第 n 项Fibonacci数,函数形参n的类型是int,函数类型是long。例如,fib(7)的返回值是13。
输出使用语句:printf("%ld ", f);
输入输出示例:括号内是说明
输入:
3 (repeat=3)
1 10 (m=1, n=10)
20 100 (m=20, n=100)
1000 6000 (m=1000, n=6000)
输出:
1 1 2 3 5 8 (1到10之间的Fibonacci数)
21 34 55 89 (20到100之间的Fibonacci数)
1597 2584 4181 (1000到6000之间的Fibonacci数)
#include "stdio.h" int main(void) { int i, m, n; int repeat, ri; long f; long fib(int n); scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); f = 1; i =1; while (f <=n) { if(f>=m) printf("%d ", f); f=fib(++i); } printf("\n"); } } long fib(int n) { int i; long a=1, b=1, c; if(n==1 || n==2) return 1; for(i=3;i<=n;i++) { c=a+b; a=b; b=c; } return c; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入两个正整数 m 和 n(1<=m,n<=1000),输出 m 到 n 之间的所有完数,完数就是因子和与它本身相等的数。
要求定义并调用函数 factorsum(number),它的功能是返回number的因子和,函数形参number的类型是整型,函数类型是整型。例如,factorsum(12)的返回值是16(1+2+3+4+6)。
输出使用语句:printf("%d ", i);
输入输出示例:括号内是说明
输入:
2 (repeat=2)
20 500 (m=20 n=500)
1 100 (m=1, n=100)
输出:
28 496 (20到500之间的完数有:28,496)
1 6 28 (1到100之间的完数有:1,6,28)
#include "stdio.h" int main(void) { int i, m, n; int repeat, ri; int factorsum(int number); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d", &m, &n); for(i=m;i<=n;i++){ if(i==factorsum(i)) printf("%d ", i); } printf("\n"); } } int factorsum(int number) { int t,sum; sum=0; if(number==1) sum=1; else { for(t=1;t<=number/2;t++){ if(number%t==0) sum=sum+t; } } return sum; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个整数 in,输出其逆序数。
要求定义并调用函数reverse(number),它的功能是返回number的逆序数,函数形参number的类型是int,函数类型是int。例如,reverse(12345)的返回值是54321。
输入输出示例:括号内是说明
输入
5 (repeat=4)
12345 (in=12345)
-100 (in=-100)
-2 (in=-2)
99 (in=99)
0 (in=0)
输出
54321 (12345的逆序数)
-1 (-100的逆序数)
-2 (-2的逆序数)
99 (99的逆序数)
0 (0的逆序数)
#include <stdio.h> int main(void) { long in, res; int ri, repeat; long reverse(long number); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%ld", &in); /*---------*/ res = reverse(in); printf("%ld\n", res); } } long reverse(long n) { int a; long num=0; /*设置一个累加和的变量 */ while(n) { a = n%10; num=num*10 + a; n=n/10; } return num; } |
60001 使用函数求PI(调试示例源程序error06_1)
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入精度eps,根据下式求 PI 的值,直到最后一项小于eps。
PI/2=1+1/(1*3)+2!/(1*3*5)+3!/(1*3*5*7)+...+n!/(1*3*5*...*(2n+1))
要求定义并调用函数 fact(n)计算 n!,函数形参n的类型是int,函数类型是double;定义并调用函数 multi(n)计算 1*3*5*...*n,函数形参n的类型是int,函数类型是double。
输入输出示例:括号内是说明
输入:
2 (repeat=2)
1E-6 (eps=1E-6)
1E-5 (eps=1E-5)
输出示例:
PI = 3.14159
PI = 3.14158
#include <stdio.h> double fact(int n); double denominator (int n); int main(void) { int i; int repeat, ri; double eps, sum, item; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%le", &eps); i=1; sum=1; do{ item = fact(i) / denominator(2*i+1); sum=sum+item; i++; }while(item>=eps); printf("PI = %0.5f\n", 2 * sum); } return 0; } double fact(int n) { int i; double sum; sum=1; for(i=1;i<=n;i++) sum=sum*i; return sum; } double denominator (int n) { int i; double sum; sum=1.0; for(i=1;i<=n;i=i+2) sum=sum*i; return sum; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
依次以十进制、八进制和十六进制形式输入三个整数,输出每个整数的十进制、八进制和十六进制形式。
输入输出示例:括号内是说明
输入:
1 (repeat=1)
31 11 1a (十进制数31,八进制数11,十六进制数1a)
输出:
The decimal is 31, the octal is 37, the hexadecimal is 1f. (十进制数31的十进制、八进制和十六进制形式是31, 37, 1f)
The decimal is 9, the octal is 11, the hexadecimal is 9. (八进制数11的十进制、八进制和十六进制形式是9, 11, 9)
The decimal is 26, the octal is 32, the hexadecimal is 1a. (十六进制数1a的十进制、八进制和十六进制形式是26, 32, 1a)
#include <stdio.h> int main(void) { int decimal, octal, hexadecimal; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%o%x", &decimal, &octal, &hexadecimal); printf("The decimal is %d, the octal is %o, the hexadecimal is %x.\n",decimal,decimal,decimal); printf("The decimal is %d, the octal is %o, the hexadecimal is %x.\n",octal,octal,octal); printf("The decimal is %d, the octal is %o, the hexadecimal is %x.\n",hexadecimal,hexadecimal,hexadecimal); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一行字符,以回车结束,统计出其中的英文字母、空格、数字和其他字符的个数。
输入输出示例:括号内是说明
输入
2 (repeat=2)
Reold building room 123.
Programming is fun!
输出
letter = 17, blank = 3, digit = 3, other = 1 ("Reold building room 123."中的英文字母、空格、数字和其他字符的个数)
letter = 16, blank = 2, digit = 0, other = 1 ("Programming is fun!"中的英文字母、空格、数字和其他字符的个数)
#include <stdio.h> int main(void) { char c; int blank, digit, letter, other; int ri, repeat; scanf("%d", &repeat); getchar(); for(ri = 1; ri<=repeat; ri++) { c = getchar(); letter=blank=digit=other=0; while (c!='\n') { if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')) letter++; else if (c==' ') blank++; else if(c>='0'&&c<='9') digit++; else other++; c=getchar(); } printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other); } } |
60006 验证歌德巴赫猜想(本题与40026完全一样)
程序填空,不要改变与输入输出有关的语句。
验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
输入两个正整数 m 和 n(6<=m<=n<=100),将 m 到 n 之间的偶数表示成两个素数之和,打印时一行打印5组。
要求定义并调用函数 prime(m) 判断m是否为素数,当m为素数时返回1,否则返回0,函数形参 m 的类型是int,函数类型是int。
输出使用语句:printf("%4d = %4d + %4d ", number, i, number - i);
输入输出示例:括号内为说明
输入:
89 100 (m=89, n=100)
输出:
90=37+53 92=3+89 94=5+89 96=7+89 98=19+79
100=3+97
#include <stdio.h> int prime(int m) { int i, ifPrime=0; if(m==1) return 0; for(i=2;i<=m/2;i++) { if(m%i==0) break; } if(i>m/2) ifPrime=1; return ifPrime; } int main(void) { int count, i, m, n, number; scanf("%d%d", &m, &n); if(m % 2 != 0) m = m + 1; if(m >= 6) { count=0; for(number=m;number<=n;number=number+2) { for(i=1;i<=number/2;i++) { if( prime(i) && prime(number-i) ) { printf("%d=%d+%d ", number, i, number-i); count++; if(count%5==0) printf("\n"); break; } } } } } |
程序填空,不要改变与输入输出有关的语句。
输入2个整数,分别将其逆向输出。
要求定义并调用函数 fun(n),它的功能是返回 n 的逆向值,函数形参 n 的类型是int,函数类型是int。例如,fun(123)的返回值是321。
输入输出示例:括号内是说明
输入:
123
-910
输出:
123的逆向是321
-910的逆向是-19
#include <stdio.h> int fun(int n); int main(void) { int m1,m2; scanf("%d%d", &m1, &m2); printf("%d的逆向是%d\n", m1, fun(m1)); printf("%d的逆向是%d\n", m2, fun(m2)); } int fun(int n) { int a, num=0; /*设置一个累加和的变量 */ while(n) { a = n%10; num=num*10 + a; n=n/10; } return num; } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一行字符,以回车结束,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
输入输出示例:括号内是说明
输入
2 (repeat=2)
Let's go to room 209.
Programming is fun
输出
count = 5 ("Let's go to room 209."中有5个单词)
count = 3 (" Programming is fun"中有3个单词)
#include <stdio.h> int main(void) { char c; int count, word; int repeat, ri; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ c = getchar(); word=0; count=0; while(c!='\n'){ if(c==' ') word=0; /* 只要碰上空格, 单词标记清空 */ else{ /*出现非空字符 if(word==0) { /* 第一次非空字符的话,单词数递增1*/ count++; word=1; /* 单词标记为1*/ } } c=getchar(); } printf("count = %d\n", count); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
模拟简单运算器的工作:输入一个算式(没有空格),遇等号 "=" 说明输入结束,输出运算结果。
假设计算器只能进行加、减、乘、除运算,运算数和结果都是整数,4种运算符的优先级相同,按从左到右的顺序计算。
输入输出示例:括号内是说明
输入
2 (repeat=2)
15+2/3=
1+2*10-10/2=
输出
5
10
#include <stdio.h> int main(void) { char c; int operand1, operand2, res; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++) { scanf("%d", &operand1); c=getchar(); res=operand1; while(c != '=') { scanf("%d", &operand2); switch(c) { case'+':res=res+operand2;break; case'-':res=res-operand2;break; case'*':res=res*operand2;break; case'/':res=res/operand2;break; } c= getchar(); } printf("%d\n", res); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n(0<n<=9)和一组(n个)有序的整数,再输入一个整数 x,把 x 插入到这组数据中,使该组数据仍然有序。
输入输出示例:括号内为说明
输入:
4 (repeat=4)
5 (数据的个数n=5)
1 2 4 5 7 (5个有序整数)
3 (待插入整数x=3)
4 (数据的个数n=4)
1 2 5 7 (4个有序整数)
-10 (待插入整数x=-10)
3 (数据的个数n=3)
1 2 4 (3个有序整数)
100 (待插入整数x=100)
5 (数据的个数n=5)
1 2 4 5 7 (5个有序整数)
4 (待插入整数x=4)
输出:
1 2 3 4 5 7
-10 1 2 5 7
1 2 4 100
1 2 4 4 5 7
#include <stdio.h> int main(void) { int i, j, n, x; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &x); if (x >= a[n-1]) a[n] = x; /* 特殊情况:若x比所有的元素都要大 */ else for(i = 0; i < n; i++) { if(x > a[i]) continue; /* 将x 插入到合适的位置*/ j = n - 1; /* 从当前要插入的位置往后移位 */ while(j >= i){ a[j+1] = a[j]; j--; } a[i] = x; /* 将x查到当前的位置 */ break; } for(i = 0; i < n + 1; i++) printf("%d ", a[i]); putchar('\n'); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数,输出平均值(保留2位小数)。
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
1 2 -6
5 (n=5)
12 2 5 4 0
输出
average = -1.00
average = 4.60
#include <stdio.h> int main(void) { int i, n, sum; int repeat, ri; int a[10]; double average; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); sum=0; for(i=0; i < n; i++) sum+=a[i]; average=1.0*sum/n*1.0; printf("average = %.2f\n", average); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数,存入数组a中,先将数组a中的这n个数逆序存放,再按顺序输出数组中的n个元素。
输入输出示例:括号内为说明
输入
2 (repeat=2)
4 (n=4)
10 8 1 2
5 (n=5)
1 2 5 4 0
输出
2 1 8 10
0 4 5 2 1
#include <stdio.h> int main(void) { int i, n, temp; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); i=0; for(i=0;i<n/2;i++){ temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入n个整数,输出最大值及其对应的最小下标,下标从0开始。
输入输出示例:括号内为说明
输入
3 (repeat=3)
3 (n=3)
1 6 4
4 (n=4)
10 8 1 9
5 (n=5)
1 2 0 4 5
输出
max = 6, index = 1 (最大值6的下标是1)
max = 10, index = 0 (最大值10的下标是0)
max = 5, index = 4 (最大值5的下标是4)
#include <stdio.h> int main(void) { int i, index, n; int ri, repeat; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); index=0; a[index]=a[0]; for(i = 1; i < n; i++){ if(a[index]<a[i]){ a[index]=a[i]; index=i; } } printf("max = %d, index = %d\n", a[index], index); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的 n 个数。
输入输出示例:括号内为说明
输入
3 (repeat=3)
5 (n=5)
8 2 5 1 4
4 (n=4)
1 5 6 7
5 (n=5)
5 4 3 2 1
输出
After swap: 1 2 5 4 8
After swap: 1 5 6 7
After swap: 1 4 3 2 5
#include <stdio.h> int main(void) { int i, index, n, t; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); index=0; for(i = 1; i < n; i++){ if(a[i]<a[index]) index=i; } t=a[index]; /* 最小值与第1个数交换 */ a[index]=a[0]; a[0]=t; index=0; for(i = 1; i < n; i++){ if(a[i]>a[index]) index=i; } t=a[index]; /* 最大值与最后一个数交换 */ a[index]=a[n-1]; a[n-1]=t; printf("After swap: "); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数,将它们从大到小排序后输出。
输入输出示例:括号内为说明
输入
3 (repeat=3)
4 (n=4)
5 1 7 6
3 (n=3)
1 2 3
5 (n=5)
5 4 3 2 1
输出
After sorted: 7 6 5 1
After sorted: 3 2 1
After sorted: 5 4 3 2 1
#include <stdio.h> int main(void) { int i, index, k, n, temp; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); for(k=0;k<n-1;k++){ index=k; for(i=k+1;i<n;i++) if(a[i]>a[index]) index=i; temp=a[index]; a[index]=a[k]; a[k]=temp; } printf("After sorted: "); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数,将它们存入数组 a 中,再输入一个整数 x,然后在数组 a 中查找与 x 相同的元素,如果找到,输出 x 在数组 a 中对应元素的最小下标,如果没有找到,输出相应信息。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
6 (n=6)
1 3 5 7 9 5
5 (x=5)
4 (n=4)
1 3 5 7
2 (x=2)
输出:
5: a[2]
2: not found
#include <stdio.h> int main(void) { int flag, i, n, x; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ flag=0; /* 若标志不重新初始化的化,就会一影响下一轮循环的计算 */ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &x); for (i = 0; i < n; i++) { if(x==a[i]) { flag = 1; break; } } if(flag != 0) printf( "%d: a[%d]\n", x, i); else printf( "%d: not found\n", x); } } |
输入2个正整数 m 和 n (1<=m<=6, 1<=n<=6),然后输入矩阵 a(m 行 n 列)中的元素,分别求出各行元素之和,并输出。
输出使用语句:printf("sum of row %d is %d\n", i, sum);
输入输出示例:括号内为说明
输入:
3 2 (m=3,n=2)
6 3
1 -8
3 12
输出:
sum of row 0 is 9
sum of row 1 is -7
sum of row 2 is 15
#include <stdio.h> int main(void) { int i, j, m, n, sum; int a[6][6]; scanf("%d%d",&m,&n); for(i = 0; i < m; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]); for(i = 0; i < m; i++){ sum=0; for(j = 0; j < n; j++) sum+=a[i][j]; printf("sum of row %d is %d\n", i, sum); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
读入 1 个正整数 n(1≤n≤6), 再读入 n 阶方阵 a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入输出示例:括号内为说明
输入:
1 (repeat=1)
4 (n=4)
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
sum = 35 (2+3+4+5+6+7+8=35)
#include "stdio.h" int main(void) { int i, j, n, sum; int repeat, ri; int a[6][6]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]); sum=0; for(i = 0; i < n; i++){ for(j = 0; j < n; j++) sum+=a[i][j]; } for(i = 1; i < n-1; i++) sum-=a[i][n-i-1]; /* 减去副对角线的元素 */ for(j =0; j <n; j++) sum-=a[n-1][j]; /* 减去最下一行 */ for(i =0; i <n; i++) sum-=a[i][n-1]; /* 减去最右一列 */ sum=sum+a[n-1][n-1]; /* 右下角元素减了两次,补回一次 */ printf("sum = %d\n", sum); } } |
程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n(0<n<10),输出九九乘法表的前n×n项。
提示:将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。
输入输出示例:括号内为说明
输入:
1 (repeat=1)
3 (n=3)
输出:
* 1 2 3
1 1
2 2 4
3 3 6 9
#include "stdio.h" int main(void) { int i, j, n; int a[10][10]; int repeat, ri;
scanf("%d",&repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(j = 0; j <= n; j++) a[0][j]=j; /* 乘数 */ for(i = 0; i <= n; i++) a[i][0]=i; /* 被乘数 */ for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) a[i][j]=i*j; /* 结果 */ for(i = 0; i <= n; i++){ for(j = 0; j <= n; j++) if(i == 0 && j == 0) printf("%-4c", '*'); else if(i == 0 || j <= i) printf("%-4d", a[i][j]); printf("\n"); }
} } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入1 个正整数 n (1≤n≤6)和 n 阶方阵 a 中的元素,如果 a 是上三角矩阵, 输出"YES", 否则, 输出"NO"。上三角矩阵指主对角线以下的元素都为0的矩阵, 主对角线为从矩阵的左上角至右下角的连线。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
3 (n=3)
1 2 3
0 4 5
0 0 6
2 (n=2)
1 0
-8 2
输出:
YES
NO
#include "stdio.h" #include "math.h" int main(void) { int flag, i, j, n; int a[6][6]; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]); flag=1; for(i = 0; i < n; i++){ for(j = 0; j < i; j++){ if(a[i][j]!=0){ flag=0; break; /* 只要一个数值不满足就可以否定 */ } } if (!flag) break; } if(flag != 0) printf("YES\n"); else printf("NO\n"); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入日期(年、月、日),输出它是该年的第几天。
要求定义与调用函数 day_of_year(year, month, day),计算并返回year(年)、month(月)和day(日)对应的是该年的第几天,函数形参year、month和day的类型是int,函数类型也是int。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
1981 3 1 (1981年3月1日)
2000 3 1 (2000年3月1日)
输出:
days of year: 60 (1981年3月1日是该年的第60天)
days of year: 61 (2000年3月1日是该年的第61天)
#include "stdio.h" int main(void) { int day, day_year, month, year; int repeat, ri; int day_of_year(int year, int month, int day); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d%d", &year, &month, &day); day_year=day_of_year(year,month,day); printf("days of year: %d\n", day_year); } } int day_of_year(int year, int month, int day) { int k,leap; int a[2][31]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31} }; leap=(year%4==0&&year%100!=0||year%400==0); for(k=1;k<month;k++) day=day+a[leap][k]; return day; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入 1 个正整数 n(1≤n≤6)和 n 阶方阵 a 中的元素,假设方阵 a 最多有1个鞍点,如果找到 a 的鞍点, 就输出其下标, 否则,输出"NO"。鞍点的元素值在该行上最大, 在该列上最小。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
4 (n=4)
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
2 (n=2)
1 7
4 1
输出:
a[2][1] = 6
NO
#include "stdio.h" int main(void) { int flag, i, j, k, row, col, n; int a[6][6]; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]); for(row=0;row<n;row++){ col=0; for(j=1;j<n;j++){ if(a[row][j]>a[row][col]) col=j; } flag=1; for(i=0;i<n;i++){ if(a[row][col]>a[i][col]) { flag=0; break; /* 只要当前行的最大值不是当前列的最小,放弃*/ } } if(flag) break; /* 找到就可以跳出循环了 */ } if(flag != 0) printf("a[%d][%d] = %d\n", row, col,a[row][col]); else printf("NO\n"); } } |
输入一个以回车结束的字符串(少于80个字符),将它的内容逆序输出。如"ABCD" 的逆序为"DCBA"。
输入输出示例:括号内为说明
输入:
Welcome to you!
输出:
!uoy ot emocleW
#include <stdio.h> int main(void) { int i, j, temp; char str[80];
i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = 0; /* 使用\0 的必要性*/
for (j=0;j<i/2;j++) { temp=str[i-j-1]; str[i-j-1]=str[j]; str[j]=temp; } for(i = 0; str[i] != 0; i++) putchar(str[i]); } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个字符,再输入一个以回车结束的字符串(少于80个字符),在字符串中查找该字符,如果找到,输出该字符在字符串中所对应的最大下标 (下标从0开始);否则输出"Not Found"。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
m (字符'm')
programming (字符串"programming")
a (字符'a')
1234 (字符串"1234")
输出:
index = 7 ('m'在"programming"中对应的最大下标是7)
Not Found ("1234"中没有'a')
#include "stdio.h" #define MAXLEN 80 int main(void) { char cc, ch; char str[MAXLEN]; int count, flag, i, index; int repeat, ri; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ cc = getchar(); getchar(); /* 用于抵消输入查询字符后的回车 */ i = 0; while((ch = getchar()) != '\n'){ str[i++] = ch; } str[i] = 0; flag=0; for(i=0;str[i] != '\0';i++){ if(str[i]==cc){ flag++; index=i; } } if(flag) printf("index = %d\n", index); else printf("Not Found\n"); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个以回车结束的字符串(少于80个字符),统计并输出其中大写辅音字母的个数。大写辅音字母:除'A', 'E', 'I', 'O', 'U'以外的大写字母。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
HELLO
group
输出:
count = 3 ("HELLO"中有3个大写辅音字母)
count = 0 ("group"中没有大写辅音字母)
#include "stdio.h" #define MAXLEN 80 int main(void) { char ch; char str[MAXLEN]; int count, i; int repeat, ri;
scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ i = 0; while((ch = getchar()) != '\n'){ str[i++]=ch; } str[i] = 0; i=0; count=0; while(str[i]){ if(str[i]<='Z'&&str[i]>='A') switch(str[i]){ case 'A': case 'E': case 'I': case 'O': case 'U': break; default: count++; break; } i++;} printf("count = %d\n", count); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个以回车结束的字符串(少于80个字符),将其中的大写字母用下面列出的对应大写字母替换,其余字符不变,输出替换后的字符串。
原字母 对应字母
A Z
B Y
C X
D W
……
X C
Y B
Z A
输入输出示例:括号内为说明
输入:
2 (repeat=2)
A flag of USA
1+2=3
输出:
After replaced: Z flag of FHZ
After replaced: 1+2=3
/* 思路:A-Z, B-Y, ... Z-A, 左右字符的ASCII值的和都是一样的,都是'A'+'Z', 设左字符为变量x, 右字符的ASCII值就是 'A'+'Z'-x */ #include "stdio.h" #include "string.h" #define MAXLEN 80 int main(void) { char ch; char str[MAXLEN]; int i; int repeat, ri; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ i = 0; while((ch = getchar()) != '\n'){ str[i] = ch; i++; } str[i] = 0; for(i=0;str[i]!=0;i++){ if(str[i]>='A'&&str[i]<='Z') str[i]='A'+'Z'-str[i]; } printf("After replaced: "); for(i = 0; str[i] != 0; i++) putchar(str[i]); putchar('\n'); } }
|
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个以回车结束的字符串(少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),然后将其转换为十进制数后输出。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
10
+A
输出:
Dec = 16
Dec = 10
#include "stdio.h" #include "string.h" #define MAXLEN 80 int main(void) { char ch; char str[MAXLEN], num[MAXLEN]; int i, k; int repeat, ri; long number; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ i = 0; while((ch = getchar()) != '\n'){ str[i]=ch; i++; } str[i] = 0; /* 输入字符串 */ number=0; for(i=0;str[i]!='\0';i++){ if(str[i]>='0'&&str[i]<='9') number=number*16+str[i]-'0'; else if(str[i]>='A'&&str[i]<='F') number=number*16+str[i]-'A'+10; else if(str[i]>='a'&&str[i]<='f') number=number*16+str[i]-'a'+10; } /* 16进制字符 0-9, A-F, a-f */ printf("Dec = %ld\n",number); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个以回车结束的字符串(少于80个字符),把字符串中的所有数字字符('0'~'9')转换为整数,去掉其他字符。例如,字符串"3a56bc"转换为整数后是356。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
82jeep5
free
输出:
825
0
#include <stdio.h> #include <string.h> int main(void) { char str[80]; int i, s; int repeat, ri; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = 0; s=0; for(i=0;str[i]!=0;i++){ if(str[i]>='0'&&str[i]<='9') s=s*10+str[i]-'0'; } printf("%d\n",s); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数,先输出最大值及其最大下标(下标从0开始),再将最大值与最后一个数交换,并输出交换后的 n 个数。
输入输出示例:括号内为说明
输入
3 (repeat=3)
5 (n=5)
4 3 5 5 2
4 (n=4)
1 5 6 7
5 (n=5)
5 4 3 2 1
输出
max = 5, index = 3
4 3 5 2 5
max = 7, index = 3
1 5 6 7
max = 5, index = 0
1 4 3 2 5
#include <stdio.h> int main( ) { int i, index, n, temp; int repeat, ri; int a[10]; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); index=0; for(i=1;i<n;i++){ if(a[index]<=a[i]) index=i; } temp=a[index]; a[index]=a[n-1]; a[n-1]=temp; printf("max = %d, index = %d\n", a[n-1],index); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } }
|
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个以回车符结束的字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
programming (字符串"programming")
m (字符'm')
1234 (字符串"1234")
a (字符'a')
输出:
count = 2 ('m'在"programming"中出现2次)
count = 0 ('a'在"1234"中没有出现过)
#include "stdio.h" #define MAXLEN 80 int main(void) { char cc, ch; char str[MAXLEN]; int i,count; int repeat, ri; scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = '\0'; cc = getchar(); getchar(); count=0; for(i=0;str[i] != 0;i++){ if(str[i]==cc) count++; } printf("count = %d\n", count); } } |
输入两个正整数 n 和 m (1<m<n<=10),再输入 n 个整数,将这些数排成一行,向右循环移动 m 个位置(从右边移出的数再从左边移入),最后输出移动后的n个整数。
要求定义并调用函数 mov(x,n,m) 实现上述循环移动的功能,函数形参x的类型是整型指针,形参n和m的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入:
5 3 (n=5,m=3)
1 2 3 4 5 (5个整数)
输出:
After move: 3 4 5 1 2
#include <stdio.h> void mov(int *x, int n, int m); int main(void) { int i, m, n; int a[80]; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) scanf("%d", &a[i]); void mov(int *x,int n,int m); mov(a,n,m); printf("After move: "); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } void mov(int a[], int n, int m) { int y,i,j; for(i=1;i<=m;i++){ /* 循环移动m次 */ y=a[n-1]; for(j=n-1;j>0;j--) a[j]=a[j-1]; a[0]=y; } } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数 n (1<n<=10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,如果找到则输出相应元素的最小下标,否则输出"Not found"。
要求定义并调用函数search(list, n, x),它的功能是在数组list中查找元素x,若找到则返回相应元素的最小下标,否则返回-1,函数形参 list 的类型是整型指针,形参n和x的类型是int。
输入输出示例:括号内为说明
输入
2 (repeat=2)
3 (n=3)
1 2 -6
2 (x=2)
5 (n=5)
1 2 2 5 4
0 (x=0)
输出
index = 1
Not found
#include <stdio.h> int main(void) { int i, index, n, res, x; int repeat, ri; int a[10]; int search(int list[], int n, int x); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); scanf("%d", &x); int search(int *list,int n,int x); res=search(a,n,x); if(res != -1) printf("index = %d\n", res); else printf("Not found\n"); } } int search(int *list,int n,int x){ int i,t; for(i=0;i<n;i++){ if(list[i]==x){ t=i; break; } else t=-1; } return t; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),再输入 n 个整数存入数组 a 中,用选择法将数组 a 中的元素按升序排列,最后输出排序后的数组元素。
要求定义并调用函数 sort(a,n),它的功能是采用选择排序算法,将数组 a 的前 n 个元素按从小到大的顺序排序,函数形参 a 的类型是整型指针,形参n的类型是int,函数的类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
4 (n=4)
5 1 7 6
3 (n=3)
1 2 3
5 (n=5)
5 4 3 2 1
输出
After sorted: 1 5 6 7
After sorted: 1 2 3
After sorted: 1 2 3 4 5
#include <stdio.h> void sort(int a[],int n); int main(void) { int i, n; int repeat, ri; int a[10]; void sort(int *p,int n); scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); sort(a,n); printf("After sorted: "); for(i = 0; i < n; i++) printf("%d ", a[i]); printf("\n"); } } void sort(int *p,int n) { int k,i,index,t; for(k=0;k<n-1;k++){ index=k; for(i=k+1;i<n;i++) if(p[i]<p[index]) index=i; t=p[index]; p[index]=p[k]; p[k]=t; } } |
输入两个正整数 n 和 m( (1<m<n<=50)),有 n 个人围成一圈,按顺序从 1 到 n 编号。从第一个人开始报数,报数 m 的人退出圈子,下一个人从 1 开始重新报数,报数 m 的人退出圈子。如此循环,直到留下最后一个人。请按退出顺序输出退出圈子的人的编号,以及最后一个人的编号。
提示:将每个人的编号存入数组,从第一个人开始报数,输出报数 m 的人的编号,并将该编号清除为0,重复这样的操作直至只剩下一个不为0的数,该数就是最后一个人的编号。
输出使用语句:printf("No%d: %d\n", no, *p);
输入输出示例:括号内为说明
输入:
5 (n个人报数,n=5)
3 (报数m=3)
输出:
No1: 3 (第1个退出圈子的人编号是3)
No2: 1 (第2个退出圈子的人编号是1)
No3: 5 (第3个退出圈子的人编号是5)
No4: 2 (第4个退出圈子的人编号是2)
Last No is: 4 (最后一个人的编号是4)
/* 提示:这是一个不断循环的过程; 终止条件:报数总个数为n-1; 报数过程中,嵌套一个循环:每次计数到m,退出当前小循环 在循环时,注意若当前的数组下标 k==n时,k=0 */ #include<stdio.h> main() { int m, n; int i, k=0; /* 下标*/ int totalNumber=0; /* 报数总个数 */ int count=0; /* 当前轮报数个数 */ int num[50]; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) num[i] = i + 1; while (1) { if (totalNumber == n-1) break; while (count<m) { if (num[k]) { count++; if (totalNumber == n-1) break; else if (count==m) { printf("No%d: %d\n", ++totalNumber, num[k]); break; }
} k++; if (k == n) k=0 ; } num[k]=0; count=0; /* 当前轮报数个数从新计数 */ k++; if (k == n) k=0 ;
} while (!num[k]) { k++; if (k == n) k=0 ; } printf("Last No is: %d\n", num[k]); return 0; } 参考2: #include<stdio.h> int main(void) { int count, i, m, n, no; int num[50]; int *p; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) num[i] = i + 1; p = num; int k; no=i=k=0; while(no<n-1) { if(*(p+i)!=0) k++; if(k==m){ printf("No%d: %d\n",no+1,*(p+i)); *(p+i)=0; k=0; no++; } i++; if(i==n) i=0; } p = num; while(*p == 0) p++; printf("Last No is: %d\n", *p); } |
输入5个字符串,输出其中最大的字符串。
输入输出示例:括号内为说明
输入:
peach
pear
melon
orange
berry
输出:
Max is: pear
#include <stdio.h> #include <string.h> int main(void) { char str[80], max[80]; int i; scanf("%s", str); strcpy(max,str); for(i=1;i<5;i++){ scanf("%s",str); if(strcmp(str,max)>0) strcpy(max,str); } printf("Max is: %s\n", max); } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个正整数 n (1<n<=10),然后输入 n 个字符串,输出其中最长的字符串,如果字符串的长度相同,则输出先输入的字符串。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
5 (n=5)
melon peach pear strawberry orange
3 (n=3)
pear berry orange
4 (n=4)
melon peach pear apple
输出:
The longest is: strawberry
The longest is: orange
The longest is: melon
#include <stdio.h> #include <string.h> int main(void) { char sx[80], longest[80]; int i, n; int repeat, ri; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n); scanf("%s", sx); strcpy(longest,sx); for(i=1;i<n;i++){ scanf("%s",sx); if(strlen(sx)>strlen(longest)) strcpy(longest,sx); } printf("The longest is: %s\n",longest); } } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。
要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。
输入输出示例:括号内为说明
输入
3 (repeat=3)
happy new year (字符串"happy new year")
a (待删除的字符'a')
bee (字符串"bee")
e (待删除的字符'e')
111211 (字符串"111211")
1 (待删除的字符'1')
输出
result: hppy new yer (字符串"happy new year"中的字符'a'都被删除)
result: b (字符串"bee"中的字符'e'都被删除)
result: 2 (字符串"111211"中的字符'1'都被删除)
#include<stdio.h> void main() { char c; char str[80]; int repeat, ri; void delchar(char *str, char c); scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ gets(str); scanf("%c", &c); getchar(); delchar(str,c); printf("result: "); puts(str); } } void delchar(char *str, char c) { int i,j; i = 0, j=0; while (str[i]!='\0') { if (str[i] != c) /* 若当前字符是要被保留的 */ { str[j]=str[i]; i++; j++; } else i++; /* 否则查看下一个元素 */ } str[j]='\0'; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,再输出字符串 s。
要求定义并调用函数 strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中,函数形参s和t的类型是字符指针,形参m的类型是int,函数类型是void。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
happy new year
7
happy
1
new
4
输出:
new year (从"happy new year"第7个字符开始组成的新字符串为"new year")
happy (从"happy"第1个字符开始组成的新字符串为"happy")
error input ("new"的长度小于4)
#include<stdio.h> #include<string.h> void main() { char s[80], t[80]; int m; int repeat, ri; void strmcpy(char *s,char *t, int m); scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ gets(t); scanf("%d", &m); getchar(); if(strlen(t)<m) printf("error input"); else{ strmcpy(s,t,m); puts(s); } } } void strmcpy(char s[],char t[],int m) { int i,j; for(i=m-1,j=0;t[i]!='\0';i++,j++) s[j]=t[i]; s[j]='\0'; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串(长度不超过80),判断该字符串是否为“回文”。“回文”是指顺读和倒读都一样的字符串,如“XYZYX”和“xyzzyx”。
要求定义并调用函数 mirror(p)判断字符串 p 是否为“回文”,如果 p 是回文字符串,返回1,否则,返回0,函数形参 p 的类型是字符指针,函数类型是 int。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
abcddcba
abcddcb
输出:
YES
NO
#include <stdio.h> #include<string.h> void main() { char s[80]; int repeat, ri; int mirror(char *p);
scanf("%d", &repeat); getchar(); for(ri = 1; ri <= repeat; ri++){ gets(s); if(mirror(s) != 0) printf("YES\n"); else printf("NO\n"); } } int mirror(char *p) { int n,i; n=strlen(p); for(i=0;i<=n/2;i++,n--) if (p[i]== p[n-1]) return 1; return 0; } |
输入一行字符(不超过80个),统计其中的大写字母、小写字母、空格、数字以及其他字符的个数。
输入输出示例:
输入:
bFaE3+8 =1R
输出:
upper: 3 lower: 2 blank: 1 digit: 3 other: 2
#include<stdio.h> void main() { char s[80]; char *p; int blank, digit, lower, other, upper; gets(s); upper = lower = blank = digit = other = 0; int i; for(i=0;s[i]!='\0';i++){ if(s[i]>='A'&&s[i]<='Z') upper++; else if(s[i]>='a'&&s[i]<='z') lower++; else if(s[i]==' ') blank++; else if(s[i]>='0'&&s[i]<='9') digit++; else other++; } printf("upper: %d lower: %d blank: %d digit: %d other: %d\n", upper, lower, blank, digit, other); } |
输入一个正整数n(3≤n≤10),再输入n个雇员的信息,包括姓名、基本工资、浮动工资和支出,输出每人的姓名和实发工资,实发工资=基本工资+浮动工资-支出。
输入输出示例:括号内为说明
输入:
3 (n=3)
zhao 240 400 75
qian 360 120 50
zhou 560 0 80
输出:
zhao 实发工资: 565.00
qian 实发工资: 430.00
zhou 实发工资: 480.00
#include <stdio.h> int main (void) { int i, n; struct emp{ char name[10]; double jbg; double fdg; double zc; } s[10]; scanf("%d", &n); for(i=0;i<n;i++) scanf("%s%lf%lf%lf",s[i].name, &s[i].jbg,&s[i].fdg,&s[i].zc); for (i = 0; i < n; i++) printf ("%5s 实发工资:%7.2f\n", s[i].name, s[i].jbg + s[i].fdg - s[i].zc); } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个时间数值,再输入秒数 n,输出该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
0:0:1
59 (秒数n=59)
11:59:40
30 (秒数n=30)
23:59:40
301 (秒数n=301)
输出:
time: 0:1:0 (0:0:01加上59秒的新时间)
time: 12:0:10 (11:59:40加上30秒的新时间)
time: 0:4:41 (23:59:40加上301秒的新时间)
#include <stdio.h> int main(void) { int n; int repeat, ri; struct time{ int hour, minute, second; }time; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d:%d:%d", &time.hour, &time.minute, &time.second); scanf("%d",&n); time.second=time.second+n; if(time.second>=60){ time.minute=time.minute+time.second/60; time.second=time.second%60; if(time.minute>=60){ time.hour=time.hour+time.minute/60; time.minute=time.minute%60; if(time.hour>=24) time.hour=time.hour-24; } } printf("time: %d:%d:%d\n", time.hour, time.minute, time.second); } } |
输入整数n(n<10),再输入n个学生的基本信息,包括序号、姓名和成绩,要求计算并输出他们的平均成绩(保留2位小数)。
输入输出示例:括号内为说明
输入:
3 (n=3)
1 zhang 70
2 wang 80
3 qian 90
输出:
average: 80.00
#include <stdio.h> int main(void) { int i, n; double average, sum; struct student{ int num; char name[10]; int score; }s[10]; scanf("%d", &n); sum=0; for(i=0;i<n;i++){ scanf("%d%s%d",&s[i].num,s[i].name,&s[i].score); sum+=s[i].score; } average=sum/n; printf("average: %.2f\n", average); } |
输入4个整数a1,b1,a2,b2,分别表示两个复数的实部与虚部,求两个复数之积(a1+b1i)*(a2+b2i),乘积的实部为:a1*a2-b1*b2,虚部为:a1*b2+a2*b1。
输入输出示例:括号内为说明
输入:
3 4 5 6
输出:
(3+4i) * (5+6i) = -9 + 38i
#include <stdio.h> int main(void) { struct complex{ int real; int imag; }product, x, y; scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag); product.real=x.real*y.real-x.imag*y.imag; product.imag=x.real*y.imag+x.imag*y.real; printf("(%d+%di) * (%d+%di) = %d + %di\n", x.real, x.imag, y.real, y.imag, product.real, product.imag); } |
90005 查找书籍(结构)
编写程序,从键盘输入 n (n<10)本书的名称和定价并存入结构数组中,查找并输出其中定价最高和最低的书的名称和定价。
输入输出示例:括号内为说明
输入:
3 (n=3)
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
输出:
highest price: 25.0, Programming in Delphi
lowest price: 18.5, Programming in VB
#include <stdio.h> int main (void) { int i, max_index, min_index, n; double x; struct book{ char name[50]; double price; }book[10]; scanf("%d", &n); getchar(); for(i = 0; i < n; i++){ gets(book[i].name); scanf("%lf", &x); getchar(); book[i].price = x; } max_index=1; min_index=1; for(i = 1; i < n; i++){ if(book[max_index].price<book[i].price) max_index=i; if(book[min_index].price>book[i].price) min_index=i; } printf("highest price: %.1f, %s\n", book[max_index].price, book[max_index].name); printf("lowest price: %.1f, %s\n", book[min_index].price, book[min_index].name); } |
输入n(n<10)个朋友的信息,包括姓名、生日、电话号码,按照年龄从大到小的顺序依次输出通讯录。
输入输出示例:括号内为说明
输入:
3 (n=3)
zhang 19850403 13912345678
wang 19821020 0571-88018448
qian 19840619 13609876543
输出:
wang 19821020 0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
#include <stdio.h> #include <stdio.h> int main (void) { int i, index, j, n; struct address_list{ char name[20]; long birthday; char phone[20]; }temp, friends[10]; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%s%ld%s", friends[i].name, &friends[i].birthday, friends[i].phone); for(i = 0; i < n; i++){ index = i; for(j = i+1; j < n; j++) if (friends[index].birthday>friends[j].birthday) index = j; temp =friends[index]; friends[index]=friends[i]; friends[i]=temp; } for(i = 0; i < n; i++) printf("%s %ld %s\n", friends[i].name, friends[i].birthday, friends[i].phone); } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
编写程序,输入一个日期(年、月、日),计算并输出该日是该年中的第几天。
要求定义并调用函数 day_of_year(p) 计算某日是该年的第几天,函数形参p的类型是结构指针,指向表示日期的结构变量,函数类型是int,注意区分闰年。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
2006 3 5
2000 3 5
输出:
64 (2006年3月5日是该年的第64天)
65 (2000年3月5日是该年的第65天)
#include <stdio.h> struct date{ int year; int month; int day; }; int day_of_year(struct date *p); int main(void) { int yearday; int repeat, ri; struct date date; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d%d%d", &date.year, &date.month, &date.day); yearday=day_of_year(&date); printf("%d\n", yearday); } } int day_of_year(struct date *p) { int k,leap; int tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31} }; leap=(p->year%4==0 && p->year%100!=0) || p->year%400==0; for(k=1;k<p->month;k++) p->day=p->day+tab[leap][k]; return p->day; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个时间数值,再输入秒数 n,输出该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。
要求定义并调用函数 timecal(p, n)实现时间换算,函数形参 p 的类型是结构指针,指向表示时间的结构变量,形参n 的类型是整型,表示秒数,函数类型是 void。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
0:0:1
59 (秒数n=59)
11:59:40
30 (秒数n=30)
23:59:40
301 (秒数n=301)
输出:
time: 0:1:0 (0:0:01加上59秒的新时间)
time: 12:0:10 (11:59:40加上30秒的新时间)
time: 0:4:41 (23:59:40加上301秒的新时间)
#include <stdio.h> struct time{ int hour, minute, second; }; void timecal(struct time *p, int n); int main(void) { int n; int repeat, ri; struct time timeA; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%d:%d:%d", &timeA.hour, &timeA.minute, &timeA.second); scanf("%d",&n); timecal(&timeA,n); printf("time: %d:%d:%d\n", timeA.hour, timeA.minute, timeA.second); } } void timecal(struct time *p, int n) { (*p).second=(*p).second+n; if((*p).second>=60){ (*p).minute=(*p).minute+(*p).second/60; (*p).second=(*p).second%60; if((*p).minute>=60){ (*p).hour=(*p).hour+(*p).minute/60; (*p).minute=(*p).minute%60; if((*p).hour>=24) (*p).hour=(*p).hour-24; } } } |
输入一个正整数 n(3<n≤10),再输入 n 个学生的信息,包括学号、姓名和3门课程的成绩,输出总分最高学生的姓名和总分。
输入输出示例:括号内为说明
输入:
5 (n=5)
1 黄岚 78 83 75
2 王海 76 80 77
3 沈强 87 83 76
4 张枫 92 88 78
5 章盟 76 81 75
输出:
总分最高的学生是: 张枫,258分
#include <stdio.h> int main (void) { int i, j, k, max_index, n; struct student{ int number; char name[20]; int score[3]; int sum; }stu[10]; scanf("%d", &n); for(i=0;i<n;i++){ scanf("%d%s",&stu[i].number,&stu[i].name); for(j=0;j<3;j++) scanf("%d",&stu[i].score[j]); stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; } max_index=0; for(i=1; i<n; i++){ if(stu[max_index].sum<stu[i].sum) max_index=i; } printf("总分最高的学生是: %s,%d分\n", stu[max_index].name, stu[max_index].sum); } |
编写一个函数,利用参数传入一个3位数number,找出101~number之间所有满足下列两个条件的数:
它是完全平方数,又有两位数字相同,如144、676等,函数返回找出这样的数据的个数。请同时编写主函数。
例:(括号内为说明)
输入
3 (repeat=3)
150
500
999
输出
count=2
count=6
count=8
#include <stdio.h> #include <string.h> int search(int n); int main(void) { int number,ri,repeat; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ do{ scanf("%d",&number); }while(number<101||number>999); printf("count=%d\n",search(number)); } return 0; } int search(int n) { int i,j,a1,a2,a3, flag=0; for (i = 101; i <= n; i++) { for (j = 1; j <= i; j++) { if (j * j == i) { a1 = i % 10; a2 = i / 10 % 10; a3 = i /100 % 10; if ( (a1==a2)||(a1==a3) || (a2==a3) ) { flag += 1; break; } } } } return flag; } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个整数n (n>=0)和一个双精度浮点数x,输出函数p(n,x)的值(保留2位小数)。
[1 (n=0)
p(n, x) = [x (n=1)
[((2*n-1)*p(n-1,x)-(n-1)*p(n-2,x))/n (n>1)
例:括号内是说明
输入
3 (repeat=3)
0 0.9 (n=0,x=0.9)
1 -9.8 (n=1,x=-9.8)
10 1.7 (n=10,x=1.7)
输出
p(0, 0.90)=1.00
p(1, -9.80)=-9.80
p(10, 1.70)=3.05
#include <stdio.h> double p(int n, double x); int main(void) { int repeat, ri; int n; double x, result; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++) { scanf("%d%lf", &n, &x); result = p(n, x); printf("p(%d, %.2lf)=%.2lf\n", n, x, result); } } double p(int n, double x) { double t; if(n==0) t=1; else if(n==1) t=x; else t=((2*n-1)*p(n-1,x)-(n-1)*p(n-2,x))/n; return t; }
|
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入两个整数m和n(m>=0且n>=0),输出函数Ack(m,n)的值。
在m>=0和n>=0时Ack(m, n)定义为:
Ack(0,n) = n+1
Ack(m,0) = Ack(m-1,1)
Ack(m,n) = Ack(m-1, Ack(m,n-1)) m>0且n>0
例:括号内是说明
输入
4 (repeat=4)
0 3
2 0
2 3
0 0
输出
Ackerman(0,3)=4
Ackerman(2,0)=3
Ackerman(2,3)=9
Ackerman(0,0)=1
#include <stdio.h> int Ack(int m, int n); int main(void) { int m,n; int result; int i,repeat; scanf("%d",&repeat); for(i=1; i<=repeat; i++) { scanf("%d%d", &m, &n);
result = Ack(m,n); printf("Ackerman(%d,%d)=%d\n", m, n, result); } } /*---------*/ int Ack(int m,int n) { if (m==0) return(n+1); else if (n==0) return( Ack(m-1,1) ); else return( Ack(m-1, Ack(m,n-1)) ) ; } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入1 个正整数n,将其转换为二进制后输出。要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。
例如,调用dectobin(10),输出1010。
输出语句:printf("%d");
例:括号内是说明
输入:
3 (repeat=3)
15
100
0
输出:
1111
1100100
0
#include "stdio.h" int main(void) { int ri,repeat; int n; void dectobin(int n); scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ scanf("%d",&n); dectobin(n); printf("\n"); } } void dectobin(int n) { int a[32],i; if (( n==0)||(n == 1)) { printf("%d",n); return; } else { i=0; while(n!=0) { a[i++]=n%2; n=n/2; } } while(i>0) printf("%d",a[--i]); } /* 参考2: 如下通过递归实现 */ #include "stdio.h" int main(void) { int ri,repeat; int i,n; void dectobin(int n); scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ scanf("%d",&n); dectobin(n); printf("\n"); } } void dectobin(int n) { if(n==1||n==0){ printf("%d",n); return; } dectobin(n/2); printf("%d",n%2); } |
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
用递归方法编写求Fabonacci数列项的函数,返回值为长整型, 并写出相应的主函数。Fabonacci数列的定义为:
f(n)=f(n-2)+f(n-1) (n>=2) 其中 f(0)=0,f(1)=1。
例:(括号内为说明)
输入
3 (repeat=3)
0
1
6
输出
fib(0)=0
fib(1)=1
fib(6)=8
#include <stdio.h> long fib(int n); int main(void) { int n,ri,repeat; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ scanf("%d",&n); printf("fib(%d)=%ld\n",n,fib(n)); } } long fib(int n) { int t; if(n==0) t=0; else if(n==1) t=1; else t=fib(n-2)+fib(n-1); return t; } |
程序填空,不要改变与输入输出有关的语句。
用递归方法实现对一个整数进行逆序输出。
例:(括号内为说明)
输入
3 (repeat=3)
567
911
8
输出
765
119
8
#include <stdio.h> void reverse(int n); int main(void) { int n,ri,repeat; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ scanf("%d",&n); reverse(n); printf("\n"); } } void reverse(int n) /* 递归实现 */ { printf("%d", n%10); n = n/10; if (n!=0) reverse(n); return; } |
用递归函数计算x^n (n>=1)的值。
例:(括号内为说明)
输入
2 3 (x=2,n=3)
输出
Root = 8.00
#include <stdio.h> double fun(int n, double x); int main(void) { int n; double x, root; scanf("%lf%d", &x,&n); root = fun(n, x); printf("Root = %0.2f\n", root); } double fun(int n, double x) { double r; if(n==1) r=x; else r=x*fun(n-1,x); return r; } |
10021 调试示例error11_1.cpp (指针数组、内存动态分配)
程序填空,不要改变与输入输出有关的语句。
输入若干有关颜色的英文单词,以#作为输入结束标志,对这些单词升序排列后输出。其中颜色的英文单词数数小于20个,颜色的英文单词长度均不超过10个字符。
输入输出示例:括号内为说明
输入:
red
blue
yellow
green
purple
#
输出:
blue green purple red yellow
#include <stdio.h> #include<stdlib.h> #include<string.h> void main() { int i,j, index, n = 0; char *color[20], str[10], *temp;
scanf("%s", str); while(str[0] != '#') { color[n] = (char *)malloc(sizeof(char)*(strlen(str)+1)); strcpy(color[n], str); n++; scanf("%s", str); } /*---------*/ for (i =0; i<n-1; i++) { index = i; for (j = i+1; j<n; j++) if (strcmp(color[j],color[index]) < 0) index = j; strcpy(str, color[i]); strcpy(color[i], color[index]); strcpy(color[index], str); } for(i = 0; i < n; i++) printf("%s ", color[i]); printf("\n"); } |
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
编写程序,输入一个月份,输出对应的英文名称,要求用指针数组表示12个月的英文名称。
若输入月份错误,输出提示信息。
输入输出示例:括号内为说明
输入:
3 (repeat=3)
5
9
14
输出:
May
September
Wrong input!
#include<stdio.h> void main() { int ri,repeat; int month; char *month_name[]={"","January","February","March","April","May","June","July","August","September","October","November","December"}; scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){ scanf("%d",&month); if((month>=1)&&(month<=12)) puts(month_name[month]); else printf("Wrong input!"); } } |
10023 编程题 (指针数组,查找相同的字符串)
程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
定义一个指针数组将下表的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。
(表格详见实验教材P99)
输入输出示例:括号内为说明
输入:
3 (repeat=3)
Tuesday
Wednesday
year
输出:
3
4
-1
#include<stdio.h> #include<string.h> void main() { int i,ri,repeat,dateNum; char *date[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; char str[80]; scanf("%d",&repeat); getchar(); for(ri=1;ri<=repeat;ri ++){ scanf("%s",str); /*---------*/ dateNum=sizeof(date)/sizeof(char *); for (i = 0; i<dateNum; i++){ if (strcmp(date[i],str) == 0) { printf("%d\n",i+1); break; } } if (i==dateNum) printf("%d\n",-1); } } |
编写一个函数int max_len(char *s[ ], int n),用于计算有n(n<10)个元素的指针数组s中最长的字符串的长度,并编写主程序验证。
例:(括号内为说明)
输入
4 (n=4)
blue
yellow
red
green
输出
length=6
#include <stdio.h> #include <string.h> int max_len(char *s[],int n); void main() { int i,n; char s[10][80],*p[10]; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%s",s[i]); p[i]=s[i]; } printf("length=%d\n",max_len(p,n)); } int max_len(char *s[],int n) { int max,i; max=strlen(s[0]); for(i=1;i<n;i++) if(max<strlen(s[i])) max=strlen(s[i]); return max; } |
用字符指针实现函数str_cat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址,并编写主程序。
例:(括号内为说明)
输入
abc
def
输出
abcdef
#include <stdio.h> char *str_cat(char *s,char *t); void main() { char s[80],t[80]; gets(s); gets(t); puts(str_cat(s,t)); } char *str_cat(char *s,char *t) { int i=0,j=0; while (s[i]!='\0') i++; while (t[j]!='\0') { s[i] =t[j]; i++, j++; } s[i]='\0'; return s; } |
编写一个程序,输入一个字符串后再输入2个字符,输出此字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。用返回字符指针的函数实现。
例:(括号内为说明)
输入
program
r
g
输出
rog
#include <stdio.h> char newstr[80]; void main() { char str[80],c_begin,c_end; char *fun(char *p,char c_begin,char c_end); scanf("%s",str); getchar(); c_begin=getchar(); getchar(); c_end=getchar(); puts(fun(str,c_begin,c_end)); } char *fun(char *p, char c_begin, char c_end) { char *t; t=newstr; while(*(p++)!=c_begin); p--; while(*p!=c_end) *(t++)=*(p++); *(t++)=*(p++); *t='\0'; return newstr; } |
编写一个解密藏尾诗的程序。输入一首藏尾诗(假设只有4句),输出其藏尾的真实含义。用返回字符指针的函数实现。
例:
输入:
悠悠田园风
然而心难平
兰花轻涌浪
兰香愈幽静
输出:
风平浪静
#include <stdio.h> #include <string.h> char p[16]; void main() { char *change(char s[4][20]); char s[4][20]; int i; for(i=0;i<4;i++) scanf("%s",s[i]); puts(change(s)); } char *change(char s[4][20]) { int i,t,len; t=0; for(i=0;i<4;i++){ len=strlen(s[i]); p[t++]=s[i][len-2]; p[t++]=s[i][len-1]; } p[t]='\0'; /*---------*/ return (p); } |
从键盘上输入一个3×3的矩阵,求矩阵的主对角线和副对角线之和,要求定义和调用函数float matrix(float *a[3], int n),
提示,函数的形参是指针数组。
例:
输入:
8 6 12
5 9 10
7 11 5
输出:
sum=41.00
#include <stdio.h> float matrix(float *a[3], int n){ int i,j; float sum; sum=0; for(i = 0; i < n; i++) for(j = 0; j < n; j++){ if(i==j) sum=sum+*(*(a+i)+j); if(i+j==(n-1) && i!=j ) sum=sum+*(*(a+i)+ n- 1-i); } return sum; } void main() { int i,j; float a[3][3],*p[3]; for(i = 0; i < 3; i++) for(j = 0; j < 3; j++){ scanf("%f",&a[i][j]); p[i]=a[i]; } printf("sum=%0.2f \n", matrix(p,3)); } |
10031 调试示例error11_3.cpp(用单向链表组织学生信息)
程序填空,不要改变与输入输出有关的语句。
输入若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束,用单向链表组织这些学生信息后,再按顺序输出。
输入输出示例:括号内为说明
输入:
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0
输出:
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
#include<stdio.h> #include<stdlib.h> #include<string.h> struct stud_node{ int num; char name[20]; int score; struct stud_node *next; }; void main() { struct stud_node *head,*tail, *p; int num, score; char name[20]; int size = sizeof(struct stud_node); head=tail=NULL; scanf("%d", &num); while(num != 0){ /*---------*/ p=(struct stud_node *)malloc(size); scanf("%s%d",name,&score); p->num = num; strcpy(p->name, name); p->score = score; p->next=NULL; if (head==NULL) head = p; else tail->next = p; tail = p; scanf("%d", &num); } for(p=head; p!=NULL; p=p->next) printf("%d %s %d\n", p->num,p->name,p->score); } |
程序填空,不要改变与输入输出有关的语句。
输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。
提示:
定义函数struct stud_node *Creat_Stu_Doc()完成创建链表
定义函数struct stud_node *DeleteDoc(struct stud_node *head,int min_score)将分数低于min_score的结点删除
定义函数void Ptrint_Stu_Doc(struct stud_node *head)打印链表
输入输出示例:括号内为说明
输入:
1 zhang 78
2 wang 80
3 li 75
4 zhao 85
0
80
输出:
2 wang 80
4 zhao 85
#include<stdio.h> #include<stdlib.h> #include<string.h> struct stud_node{ int num; char name[20]; int score; struct stud_node *next; }; struct stud_node *Creat_Stu_Doc(); struct stud_node *DeleteDoc(struct stud_node *head,int min_score); void Ptrint_Stu_Doc(struct stud_node *head); void main() { struct stud_node *head; int min_score; head=Creat_Stu_Doc(); scanf("%d",&min_score); head=DeleteDoc(head,min_score); Ptrint_Stu_Doc(head); } struct stud_node *Creat_Stu_Doc() { int num, score; char name[20]; int size = sizeof(struct stud_node); struct stud_node *head, *tail, *p; head = tail = NULL; scanf("%d",&num); while (num!=0) { p = (struct stud_node *) malloc(size); scanf("%s%d",name,&score); p->num = num; strcpy(p->name, name); p->score = score; p->next = NULL; if (head == NULL) head=p; else tail->next = p; tail = p; scanf("%d",&num); } return head; } struct stud_node *DeleteDoc(struct stud_node *head,int min_score) { struct stud_node *p1, *p2, *p3; p3 = head; for (p1 = head; p1!=NULL; p1=p2) { p2 = p1->next; if (p1->score < min_score) { if (p1 != head) p3->next=p2; else head = p3 = p2; free(p1); } else p3=p1; } return head; } void Ptrint_Stu_Doc(struct stud_node *head) { struct stud_node *p1; for (p1 = head; p1!=NULL; p1=p1->next) { printf("%d %s %d\n",p1->num,p1->name, p1->score); } } |
程序填空,不要改变与输入输出有关的语句。
输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序建立一个链表并输出。
提示:
定义函数struct stud_node *Creat_Stu_Doc()完成按输入数据的逆序创建链表。
输入输出示例:括号内为说明
输入:
1 2 3 4 5 6 7 -1
输出:
7 6 5 4 3 2 1
#include<stdio.h> #include<stdlib.h> #include<string.h> struct stud_node{ int num; struct stud_node *next; struct stud_node *left; }; struct stud_node *Creat_Stu_Doc(); void Ptrint_Stu_Doc(struct stud_node *head); void main() { struct stud_node *head; head=Creat_Stu_Doc(); Ptrint_Stu_Doc(head); } /*---------*/ struct stud_node *Creat_Stu_Doc() { int num; int size = sizeof(struct stud_node); struct stud_node *head, *tail, *p; head = tail = NULL; scanf("%d",&num); while (num>=0) { p = (struct stud_node *) malloc(size); p->num = num; p->left = p->next = NULL; if (head == NULL) head=p; else { tail->next = p; p->left = tail; } tail = p; scanf("%d",&num); } return head; } void Ptrint_Stu_Doc(struct stud_node *head) { struct stud_node *ptr; if(head==NULL){ printf("No Records\n"); return; } for(ptr=head;ptr->next;ptr=ptr->next); for(ptr;ptr;ptr=ptr->left) printf("%d ",ptr->num); printf("\n"); } |
程序填空,不要改变与输入输出有关的语句。
输入若干个正整数(输入-1为结束标志),并建立一个单向链表,将其中的偶数值结点删除后输出。
定义函数struct stud_node *DeleteDoc(struct stud_node *head)删除链表中偶数值结点。
输入输出示例:括号内为说明
输入:
1 2 3 4 5 6 7 -1
输出:
1 3 5 7
#include<stdio.h> #include<stdlib.h> struct stud_node{ int num; struct stud_node *next; }; struct stud_node *Creat_Stu_Doc(); struct stud_node *DeleteDoc(struct stud_node *head); void Ptrint_Stu_Doc(struct stud_node *head); void main() { struct stud_node *head; head=Creat_Stu_Doc(); head=DeleteDoc(head); Ptrint_Stu_Doc(head); } struct stud_node *Creat_Stu_Doc() { struct stud_node *head,*tail,*p; int num; int size=sizeof(struct stud_node); head=tail=NULL; scanf("%d",&num); while(num!=-1){ p=(struct stud_node *)malloc(size); p->num=num; p->next=NULL; if(head==NULL) head=p; else tail->next=p; tail=p; scanf("%d",&num); } return head; } void Ptrint_Stu_Doc(struct stud_node *head) { struct stud_node *ptr; if(head==NULL){ printf("No Records\n"); return; } for(ptr=head;ptr;ptr=ptr->next) printf("%d ",ptr->num); printf("\n"); } /*---------*/ struct stud_node *DeleteDoc(struct stud_node *head) { struct stud_node *p1, *p2, *p3; p3 = head; for (p1 = head; p1!=NULL; p1=p2) { p2 = p1->next; if (p1->num % 2==0) { if (p1 != head) p3->next=p2; else head = p3 = p2; free(p1); } else p3=p1; } return head; } |
程序填空,不要改变与输入输出有关的语句。
有2个已按升序排序的单向链表,头指针分别为list1、list2,链表中每一结点的数据域是一个整数。
请编写一个函数,把2个链表拼成1个链表并对新链表升序排列后,返回新链表。编写主程序验证实现。
提示:
定义函数struct stud_node *Creat_Stu_Doc()分别创建两个链表;
定义函数void Ptrint_Stu_Doc(struct stud_node *head)打印链表;
定义函数struct stud_node *InserDoc(struct stud_node *list1,struct stud_node *list2)完成按升序将链表list2的结点依次插入链表list1中。
输入输出示例:
输入:
1 3 5 7 -1
2 4 6 -1
输出:
1 2 3 4 5 6 7
#include<stdio.h> #include<stdlib.h> struct stud_node{ int num; struct stud_node *next; }; struct stud_node *Creat_Stu_Doc(); void Ptrint_Stu_Doc(struct stud_node *head); struct stud_node *InserDoc(struct stud_node *list1,struct stud_node *list2); void main() { struct stud_node *list1,*list2; list1=Creat_Stu_Doc(); list2=Creat_Stu_Doc(); list1=InserDoc(list1,list2); Ptrint_Stu_Doc(list1); } struct stud_node *Creat_Stu_Doc() { struct stud_node *head,*tail,*p; int num; int size=sizeof(struct stud_node); head=tail=NULL; scanf("%d",&num); while(num!=-1){ p=(struct stud_node *)malloc(size); p->num=num; p->next=NULL; if(head==NULL) head=p; else tail->next=p; tail=p; scanf("%d",&num); } return head; } void Ptrint_Stu_Doc(struct stud_node *head) { struct stud_node *ptr; if(head==NULL){ printf("No Records\n"); return; } for(ptr=head;ptr;ptr=ptr->next) printf("%d ",ptr->num); printf("\n"); } /*---------*/ struct stud_node * appEndDoc(struct stud_node *head, int num) { struct stud_node *tail=NULL,*p; int size=sizeof(struct stud_node); p=(struct stud_node *)malloc(size); p->num=num; p->next=NULL; if(head==NULL) head=p; else { for (tail=head; tail->next; tail=tail->next); tail->next=p; } return head; } struct stud_node *InserDoc(struct stud_node *list1,struct stud_node *list2) { struct stud_node *p1,*p2, *newList=NULL; p1 = list1; p2=list2; while (p1 && p2) { if(p1->num > p2->num ) { newList = appEndDoc(newList,p2->num); p2=p2->next; } else { newList = appEndDoc(newList,p1->num); p1=p1->next; } } while(p1) { newList = appEndDoc(newList, p1->num); p1=p1->next; } while(p2) { newList = appEndDoc(newList, p2->num); p2=p2->next; } return newList; } |
程序填空,不要改变与输入输出有关的语句。
有一个单向链表,头指针为L,结点的数据域是一个整数,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表。
输入输出示例:
输入:
1 2 3 4 5 6 7 -1
输出:
1 3 5 7
#include<stdio.h> #include<stdlib.h> #include<string.h> struct stud_node{ int num; struct stud_node *next; }; void Ptrint_Stu_Doc(struct stud_node *head); void main() { struct stud_node *L,*tail1,*p1,*NEW; int num; int size=sizeof(struct stud_node); struct stud_node *arrangeDoc(struct stud_node *head); L=tail1=NULL; scanf("%d",&num); while(num!=-1){ p1=(struct stud_node *)malloc(size); p1->num=num; p1->next=NULL; if(L==NULL) L=p1; else tail1->next=p1; tail1=p1; scanf("%d",&num); } /*---------*/ NEW = arrangeDoc(L); Ptrint_Stu_Doc(NEW); } struct stud_node *arrangeDoc(struct stud_node *head) { struct stud_node *p1, *p2, *p3; p3 = head; for (p1 = head; p1!=NULL; p1=p2) { p2 = p1->next; if (p1->num % 2==0) { if (p1 != head) p3->next=p2; else head = p3 = p2; free(p1); } else p3=p1; } return head; } void Ptrint_Stu_Doc(struct stud_node *head) { struct stud_node *ptr; if(head==NULL){ printf("No Records\n"); return; } for(ptr=head;ptr;ptr=ptr->next) printf("%d ",ptr->num); printf("\n"); } |