夏学期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;k
&& 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 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 (秒数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 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 /* 取十位+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 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 夏学期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 教材习题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 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