2012春学期C语言上机练习参考答案 - 图文

更新时间:2023-11-18 07:12:01 阅读量: 教育文库 文档下载

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

第1周(1-4题略).............................................................................................................................2

5) 10006 显示\...............................................................2 6) 10007 显示图案 (复习printf()的字符串输出)..............................................3 第2周.............................................................................................................................................3

1) 20011求华氏温度100°F对应的摄氏温度。...............................................................3 2) 20012 求华氏温度 150°F 对应的摄氏温度。............................................................4 3) 20013 求摄氏温度26°C对应的华氏温度.............................................................4 4) 20014 计算三门课程的平均成绩............................................................................4 5) 20015当n为152时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。.....................................................................................................................5 6) 20016 计算x的平方(改错题error02_2)................................................................5 7) 20021 计算分段函数的值(调试示例error02_3)....................................................6 8) 20023 计算存款利息......................................................................................................6 9) 20024 计算分段函数......................................................................................................7 10) 20026 输入2个整数 num1 和 num2,计算并输出它们的和、差、积、商与余数。 8

第3周.............................................................................................................................................8

1) 20031 求1+2+3+......+100(调试示例error02_5)............................................8 2) 20032 求m+(m+1)+(m+2)+......+100....................................................................9 3) 20033 求1/m+1/(m+1)+1/(m+2)+......+1/n..................................................10 4) 20035 求1-1/4+1/7-1/10+……的前n项之和...........................................10 5) 20038 求x的n次幂...........................................................................................12 6) 20041 生成 3 的乘方表......................................................................................12 7) 20044 求100^0.5+101^0.5+……+1000^0.5.................................................13 8) 20053 计算物体自由下落的距离........................................................................14 9) 20057 求1+1/2+1/3+......+1/n.......................................................................14 10) 20061 阶梯电价....................................................................................................15 第4周...........................................................................................................................................15

1) 20025 计算分段函数的值(改错题error02_4)......................................................15 2) 20027计算旅途时间。.................................................................................................16 3) 20028数字加密.............................................................................................................17 4) 20034 求1 + 1/3 + 1/5 + ......的前n项和..............................................................18 5) 20036 输出华氏-摄氏温度转换表(改错题error02_6)..................................19 6) 20043 使用函数求 n! /(m!* (n-m)!).....................................................................20 7) 20062 求m*m+1/m+(m+1)*(m+1)+1/(m+1)+(m+2)*(m+2)+1/(m+2)+......+n*n+1/n............................................................................................................................21 8) 20063 求1-2/3+3/5-4/7+5/9-6/11+……........................................................21 9) 20064 求2^1+2^2+2^3+……+2^n...............................................................22 10) 20065 求0!+1!+2!+……+n!.......................................................................23 第5周...........................................................................................................................................24

1) 30001 求一元二次方程的根..................................................................................24 2) 30002 求分段函数的值..........................................................................................26 3) 30004 显示五级记分制成绩所对应的百分制成绩区间(使用switch)..........27 4) 30005 显示水果的价格(使用switch)..............................................................28

1

5) 30007 求三角形的面积和周长..............................................................................29 6) 30008 计算个人所得税..........................................................................................30 7) 30009 统计学生成绩..............................................................................................32 8) 30053 分段计算水费(使用嵌套的if-else语句)..............................................33 9) 30061 出租车计费..................................................................................................33 10) 30062 输出21世纪所有闰年..................................................................................34 第6周...........................................................................................................................................35

1) 40011 求最小公倍数和最大公约数(调试示例error04_1)............................35 2) 40012 求1-1/4+1/7-1/10+1/13-1/16+……...............................................37 3) 40014 求整数的位数..............................................................................................38 4) 40017 求2/1+3/2+5/3+8/5+............................................................................39 5) 40023 换硬币..........................................................................................................40 6) 40024 找出各位数字的立方和等于它本身的数..................................................41 7) 40025 找完数(改错题error04_2)....................................................................42 8) 40026 验证歌德巴赫猜想(选作)...........................................................................43 9) 40027 从高位开始逐位输出一个整数的各位数字(选作)...................................45 10) 40051 求平均成绩并统计不及格人数..................................................................46 第7周...........................................................................................................................................47

1) 50002 使用函数判断数的符号..............................................................................47 2) 50003 使用函数求奇数和......................................................................................48 3) 50005 使用函数统计素数并求和..........................................................................49 4) 50006 使用函数统计一个整数中数字的个数......................................................50 5) 50007 使用函数找水仙花数..................................................................................51 6) 50008 使用函数求1! + 2! + … + m!(改错题error05_2)...............................52 7) 50009 使用函数求余弦函数的近似值..................................................................53 8) 50052 使用函数找最大值......................................................................................55 9) 50062 使用函数输出指定范围内的 Fibonacci 数.............................................55 10) 50063 使用函数找出指定范围内的完数..........................................................57 第8周...........................................................................................................................................58

1) 40062 求x+x*x/2!+x*x*x/3!+x*x*x*x/4!+……的值....................................58 2) 50004 使用函数计算两点间的距离......................................................................59 3) 50051 数字金字塔........................................................................................................60 4) 50061 使用函数求a+aa+aaa+aa…a...............................................................61 5) 60001 使用函数求PI(调试示例源程序error06_1).......................................62 6) 60002 整数的十进制、八进制和十六进制表现形式..........................................63 7) 60003 分类统计字符..............................................................................................64 8) 60007 使用函数输出整数的逆序数......................................................................65 9) 60009 统计单词......................................................................................................66 10) 60062 简单计算器..............................................................................................68

第1周(1-4题略)

5) 10006 显示\

编写程序,在屏幕上显示一个短句\

2

#include int main(void) {

printf(\return 0; }

6) 10007 显示图案 (复习printf()的字符串输出)

编写程序,在屏幕上显示如下图案。 * * * * * * * * * *

#include int main(void) {

printf(\ \ \ * *\\n\ \ *\\n\/*---------*/ }

第2周

1) 20011求华氏温度100°F对应的摄氏温度。 计算公式如下,c=5*(f-32)/9,式中:c表示摄氏温度,f表示华氏温度。(源程序error02_1.cpp) 输入输出示例: fahr=100,celsius=37

#include int main(void) {

int celsius, fahr; /*---------*/ fahr=100;

celsius=5*(fahr-32)/9;

printf(\

return 0;

3

}

2) 20012 求华氏温度 150°F 对应的摄氏温度。

计算公式:C = 5*F/9-5*32/9,式中:C表示摄氏温度,F表示华氏温度。 输入输出示例: fahr=150, celsius=66

#include int main(void) {

int celsius, fahr;

/*---------*/ fahr=150;

celsius=5*fahr/9-5*32/9;

printf(\ return 0; }

3) 20013 求摄氏温度26°C对应的华氏温度

程序填空,不要改变与输入输出有关的语句。

求摄氏温度26°C对应的华氏温度。计算公式:f = 9*c/5 + 32,式中:c表示摄氏温度,f表示华氏温度。 输入输出示例:

celsius = 26, fahr = 78

#include int main(void) {

int celsius, fahr;

/*---------*/ celsius = 26; fahr = 78; fahr = 9*celsius/5 + 32;

printf(\}

4) 20014 计算三门课程的平均成绩

程序填空,不要改变与输入输出有关的语句。

4

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。 输入输出示例:

math = 87, eng = 72, comp = 93, average = 84

#include int main(void) {

int math, eng, comp, average; math = 87; eng = 72; comp = 93;

/*---------*/

average = (math+eng+comp)/3;

printf(\ }

5) 20015当n为152时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)

的值。 输入输出示例:

整数152的个位数字是2,十位数字是5,百位数字是1

#include int main(void) {

int n,digit1,digit2,digit3; n=152;

digit1=n; digit2=(n/10); digit3=n/100; /*---------*/

printf(\整数%d的个位数字是%d, 十位数字是%d, 百位数字是%d\\n\digit2, digit3); return 0; }

6) 20016 计算x的平方(改错题error02_2) 程序填空。

假设 x 的值为3,计算 x 的平方 y,并分别以\和\的形式输出 x 和 y 的值。

输入输出示例:

5

sum = 0.893 sum = 0.819

#include int main(void) {

int flag, i, n, t; int repeat, ri; double item, sum;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ 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(\= %.3f\\n\sum); } }

参考2:

#include int main(void) {

int flag, i, n, t; int repeat, ri; double item, sum;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ flag=1; sum=0;

for(i=1;i<=n;i++) {

item=1.0/(3*i-2); sum=sum+flag*item;

11

flag=-flag; }

printf(\= %.3f\\n\sum); } }

5) 20038

求x的n次幂

输入一个正整数repeat (0

2 (repeat=2) 1.5 2 (x=1.5,n=2) 2 7 (x=2,n=7) 输出 2.25 128.00

#include int main(void) {

int i, n;

int repeat, ri; double mypow, x;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ mypow=1;

for(i=1;i<=n;i++)

mypow=mypow*x; /*---------*/

printf(\mypow); } }

6) 20041

生成 3 的乘方表

输入一个正整数n,生成一张3的乘方表,输出3^0 ~ 3^n的值,可调用幂函数计算3的乘方。

输出使用语句 printf(\输入输出示例:括号内是说明

12

输入 3 (n=3) 输出

pow(3,0) = 1 pow(3,1) = 3 pow(3,2) = 9 pow(3,3) = 27

#include #include int main(void) {

int i, n; double mypow;

scanf(\ for(i=0;i<=n;i++) { mypow=pow(3,i); printf(\= %.0f\\n\i, mypow); } }

7) 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 #include int main(void) {

int i; double sum; sum=0;

for(i=100;i<=1000;i++) sum=sum+sqrt(i); /*---------*/ printf(\= %.2f\\n\}

13

8) 20053

计算物体自由下落的距离

一个物体从 100m 的高空自由落下,编写程序,求它在前 3s 内下落的垂直距离(结果保留2位小数)。设重力加速度为10米/秒^2。

#include int main(void) {

double height;

height=0.5 * 10 * 3* 3; /*---------*/ printf(\= %.2f\\n\height); }

9) 20057

求1+1/2+1/3+......+1/n

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0

编写程序,输入一个正整数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 int main(void) {

int i, n;

int repeat, ri; double sum;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0;

for(i=1;i<=n;i++) sum=sum+1.0/i; printf(\= %.6f\\n\sum); }

14

}

10) 20061

阶梯电价

输入一个正整数repeat (0

输入用户的月用电量e(千瓦时),计算并输出该用户应支付的电费(元),结果保留2位小数。

输入输出示例:括号内是说明 输入

2 (repeat=2) 10 (e=10) 100 (e=100) 输出

cost = 5.30 cost = 55.50

#include int main(void) {

int repeat, ri; double cost, e;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\

if(e<=50) cost=e*0.53; else cost=0.53*50+(e-50)*0.58; /*---------*/

printf(\= %.2f\\n\cost); } }

第4周

1) 20025 计算分段函数的值(改错题error02_4) 程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0

输入实数 x,计算并输出下列分段函数 f(x) 的值,输出时保留1位小数。 当 x 不等于10时,y = f(x) = x,当 x 等于10时,y = f(x) = 1/x。

15

输入输出示例:括号内是说明 输入

2 (repeat=2) 10 234 输出

f(10.0) = 0.1 f(234.0) = 234.0

#include int main(void) {

int repeat, ri; double x, y;

scanf(\&repeat);

for(ri = 1; ri <= repeat; ri++){ /*---------*/

scanf(\ if(x!=10) y=x; else y=1/x; printf(\ }

return 0; }

2) 20027计算旅途时间。

输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。 有效的时间范围是0000到2359(前两位表示小时,后两位表示分钟),不需要考虑出发时间晚于到达时间的情况。 例:括号内是说明 输入

712 1411 (出发时间是7:12,到达时间是14:11) 输出

The train journey time is 6 hours 59 minutes.

#include int main(void) {

int time1, time2, hour, minutes, t1, t2, result; scanf(\

t1 = (time1 / 100) * 60 + time1 % 100; /* 统一化成minutes: */ t2 = (time2 / 100) * 60 + time2 % 100; result = t2 - t1;

16

hour = result / 60; minutes = result % 60;

printf(\}

参考2:

#include int main(void) {

int time1, time2, hour, minutes; int th1,th2,tm1,tm2; // ?? 这里随便加入printf(“\\n”)也能通过? scanf(\&time1, &time2); th1=time1/100; th2=time2/100; tm1=time10; tm2=time20; if(tm1>tm2){

hour=th2-th1-1;

minutes=tm2+60-tm1; } else{

hour=th2-th1; minutes=tm2-tm1; }

printf(\ return 0; }

3) 20028数字加密

输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。 例:括号内是说明 输入 1257 输出

The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601) #include int main(void) {

int number, digit1, digit2, digit3, digit4, newnum;

scanf(\&number); /*---------*/

17

digit1=(number+9)*100;

/* 取个位+9之后除以10取余,然后变成百位(个位与百位交换) */

digit2=(number/10+9)*1000;

/* 取十位+9之后除以10取余,然后变成千位,将千位和十位上的数字互换 */ digit3=(number/100+9);

/* 取百位+9之后除以10取余,变成个位,百位和个位上的数字互换*/

digit4=(number/1000+9)*10;

/* 取千位+9之后除以10取余,变成十位,千位数字与十位数字交换 */

newnum=digit1+digit2+digit3+digit4; printf(\encrypted number is %d\\n\ return 0; }

参考2:

#include int main(void) {

int digit1, digit2, digit3, digit4, newnum, number; printf(\ scanf(\&number);

digit1=(number+9); /* 个位 */ digit2=((number/10)+9); /* 十位 */ digit3=((number/100)+9); /* 百位 */ digit4=(number/1000+9); /* 千位 */

newnum=digit2*1000+digit1*100+digit4*10+digit3; printf(\ return 0; }

4) 20034 求1 + 1/3 + 1/5 + ......的前n项和

输入一个正整数repeat (0

输入一个正整数 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

18

int main(void) {

int i, n; int denominator; int repeat, ri; double sum;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ sum=0;

denominator=1; for(i=1;i<=n;i++) {

sum=sum+1.0/denominator; denominator=denominator+2; }

printf(\= %.6f\\n\sum); } }

5) 20036 输出华氏-摄氏温度转换表(改错题error02_6)

输入一个正整数repeat (0

读入2个整数 lower 和 upper,输出一张华氏—摄氏温度转换表,华氏温度的取值范围是[lower, upper],每次增加2F。

计算公式:c = 5 * (f - 32) / 9,其中:c表示摄氏温度,f表示华氏温度。 输出请使用语句 printf(\输入输出示例:括号内是说明 输入

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 int main(void) {

int lower, upper; int repeat, ri; double celsius, fahr;

19

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){

scanf(\ printf(\ for(fahr=lower;fahr<=upper; fahr++, fahr++) { celsius=5*(fahr-32)/9;

printf(\ }/*---------*/ } }

6) 20043 使用函数求 n! /(m!* (n-m)!)

输入一个正整数repeat (0

要求定义并调用函数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 \int main(void) {

int m, n;

int repeat, ri; double s; double fact(int n); scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\

s=fact(n)/(fact(m)*fact(n-m)); printf(\= %.0f\\n\s); } }

double fact(int n) {

double result; int i;

20

scanf(\ 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(\ }

printf(\ }

return 0; }

10) 40051 求平均成绩并统计不及格人数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat (0

从键盘输入一批学生的成绩(以负数为结束标志),计算平均分(保留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

46

int main(void) {

int fail, num; int repeat, ri;

double grade, total;

scanf(\

for(ri = 1; ri <= repeat; ri++){ total=0; num=0; fail=0; do{ scanf (\ if(grade<0)break; num++; if(grade<60) fail++; total=total+grade; }while(grade>=0); if(num > 0)

printf(\total/num, fail); } return 0; }

第7周

1) 50002 使用函数判断数的符号

输入一个正整数 repeat (0

输入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)

47

sign(0) = 0 (x=0时sign(x)的值为0) ①

#include int sign(int x); int main(void) {

int x, y;

int repeat, ri;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ y=sign(x);

printf(\= %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; }

2) 50003 使用函数求奇数和

输入一个正整数repeat (0

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 int even(int n); int main(void) {

48

int n, sum; int ri, repeat;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){

sum=0;

scanf(\

while (n>0){ if (even(n)==0) sum=sum+n; scanf(\

}

printf(\ } }

int even(int n) {

int t; if (n%2==0) t=1; else t=0; return t; }

3) 50005 使用函数统计素数并求和

输入一个正整数 repeat (0

输入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 \#include \int main(void) {

int count, i, m, n, sum;

49

int repeat, ri;

int prime(int m);

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\&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(\ } }

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; }

4) 50006 使用函数统计一个整数中数字的个数

输入一个正整数 repeat (0

要求定义并调用函数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) 输出

50

int repeat, ri; double a, b, c, d;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){

scanf(\ d=b*b-4*a*c;

if(a==0&&b==0&&c==0) printf(\参数都为零,方程无意义!\\n\

if(a==0&&b==0&&c!=0) printf(\和b为0,c不为0,方程不成立\\n\ if(a==0&&b!=0)

printf(\= %0.2f\\n\-c/b); if(a!=0&&d>=0){ printf(\= %0.2f\\n\(-b+sqrt(d))/(2*a)); printf(\ }

if(a!=0&&d<0){ printf(\= %0.2f+%0.2fi\\n\ printf(\= %0.2f-%0.2fi\\n\ } } }

2) 30002 求分段函数的值

输入一个正整数 repeat (0 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 int main(void) {

int repeat, ri;

26

int x, y;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){ scanf(\ if(x==0) y=0; else if(x>0) y=1; else y=-1; printf(\= %d\\n\x, y); } }

3) 30004 显示五级记分制成绩所对应的百分制成绩区间(使用switch)

输入一个正整数 repeat (0

五级制成绩对应的百分制成绩区间为:A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59),如果输入不正确的成绩,显示\输出使用以下语句: printf(\printf(\printf(\printf(\printf(\

printf(\

输入输出示例:括号内是说明 输入

6ABCDEj (repeat=6,输入的五级成绩分别为A、B、C、D、E和无效的字符j) 输出 90-100 80-89 70-79 60-69 0-59

Invalid input (输入数据不合法)

#include int main(void) {

char ch;

int repeat, ri;

scanf(\&repeat);

27

for(ri = 1; ri <= repeat; ri++){ ch = getchar(); switch(ch){ case'A':

printf(\ break; case'B':

printf(\ break; case'C':

printf(\ break; case'D':

printf(\ break; case'E':

printf(\ break; default:

printf(\input\\n\ break; } } return 0; }

4) 30005 显示水果的价格(使用switch)

查询水果的单价。有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

28

price = 4.1 [1] apples [2] pears [3] oranges [4] grapes [0] Exit

#include int main(void) {

int choice, i; double price;

for(i = 1; i <= 5; i++){ printf(\apples\\n\ printf(\pears\\n\ printf(\oranges\\n\ printf(\grapes\\n\ printf(\Exit\\n\ scanf(\ if(choice == 0) break; else{

switch (choice){ case 1: price= 3.00; case 2: price=2.50; case 3: price=4.10; case 4: price=10.20;

default: price=0;

}

printf(\= %0.1f\\n\price); } } }

5) 30007 求三角形的面积和周长

break; break; break; break; break;

输入一个正整数 repeat (0

在一个三角形中,任意两边之和大于第三边。三角形面积计算公式:area = (s(s-a)(s-b)(s-c))^0.5 ,其中s = (a+b+c)/2 输出使用以下语句:

printf(\

29

printf(\

输入输出示例:括号内是说明 输入

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 #include int main(void) {

int a, b, c; int repeat, ri; double area, perimeter, s;

scanf(\&repeat); for(ri = 1; ri <= repeat; ri++){

scanf(\ 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(\= %.2f, perimeter = %.2f\\n\ } else printf(\ } }

6) 30008 计算个人所得税

输入一个正整数 repeat (0

输入一个职工的月薪 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%

输入输出示例:括号内是说明

30

输入

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 int main() {

int ri, repeat; double rate, salary, tax;

scanf(\&repeat); for(ri=1; ri<=repeat; ri++) {

scanf(\&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(\= %0.2f\\n\tax);

31

} }

7) 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 int main(void) { int mark, n, i; int na,nb,nc,nd,ne;

scanf(\ na=nb=nc=nd=ne=0; for(i=1; i<=n; i++){ scanf(\/*---------*/

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(\ printf(\of B(80-89): %d\\n\nb); printf(\of C(70-79): %d\\n\nc); printf(\of D(60-69): %d\\n\nd); printf(\of E(0-59): %d\\n\ne); return 0; }

32

8) 30053 分段计算水费(使用嵌套的if-else语句)

输入一个正整数repeat (015)

输入输出示例:括号内是说明 输入

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 int main(void) {

int repeat, ri; double x, y;

scanf(\&repeat); for(ri = 1;ri <= repeat; ri++){ scanf(\ if(x<0) y=0; else if(x>=0&&x<=15) y=4.0*x/3; else y=2.5*x-10.5; printf(\= %.2f\\n\x, y); } }

9) 30061 出租车计费

程序填空,不要改变与输入输出有关的语句。

输入一个正整数 repeat (0

某城市普通出租车收费标准如下:\3公里,起步费10元;超起步里程后10公里内,每公里租费2元,超过10公里以上的部分加收50%的回空补贴费,

33

即每公里租费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 int main(void) {

int repeat, ri;

int minutes, seconds; double cost, mile;

scanf(\

for(ri = 1; ri <= repeat; ri++){

scanf(\

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(\ } }

10) 30062 输出21世纪所有闰年

程序填空,不要改变与输入输出有关的语句。 输入21世纪所有的闰年。判断闰年的条件是:能被 4 整除但不能被 100 整除,或者能被 400 整除。

输出使用语句 printf(\ 输入输出示例:括号内是说明 输出

34

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 int main(void) {

int year;

for(year = 2000; year <= 2099; year++){

if((year%4==0 && year0!=0)||(year@0==0)) printf(\ } }

第6周

1) 40011 求最小公倍数和最大公约数(调试示例error04_1)

输入一个正整数 repeat (0

35

本文来源:https://www.bwwdw.com/article/59tv.html

Top