精华内容
下载资源
问答
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼/*有十学生,每学生的数据包括学号、姓名、三门课程的成绩从键盘输入10学生的数据,要求输出:(1):每门课的平均成绩(2):每学生的总分及平均成绩*/#include#...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    /*有十个学生,每个学生的数据包括学号、姓名、三门课程的成绩

    从键盘输入10个学生的数据,要求输出:

    (1):每门课的平均成绩

    (2):每个学生的总分及平均成绩*/

    #include

    #define N 10

    #define M 3

    void Read_date(struct student *p){

    int i,j;

    for(i=0;i

    {

    scanf("%ld%s",&(p+i)->num,&(p+i)->name);

    for(j=0;j<3;j++)

    scanf("%f",&(p+i)->scores[j]);

    }

    }

    void Dispose(struct student *p,struct student *q){

    int i,j;

    float sum;

    for(i=0;i

    {

    for(j=0;j

    {

    (p+i)->sum+=(p+i)->scores[j];

    }

    (p+i)->stu_aver=(p+i)->sum/3;

    }

    for(i=0;i

    {

    sum=0;

    for(j=0;j

    {

    sum+=(p+j)->scores[i];

    }

    (q+i)->course_aver=sum/N;

    }

    }

    void Output(struct student *p,struct student *q)

    {

    int i;

    for(i=0;i

    {

    printf("%f%f",(p+i)->sum,(p+i)->stu_aver);

    }

    for(i=0;i

    {

    printf("%f",(q+i)->course_aver);

    }

    }

    main(){

    struct student {

    int num;

    char name[10];

    float scores[3];

    float course_aver;

    float sum;

    float stu_aver;

    } stu_date[N],course_date[M];

    Read_date(stu_date);

    Dispose(stu_date,course_date);

    Output(stu_date,course_date);

    }

    高手帮忙看下这个程序的报错应该怎么改写,新手一枚。

    展开全文
  • 从键盘上输入 5 学生的信息,按如下要求输出: (1) 按照学号递增输出全部学生信息,每学生的信息一行。(格式: 学号 姓名 分数1 分数 2 分数 3 总分) (2) 输出每门课程最高分的学生的信息 (3) 输出每门课程的...

    问题描述:
    有一个学生结构体,其数据成员有: 学号, 姓名, 3 门课程分数。从键盘上输入 5 个学生的信息,按如下要求输出:
    (1) 按照学号递增输出全部学生信息,每个学生的信息一行。(格式: 学号 姓名 分数1 分数 2 分数 3 总分)
    (2) 输出每门课程最高分的学生的信息
    (3) 输出每门课程的平均分
    (4) 按照总分输出学生排名

    算法思想:
    (1)第1问要求按学号递增输出信息,在不确定输入的学号是否有序,按学号有序插入链表(默认递增顺序),linklist_insert( )是实现单链表有序插入的函数;linklist_print( )是用于打印单链表的结点信息的函数,定义一个一维全局数组sum[5],用于统计5个学生的总分。
    (2)第2问和第3问可以一起处理,设置maxscore1、maxscore2、maxscore3三个变量用来分别获取三门课程的最高成绩,同时用p1、p2、p3三个结构体指针分别对应存放该课程最高成绩的学生信息,用score1_average、score2_average、score3_average三个变量分别用来存放三门课程的平均分。通过遍历每个结点来填充这些变量的信息。
    (3)第4问定义一个指针数组pnode[5],数组的每一个元素对应存放有序插入后的每个结点的指针地址,因为结点数很少,借用冒泡排序的思想处理问题较方便。

    案例运行效果:
    在这里插入图片描述
    完整代码如下:
    func.h

    #pragma once
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef struct student {
    	int stuid;
    	char name[20];
    	float score1;
    	float score2;
    	float score3;
    	struct student *next;
    }stu,*pstu;
    
    void linklist_print(pstu phead);
    void linklist_insert(pstu *pphead, pstu *pptail, int stuid, char *name, float score1, float score2, float score3);
    void selectinfor(pstu p);
    void sort_totalscore(pstu p);
    

    func.c

    #include"func.h"
    #define N 5
    float sum[5];
    void linklist_print(pstu p)
    {
    	int count = 0;
    	while (p)
    	{
    		sum[count] = p->score1 + p->score2 + p->score3;
    		printf("%d %s %.1f %.1f %.1f %.1f\n",p->stuid,p->name, p->score1,p->score2,p->score3,sum[count]);
    		count++;
    		p = p->next;
    	}
    	printf("\n");
    }
    
    void linklist_insert(pstu *pphead, pstu *pptail, int stuid, char *name, float score1,float score2,float score3)
    {
    	pstu pnew = (pstu)calloc(1,sizeof(stu));
    	pstu ppre, pcur;
    	pnew->stuid = stuid;
    	strcpy(pnew->name, name);
    	pnew->score1 = score1;
    	pnew->score2 = score2;
    	pnew->score3 = score3;
    	if (NULL == (*pphead))
    	{
    		*pphead = pnew;
    		*pptail = pnew;
    	}
    	else if (pnew->stuid <= (*pphead)->stuid)
    	{
    		pnew->next = (*pphead);
    		(*pphead) = pnew;
    	}
    	else if (pnew->stuid > (*pphead)->stuid && pnew->stuid <= (*pptail)->stuid)
    	{
    		ppre = *pphead;
    		pcur = ppre->next;
    		while (pcur)
    		{
    			if (pnew->stuid > ppre->stuid && pnew->stuid <= pcur->stuid)
    			{
    				pnew->next = pcur;
    				ppre->next = pnew;
    				break;
    			}
    			ppre = pcur;
    			pcur = pcur->next;
    		}
    	}
    	else {
    		(*pptail)->next = pnew;
    		*pptail = pnew;
    	}
    }
    
    void selectinfor(pstu p)
    {
    	pstu p1, p2, p3;
    	float maxscore1=0, maxscore2=0, maxscore3=0;
    	float score1_average = 0, score2_average = 0, score3_average = 0;
    	int count = 0;
    	while (p)
    	{
    		if (p->score1 > maxscore1)
    		{
    			maxscore1 = p->score1;
    			p1 = p;
    		}
    		if (p->score2 > maxscore2)
    		{
    			maxscore2 = p->score2;
    			p2 = p;
    		}
    		if (p->score3 > maxscore3)
    		{
    			maxscore3 = p->score3;
    			p3 = p;
    		}
    		score1_average += p->score1;
    		score2_average += p->score2;
    		score3_average += p->score3;
    		count++;
    		p = p->next;
    	}
    	printf("每门课程最高成绩的学生信息如下:\n");
    	printf("%d %s maxscore1:%.1f\n", p1->stuid, p1->name, p1->score1);
    	printf("%d %s maxscore2:%.1f\n", p2->stuid, p2->name, p2->score2);
    	printf("%d %s maxscore3:%.1f\n", p3->stuid, p3->name, p3->score3);
    	printf("\n");
    	
    	printf("每门课程平均分如下:\n");
    	printf("score1_average=%.1f   score2_average=%.1f   score3_average=%.1f\n", score1_average / count, score2_average / count, score3_average / count);
    	printf("\n");
    }
    
    void sort_totalscore(pstu p)
    {
    	pstu pnode[N];
    	float temp;
    	pstu q;
    	for (int i = 0; i < N; i++,p=p->next)
    		pnode[i] = p;
    	for (int i = N; i > 1; i--)
    	{
    		for (int j = 0; j < i - 1; j++)
    		{
    			if (sum[j] < sum[j + 1])
    			{
    				temp = sum[j + 1];
    				sum[j + 1] = sum[j];
    				sum[j] = temp;
    				q = pnode[j + 1];
    				pnode[j + 1] = pnode[j];
    				pnode[j] = q;
    			}
    		}
    	}
    	
    	printf("总分排名如下:\n");
    	for (int i = 0; i < N; i++)
    		printf("%d %s %.1f\n", pnode[i]->stuid, pnode[i]->name, sum[i]);
    }
    

    main.c

    #include"func.h"
    int main()
    {
    	pstu phead = NULL, ptail = NULL;
    	int stuid;
    	char name[20];
    	float score1, score2, score3;
    	while (scanf("%d%s %f%f%f", &stuid, name, &score1, &score2, &score3)!=EOF)
    	{
    		linklist_insert(&phead,&ptail,stuid, name, score1, score2, score3);
    	}
    	printf("按照学号递增顺序输出学生信息如下:\n");
    	linklist_print(phead);		//打印第1问的结果
    	selectinfor(phead);		//处理并打印第2、3问的结果
    	sort_totalscore(phead);		//处理打印第4问的结果
    	system("pause");
    }
    
    展开全文
  • 2.生成一个结构体数组,并输入5个记录数据; 第一组 3.创建一文件,将上面的数据顺序存储到文件中; 4.查询第二个数据并输出; 5.在第二个数据后插入一记录并输出整个数据; 6.删除第三个数据并输出整个数据; ...

    代码功能描述:

    1.创建一个结构体变量,包括5个成员(学号,姓名,性别);
    2.生成一个结构体数组,并输入5个记录数据;
    第一组
    3.创建一个文件,将上面的数据顺序存储到文件中;
    4.查询第二个数据并输出;
    5.在第二个数据后插入一个记录并输出整个数据;
    6.删除第三个数据并输出整个数据;
    第二组
    7.创建一个文件,将上面的数据链式存储到文件中;
    8.查询第3个数据并输出;
    9.在第二个数据后插入一个记录并输出整个数据;
    10.删除第4个数据并输出整个数据;

    代码:

    #include<stdio.h>
    #include<malloc.h>
    #define MaxSize 50
    struct student          //创建结构体变量
    {
    	char name[20];
    	char age[10];
    	char num[10];
    	char sex[10];
    	char clas[10];
    };
    typedef student ElemType;
    typedef struct {
    	ElemType date[MaxSize];
    	int length;
    }SqList;			//声明顺序表类型
    void CreatSqList(SqList*& L, ElemType a[], int n) {	//创建顺序表
    	L = (SqList*)malloc(sizeof(SqList));
    	for (int i = 0; i < n; i++)
    	{
    		L->date[i] = a[i];
    		L->length = n;
    	}
    }
    void DispSqList(SqList* L) {					//输出线性表
    	for (int i  = 0; i <L->length; i++)
    	{
    		fwrite(&L->date[i], sizeof(ElemType), 1, stdout);  //stdin表示屏幕的文件缓冲区
    		printf("\n");
    	}
    }
    void SaveSqInf(SqList* L) {			//向文件中存储学生信息
    	FILE* fp;
    	if (!(fp = fopen("studentsqlist", "wb")))	//打开文件,若无此文件则创建
    	{
    		printf("no open /n");
    		return;
    	}
    	for (int i = 0; i <	L->length;i++)
    	{
    		if (fwrite(&L->date[i], sizeof(ElemType), 1, fp) != 1) {	//数据块写入
    			printf("write error\n");
    			fclose(fp);
    		}
    	}
    }
    bool GetSqElem(SqList* L, int i, ElemType& e) {
    	if (i<1||i>L->length)
    	{
    		return false;
    	}
    	e = L->date[i - 1];
    	return true;
    }
    bool SqListInsert(SqList*& L,int i,ElemType e) {
    	int j;
    	if (i<1 || i>L->length+1 || L->length==MaxSize)
    	{
    		return	false;
    	}
    	i--;
    	for (j = L->length; j > i; j--) {
    		L->date[j] = L->date[j - 1];
    		L->date[i] = e;
    		L->length++;
    		return true;
    	}
    }
    bool SqListDelete(SqList*& L, int i, ElemType& e) {
    	int j;
    	if (i<1 || i>L->length + 1)
    	{
    		return false;
    	}
    	i--;
    	e = L->date[i];
    	for (j = i; j < L->length-1; j++) {
    		L->date[j] = L->date[j + 1];
    		L->length--;
    		return true;
    	}
    }
    /*--------------------------------*/
    typedef struct	LNode{                       
    	ElemType date;
    	struct LNode* next;
    }LinkNode;
    void CreatListF(LinkNode*& L, ElemType a[], int n) {           // 创建的链表是有头结点的。
    	LinkNode* s;
    	L = (LinkNode*)malloc(sizeof(LinkNode));
    	L->next = NULL;
    	for (int i = 0; i < n; i++)
    	{
    		s = (LinkNode*)malloc(sizeof(LinkNode));
    		s->date = a[i];
    		s->next = L->next;
    		L->next = s;
    	}
    }
    void DispLinkList(LinkNode* L) {
    	LinkNode* p = L->next;
    	while (p!=NULL)
    	{
    		fwrite(&p->date, sizeof(ElemType), 1, stdout);
    		p = p->next;
    	}
    	printf("\n");
    }
    bool SaveLinkList(LinkNode* L) {
    	LinkNode* j = L->next;
    	FILE* fp;
    	if (!(fp = fopen("studentlinklist", "wb")))	//打开文件,若无此文件则创建
    	{
    		printf("no open /n");
    		return false;
    	}
    	while (j!=NULL)
    	{
    		fwrite(&j->date, sizeof(j->date), 1, fp);
    		j = j->next;
    	}
    	return true;
    }
    bool GetLinkElem(LinkNode* L, int i, ElemType& e) {
    	int	j=0;
    	LinkNode* p = L;
    	if (i<=0)
    	{
    		return false;
    	}
    	while (j<i && p!=NULL)
    	{
    		j++;
    		p = p->next;
    	}
    	if (p==NULL)
    	{
    		return false;
    	}
    	else
    	{
    		e = p->date;
    		return true;
    	}
    }
    bool LinkListInsert(LinkNode*& L, int i, ElemType e) {
    	int j = 0;
    	LinkNode* p = L, * s;
    	if (i<=0)
    	{
    		return false;
    	}
    	while (j<i-1&&j!=NULL)
    	{
    		j++;
    		p = p->next;
    	}
    	if (p==NULL)
    	{
    		return false;
    	}
    	else
    	{
    		s = (LinkNode*)malloc(sizeof(LinkNode));
    		s->date = e;
    		s->next = p->next;
    		p->next = s;
    		return true;
    	}
    }
    bool LinkListDelete(LinkNode*& L, int i, ElemType& e) {
    	int j = 0;
    	LinkNode* p = L, * q;
    		if (i<=0)
    		{
    			return false;
    		}
    		while (j<i-1&&p!=NULL)
    		{
    			j++;
    			p = p->next;
    		}
    		if (p==NULL)
    		{
    			return false;
    		}
    		else
    		{
    			q = p->next;
    			if (q==NULL)
    			{
    				return false;
    			}
    			e = q->date;
    			p->next = q->next;
    			free(q);
    			return true;
    		}
    }
    /*------------------------------------*/
    int main() {
    	ElemType a[5];
    	SqList* S;
    	LinkNode* L;
    	int n = 5;
    	printf("please input information of students :\n");
    	printf("name age num sex class\n");
    	getchar();
    	for (int i = 0; i < 5; i++)
    	{
    		scanf("%s,%s,%s,%s,%s", &a[i].name, &a[i].age, &a[i].num,&a[i].sex,&a[i].clas);
    		getchar();
    	}
    	printf("Creat the SqList\n");
    		CreatSqList(S, a, n);
    		printf("input sqlist to file\n");
    		SaveSqInf(S);
    		printf("get 2th elem:   \n");
    		ElemType e;
    		GetSqElem(S, 3, e);
    		printf("elem :%s %s %s %s %s\n", e.name, e.age, e.name, e.sex, e.clas);
    		printf("insert elem: \n");
    		SqListInsert(S, 2, e);
    		DispSqList(S);
    		printf("\n");
    		printf("delete elem: \n");
    		SqListDelete(S, 3, e);
    		DispSqList(S);
    		printf("\n");
    	printf("Creat the LinkList\n");
    		CreatListF(L, a, n);
    		printf("input Linklist to file\n");
    		SaveLinkList(L);
    		printf("get 2th elem:   \n");
    		ElemType d;
    		GetLinkElem(L, 3, d);
    		printf("elem :%s %c %s %s %c\n", d.name, d.age, d.name, d.sex, d.clas);
    		printf("insert elem: \n");
    		LinkListInsert(L, 2, d);
    		DispLinkList(L);
    		printf("\n");
    		printf("delete elem: \n");
    		LinkListDelete(L, 3, d);
    		DispLinkList(L);
    		return 0;
    }
    

    补充

    1.文件创建的位置在你编译器创建项目所选的路径。
    2.fwrite 是数据块读写 用stdout相当于数据块printf;
    关于文件的一些内容可以看我的学习总结:
    https://blog.csdn.net/qlkdxxx/article/details/113323598
    3.文件的存储会出现乱码问题,c语言的文件相当难调,你要是为了应付作业
    代码没问题就可以了。不同的电脑,或者你读文件的软件不同显示也会不同,还有存储,编码,等等要考虑的。c语言的文件比较接近底层,相比较java等其他语言就比较难,不是有句话说 c语言是大佬玩的嘛。
    乱码的问题以我的能力还没能解决,你要是应付作业估计够用了,希望对你有帮助。

    总结或者前言吧:

    这个是我学数据结构时老师布置的作业,当初学的时候完全不编代码。等放假回了家翻回去学的。
    当时我学的时候交作业就直接厚着脸皮纯用别人的代码,对,连csdn都懒得看! 所以你上这儿来翻找已经比我强很多了。
    所以你刚学习编码能力比较弱不要灰心,时间比较忙就先应付过去。
    我们班上数据结构课上听得基本没有 ,是真的基本一两个 考试我也是最后一个礼拜狂刷网课不写代码过的。
    所以我的建议是 如果上课跟不上,你可以去b站找个网课看看,数据结构真的非常重要,从一开始你就看网课更上进度,后面你就会轻松很多。
    哈哈 我本身就是半吊子到说教开了,也算是对我自己的勉励吧,
    代码如果有错误也请指出来,希望可以一起进步!

    展开全文
  • i++) { printf("请输入第%d学生的信息:\n", i); printf("学生的姓名:\n"); scanf_s("%s", pinfo[i].Name,100); printf("学生的学号:\n"); scanf_s("%d", &pinfo[i].StudentID); printf("学生的分数:\n"); ...

     

    #include<stdio.h>

     

    #include<stdlib.h>

     

    #include<string.h>

     

    #define Max 20

     

    typedef struct Student

     

    {

     

    char Name[100];

     

    int StudentID;

     

    int score;

     

    };

     

    int main(int* argc, char* argv[])

     

    {

     

    // void * malloc(size_t size);

     

    Student * pinfo = (Student *)malloc(sizeof(Student) * Max);

     

    if (pinfo == NULL)

     

    {

     

    return -1;

     

    }

     

    memset(pinfo, 0, sizeof(Student) * Max);

     

    for (int i = 0; i < Max; i++)

     

    {     

     

    printf("请输入第%d学生的信息:\n", i);

     

    printf("学生的姓名:\n");

     

    scanf_s("%s", pinfo[i].Name,100);

     

    printf("学生的学号:\n");

     

    scanf_s("%d", &pinfo[i].StudentID);

     

    printf("学生的分数:\n");

     

    scanf_s("%d",&pinfo[i].score);

     

    printf("**************************\n");   //仅仅只是为了显示好看

     

    printf("第%d学生的信息如下显示:\n", i);

     

    printf("姓名:%s\n学号:%d\n分数:%d\n",pinfo[i].Name, pinfo[i].StudentID, pinfo[i].score);

     

    printf("**************************\n");   //仅仅只是为了显示好看

     

    }

     

    free(pinfo);

     

    return 0;

     

    }

     

    展开全文
  • 定义一职工结构体数组,从键盘输入5位职工信息,打印输出最高的工资。是一很好的关于学习C语言结构体的例子。
  • #include "stdafx.h" #include <stdio.h> #include <stdlib.h> struct student { char name[10]; int num; int age; char addr[40]; }; student s1[2],s2[2],*p1,*p2;...
  • i++) { printf("请输入第%d学生的信息:\n", i); printf("学生的姓名:\n"); scanf_s("%s", su.Name,100); printf("学生的学号:\n"); scanf_s("%d", &su.StudentID); printf("学生的分数:\n"); scanf_s("%d",&su...
  • 编写两函数input和print,分别用来输入5个学生的数据记录和打印这5个学生的记录。对于每一学生,其记录包含了学号、名字、3门课程的成绩共5项。用主函数分别调用input和print函数进行输入和输出。 要求使用...
  • 编程从键盘输入教师的信息,然后将该教师的信息显示在屏幕*/ #include<stdio.h> struct person_type { char num[15];/*编号*/ char name[10];/*姓名*/ int age;/*年龄*/ char title[10];/*职称*/ }....
  • socket 发送结构体数据

    万次阅读 多人点赞 2018-04-22 21:11:18
    Socket中的send函数可以发送字符串,但不能直接发送结构体,因此在发送端先把结构体转成字符串,然后用send发送,在接收端recv字符串,再转换成原先的结构体,这就是解决问题的主要思路,实现中要注意的问题在下文...
  • 题目要求: 有N学生,每学生的数据包括学号、姓名、3门课的成绩。 从键盘输入N学生的数据。 要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
  • 求每名学生的平均成绩和没门课程的平均成绩第三小题![图片](https://img-ask.csdn.net/upload/201512/24/1450966586_545368.jpg)
  • 题目: 从键盘输入10学生的基本情况(学号,姓名,性别及三门课程成绩),存放在结构体数组当中,计算所有同学的总分,并按总分排降序后输出。 要求 :操作数组元素时使用结构体指针,且输入的10条数据,要求每条...
  • #include using namespace std; struct student { int num; string name; char sex; float score; }; int main() { student student1;... cin>>student1.num>>student1.name>>
  • //从键盘输入信息 int i=0,count=0; printf("请输入城市名和位置坐标x,y,以空格键隔开(输入“q 0 0”以结束):"); while((scanf("%s %d %d",city[i].name,&city[i].x),&city[i].y)!=0) { if(i>=MAXSIZE) ...
  • 其实这也是二维数组传参的另一种表现形式,利用一个结构体,嵌套一一维数组就可以比较方便的进行二维数组传参了标准输入251 3 5 7 124 1 2 3 4标准输出31 3 42 1 2代码如下# include &lt;stdio.h&gt;# ...
  • 我们先审题,题目中说从键盘上输入学生的有关数据,我们就用scanf函数来对学生的有关信息进行输入,然后定义一input函数来实现这功能,接下来题目中说到要把它们转存到磁盘文件;那么,这时候我们需要从键盘上...
  • 结构体

    2020-02-26 12:51:44
    简单的来说,结构体就是一可以包含不同数据类型的一结构,它是一种可以自己定义的数据类型。 **二.结构体的好处** 1.结构体可以在一结构中声明不同的数据类型。 2.相同结构的结构体变量是可以相互赋值的。 3....
  • ##按照如下格式定义一个结构体类型,并定义一这种类型的数组存储一班级的学生成绩信息,从键盘输入学生的个人信息和成绩(不包括总分),通过公式“总分=数学+英语+政治”计算每同学的总分,并按照总分降序...
  • 题目: 代码: #include <iostream> ...//创建Student结构体// ... //发现可以通过创建一Student类型的数据来处理// Student s[5]; for(int i=0;i<5;i++){ cin >> s[i].n.
  • 5个学生,每学生有3门课的成绩,从键盘输入学生数据(包括学生号、姓名、三门课成绩),计算平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中 对于平均成绩的思路就是:把平均成绩当做结构体的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,260
精华内容 7,304
关键字:

从键盘上输入5个结构体数据