(1)通過指向結構體變量的指針輸出結構體變量中的成員信息
#include<stdio.h>//指向結構體變量的指針
#include<string.h>
int main()
{
struct student//聲明結構體類型 struct student
{
long num;
char name[20];
char sex;
float score;
};
struct student stu;//定義struct student 類型的變量 stu
struct student *p;//定義 struct student 類型數據的指針變量 p
p=&stu;//p指向stu
stu.num=1001;//對結構體變量的成員賦值
strcpy(stu.name,"wei");//用字符串複製函數給stu.name賦值
stu.sex='m';
stu.score=95.5;
printf("no.:%ld\nname:%s\nsex:%c\nscore:%6.2f\n\n\n",stu.num,stu.name,stu.sex,stu.score);
//輸出結果
printf("no.:%ld\nname:%s\nsex:%c\nscore:%6.2f\n",(*p).num,(*p).name,(*p).sex,(*p).score);
}
(2)有三個學生的信息,放在結構體數組中,要求輸出學生的全部信息
#include<stdio.h>//指向結構體數組的指針
struct student//聲明結構體類型struct student
{
int num;
char name[20];
char sex;
int age;
};
struct student stu[3]={{1001,"xu",'m',20},{1002,"wei",'n',21},{1003,"chen",'m',21}};//定義結構體數組並初始化
int main()
{
struct student *p;//定義指向struct student結構體變量的指針變量p
printf("no. name sex age\n");
for(p=stu;p<stu+3;p++)
{
printf("%5d %-7s %2c %4d\n",p->num,p->name,p->sex,p->age);//輸出結果
}
}
(3)
#include<stdio.h>//有n個結構體變量,內含學生學號,姓名,和三門課程成績。要求輸出平均成績最高的學生的信息
#define N 3//學生數為3
struct student
{
int num;//學號
char name[20];//姓名
float score[N];//成績
float aver;//平均成績
};
int main()
{
void input(struct student stu[]);//函數聲明
struct student max(struct student stu[]);
void print(struct student stu);
struct student stu[N],*p=stu;//定義結構體數組和指針
input(p);//調用input函數
print(max(p));//調用print函數,把max函數返回的值做print函數的實參
return 0;
}
void input(struct student stu[])//定義input函數
{
int i;
printf("請輸入各學生的信息:學號,姓名,三門成績:\n");
for(i=0;i<N;i++)
{
scanf("%d %s %f %f %f",&stu[i].num,&stu[i].name,&stu[i].score[0],
&stu[i].score[1],&stu[i].score[2]);//輸入數據
stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;
}//求平均成績
}
struct student max(struct student stu[])//定義max函數
{ int i,m=0;//用m成績較高學生在數組中的序號
for(i=0;i<N;i++)
if(stu[i].aver>stu[m].aver) m=i;//找出平均成績最高的學生在數組中的序號
return stu[m];//返回成績最高學生信息的結構體元素
}
void print(struct student stud)
{ printf("\n成績最高的學生是:\n");
printf("學號:%d\n姓名:%s\n三門成績:%5.1f %5.1f %5.1f\n平均成績:%6.2f\n",stud.num,
stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver);}
/* max(p)的值(是結構體數組的元素)作為實參調用print函數。print函數的形參是 struct student類型的變量(而不是struct student 類型的數組)。在調用是進行虛實結合,把stu[m]的值(是結構體元素)傳遞給形參stud,而是結構體變量中的信息。在print函數中輸出結構體變量中個成員的值*/