《C语言程序设计ppt课件第8章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计ppt课件第8章.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、返回主目录返回主目录 本章主要介绍结构体和共用体的本章主要介绍结构体和共用体的基本知识,让学生学会利用结构体和基本知识,让学生学会利用结构体和共用体编写程序。共用体编写程序。1.1.结构体的概念结构体的概念2.2.结构体类型数组结构体类型数组3.3.指向结构体类型数据的指针指向结构体类型数据的指针4.4.结构体类型数据与函数结构体类型数据与函数5.5.链表链表6.6.共用体共用体一、结构体一、结构体如果在程序设计时,需要将不同类型的数据组成一个有机如果在程序设计时,需要将不同类型的数据组成一个有机整体来引用,此时,用数组是无法完成的,整体来引用,此时,用数组是无法完成的,C C语言允许用语言允
2、许用户自己可以定义这种特殊的数据结构,称之为结构体。结户自己可以定义这种特殊的数据结构,称之为结构体。结构体中可以包含若干个类型不同的数据项。构体中可以包含若干个类型不同的数据项。二、结构体类型的定义二、结构体类型的定义C C语言中没有现成的结构体类型,如果用户要使用结构体类语言中没有现成的结构体类型,如果用户要使用结构体类型,必须自己定义。结构体类型的一般定义形式如下:型,必须自己定义。结构体类型的一般定义形式如下:struct struct 结构体类型名结构体类型名 类型名类型名1 1 成员名成员名1 1;类型名类型名2 2 成员名成员名2 2;.类型名类型名n n 成员名成员名n n;注
3、意:定义结构体类型时,注意:定义结构体类型时,“结构体名结构体名”是结构体类型标志,是结构体类型标志,与与struct共同组成结构体类型名。共同组成结构体类型名。说明说明:struct studentstruct student是一个结构体类型名,在是一个结构体类型名,在使用过程中与系统提供的标准类型使用过程中与系统提供的标准类型(如如intint、floatfloat等等)具有同样的地位和作用。具有同样的地位和作用。一个结构体类型可以包含若干个成员,一个结构体类型可以包含若干个成员,每个成员的类型可以不一样。每个成员的类型可以不一样。一个结构体类型数据在存储时所占的内一个结构体类型数据在存储
4、时所占的内存单元字节数相当于每个成员所占内存单存单元字节数相当于每个成员所占内存单元字节数的总和。例如:前面定义的元字节数的总和。例如:前面定义的struct studentstruct student结构体类型数据存储时所占结构体类型数据存储时所占内存单元为内存单元为6969字节。字节。例如:例如:struct studentstruct studentint number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address50;
5、char address50;三、结构体类型变量的定义三、结构体类型变量的定义结构体类型变量通常采取以下三种形式定义:结构体类型变量通常采取以下三种形式定义:1.1.先定义结构体类型,再定义结构体类型变量先定义结构体类型,再定义结构体类型变量结构体类型名结构体类型名 结构体变量名;结构体变量名;例如:例如:struct studentstruct studentint number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address
6、50;char address50;struct student stud1,stud2;struct student stud1,stud2;例如:例如:struct studentstruct studentint number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address50;char address50;stud1,stud2stud1,stud2;2.2.在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量s
7、truct struct 结构体名结构体名 类型名类型名1 1 成员名成员名1 1;类型名类型名2 2 成员名成员名2 2;.类型名类型名n n 成员名成员名n n;变量名表列;变量名表列;例如:例如:struct struct int number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address50;char address50;stud1,stud2stud1,stud2;3.3.直接定义结构体类型变量直接定义结构体类型变量
8、struct struct 类型名类型名1 1 成员名成员名1 1;类型名类型名2 2 成员名成员名2 2;.类型名类型名n n 成员名成员名n n;变量名表列;变量名表列;注意:注意:结构体类型和结构体类型变量是两结构体类型和结构体类型变量是两 个不同的概念,使用时,先定义类个不同的概念,使用时,先定义类 型,后定义变量。型,后定义变量。在程序中只能对结构体类型变量进在程序中只能对结构体类型变量进 行操作。行操作。结构体中的成员可以单独使用,相结构体中的成员可以单独使用,相 当于一个普通变量,成员名可以和程当于一个普通变量,成员名可以和程 序中的普通变量同名,互不干扰。序中的普通变量同名,互
9、不干扰。结构体中的成员可以是一个结构体变结构体中的成员可以是一个结构体变 量。量。例如:例如:struct datestruct dateint month;int month;int day;int day;int year;int year;struct student1struct student1int number;int number;char name10;char name10;char sex;char sex;struct date struct date birthday;birthday;float scroce;float scroce;char address50;
10、char address50;stu1,stu2;stu1,stu2;四、结构体类型变量的引用和初始化四、结构体类型变量的引用和初始化结构体类型变量一旦被定义后,就可以在程序中使用,结构体类型变量一旦被定义后,就可以在程序中使用,与数组相似,与数组相似,在程序中不能直接引用结构体类型变量在程序中不能直接引用结构体类型变量,也不能对结构体类型变量进行整体输入输出,也不能对结构体类型变量进行整体输入输出,只能引只能引用其中的各个成员用其中的各个成员,对其中的各个成员进行输入输出。对其中的各个成员进行输入输出。引用结构体变量成员时,象引用普通变量一样,可以引用结构体变量成员时,象引用普通变量一样,可
11、以进行各种运算。进行各种运算。引用结构体变量成员的一般形式如下:引用结构体变量成员的一般形式如下:结构体变量名结构体变量名.成员名成员名例如:前面定义了结构体类型变量例如:前面定义了结构体类型变量stud1stud1和和stud2stud2,可,可以对变量的各个成员进行各种操作以对变量的各个成员进行各种操作,例如:例如:stud1.number=10001;stud1.number=10001;stud2.number=10002;stud2.number=10002;.printf(%d,&d,stud1.number,stud2.number);printf(%d,&d,stud1.num
12、ber,stud2.number);另外,在程序中,还另外,在程序中,还可以用指向结构体变量的指针变量可以用指向结构体变量的指针变量来引用结构体变量成员。来引用结构体变量成员。例如:例如:struct student stud1;struct student stud1;struct student*p1=stud1;struct student*p1=stud1;(*p1).number=10001;(*p1).number=10001;.注意:注意:“-”“-”是指向是指向结构体成员运结构体成员运算符,算符,“.”“.”是是结构体成员运结构体成员运算符,它们的算符,它们的结合方式从左结合方
13、式从左到右,优先级到右,优先级别最高。别最高。上述程序段,还可以写成下面的形式:上述程序段,还可以写成下面的形式:struct student stud1;struct student stud1;struct student*p1=stud1;struct student*p1=stud1;p1-number=10001;p1-number=10001;.#include stdio.h#include stdio.h#include string.h#include string.hstruct studentstruct studentint number;int number;char
14、 name10;char name10;int age;int age;float score;a;float score;a;main()main()a.number=1001;a.number=1001;strcpy(a.name,liming);strcpy(a.name,liming);a.age=18;a.age=18;a.score=89.5;a.score=89.5;printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);例例
15、8-1 利用结构体变量输出学生信息。利用结构体变量输出学生信息。#include stdio.h#include stdio.hstruct studentstruct studentint number;int number;char name10;char name10;int age;int age;float score;float score;a=1001,liming,18,89.5;a=1001,liming,18,89.5;main()main()printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);printf(%-8d%s
16、%8d%6.1f,a.number,a.name,a.age,a.score);例例8-2 利用结构体变量输出学生信息。利用结构体变量输出学生信息。一、结构体数组的定义和引用一、结构体数组的定义和引用结构体数组同普通数组一样,所有元素类型相同,是同一个结结构体数组同普通数组一样,所有元素类型相同,是同一个结构体类型。构体类型。要定义一个结构体类型数组,必须先定义结构体类型,要定义一个结构体类型数组,必须先定义结构体类型,定义结构体类型数组的一般形式如下:定义结构体类型数组的一般形式如下:struct struct 结构体名结构体名 数组名数组名 常量表达式常量表达式;例如:例如:struct
17、student a3;struct student a3;同普通数组相似,在程序中不能整体引用结构体数组,也不能同普通数组相似,在程序中不能整体引用结构体数组,也不能引用结构体数组元素,引用结构体数组元素,只能引用结构体数组元素的成员只能引用结构体数组元素的成员。例如:例如:a1.number=10001;a2.number=10002;a1.number=10001;a2.number=10002;二、结构体数组初始化和应用二、结构体数组初始化和应用例如:例如:struct sst struct sst int num;int num;char name10;char name10;int
18、age ;int age ;struct sst a3=1001,zhangsan,18,struct sst a3=1001,zhangsan,18,1002,lisi,19,1002,lisi,19,1003,wangwu,20;1003,wangwu,20;.结构体数组初始化与普通数组初始化相似,可以先定义结构体结构体数组初始化与普通数组初始化相似,可以先定义结构体类型,再定义结构体数组并初始化。类型,再定义结构体数组并初始化。例例8-3 8-3 某班级学生进行学生干部选举,候选人有张三、李四、王五三位同某班级学生进行学生干部选举,候选人有张三、李四、王五三位同学,全班共有学生学,全班共
19、有学生4040名,编写一个程序统计候选人的得票数。名,编写一个程序统计候选人的得票数。#include string.h#include string.h#include stdio.h#include stdio.hstruct numstruct numchar name10;char name10;int number;int number;main()main()struct num a3=zhangsan,0,lisi,0,wangwu,0;struct num a3=zhangsan,0,lisi,0,wangwu,0;int i,j;int i,j;char inputname2
20、0;char inputname20;printf(please input the list of candidate:n);printf(please input the list of candidate:n);for(i=0;i40;i+)for(i=0;i40;i+)scanf(%s,inputname);scanf(%s,inputname);for(j=0;j3;j+)for(j=0;j3;j+)if(strcmp(inputname,aj.name)=0)aj.number+;if(strcmp(inputname,aj.name)=0)aj.number+;printf(n)
21、;printf(n);for(i=0;i3;i+)for(i=0;i3;i+)printf(%10s:%2dn,ai.name,ai.number);printf(%10s:%2dn,ai.name,ai.number);C C语言规定:在程序中不能直接对结构体类型数组元素进语言规定:在程序中不能直接对结构体类型数组元素进行输入输出,只能对结构体类型数组元素的成员进行输入输行输入输出,只能对结构体类型数组元素的成员进行输入输出。结构体类型数组元素的成员的输入与输出与普通数组元出。结构体类型数组元素的成员的输入与输出与普通数组元素的输入与输出类似,通常利用循环语句来完成。素的输入与输出类似,通常
22、利用循环语句来完成。三、结构体类型数组的输入与输出三、结构体类型数组的输入与输出main()main()int n,i,sumSIZE;int n,i,sumSIZE;printf(How many students?n);printf(How many students?n);scanf(%d,&n);scanf(%d,&n);for(i=0;in;i+)for(i=0;in;i+)printf(Name?n);scanf(%s,studi.name);printf(Name?n);scanf(%s,studi.name);printf(No?n);scanf(%d,&studi.num);
23、printf(No?n);scanf(%d,&studi.num);printf(Score1,Score2,Score3?n);printf(Score1,Score2,Score3?n);scanf(%f,%f,%f,&studi.score0,&studi.score1,&studi.score2 scanf(%f,%f,%f,&studi.score0,&studi.score1,&studi.score2););sumi=studi.score0+studi.score1+studi.score2;sumi=studi.score0+studi.score1+studi.score2
24、;studi.ave=sumi/3.0;studi.ave=sumi/3.0;printf(n NAME No.SCORE1 SCORE2 SCORE3 AVEn);printf(n NAME No.SCORE1 SCORE2 SCORE3 AVEn);printf(-n);printf(-n);for(i=0;in;i+)for(i=0;i成员名成员名 指向结构体类型变量的指针变量引用指向结构体类型变量的指针变量引用注意:注意:“-”是指向结构体成员运算符,是指向结构体成员运算符,“.”是取结构体成员运算是取结构体成员运算符,它们的结合方式从左到右,优先级别最高。符,它们的结合方式从左到右,
25、优先级别最高。在程序中只能将结构体类型变量的地址赋给一个指向结在程序中只能将结构体类型变量的地址赋给一个指向结构体类型的指针变量,一个指向结构体类型的指针变量只能指构体类型的指针变量,一个指向结构体类型的指针变量只能指向结构体类型变量,不能指向变量的成员。向结构体类型变量,不能指向变量的成员。例如:例如:struct studentint number;char name10;int age;float score;struct student stud1;.struct student*p1=stud1,*p2=stud1;(*p1).number=10001;(*p2).number=10
26、002;.printf(%d,&d,(*p1).number,(*p2).number);printf(%d,&d,p1-number,p2-number);例例 8.8 8.8#include stdio.h#include stdio.hstruct studentstruct student int num;int num;char name20;char name20;char sex;char sex;float score;float score;main()main()struct student stu1=1001,Li Ming,M,95.0;struct student s
27、tu1=1001,Li Ming,M,95.0;struct student*p;struct student*p;p=&stu1;p=&stu1;printf(%d,%s,%c,%.1fn,stu1.num,stu1.name,stu1.sex,stu1.score);printf(%d,%s,%c,%.1fn,stu1.num,stu1.name,stu1.sex,stu1.score);printf(%d,%s,%c,%.1fn,(*p).num,(*p).name,(*p).sex,(*p).score);printf(%d,%s,%c,%.1fn,(*p).num,(*p).name
28、,(*p).sex,(*p).score);printf(%d,%s,%c,%.1fn,p-num,p-name,p-sex,p-score);printf(%d,%s,%c,%.1fn,p-num,p-name,p-sex,p-score);在程序中,如果将一个结构体类型数组的地址赋给一个结构体类型的变量,那么该变量就是一个指向结构体类型数组的指针变量。可以利用该指针变量来引用数组元素的各个成员。3、指向结构体类型数组的指针、指向结构体类型数组的指针对于指向结构体类型数组的指针变量。其引用的方式和指向普通数组的指针变量的引用相类似。例例 8.9 8.9#include stdio.h#inc
29、lude stdio.hstruct studentstruct student int num;int num;char*name;char*name;char sex;char sex;float score;float score;boy5=101,Zhou ping,M,45,102,Zhang ping,M,62.5,boy5=101,Zhou ping,M,45,102,Zhang ping,M,62.5,103,Liu fang,F,92.5,104,Cheng ling,F,87,103,Liu fang,F,92.5,104,Cheng ling,F,87,105,Wang
30、ming,M,58;105,Wang ming,M,58;main()main()struct student*ps;struct student*ps;printf(No.tNametttSextScoretn);printf(No.tNametttSextScoretn);for(ps=boy;psboy+5;ps+)for(ps=boy;psnum,ps-name,ps-sex,ps-score);printf(%dt%stt%ct%ftn,ps-num,ps-name,ps-sex,ps-score);注意:注意:psps是指向结构体类型数据的指针变量,只能将数组的地是指向结构体类型数
31、据的指针变量,只能将数组的地址或某个数组元素的地址赋给址或某个数组元素的地址赋给psps,不能将数组元素的成员,不能将数组元素的成员或成员的地址赋给或成员的地址赋给psps,否则,程序将会出错。,否则,程序将会出错。例如:例如:ps=boy;/*ps=boy;/*正确正确*/*/ps=&boy0;/*ps=&boy0;/*正确正确*/*/ps=boy0.num;/*ps=boy0.num;/*错误错误*/*/ps=&boy0.num;/*ps=&boy0.num;/*错误错误*/*/1、结构体类型数据与函数、结构体类型数据与函数 结构体类型变量的成员作函数参数结构体类型变量的成员作函数参数 在
32、函数调用时,可以将结构体类型变量各成员的值作函数的实在函数调用时,可以将结构体类型变量各成员的值作函数的实参进行数据传递。其用法和用普通变量作函数实参是一样的,参进行数据传递。其用法和用普通变量作函数实参是一样的,属于属于“值传递值传递”方式。方式。注意:注意:在调用函数时,应注意实参与形参的类型保持一致。在调用函数时,应注意实参与形参的类型保持一致。main()main()struct student a;struct student a;.f(a.score);f(a.score);.#include stdio.h#include stdio.hstruct studentstruct
33、student int num;int num;char name20;char name20;char sex;char sex;float score;float score;void f(float x)void f(float x).例如:例如:C语言(语言(ANSI C)允许使用结构体变量作实参进行数据传)允许使用结构体变量作实参进行数据传递,将主调函数中结构体变量所占用内存单元的内容全部顺递,将主调函数中结构体变量所占用内存单元的内容全部顺序传递给形参。这是一种序传递给形参。这是一种“值传递值传递”方式,方式,要求形参也必须是要求形参也必须是同类型的结构体变量。同类型的结构体变量。
34、结构体类型变量作函数参数结构体类型变量作函数参数例例 8.10 8.10 有一个结构体变量有一个结构体变量stustu,内含学生学号、姓名和,内含学生学号、姓名和3 3门课的成门课的成绩。要求分别编写两个不同的函数输出学生的学号、姓名和绩。要求分别编写两个不同的函数输出学生的学号、姓名和3 3门课门课的成绩及总成绩。的成绩及总成绩。#include stdio.h#include stdio.h#include string.h#include string.h#define FORMAT%5d%9s%8.1f%8.1f%8.1f#define FORMAT%5d%9s%8.1f%8.1f%8
35、.1fstruct studentstruct student int num;int num;char name20;char name20;float score3;float score3;void pri1(struct student stt)void pri1(struct student stt)printf(num name score1 score2 score3 sumscoren);printf(num name score1 score2 score3 sumscoren);printf(FORMAT,stt.num,stt.name,stt.score0,stt.sc
36、ore1,stt.score2);printf(FORMAT,stt.num,stt.name,stt.score0,stt.score1,stt.score2);void pri2(float xx)void pri2(float xx)float sum;float sum;sum=xx0+xx1+xx2;sum=xx0+xx1+xx2;printf(%9.1f,sum);printf(%9.1f,sum);main()main()struct student stu=1001,LiMing,67.5,89.0,78.6;struct student stu=1001,LiMing,67.
37、5,89.0,78.6;pri1(stu);pri1(stu);pri2(stu.score);pri2(stu.score);指向结构体类型变量的指针作为函数参数指向结构体类型变量的指针作为函数参数在程序中,如果用指向结构体变量的指针作函数的实参,可以在程序中,如果用指向结构体变量的指针作函数的实参,可以将结构体变量的地址传给形参,使实参和形参共同指向同一段将结构体变量的地址传给形参,使实参和形参共同指向同一段存储单元,得到函数的返回值。存储单元,得到函数的返回值。例例8.11 8.11 有一个结构体变量有一个结构体变量stustu,内含学生学号、姓名和,内含学生学号、姓名和3 3门课门课的
38、成绩,利用函数编程按升序输出学生的成绩。的成绩,利用函数编程按升序输出学生的成绩。#include stdio.h#include stdio.h#include string.h#include string.h#define FORMAT%5d%9s%8.1f%8.1f%8.1f#define FORMAT%5d%9s%8.1f%8.1f%8.1f#define N 3#define N 3struct studentstruct student int num;int num;char name20;char name20;float scoreN;float scoreN;void p
39、ri(struct student*stt)void pri(struct student*stt)int i,j;int i,j;float t;float t;for(i=0;iN;i+)for(i=0;iN;i+)for(j=0;jN-1;j+)for(j=0;jscorejstt-scorej+1)if(stt-scorejstt-scorej+1)t=stt-scorej;t=stt-scorej;stt-scorej=stt-scorej+1;stt-scorej=stt-scorej+1;stt-scorej+1=t;stt-scorej+1=t;main()main()stru
40、ct student stu=1001,LiMing,67.5,89.0,78.6;struct student stu=1001,LiMing,67.5,89.0,78.6;struct student*p=&stu;struct student*p=&stu;pri(p);pri(p);printf(FORMAT,stu.num,stu.name,stu.score0,stu.score1,stu.score2);printf(FORMAT,stu.num,stu.name,stu.score0,stu.score1,stu.score2);结构体类型数组作为函数参数结构体类型数组作为函数
41、参数在程序中也可以使用结构体类型数组作函数的参数,将该结在程序中也可以使用结构体类型数组作函数的参数,将该结构体类型数组的地址传给形参。构体类型数组的地址传给形参。例例8.12 8.12 有一个结构体类型数组有一个结构体类型数组studentstudent,内含几个学生学号、,内含几个学生学号、姓名、性别和成绩。要求编程计算这组学生的平均成绩,并统姓名、性别和成绩。要求编程计算这组学生的平均成绩,并统计不及格的人数。计不及格的人数。#include stdio.h#include stdio.h#define N 5#define N 5struct stustruct stu int num
42、;int num;char*name;char*name;char sex;char sex;float score;float score;void ave(struct stu*ps)void ave(struct stu*ps)int c=0,i;int c=0,i;float ave,s=0;float ave,s=0;for(i=0;iN;i+,ps+)for(i=0;iscore;s+=ps-score;if(ps-scorescore60)c+=1;ave=s/N;ave=s/N;printf(average=%.1fncount=%dn,ave,c);printf(averag
43、e=%.1fncount=%dn,ave,c);main()main()struct stu studentN=101,Li ping,M,45.0,struct stu studentN=101,Li ping,M,45.0,102,Zhang ping,M,62.5,102,Zhang ping,M,62.5,103,He fang,F,92.5,103,He fang,F,92.5,104,Cheng ling,F,87.0,104,Cheng ling,F,87.0,105,Wang ming,M,58.0;105,Wang ming,M,58.0;ave(student);ave(s
44、tudent);指向结构体类型数组的指针作为函数参数指向结构体类型数组的指针作为函数参数在程序中,可以用指向结构体类型数组的指针作函数参数,将在程序中,可以用指向结构体类型数组的指针作函数参数,将该结构体类型数组的地址传给形参。该结构体类型数组的地址传给形参。例例8.12中程序的中程序的main函数可以改写为下面程序代码。函数可以改写为下面程序代码。main()main()struct stu studentN=101,Li ping,M,45.0,struct stu studentN=101,Li ping,M,45.0,102,Zhang ping,M,62.5,102,Zhang pi
45、ng,M,62.5,103,He fang,F,92.5,103,He fang,F,92.5,104,Cheng ling,F,87.0,104,Cheng ling,F,87.0,105,Wang ming,M,58.0;105,Wang ming,M,58.0;struct stu*p=student;struct stu*p=student;ave(p);ave(p);函数的返回值可以是某种类型的数据,也可以是指向某种类函数的返回值可以是某种类型的数据,也可以是指向某种类型数据的指针。型数据的指针。C C语言允许函数调用时,返回结构体类型指针值。语言允许函数调用时,返回结构体类型指针值
46、。返回值为结构体类型的函数返回值为结构体类型的函数其函数原型如下:其函数原型如下:struct 结构体类型名结构体类型名*函数名函数名(参数表列);(参数表列);例例 8.14 8.14 在一组的学生信息中查找某个学生的信息。如果找到,在一组的学生信息中查找某个学生的信息。如果找到,输出该学生信息,否则输出没有找到。输出该学生信息,否则输出没有找到。#include stdio.h#include stdio.h#define SIZE 100#define SIZE 100#define N 6#define N 6#define FORMAT%-11s%3d%8d%8d%8dn#defin
47、e FORMAT%-11s%3d%8d%8d%8dnstruct studentstruct student char name30;char name30;int num;int num;int score3;int score3;/*;/*定义结构体类型定义结构体类型*/*/struct student*search(struct student*p,int*kk struct student*search(struct student*p,int*kk char nam30;char nam30;struct student*pp;struct student*pp;printf(inp
48、ut the name of the student you want to look forn);printf(input the name of the student you want to look forn);scanf(%s,nam);scanf(%s,nam);for(pp=p;ppN+p;pp+)for(pp=p;ppname,nam)=0)*kk=1;break;if(strcmp(pp-name,nam)=0)*kk=1;break;return pp;return pp;void print(struct student*stu)void print(struct stu
49、dent*stu)printf(n NAME No.SCORE1 SCORE2 SCORE3n);printf(n NAME No.SCORE1 SCORE2 SCORE3n);printf(-n);printf(-n);printf(FORMAT,stu-name,stu-num,stu-score0,printf(FORMAT,stu-name,stu-num,stu-score0,stu-score1,stu-score2);stu-score1,stu-score2);main()main()int kk=0;int kk=0;struct student*result;struct
50、student*result;struct student struct student studN=zhangsan,1001,75,80,68,lisi,1002,66,90,82,studN=zhangsan,1001,75,80,68,lisi,1002,66,90,82,wangwu,1003,77,86,64,liuli,1005,66,70,72,wangwu,1003,77,86,64,liuli,1005,66,70,72,zhouqi,1006,79,96,74,shunba,1007,76,79,92zhouqi,1006,79,96,74,shunba,1007,76,