上机考试练习题
20021程序填空,不要改变与输入输出有关的语句。
输入一个正整数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);
} }
20022程序填空,不要改变与输入输出有关的语句。
输入华氏温度,输出对应的摄氏温度。计算公式: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.0*(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);
}
20024程序填空,不要改变与输入输出有关的语句。
输入一个正整数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/x;
printf("f(%.2f) = %.2f\n", x, y);
} }
20025程序填空,不要改变与输入输出有关的语句。
输入一个正整数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);
} }
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;
}
20031程序填空,不要改变与输入输出有关的语句。
计算表达式 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程序填空,不要改变与输入输出有关的语句。
输入一个正整数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程序填空,不要改变与输入输出有关的语句。
输入一个正整数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程序填空,不要改变与输入输出有关的语句。
输入一个正整数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 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/(2*i-1);
printf("sum = %.6f\n", sum);
} }
20035程序填空,不要改变与输入输出有关的语句。
输入一个正整数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;item=0;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程序填空,不要改变与输入输出有关的语句。
输入一个正整数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+2){
celsius=5 * (fahr- 32) / 9;
printf("%3.0f %6.1f\n", fahr, celsius);
} }
}
20037程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入2 个正整数 m 和 n,计算 m!+n!。
输入输出示例:括号内是说明 输入:
2 (repeat=2) 1 4 (m=1,n=4)
3 8 (m=3,n=8) 输出:
1! + 4! = 25 3! + 8! = 40326
#include "stdio.h"
int main(void) {
int i, m, n;
int repeat, ri;
double fm, fn;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d%d", &m, &n);
/*---*/
fm=fn=1;
for(i=1;i<=m;i++) fm=fm*i;
for(i=1;i<=n;i++) fn=fn*i;
printf("%d! + %d! = %.0f\n", m, n, fm+fn);
} }
20038程序填空,不要改变与输入输出有关的语句。
输入一个正整数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);
} }
20041程序填空,不要改变与输入输出有关的语句。
输入一个正整数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);
}
return 0;
}
20042程序填空,不要改变与输入输出有关的语句。
输入一个正整数n,生成一张阶乘表,输出 1! ~ n! 的值,要求定义和调用函数f act(n)计算 n!,函数类型为double。
输出使用语句 printf("%d! = %.0f\n", i, myfact);
输入输出示例:括号内是说明 输入
3 (n=3)
输出 1! = 1 2! = 2 3! = 6
#include <stdio.h>
int main(void) {
int i, n;
double myfact;
double fact(int n);
scanf("%d", &n);
/*---*/
for(i=1;i<=n;i++){
myfact=fact(i);
printf("%d! = %.0f\n", i, myfact);
}
return 0;
}
/*---*/
double fact(int n) {
int i;
double f=1;
for(i=1;i<=n;i++) f=f*i;
return f;
}
20043程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入2个正整数 m 和 n(m<=n),计算 n! /(m!* (n-m)!) 。
要求定义并调用函数fact(n)计算n的阶乘, 其中 n 的类型是 int,函数类型是 dou ble。
例:括号内是说明 输入:
2 (repeat=2) 2 7 (m=2, n=7) 5 12 (m=5, n=12) 输出:
result = 21 result = 792
#include "stdio.h"
double fact(int n);
int main(void) {
int m, n;
int repeat, ri;
double s;
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);
}
return 0;
}
/*---*/
double fact(int n) {
int i;
double f=1;
for(i=1;i<=n;i++) f=f*i;
return f;
}
20044程序填空,不要改变与输入输出有关的语句。
计算 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);
}
30001程序填空,不要改变与输入输出有关的语句。
输入一个正整数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));
}
} }
30002程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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=1;
else if(x==0) y=0;
else y=-1;
printf("sign(%d) = %d\n", x, y);
}
return 0;
}
30003程序填空,不要改变与输入输出有关的语句。
输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入输出示例:括号内是说明 输入
Reold 123?
输出
letter = 5, blank = 1, digit = 3, other = 1
#include <stdio.h>
int main(void) {
char c;
int blank, digit, i, letter, other;
blank = digit = letter = other = 0;
for(i = 1; i <= 10; i++){
c = getchar();
/*---*/
if((c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z')) letter ++;
else if(c >='0'&&c<='9') digit ++;
else if(c == ' ' || c == '\n') blank ++;
else other ++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other);
return 0;
}
30004程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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;
}
30005程序填空,不要改变与输入输出有关的语句。
查询水果的单价。有4种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(gr apes),单价分别是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.0; break;
case 2: price=2.5; break;
case 3: price=4.1; break;
case 4: price=10.2; break;
default: price=0.0; break;
}
printf("price = %0.1f\n", price);
} return 0;
}
30006 程序填空,不要改变与输入输出有关的语句。
输入 5 个学生的数学成绩,判断他们的成绩是否及格。如果成绩低于 60,输 出"Fail",否则,输出"Pass"。
输入输出示例:括号内是说明 输入
61 59 92 40 60 输出 Pass Fail Pass Fail Pass
#include <stdio.h>
int main(void)0 {
int i, mark;
for(i = 1; i <= 5; i++){
scanf("%d", &mark);
/*---*/
if(mark>=60) printf(“Pass\n”);
else printf(“Fail\n”);
} }
30007程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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&&b+c>a&&c+a>b) { perimeter=a+b+c;
s= perimeter/2;
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");
}
return 0;
}
30008程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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(void) {
int repeat, ri;
double rate, salary, tax;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%lf", &salary);
/*---*/
if(salary<=850) rate=0;
else if(salary<=1350) rate=0.05;
else if(salary<=2850) rate=0.1;
else if(salary<=5850) rate=0.15;
else rate=0.2;
tax = rate * (salary - 850);
printf("tax = %0.2f\n", tax);
} }
30009程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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 i, mark, n;
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) na++;
else if(mark >=80) nb++;
else if(mark >=70) nc++;
else if(mark >=60) 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);
}
30010程序填空,不要改变与输入输出有关的语句。
输入一个正整数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;
} }
return 0;
}
40011程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &m);
scanf("%d", &n);
if(m <= 0 || n <= 0)
printf("m <= 0 or n <= 0");
else{
/*---*/
for(lcm=m;lcm%n!=0;lcm=lcm+m)
; 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程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
读入1个正实数 eps,计算并输出下式的值,精确到最后一项的绝对值小于 eps(保留6位小数)。请使用 while 语句实现循环。
求1-1/4+1/7-1/10+1/13-1/16+……。
输入输出示例:括号内是说明 输入
2 (repeat=2) 1E-4 (eps=1E-4) 0.1 (eps=0.1) 输出
sum = 0.835699 sum = 0.869780
#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;
while(fabs(item)>=eps)
{ item= flag*1.0/ denominator;
sum=sum+item;
denominator = denominator +3;
flag=-flag;
}
printf("sum = %.6f\n", sum);
} }
40013程序填空,不要改变与输入输出有关的语句。
输入一个正整数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) sum=sum+x;
scanf("%d", &x);
}
printf("The sum of the odd numbers is %d.\n", sum);
} }
40014程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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);
printf("count = %d\n", count);
} }
40015程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数n, 再输入n个整数,输出最小值。
输入输出示例:括号内是说明 输入
3 (repeat=3) 4 -2 -123 100 0 4 -9 -1 1 -8 3 5 3 1 输出 min = -123 min = -9 min = 1
#include <stdio.h>
int main(void) {
int i, min, n, x;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
scanf("%d", &x);
/*---*/
min=x;
for(i=1;i<n;i++){
scanf("%d", &x);
if(x<min) min=x;}
printf("min = %d\n", min);
} }
40016程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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=sum=0;
if(in<0) in=-in;
if(in==0) {count=1;sum=0;}
while(in!=0)
{ sum=sum+in%10;
count++;
in=in/10;
}
printf("count = %d, sum = %d\n", count, sum);
} }
40017程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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);
/*---*/
denominator=1; numerator =2;sum=0;
for(i=0;i<n;i++)
{ sum=sum+ numerator / denominator;
temp= numerator;
numerator = denominator + numerator;
denominator =temp;
}
printf("sum = %.2f\n",sum);
} }
40018程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入2个正整数 a 和 n,求 a+aa+aaa+aa…a(n个a)之和。例如,输入 2 和 3,输出 246(2 + 22 + 222)。
输入输出示例:括号内是说明 输入
3 (repeat=3) 2 3 (a=2, n=3) 5 4 (a=5, n=4) 1 1 (a=1, n=1) 输出
sum = 246 (2+22+222)
sum = 6170 (5+55+555+5555) sum = 1 (1)
#include <stdio.h>
int main(void) {
int a, i, n, sn, tn;
int ri, repeat;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%ld%d", &a, &n);
/*---*/
sn=0; tn=1;
for(i=0;i<n;i++) { sn=sn+tn;
tn=tn*10+1;
}
sn=sn*a;
printf("sum = %d\n", sn);
} }
40019程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%lf%d", &height, &n);
/*---*/
distance = height ; height = height /2;
for(i=2;i<n;i++){
distance = distance +2* height;
height = height /2;
}
printf("distance = %.1f, height = %.1f\n", distance, height);
} }
40021程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入1个正整数n,计算下式的前n项之和(保留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;
for(i=1;i<=n;i++){
product =1;
for(j=1;j<=i;j++)
product = product *j;
e=e+1.0/ product ; }
printf("e = %0.4f\n", e);
} }
40022程序填空,不要改变与输入输出有关的语句。
输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入2个正整数 m 和 n(1<=m, n<=500),输出 m 和 n 之间的所有素数,
每行输出6个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
输出语句:printf("%d ", i);
输入输出示例:括号内为说明 输入:
2 (repeat=2) 1 35 (m=1, n=35)
2 10 (m=2,n=10)
输出:
primes: (1到35之间的素数) 2 3 5 7 11 13
17 19 23 29 31
primes: (2到10之间的素数) 2 3 5 7
#include "stdio.h"
#include "math.h"
int main(void) {
int count, i, j, k, m, n;
int ri,repeat;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat;ri++){
scanf("%d%d", &m, &n);
printf("primes:\n");
/*---*/
if(m==1) m=m+1;
count =0;
for (i =m ; i <=n ; i ++) { k =sqrt (i );
for (j=2;j<=k ;j++) if (i %j ==0) break;
if (j>k ) {
printf("%d ", i);
count++;
if(count%6==0) printf("\n");
}
}
printf("\n");
} }
40023程序填空,不要改变与输入输出有关的语句。?
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
将一笔零钱(大于8分,小于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(fen1=1; fen1<=money; fen1++) for(fen2=1; fen2<=money/2; fen2++)
for(fen5=1; fen5<=20/5; fen5++)
if(fen1*1+ fen2*2+ fen5*5==money) {count++;
printf("fen5:%d,fen2:%d,fen1:%d,total:%d\n",fen5, fen2, fen1,
fen5+fen2+fen1);
}
printf("count = %d\n", count);
} }
#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=1; fen1< money ; fen1++)
if(fen1*1+ fen2*2+ fen5*5==money){
count++;
printf("fen5:%d,fen2:%d,fen1:%d,total:%d\n",fen5, fen2, fen1, fen5+fen2+fen1);
}
printf("count = %d\n", count);
} }
40024程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入两个正整数 m 和 n(1<=m, n<=1000),输出 m 到 n之间的所有满足各位数
字的立方和等于它本身的数。
例如153的各位数字的立方和是 13+53+33=153。
输出使用语句: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++) { sum=0;number=i;
while (number) {
digit =number %10;
sum =sum +digit *digit *digit ; number = number /10;
}
if(i==sum) printf(“%d\n”,i );
}
} }
40025程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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
28 = 1 + 2 + 4 + 7 + 14 result:
496 = 1 + 2 + 4
#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(factor=m;factor<=n;factor++) { sum=1;
for(number=2;number<=factor/2;number++)
if(factor%number==0) sum+=number;
if(sum==factor)
printf("%d = 1",factor);{
for(number=2;number<=factor/2;number++) if(factor%number==0) printf(" + %d",number);
printf("\n");
} }
} }
50001 程序填空,不要改变与输入输出有关的语句。
从键盘输入一个正整数 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);
/*---*/
factorial=fact(n);
printf("%d! = %f\n", n, factorial);
}
/*---*/
double fact(int n) { int i;double s=1;
for(i=1;i<=n;i++) s=s*i;
return s;
}
50002 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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)
{ if(x>0) return 1;
else if(x==0) return 0;
else return -1;
}
50003 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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++){
scanf("%d",&n);
/*---*/
sum=0;
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)
{ if(n%2==0) return 1;
else return 0;
}
50004 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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,x2,y1,y2);
printf("Distance = %.2f\n", distance);
} }
/*---*/
double dist(double x1, double x2, double y1, double y2) {
return sqrt(pow((x1-x2),2)+pow((y1-y2),2));
}
50005 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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);
/*---*/
count=sum=0;
for (i=m ; i<=n ; i ++)
if(prime(i)) {count++;sum=sum+i;}
printf("Count = %d, sum = %d\n", count, sum);
} }
/*---*/
int prime(int n ) { int i ;
if(n==1) return 0;
for (i=2;i<=sqrt (n );i++) if(n%i ==0) return 0 ; return 1;
}
50006 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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 n=0,m;
if(number<0) number=-number;
while(number) { m=number%10;
if(digit==m) n++;
number =number/10;
}
return n;
}
50007 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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)) printf("%d\n", i);
} }
/*---*/
int is(int number)
{ int s=0,m,digit=number;
while(digit) { m=digit%10;
s=s+m*m*m;
digit =digit/10;
}
if(s==number) return 1;
else return 0;
}
50008 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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 s=1;
for(i=1;i<=n;i++) s=s*i;
return s;
}
60001 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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 multi(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);
/*---*/
sum=1;item=1;i=1;
while(item>=eps){
item=fact(i)/multi(i);
sum=sum+item;
i++;
}
printf("PI = %0.5f\n", 2 * sum);
} }
/*---*/
double fact(int n) { int i;double s=1;
for(i=1;i<=n;i++) s=s*i;
return s;
}
/*---*/
double multi(int n) { int i;double s=1;
for(i=1;i<=n;i++) s=s*(2*i+1);
return s;
}
60002 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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);
} }
60003 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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 =digit =blank =other =0;
while (c!='\n'){
if(c>='A' && c<='Z'||c>='a' && c<='z') letter++;
else if(c>='0' && c<='9') digit++;
else if(c==' ') blank++;
else other++;
c = getchar();
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other);
} }
60006 程序填空,不要改变与输入输出有关的语句。
验证哥德巴赫猜想:任何一个大于 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("%d=%d+%d ", number, i, number - i);
输入输出示例:括号内为说明 输入:
89 100 (m=89, 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, m, n, number;
int prime(int m);
scanf("%d%d", &m, &n);
if(m % 2 != 0) m = m + 1;
if(m >= 6){
/*---*/
for(number=m; number <= n; number = number +2 ){
for(i = 3;i<= number/2;i=i+2)
if(prime(i)==1&& prime(number-i)==1){
printf("%d=%d+%d ",number,i,number-i);
count++;
if(count%5==0) printf("\n");
break;
} }
} }
/*---*/
int prime(int m) { int i, n;
if(m == 1) return 0;
n = sqrt(m);
for(i = 2; i <= n; i++) if(m%i == 0) return 0;
return 1;
}
60007 程序填空,不要改变与输入输出有关的语句。
输入 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 s=0;int digit,flag=1;
if(n<0) {n=-n;flag=-1;}
while(n) {
digit=n%10;
s=s*10+digit;
n=n/10;
}
return flag*s;
}
70011 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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);
/*---*/
j=n;
for(i = 0; i < n; i++) if(x<=a[i]) {j=i;break;}
for(i= n-1; i>=j; i--) a[i+1]=a[i];
a[j]=x;
for(i = 0; i < n + 1; i++) printf("%d ", a[i]);
putchar('\n');
} }
70012 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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 aver;
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];
aver=(double)sum/n;
printf("average = %.2f\n", aver);
} }
70013 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 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]);
/*---*/
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");
} }
70014 程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: