第9章 结构
【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个部分。 解答:
struct complex{ float real;
float imaginary; };
【练习9-2】人的出生日期由年、月、日组成,请在例 9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。 解答:
struct date{ int year; int month; int day; };
struct student{ int num;
char name[10];
struct date birthday; int computer,english,math; double average; };
【练习9-3】例 9-1 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序? 解答:
#include
char name[10];
int computer,english,math; double average; };
int main(void) {
int i, n;
double math_sum,english_sum,computer_sum; struct student s1;
printf(\ scanf(\
printf(\ math_sum=english_sum=computer_sum=0; for(i=1;i<=n;i++){
printf(\
scanf(\ter);
math_sum+=s1.math;
english_sum+=s1.english; computer_sum+=s1.computer; }
printf(\math_sum/n,english_sum/n,computer_sum/n);
return 0; }
【练习9-4】定义一个包含 5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。 解答:
struct student{ int num;
char name[10];
int computer, english, math; };
struct student s[5]={{30101, \张一\李二\5,90},{40231, \王三\赵四\刘五\
【练习9-5】参考例 9-2,输入并保存 10 个学生的成绩信息,分别输出平均成绩最高和最低的学生信息。 解答:
#include
char name[10];
int computer,english,math; double average; };
int main(void) {
int i,n,max,min;
struct student students[50];
printf(\ scanf(\
for(i=0;i printf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ printf(\ scanf(\ students[i].average=(students[i].math+students[i].english+stu dents[i].computer)/3.0; } max=min=0; for(i=1;i if(students[max].average printf(\ printf(\%.2lf\\n\ents[max].english,students[max].computer,students[max].average); printf(\ printf(\%.2lf\\n\ents[min].english, students[min].computer, students[min].average); return 0; } 【练习9-6】定义一个 struct student 类型的结构指针,用其实现一个学生信息的输入和输出。 解答: struct student{ /* 学生信息结构定义 */ int num; /* 学号 */ char name[10]; /* 姓名 */ int computer, english, math ; /* 三门课程成绩 */ double average; /* 个人平均成绩 */ }s, *p; p = &s; scanf(\&p->num, p->name, &p->math, &p->english, &p->computer); 【练习9-7】改写例 9-3 中的函数 update_score( ),将第一个形参改为结构