Res - 2009夏学期C语言上机练习参考答案汇总 下载本文

夏学期C程序设计上机练习参考答案

} friends[i]=temp; } } %s\\n\friends[i].name, 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}, leap=(p->year%4==0 p->year@0==0; for(k=1;kmonth;k++) p->day=p->day+tab[leap][k]; return p->day; }

&& p->year0!=0) || {0,31,29,31,30,31,30,31,31,30,31,30,31} }; for(i = 0; i < n; i++) printf(\%ld friends[i].birthday, friends[i].phone); }

90007 算算看,这是第几天?

输入一个正整数 repeat (0

编写程序,输入一个日期(年、月、日),计算并输出该日是该年中的第几天。

要求定义并调用函数 day_of_year(p) 计算某日是该年的第几天,函数形参p的类型是结构指针,指向表示日期的结构变量,函数类型是int,注意区分闰年。 输入输出示例:括号内为说明 输入: 2

2006 3 5 2000 3 5 输出:

64 (2006年3月5日是该年的第64天) 65 (2000年3月5日是该年的第65天)

#include 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(\ for(ri = 1; ri <= repeat; ri++){ scanf(\&date.day); yearday=day_of_year(&date); &date.year, &date.month, (repeat=2)

90008 使用函数实现时间换算

输入一个正整数 repeat (0

输入一个时间数值,再输入秒数 n,输出该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。

要求定义并调用函数 timecal(p, n)实现时间换算,函数形参 p 的类型是结构指针,指向表示时间的结构变量,形参n 的类型是整型,表示秒数,函数类型是 void。 输入输出示例:括号内为说明 输入: 3 0:0:1 59

11:59:40 30

23:59:40 301 输出:

time: 0:1:0 (0:0:01加上59秒的新时间) time: 12:0:10 间)

time: 0:4:41 (23:59:40加上301秒的新时间) #include struct time{ (11:59:40加上30秒的新时

(秒数n=301) (秒数n=30) (秒数n=59) (repeat=3)

printf(\ 33

夏学期C程序设计上机练习参考答案

int hour, minute, second; }; void timecal(struct time *p, int n); int main(void) { int n; int repeat, ri; struct time timeA; /* 原题目用了struct time time,这样容易糊涂 */ scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\&timeA.minute, &timeA.second); scanf(\ timecal(&timeA,n); %d:%d:%d\\n\timeA.hour, &timeA.hour, 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 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(\ stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; } max_index=0; for(i=1; i

90009 找出总分最高的学生

输入一个正整数 n(3

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

(*p).second=(*p).second+n; if((*p).second>=60){ } (*p).minute=(*p).minute+(*p).second/60; (*p).second=(*p).second`; if((*p).minute>=60){ } (*p).hour=(*p).hour+(*p).minute/60; (*p).minute=(*p).minute`; if((*p).hour>=24) (*p).hour=(*p).hour-24; printf(\总分最高的学生是: %s,%d分\\n\stu[max_index].name, stu[max_index].sum); } 其它练习

20027计算旅途时间。

输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。

有效的时间范围是0000到2359(前两位表示小时,后两位表示分钟),不需要考虑出发时间晚于到达时间的情况。

34

夏学期C程序设计上机练习参考答案

例:括号内是说明 输入 712 1411 输出

The train journey time is 6 hours 59 minutes. #include int main(void) { scanf(\int time1, time2, h, m; (出发时间是7:12,到达时间是14:11)

/* 取十位+9之后除以10取余,然后变成千位,将千位和十位上的数字互换 */ digit3=(number/100+9); /* 取百位+9之后除以10取余,变成个位,百位和个位上的数字互换*/ digit4=(number/1000+9)*10; /* 取千位+9之后除以10取余,变成十位,千位数字与十位数字交换 */ newnum=digit1+digit2+digit3+digit4; printf(\ return 0; }

教材习题3-4 (上机练习30009,统计学生成绩)

/*---------*/ h=(time2-time1)/100; m=(time2-time1)+((time2-time1)/10)*10-40; /* 100进制转成60进制 */ printf(\train journey time is %d hours %d 输入一个正整数 n,再输入 n 个学生的百分制成绩,统计各等级成绩的个数。成绩等级分为五级,分别为A(90-100)、B(80-89)、C(70-79)、D(60-69)和E(0-59)。 输入输出示例:括号内是说明 输入 5

(n=5)

minutes.\\n\ }

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(\/*---------*/ digit1=(number+9)*100; /* 取个位+9之后除以10取余,然后变成百位(个位与百位交换) */ digit2=(number/10+9)*1000; return 0; 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) { scanf(\na=nb=nc=nd=ne=0; for(i=1; i<=n; i++){ scanf(\int mark, n, i; int na,nb,nc,nd,ne; /*---------*/ na++; else if(mark>=80&&mark<=89) if(mark>=90&&mark<=100) 35

夏学期C程序设计上机练习参考答案

nb++; nc++; else if(mark>=60&&mark<=69) nd++; else ne++; } printf(\else if(mark>=70&&mark<=79) scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\/*---------*/ mile += ( (minutes+ seconds/60.0)/5.0 ); if (mile <= 3.0) { } else { if (mile <= 10.0) { cost = 10 + cost = 10.0 ; printf(\ printf(\ printf(\ printf(\ }

30061 出租车计费

输入一个正整数 repeat (0

某城市普通出租车收费标准如下:\起步里程3公里,起步费10元;超起步里程后10公里内,每公里租费2元,超过10公里以上的部分加收50%的回空补贴费,即每公里租费3元。营运过程中,因路阻及乘客要求临时停车的,每5分钟按1公里租费计收。运价计费尾数四舍五入,保留到元。\。 编写程序,输入行驶里程(公里)与等待时间(分钟),计算并输出乘客应支付的车费(元)。 输入输出示例:括号内是说明 输入 3

(repeat=3) return 0; (mile-3.0) * 2.0 ; } }

教材习题4-12(p77)

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

} else { cost = 10.0 + 7.0 * 2.0 + (mile-10.0)* 3.0; } } printf(\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; void main() { double sum=100, d=sum/2; int i; for(i=2; i<=10; i++) { sum = sum + 2*d; d = d / 2; } printf(\ %lf\\n\}

教材习题4-14(p77)

36

夏学期C程序设计上机练习参考答案

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第1天共摘了多少桃子? void main() { int day, peach; peach = 1; for(day=10; day>=2; day--) peach = 2 * (peach + 1); printf(\}

50051 数字金字塔(此题与40067打印图案的思路相似) 输入一个正整数repeat (0

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

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 int main(void) { int n; int repeat, ri; int nRow, nCol; scanf(\ for(ri = 1; ri <= repeat; ri++){ scanf(\ }

for (nRow = 1; nRow <= n; nRow++) { } } for (nCol=1; nCol <= n-nRow ;nCol++) printf(\ \ for (nCol=1;nCol<= nRow*2-1; nCol++) printf(\ printf(\ 37