夏学期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