1.把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。
#include<stdio.h>
#include <stdlib.h>
int main()
{
struct student//声明结构体类型struct Student
{
long int num;//结构体成员
char name[20];
char sex;
char addr[20];
};
//定义结构体变量a并初始化
struct student a={10101,"LiMing","Man","123 Beijing Road"};
printf("No.%ld\name:%s\nsex:%d\naddress=%s\n",a.num,a.name,a.sex,a.addr);
return 0;
}
2.输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。
#include<stdio.h>
int main()
{
struct Student//声明结构体类型struct Student
{
int num;
char name[20];
float score;
}student1,student2;//定义两个结构体变量
//初始化
printf("请输入学生1的信息:\n");
scanf("%d%s%f",&student1.num,&student1.name,&student1.score);
printf("输入学生2的信息:\n");
scanf("%d%s%f",&student2.num,&student2.name,&student2.score);
if(student1.score>=student2.score)
{ //>=就输出学生1,否则输出学生2
printf("%d %s %6.2f\n",student1.num,student1.name,student1.score);
}
else
{
printf("%d %s %6.2f\n",student2.num,student2.name,student2.score);
}
return 0;
}
3.有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。
#include<stdio.h>
#include<string.h>
struct Person//声明结构体
{
char name[20];//姓名
int count;//票数
}leader[3]={{"wang",0},{"li",0},{"hong",0}};
//定义结构体数组并初始化
int main()
{
int i,j;
char vote_name[20];//定义字符数组
printf("请投票:\n");
for(i=0;i<10;i++)//比较轮数
{
scanf("%s",&vote_name[i]);
//输入10次投票
for(j=0;j<3;j++)//每轮比较次数
{
if(strcmp(&vote_name[i],leader[j].name)==0)
leader[j].count++; //姓名匹配,投票成功,票数+1
}
}
printf("\n投票结果如下:\n");
for(j=0;j<3;j++)
printf("%5s:%-5d\n",leader[j].name,leader[j].count);
return 0;
}
或者可以用用指针操作一下
#include<stdio.h>
#include<string.h>
struct Person//声明结构体
{
char name[20];//姓名
int count;//票数
}leader[3]={{"wang",0},{"li",0},{"hong",0}};
//定义结构体数组并初始化
int main()
{
int i,j;
char vote_name[20];//定义字符数组
printf("请投票:\n");
char *p;
p=&vote_name[0];//p指针指向数组首地址
for(i=0;i<10;i++)//比较轮数
{
scanf("%s",p);//将10次投票输入数组中
for(j=0;j<3;j++)//每轮比较次数
{
if(strcmp(p,leader[j].name)==0)
leader[j].count++; //姓名匹配,投票成功,票数+1
}
}
printf("\n投票结果如下:\n");
for(j=0;j<3;j++)
printf("%5s:%-5d\n",leader[j].name,leader[j].count);
return 0;
}
4.有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
#include<stdio.h>
struct student
{
int num;//学号
char name[20];//姓名
float score;//分数
};//声明结构体类型
int main()
{
struct student stu[5]={
{10001,"张三",70},{10002,"李四",67},
{10003,"老王",87},{10004,"老二",85},
{10005,"小明",76}};//定义结构体数组并初始化
struct student p;//用来存储一个学生的信息
//冒泡排序法进行排序
for(int i=0;i<5;i++)//控制比较轮数
{
for(int j=0;j<5-i-1;j++)//控制比较次数
{
if(stu[j].score<stu[j+1].score)//前面分数小于后面,交换位置
{
p=stu[j];
stu[j]=stu[j+1];
stu[j+1]=p;
}
}
}
printf("学生成绩由高到低排序:\n");
for(int i=0;i<5;i++)
printf("%-6d%-5s%2.1f\n",stu[i].num,stu[i].name,stu[i].score);
return 0;
}
5. 输出结构体变量中成员的信息(通过指针变量?指向结构体变量)。
#include<stdio.h>
#include<string.h>
struct Student //声明结构体类型struct Student
{
long num;;
char name[20];
char sex;
float score;
};
int main()
{
struct Student stu_1={10000,"小王",'M',78};//定义结构体类型的变量
struct Student *p;//定义指向 结构体变量的指针
p=&stu_1;//p指向stu_1的首地址
printf("No.%ld\nname:%s\nsex:%c\nscore=%f\n",stu_1.num,stu_1.name,stu_1.sex,
stu_1.score);
printf("No.%ld\nname:%s\nsex:%c\nscore=%f\n",p->num,p->name,
p->sex,p->score);
printf("No.%ld\nname:%s\nsex:%c\nscore=%f\n",(*p).num,(*p).name,
(*p).sex,(*p).score);
//通过指针方式打印
return 0;
}
6.有3个学生的信息,放在结构体数组中,要求输出全部学生的信息
(指向结构体数组的指针)。
#include<stdio.h>
struct student
{
int num;
char name[20];
char sex;
int age;
};//声明结构体类型struct student
int main()
{
struct student stu[3]=
{
{001,"张三",'M',20},
{002,"老王",'W',18},
{003,"小龙",'M',21}
}; //定义结构体变量并初始化
struct student *p;//指向结构体变量 的指针
printf("编号-姓名-性别-年龄:\n");
for(p=stu;p<stu+3;p++)//p指针指向结构体数组的首地址
printf("%3d%5s %c%3d\n",p->num,p->name,p->sex,p->age);
return 0;
}
7.有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)
(用结构体变量和结构体变量的指针作函数参数)。
#include <stdio.h>
#define N 3 //学生数为3
struct student //建立结构体类型struct student
{ int num; //学号
char name[20]; //姓名
float score[3]; //3门课成绩
float aver; //平均成绩
};
int main()
{
void input(struct student stu[]); //函数声明
struct student max(struct student stu[]); //函数声明
void print(struct student ); //函数声明,形参为结构体类型变量
struct student stu[N],*p;//p为结构体类型指针变量
p=&stu[0]; //指向数组首地址
input(p); //调用input函数
print(max(p)); //调用print函数,以max函数的返回值作为实参
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.0;
//求平均成绩
}
}
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 a) //定义print函数
{ printf("\n成绩最高的学生是:\n");
printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩: %6.2f\n",
a.num,a.name,a.score[0],a.score[1],a.score[2],a.aver);
}
8.用指针处理链表
建立一个简单链表,它由3个学生数据的结点组成,要求输出各结点中的数据。
#include <stdio.h>
struct student//声明结构体类型struct student
{
int num;
float score;
struct student *next;
};
int main()
{
struct student a={10101,90},b={10102,91},c={10103,92},*head,*p;
//定义3个结构体变量作为链表的节点
head=&a;//头指针指向a的地址
a.next=&b;
b.next=&c;
c.next=NULL;//c指针指向空
p=head;//p指针指向a节点
do
{
printf("%d %5.1f\n",p->num,p->score);
//输出p指向的节点,a的数据
p=p->next;//p指向下一个节点
}while(p!=NULL);//输出c节点后p值为NULL,终止循环
return 0;
}
|