问答详情
源自:1-1 初始C语言

学生信息管理系统

http://img.mukewang.com/56625ad80001881d06720397.jpg帮我看一下这个程序用指针引用结构怎么写,谢谢啦

提问者:没有的笑也 2015-12-05 11:35

个回答

  • Ivoth
    2015-12-06 22:10:43

    我也是初学C语言,无聊就个你写一个吧

    按照的你要求用了结构体和指针

    还带的些输入判断结构,其实不捣乱的输入是用不到,再学生时代不用考虑,但是出来真正做程序,就要考虑比较多

    亲,给个好评吧

    #include <stdio.h>
    #include <windows.h>
    #include <malloc.h>
    #define CN 2 //课程数
    typedef struct Node
    {
    	char	name[11];
    	int		sex;
    	float	score[CN];
    	Node	*next;
    }stu;//学生结构体成员
    int Intput(stu *&L, char course[CN][15])//初始化并输入学生信息
    {
    	int num, i = 0, cn = 0;
    	stu *p, *q = NULL;
    	do
    	{
    		printf("请输入学生人数:\n");
    		fflush(stdin);//清除键盘缓冲区
    		scanf("%6d", &num);
    	} while (num <= 0);
    	while (i < num)
    	{
    		p = (stu *)malloc(sizeof(stu));
    		if (i)
    			q->next = p;
    		else
    			L = p;
    		p->next = NULL;
    		printf("请输入学生%d姓名:\n", i + 1);
    		fflush(stdin);
    		scanf("%10s", &p->name);//读取10个字符,10个留个'\0'
    		do
    		{
    			printf("请输入学生%d性别(男:1,女:0):\n", i + 1);
    			fflush(stdin);
    			scanf("%d", &p->sex);
    		} while (p->sex != 0 && p->sex != 1);
    		for (cn = 0; cn < CN; cn++)
    		{
    			do
    			{
    				printf("请输入学生%d的%s成绩:\n", i + 1, course[cn]);
    				fflush(stdin);
    				scanf("%f", &p->score[cn]);
    			} while (p->score[cn] < 0 || p->score[cn] > 100);
    		}
    		q = p;//连接成链表
    		i++;//下一个学生
    	}
    	return num;
    }
    void DisList(stu *L, int num, char course[CN][15])//处理统计信息(学生链表,学生人数,课程列表)
    {
    	int i;
    	stu *p;
    	p = L;
    	float sum[CN], max[CN], min[CN], avg[CN];//分别保存每科的信息
    	while (p != NULL)
    	{
    		for (i = 0; i< CN; i++)
    		{
    			if (p == L)
    			{
    				sum[i] = 0.0;
    				max[i] = 0.0;
    				min[i] = 100.0;
    			}
    			sum[i] += p->score[i];
    			max[i] = max[i]>p->score[i] ? max[i] : p->score[i];
    			min[i] = min[i]<p->score[i] ? min[i] : p->score[i];
    		}
    		p = p->next;
    	}
    	//打印统计结果
    	printf("科目 \\ 项目\t总平均成绩\t\t最高分\t\t最低分\n");
    	for (i = 0; i < CN; i++)
    		printf("%s\t\t%10.2f\t\t%.2f\t\t%.2f\n", course[i], sum[i] / num, max[i], min[i]);
    }
    int main()
    {
    	char course[CN][15] = { "C语言","微积分" };//写成字符串数组方便添加删除科目
    	int num;
    	stu *L;
    	printf("=============================================================\n");
    	printf("\n\t\t\t学生信息管理系统\n\n");
    	printf("==============================================================\n");
    	num = Intput(L, course);
    	DisList(L, num, course);
    	system("pause");//dos暂停函数
    	return 0;
    }


    注释写得比较简单,不懂的可以问我