分享C语言题目(结构体)

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);
	}
}

运行结果:

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值