当前位置:首页 > C语言程序设计课后习题答案
}
2. 写一个函数days,实现上面的计算。由主函数将年、月、日传递给days 函数,计算后将日子数传回主函数输出。 解:
struct y_m_d {int year: int month; int day; }date;
int days(struct y_m_d date1) { int sum;
switch(date1.month) {
case 1:sum=date1.day; break; case 2:sum=date1.day+31; break; case 3:sum=date1.day+59; break; case 4:sum=date1.day+90; break; case 5:sum=date1.day+120; break; case 6:sum=date1.day+151; break; case 7:sum=date1.day+181; break; case 8:sum=date1.day+212; break; case 9:sum=date1.day+243; break case 10:sum=date1.day+243; break case 11:sum=date1.day+243; break case 12:sum=date1.day+243; break } if((d
ate1.year%4==0&&date1.year0!=0||date1.year@0==0)&&date1.month>=3) sum+=1; return sum; }
3. 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num、name、score[3],用主函数输入这些记录,用print函数输出这些记录。 解: #define N 5 struct student {char num[6]; char name[8]; int score[4];
}stu[N]; void main() { int i,j ;
for(i=0;i<N;i++) {
printf("\\Input score of student %d:\\n",i+1); printf("no.:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name); for(j=0;j<3;j++) {
printf("score%d:"j+1);
scanf("%d",&stu[i].score[j]); }
printf("\\n"); } print(stu); }
print(struct student stu[6]) { int i,j;
printf("%5ss",stu[i].num,stu[i].name); for(j=0;j<3;j++)
printf("?",stu[i].score[j]); print("\\n"); }
4. 在上题的基础上,编写一个函数input,用来输入5个学生的数据记录。 解:
#define N 5 struct student {char num[6]; char name[8]; int score[4] }stu[N];
input(struct student stu[]) { int i,j;
for(i=0;i<N;i++) {
printf("input scores of student %d:\\n",i+1); printf("NO.:"); scanf("%s",stu[i].num);
printf("name: "); scanf("%s", stu[i].name); for(j=0;j<3;j++) {
printf("score%d:",j++);
scanf("%d", &stu[i].score[j]);} }
printf("\\n"); } }
5. 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生的数据,要求输出各学生3门课的平均成绩,然后按照平均成绩由高到低输出学生的信息(包括学号、姓名、3门课成绩、平均分数)。 解: #define N 10 struct student { char num[6]; char name[8]; int score[4]; float avr; }stu[N]; void main() {
int i,j,max,maxi,sum; float average; for(i=0;i<N;i++) {
printf("\\nInput scores of student %d:\\n",i+1); printf("NO.:"); scanf("%s",stu[i].num); printf("name: "); scanf("%s", stu[i].name); for(j=0;j<3;j++) {
printf("score%d:",j++);
scanf("%d", &stu[i].score[j]);} } }
average=0;max=0;maxi=0; for(i=0;i<N;i++) { sum=0; for(j=0;j<3;j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max) {max=sum; maxi=i;} }
average/=N;
printf("NO. name score1 score2 score3 average\\n"); for(i=0;i<N;i++) {
printf("%5ss",stu[i].num,stu[i].name); for(j=0;j<3;j++)
printf("?",stu[i].score[j]); printf("%8.2f\\n",stu[i].avr); }
printf("average=%6.2f\\n",average);
printf("The highest score is: %s,score total:%d.",stu[maxi].name,max); }
6. 13个人围成一圈,从第1个人开始顺序报号1、2、3。凡报到"3"者退出圈子。找出最后留在圈子中的人原来的序号。 解: #define N 13 struct person {int number; int nextop; }link[N+1]; void main() {
int i,count,h; for(i=1;i<=N;i++) {
if(i==N) link[i].nextp=1; else link[i].nextp=i+1; link[i].number=i; }
printf("\\n"); count=0; h=N;
printf("sequence that person2 leave the circle:\\n"); while(count<N-1) { i=0; while(i!=3)
共分享92篇相关文档