c语言 链表基础

*/输入10个学生5门课的成绩,分别用函数实现下列功能:
	1>计算每个学生的平均分。
	2>计算每门课的平均分。
	3>找出所有50个分数中最高的分数所对应的学生和课程。/*

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>

typedef struct Student
{
	char name[10];
	int math;
	int english;
	int chinese;
	int Seril;
	struct Student *pNext;
}Stu,*pStu;

void Init_Student(pStu pHead);

pStu Creat_Student()
{
	int i = 0;
	int num = 0;
	pStu pM = NULL;
	pStu pHead = (pStu)malloc(sizeof(Stu));
    if(pHead==NULL)
	{
		printf("未能开辟空间!\n");
		exit(-1);
	}
	printf("请输入你要输入学生信息的个数:");
	scanf("%d",&num);
	if (num < 1)
	{
		printf("你没有要插入学生!\n");
		exit(-1);
	}

	pM = pHead;
	pHead->pNext = NULL;
	for (i = 0; i < num ; i++)
	{
		pStu student = (pStu)malloc(sizeof(Stu));
		pM->pNext= student;
		student->pNext = NULL;
		pM = student;

    }
	free(pM);
	return pHead;
}

void Init_Student(pStu pHead)
{

	int i = 1;
	pStu phead = pHead;
	printf("请依次输出学生信息(姓名\\语文成绩\\数学成绩\\英语成绩):\n");
	while (1)
	{
		phead = phead->pNext;
		printf("第%d个:\n",i);
		scanf("%s", phead->name);
		scanf("%d", &phead->chinese);
		scanf("%d", &phead->math);
		scanf("%d", &phead->english);
		phead->Seril = i;
		i++;
		if (phead->pNext == NULL)
			break;

	}

    free(phead);

}

void Count_Average(pStu pHead)
{
	int avr_ch = 0;
	int avr_en = 0;
	int avr_ma = 0;
	int avr_stu = 0;
	int num = 1;
	pStu phead = pHead;
	while (1)
	{
		avr_stu = 0;
		phead = phead->pNext;
		avr_ch = avr_ch+phead->chinese;
		avr_en = avr_en+phead->english;
		avr_ma = avr_ma+phead->math;
		avr_stu = avr_stu + phead->chinese + phead->english + phead->math;
		printf("%s的所有成绩的平均分为:%d\n", phead->name, avr_stu / 3);
		if (phead->pNext == NULL)
			break;
		num++;
	}
	printf("所有人语文成绩平均分为:%d\n", avr_ch / num);
	printf("所有人数学成绩平均分为:%d\n", avr_ma / num);
	printf("所有人英语成绩平均分为:%d\n", avr_en / num);
	free(phead);

}

void Show_Hig_scr_stu(pStu pHead)
{
	pStu phead = pHead->pNext;
	int seril = 1;
	int hig_scr1 = 0;
	int hig_scr2 = 0;
	while (1)
	{
		int high = 0;
		if (phead->pNext == NULL)
			break;
		high = (phead->chinese >= phead->english ? phead->chinese : phead->english);
		hig_scr1 = high >= phead->math ? high : phead->math;
		high = (phead->pNext->chinese >= phead->pNext->english ? phead->pNext->chinese : 
			phead->pNext->english);
		hig_scr2 = high >= phead->pNext->math ? high : phead->pNext->math;
		if (hig_scr1 < hig_scr2)
		{
			seril = phead->pNext->Seril;
				phead = phead->pNext;
		   if (phead->pNext == NULL)
			    break;
		}
		else
            phead->pNext = phead->pNext->pNext;

	}
	phead = pHead->pNext;
	while (1)
	{
		if (phead->Seril == seril)
		{
			if (phead->chinese>=phead->math&&phead->chinese>=phead->english)
				printf("%s的语文成绩最高为:%d\n", phead->name, phead->chinese);
			if (phead->chinese <= phead->math&&phead->math >= phead->english)
				printf("%s的数学成绩最高为:%d\n", phead->name, phead->math);
			if (phead->chinese <= phead->english&&phead->math <= phead->english)
				printf("%s的英语成绩最高为:%d\n", phead->name, phead->english);
			break;

		}
		phead = phead->pNext;

	}
	free(phead);

}
int main()
{
	pStu phead = (pStu)malloc(sizeof(Stu));
	phead = Creat_Student();
	Init_Student(phead);
	Count_Average( phead);
	Show_Hig_scr_stu(phead);

	return 0;
}
时间: 2024-08-25 01:18:47

c语言 链表基础的相关文章

关于JS脚本语言的基础语法

JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法:1.所有的字符全都是英文半角的:2.大部分情况下每条语句结束后要加分号:3.每一块代码结束后加换行:4.程序前呼后应:

2.2JAVA基础复习——JAVA语言的基础组成运算符和语句

JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号. 6.语句:程序中常用的一些语句. 7.函数:也叫做方法,用来做一些特定的动作. 8.数组:用来存储多个数据的集合. JAVA中的运算符 1.算术运算符:用来进行一些数据算法的符号 算术运算符分为单目运算符.双目运算符.三目运算符. 单目运算符有:+(取正)-(取负)++(自增)--(自减)代码如

2.C#1语言核心基础

C#1语言核心基础 本部分将重点讨论C#1语言中的几个核心基础,他们包括:委托.类型系统.值/引用类型 1.委托 委托类似与函数指针,是要在恰当的时间执行的一系列操作,如果代码想要执行操作,但不知道操作细节,就可以使用委托. 简单委托的构成 要执行一个委托必须满足一下4个条件 申明委托类型 创建一个方法包含要执行的代码 创建一个委托实例 调用委托实例 合并和删除委托 上面的例子委托实例都只是一个操作,但是真实情况要稍微复杂一些,委托实例实际有一个操作列表与之关联,这就是调用列表. System.

LINUX下C语言编程基础

实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 二.实验步骤 1. 快捷键 Ubuntu中: 2. vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人

软考备战(2)语言处理程序基础

在阅读和学习<软件设计师教程>的过程中,学习到了程序语言基础这块的内容.这一章总共就两节,一共40多页,其中语言处理程序基础这小节就占了30多页,可见本章的主要内容在第二节.但是在我学习的过程中,感到非常的吃力,虽然我在专业课上曾经接触过文法和形式语言的一些东西,但是并没有任何轻松的感觉,相反越看越觉得不对劲,我在想可能是跑偏了,想起师姐曾经特意强调一定要看考纲,于是乎就翻看考纲关于这块知识的考察内容,如下图所示 看了之后决定以考纲为纲领对这块的知识进行一下总结,一是加深自己的印象和理解,同时

Java语言的基础知识

第三章 1.在java源文件编辑器中,选择某个成员变量,然后按住shift+alt+j,Eclipse会自动添加JavaDoc文档注释结构,如果选择的是方法,还会自动添加参数名称. 2.Java语言规定标示符是由任意的字母.下划线.美元符号和数字组成,并且第一个字符不能使数字,标示符不能使java中的保留关键字. 3.在Java语言中允许使用汉字或其他语言文字作为变量名,如int 年龄 =21;在程序运行时不会报错,但建议尽量不要使用这些语言作为变量. 4.java用关键字final来声明常量,

黑马程序员_C语言总结-基础部分

C语言基础 1.C语言的关键字 1>关键字就是C语言提供的有特殊含义的符号,也称为保留字,C语言中一共有32个关键字,这些关键字都有自己的含义 例如:int double float if  else switch for 等等 2.标示符的概念: 1>标示符就是在程序中自定义的一些名称,比如函数名,变量名,结构体名等等这些都是标示符 2>命名规则: 1>只能由英文字母的大小写和数字以及_下划线组成,且首字母必须为字母或者下划线_ 2>在C语言中是严格区分大小写的,比如if是

R语言常用基础知识

seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),    length.out = NULL, along.with = NULL, ...) 举例----------Examples----------seq(0, 1, length.out=11) seq(stats::rnorm(20)) #  seq(1, 9, by = 2)     #  seq(1, 9, by = pi)    #  seq(1, 6, by =

Java语言的基础知识4

第五章(数组) 1.在Java中可以将数组看做是一个对象虽然基本数据类型不是对象但有基本数据类型组成的数组是对象. 2.对于二维数组求第二维就用array[0].length, array.length就是默认的是第一维的长度. 3.foreach并不是一个新的语法它是for的循环的格式化主要执行遍历功能的循环,example: int arry ={1,2,3,4,5}; for(int i :array){ system.out.println(): } 4.数组元素定义完以后可通过Arra