1.定义一结构体,成员项包括一个字符型、一个整型。
编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。
#include<stdio.h>
void main()
{
struct a
{
char b;
int c;
}d,*p;
p=&d;
printf("输入:\n");
scanf("%c",&(*p).b);
scanf("%d",&p->c);
printf("输出:\n");
printf("%c\n",(*p).b);
printf("%d\n",p->c);
}
2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。
建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课
程的成绩。
#include<stdio.h>
void main()
{
int i,b,n;
float a;
printf("请输入班级的人数:");
scanf("%d",&n);
getchar();
struct person
{
char name[20];
char sex[10];
int year;
float score;
}stu[45];
for(i=0;i<n;i++)
{
printf("请输入第%d个学生的名字、性别、年龄及成绩\n",i+1);
gets(stu[i].name);
gets(stu[i].sex);
scanf("%d",&stu[i].year);
scanf("%f",&stu[i].score);
getchar();
}
for(b=0,a=stu[0].score,i=0;i<n;i++)
if(a<stu[i].score)
{
a=stu[i].score;
b=i;
}
printf("成绩最优秀的是第%d个学生\n",b+1);
printf("名字:%s 性别:%s 年龄:%d 成绩:%f\n",stu[b].name,stu[b].sex,stu[b].year,stu[b].score);
}
3.已知一个班有45人,本学期有两门课程的成绩,求:
●所有课程中的最高成绩,以及对应的姓名、学号和课程编号。
●课程1、2的平均成绩,并求出两门课程都低于平均成绩的学生姓名和学号。
●对编号1的课程从高分到低分排序(注意其他成员项应保持对应关系)。
说明:要求定义结构体,第一成员项为学生姓名,第二成员项为学号,另外两个成员项为两门课成绩,并要求分别用函数完成。
(本人注:由于人数太多,故改为4人)
#include<stdio.h>
#define N 4
struct person
{
char name[20];
long int number;
float score1;
float score2;
};
void shuru(struct person stu[N])
{
int i;
for(i=0;i<N;i++)
{
printf("请输入第%d个学生的名字、学号、成绩1及成绩2\n",i+1);
gets(stu[i].name);
scanf("%ld",&stu[i].number);
scanf("%f",&stu[i].score1);
scanf("%f",&stu[i].score2);
getchar();
}
}
void zuigao(struct person stu[N])
{
int b,i;
float a;
for(b=0,a=stu[0].score1,i=0;i<N;i++)
if(a<stu[i].score1)
{
a=stu[i].score1;
b=i;
}
printf("第一门课程成绩最优秀的是第%d个学生\n",b+1);
printf("名字:%s 学号:%ld 成绩:%f\n",stu[b].name,stu[b].number,stu[b].score1);
printf("\n");
for(b=0,a=stu[0].score2,i=0;i<N;i++)
if(a<stu[i].score2)
{
a=stu[i].score2;
b=i;
}
printf("第二门课程成绩最优秀的是第%d个学生\n",b+1);
printf("名字:%s 学号:%ld 成绩:%f\n",stu[b].name,stu[b].number,stu[b].score2);
printf("\n");
}
void pingjun(struct person stu[N])
{
int i;
float s1,s2,p1,p2;
for(s1=0,s2=0,i=0;i<N;i++)
{
s1+=stu[i].score1;
s2+=stu[i].score2;
}
p1=s1/N;
p2=s2/N;
for(i=0;i<N;i++)
{
if(stu[i].score1<p1)
printf("名字:%s 学号:%ld 此学生成绩小于第一门课的平均分\n",stu[i].name,stu[i].number);
if(stu[i].score2<p2)
printf("名字:%s 学号:%ld 此学生成绩小于第二门课的平均分\n",stu[i].name,stu[i].number);
}
printf("\n");
}
void paixu(struct person stu[N])
{
int i,j;
struct person t;
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(stu[j].score1<stu[j+1].score1)
{t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}
printf("按第一门课程从高到低排序为:\n");
for(i=0;i<N;i++)
printf("名字:%s 学号:%ld 成绩:%f\n",stu[i].name,stu[i].number,stu[i].score1); }
void main()
{
struct person stu[N];
shuru(stu);
printf("\n");
zuigao(stu);
pingjun(stu);
paixu(stu);
}
4.输入一字符串,用链表形式储存,每个结点的数据域存放一个字符,最后输出链表中的全部字符。
5.设有一个单向链表(设表长大于2),现欲将其倒置排序,试编写一函数实现此功能。
6.已知一无符号的整数占用了4个字节的内存空间,现欲从低位存储地址开始,将其每个字节作为单独的一个ASCII码字符输出,试用共同体实现上述转换。
7.已知一长度为2个字节的整数,现欲将其高位字节与低位字节相互交换后输出,试用共同体类型实现这一功能。
8.请定义枚举类型score,用枚举元素代表成绩的等级,如:90分以上为优(excellent),80—89分之间为良(good),60-79分之间为中(general),60分以下为差(fail),通过键盘输入一个学生的成绩,然后输出该生成绩的等级。
#include<stdio.h>
void main()
{
float a;
enum score{fail,general=6,good=8,excellent}a;
printf("请输入该学生的成绩:");
scanf("%f",&a);
switch(b);
{
case excellent:printf("excellent");break;
case good:printf("good");break;
case general:printf("general");break;
case fail:printf("fail");break;
}
}。