1.定义一种表示学生的姓名,语文成绩,英语成绩、数学成绩的结构体,同时给出了五个学生的结构体内容信息(总分未给出),请输出该五个学生结构体中的内容,并按总成绩排名输出学生姓名和总成绩,请完成相应的程序代码编写。 可任意选择排序方法,如冒泡或简单选择排序。
备注:学生结构体为:struct student
{
char name[10]; //学生姓名
int chinese; //语文成绩
int english; //英语成绩
int math;//数学成绩
int count;//总成绩
}; 其初始结构体内容为:{ "张三",89,81,83 }, { "李四",75,88,82 }, { "王二",93,79,89 }, { "赵六",93,64,78 }, { "陈一",64,89,76 }
#include<stdio.h>
struct student
{
char name[10]; //学生姓名
int chinese; //语文成绩
int english; //英语成绩
int math;//数学成绩
int count;//总成绩
};
int main()
{
int i, j, t;
struct student s[5] = { {"张三",89,81,83},{"李四",75,88,82},{"王二",93,79,89},{"赵六",93,64,78},{"陈一",64,89,76} };
printf("结构体中五个学生成绩数据为:\n");
printf("姓名 语文成绩 英语成绩 数学成绩 总成绩\n");
for (i = 0; i < 5; i++)
{
s[i].count = s[i].chinese + s[i].english + s[i].math;
printf("%s %5d %5d %5d %5d\n", s[i].name, s[i].chinese, s[i].english, s[i].math, s[i].count);
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4 - i; j++)
{
if (s[j].count < s[j + 1].count)
{
t = s[j].count;
s[j].count = s[j + 1].count;
s[j + 1].count = t;
}
}
}
printf("学生总成绩由小大到排序如下:\n");
printf("姓名 总成绩\n");
for (i = 0; i < 5; i++) {
printf("%s %5d\n", s[i].name, s[i].count);
}
return 0;
}
运行结果:
2.已知班级有3个学生(学生信息:学号、姓名、成绩),要求根据学生的学号修改该学生对应的成绩,修改完成后输出所有学生的完整信息。
备注:学生结构体为:
struct student
{
int id;//学号
char name[10]; //姓名
int score; //成绩
}; 其初始结构体内容为:{ 1001,"张三",89 }, { 1002,"李四",75 }, { 1003,"王二",93 }。
#include <stdio.h>
struct student
{
int id;//学号
char name[10]; //姓名
int score; //成绩
}s[3] = { {1001,"张三",89},{1002,"李四",75},{1003,"王二",93} };
void main()
{
int i, sno, score;
printf("修改前全班学生的成绩为:\n");
printf(" 学号 姓名 成绩\n");
for (i = 0; i < 3; i++)
{
printf(" %d %s %d\n", s[i].id, s[i].name, s[i].score);
}
printf("请输入要修改成绩的学号:\n");
scanf("%d", &sno);
printf("请输入要修改成绩的成绩:\n");
scanf("%d", &score);
for (i = 0; i < 3; i++)
{
if (s[i].id == sno)
{
s[i].score = score;
}
}
printf("修改后全班学生的成绩为:\n");
printf(" 学号 姓名 成绩\n");
for (i = 0; i < 3; i++)
{
printf(" %d %s %d\n", s[i].id, s[i].name, s[i].score);
}
}
运行结果:
3.有一组学生的成绩信息包括学号(num)、姓名(name)和成绩(grade),成绩又包括平时成绩(regular)、期中成绩(midterm)、期末成绩(final)和总成绩(total),如表所示。编程实现按照“总成绩=0.3*平时成绩+0.1*期中成绩+0.6*期末成绩”的公式计算总成绩,并输出所有学生的全部信息。
备注:学生结构体为:struct student
{
int num;//学号
char name[10]; //学生姓名
struct sco grade;//学生成绩
};
成绩结构体为:
struct sco
{
int regular;
int midterm;
int final;
int total;
}grade;
//法一
#include <stdio.h>
struct Score{ /*定义结构体数据类型struct Score*/
float regular;
float midterm;
float final;
float total;
};
struct student{ /*定义结构体数据类型struct student*/
int num;
char name[20];
struct Score grade; /*用数据类型struct Score定义了一个变量grade*/
};
int main()
{
int i;
struct student s[3] = { {201701,"Wangwu",85,90,84},{201702,"Lizhou",86,80,78},{201703,"Zhangwen",75,72,70} };
printf("学号 姓名 平时成绩 期中成绩 期末成绩 总成绩\n");
for (i = 0; i < 3; i++)
{
s[i].grade.total = 0.3 * s[i].grade.regular + 0.1 * s[i].grade.midterm + 0.6 * s[i].grade.regular;
printf("%d %s %0.1f %0.1f %0.1f %0.1f\n", s[i].num, s[i].name, s[i].grade.final, s[i].grade.midterm, s[i].grade.regular, s[i].grade.total);
}
}
//法二
#include <stdio.h>
struct Score /*定义结构体数据类型struct Score*/
{
float regular;
float midterm;
float final;
float total;
};
struct student /*定义结构体数据类型struct student*/
{
int num;
char name[20];
struct Score grade; /*用数据类型struct Score定义了一个变量grade*/
};
int cal(struct student stu[]) /*定义cal函数用于计算总成绩*/
{
struct student* q; /*定义指向struct student类型变量的指针*/
for (q = stu; q < stu + 3; q++) /*循环计算每个学生的总成绩*/
q->grade.total = 0.3 * q->grade.regular + 0.1 * q->grade.midterm + 0.6 * q->grade.final;
return 0;
}
int main()
{
struct student s[3] = { {201701,"Wangwu",85,90,84},{201702,"Lizhou",86,80,78},
{201703,"Zhangwen",75,72,70} }; /*对结构体数组进行初始化*/
struct student* p = s; /*定义指向指针变量并指向s的首地址*/
cal(p);
printf("学号 姓名 平时成绩 期中成绩 期末成绩 总成绩\n");
while (p < s + 3) /*循环3次*/
{
printf("%d %8s %0.1f %0.1f %0.1f %0.1f\n", p->num, p->name, p->grade.regular, p->grade.midterm, p->grade.final,
p->grade.total); /*输出学生的信息*/
p++; /*使p指向结构体数组的下一个元素*/
}
return 0;
运行结果:
4.利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期末成绩,然后计算其平均成绩并根据平均成绩由高到底输出成绩表。
#include <stdio.h>
struct student /*定义结构体数据类型struct student*/
{
int num;
int mid;
int fin;
double avg;
};
int main()
{
struct student s[3];
struct student* p = s, t;
int i, j;
printf("请输入学生信息:\n");
for (i = 0; i < 3; i++)
{
printf("第%d位学生数据:", i + 1);
scanf("%d %d %d", &(p + i)->num, &(p + i)->mid, &(p + i)->fin);
}
printf("学号 期中 期末:\n");
for (i = 0; i < 3; i++)
{
(p + i)->avg = ((p + i)->mid + (p + i)->fin) / 2;
printf("%d %d %d\n", (p + i)->num, (p + i)->mid, (p + i)->fin);
}
for (i = 0; i < 2; i++)
{
for (j = i + 1; j < 3; j++)
{
if ((p + j)->avg > (p + i)->avg)
{
t = *(p + j);
*(p + j) = *(p + i);
*(p + i) = t;
}
}
}
printf("排序后:\n学号 平均成绩\n");
for (i = 0; i < 3; i++)
{
printf("%d %5.2f\n", (p + i)->num, (p + i)->avg);
}
}
运行结果: