7-3 链表也简单final

将学生成绩绩点组成一个链表。链表结构如下:
struct student {
string name; //学生姓名
double gpa; //绩点
student *next;
};

输入是一组学生的姓名和绩点,以链表形式存储。 删除绩点小于平均绩点的学生结点,成为一个新链表。 后按照输入的顺序,依序输出新链表的学生信息。平均绩点是输入的所有学生绩点取算术平均值。

输入格式:

输入包括若干行。 每行是一个学生的 姓名和绩点,以空格隔开。
最后一行是-1。

输出格式:

输出包括学生姓名。 每个学生姓名一行。

输入样例:

zhang 3.5
liu 2.1
tie 1.9
-1

输出样例:

zhang

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student {
char name[20]; //学生姓名
double gpa; //绩点
struct student *next;
};
void text(struct student *head);
struct student *Creat_Stu_Doc();
struct student *DeleteDoc(struct student *head,int score);
double pingjun(struct student *head);
int main()
{
	double gpa;
	struct student *head;
	head=NULL;
	head=Creat_Stu_Doc();
	gpa=pingjun(head);
	DeleteDoc(head,gpa);
	text(head);
	return 0;
 } 
struct student *Creat_Stu_Doc()
{
	struct student *head,*p,*t;
	head=NULL;
	char name[20];
	while(1)
	{
        scanf("%s",name);
        if(name[0]!='-')
            break;
		p=(struct student *)malloc(sizeof(struct student));
		strcpy(p->name,name); 
		scanf("%lf",&p->gpa);
		if(head==NULL)
		{head=p;
		t=head;
		}
		else
		{
			t->next = p;
			t = p;
		}
	}
    t->next = NULL;
	return head;
}
struct student *DeleteDoc(struct student *head,int score)
{
	struct student *p,*p1;
	while(head->gpa<score)
	{
		p=head;
		head=head->next ;
		free(p);
	}
	p=head,p1=head->next ;
	while(p1!=NULL)
	{
		if(p1->gpa <score)
		{
			p->next = p1->next ;
			free(p1);
			p1=p->next ;
		}
		else
		{
			p=p1;
			p1=p1->next ;
		}
	}
	return head;
}
void text(struct student *head)
{
	struct student *p;
	for(p=head;p!=NULL;p=p->next)
	{
		printf("%s\n",p->name);
	}
}
double pingjun(struct student *head)
{
	double x=0,a=0;
	struct student *p;
	for(p=head;p!=NULL;p=p->next,a++)
	{
		x+=p->gpa;
	}
	x=x/a;
	return x;
}

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Java2实用教程 rar 第1章Java入门 1 1Java的诞生 1 2Java的特点 1 3安装Sun公司的SDK 1 4一个Java程序的开发过程 1 5一个简单的Java应用程序的开发过程 1 6一个简单的Java小应用程序 1 7什么是JSP 习题 第2章标识符 关键字和数据类型 2 1标识符和关键字 2 2Java的基本数据类型 2 3Java的数组 习题 第3章运算符 表达式和语句 3 1运算符与表达式 3 2语句概述 3 3控制语句 3 4 循环语句 3 5break和continue语句 习题 第4章类 对象和接口 4 1编程语言的几个发展阶段 4 1 1机器语言 4 1 2过程语言 4 1 3面向对象编程 4 2类 4 2 1类声明 4 2 2类体 4 2 3成员变量和局部变量 4 2 4方法 4 2 5方法重载 4 2 6构造方法 4 2 7类方法和实例方法 4 2 8值得注意的问题 4 3对象 4 3 1创建对象 4 3 2使用对象 4 3 3于象的引用和实体 4 3 4参数传值 4 4static关键字 4 4 1实例变量和类变量的区别 4 4 2实例方法和类方法的区别 4 5this关键字 4 6包 4 6 1包语句 4 6 2import语句 4 6 3将类打包 4 7访问权限 4 7 1私有变量和私有方法 4 7 2共有变量和共有方法 4 7 3友好变量和友好方法 4 7 4受保护的成员变量和方法 4 7 5public类与友好类 4 8类的继承 4 8 1子类 4 8 2子类的继承性 4 8 3成员变量的隐藏和方法的重写 4 8 4final关键字 4 9对象的上转型对象 4 10多态性 4 11abstract类和abstract方法 4 12super关键字 4 13接口 4 13 1接口的声明与使用 4 13 2理解接口 4 13 3接口回调 4 13 4接口做参数 4 14内部类 4 15匿名类 4 15 1和类有关的匿名类 4 15 2和接口有关的匿名类 4 16异常类 4 16 1try catch语句 4 16 2自定义异常类 4 17Class类 4 17 1获取类的有关信息 4 17 2使用Class实例化一个对象 4 18基本类型的类包装 4 18 1Double类和Float类 4 18 2Byte Integer Short 工 ong类 4 18 3Character类 4 19反编译和文档生成器 4 20JAR文件 4 20 1将应用程序压缩为JAR文件 4 20 2将类压缩成JAR文件 4 20 3更新 查看JAR文件 习题 第5章字符串 5 1字符串 5 2字符串的常用方法 5 3字符串与基本数据的相互转化 5 4对象的字符串表示 5 5StringTokenizer类 5 6字符串与字符 字节数组 5 7StringBuffer类 5 8正则表达式 习题 第6章时间 日期和数字 6 1Date类 6 2Calendar类 6 3Math类 6 4BigInteger类 习题 第7章AWT组件及事件处理 7 1Java窗口 7 1 1 Frame常用方法 7 1 2菜单条 菜单 菜单项 7 1 3窗口与屏幕 7 2文本框 7 2 1TextField类的主要方法 7 2 2文本框上的ActionEvent事件 7 3内部类实例做监视器 7 4按钮与标签 7 4 1标签组件 7 4 2按钮组件 7 5菜单项 7 6文本区 7 6 1TextArea类主要方法 7 6 2文本区上的TextEvent事件 7 7面板 7 7 1Panel类 7 7 2ScrollPane类 7 8布局 7 8 1FlowLayout布局 7 8 2BorderLayout布局 7 8 3CardLayout布局 7 8 4GridLayout布局 7 8 5BoxLayout布局 7 8 6null布局 7 9画布 7 10选择型组件 7 10 1选择框 7 10 2下拉列表 7 10 3滚动列表 7 11Component类的常用方法 7 12窗口事件 7 13鼠标事件 7 14焦点事件 7 15键盘事件 7 16使用剪贴板 7 17打印 7 18综合实例 习题 第8章建立对话框 8 1Dialog类 8 2文件对话框 8 3消息对话框 8 4确认对话框 8 5颜色对话框 习题 第9章Java多线程机制 9 1Java中的线程 9 2Thread类的子类创建线程 9 3使用Runnable接口 9 4线程的常用方法 9 5GUI线程 9 6线程同步 9 7在同步方法中使用wait notif 和nodf3 All 方法 9 8挂起 恢复和终止线程 9 9计时器线程Timer 9 10线程联合 9 11守护线程 习题 第10章输入输出流 10 1File类 10 2FileInputStream类 10 3FileOutputStream类 10 4FileReader类和FileWriter类 10 5使用文件对话框打开和保存文件 10 6RandornAccessFile类 10 7数据流 10 8数组流 10 9对象流 10 10序列化与对象克隆 10 11文件锁FileLock 10 12Process类中的流 10 13带进度条的输入流 习题 第11章Java网络的基本知识 11 1使用URL 11 2读取URL中的资源 11 3显示URL资源中的HTML文件 11 4处理超链接 11 5InetAdress类 11 6套接字 11 7网络中的数据压缩与传输 11 8UDP数据报 11 9广播数据报 习题 第12章JavaApplet基础 12 1JavaApplet的运行原理 12 2网页向JavaApplet传值 12 3JavaApplet扣使用URL 12 4JavaApplet中建立新线程 12 5JavaApplet中使用套接字 习题 第13章常见数据结构的Java实现 13 1链表 13 2栈 13 3树集 13 4树映射 13 5散列集 13 6散列表 13 7向量 习题 第14章图形与图像 14 1绘制文本 14 2绘制基本图形 14 3建立字体 14 4清除 14 5Java2D 14 6图形的布尔运算 14 7绘制钟表 14 8绘制图像 14 9制作JPG图像 14 10XOR绘图模式 14 11打印图形 图像 习题 第15章Java数据库连接 JDBC 15 1创建数据源 15 2JDBC ODBC桥接器 l5 3顺序查询 15 4可滚动结果集 15 5排序查询 15 6模糊查询 15 7随机查询 15 8更新 添加 删除记录 l5 9预处理语句 15 10数据库访问中的套接字技术 习题 第16章Java与多媒体 16 1在小程序中播放音频 16 2在另一个线程中创建音频对象 16 3在应用程序中播放音频 16 4Java媒体框架 JMF 习题 第17章JavaSwing基础 17 1几个重要的类 17 2中间容器 17 3各种组件 习题">Java2实用教程 rar 第1章Java入门 1 1Java的诞生 1 2Java的特点 1 3安装Sun公司的SDK 1 4一个Java程序的开发过程 1 5一个简单的Java应用程序的开发过程 1 6一个简单的Java小应用程序 1 7什么是JSP 习题 第2章标识符 关键字和数据类型 2 1标识 [更多]
AIC的学费很贵,半年18000元,大家看看他们教些什么内容吧他们学校的网址http://www.aicsws-sjtu.com/此内容是Java第1到第六章的PPT,希望大家喜欢如果大家觉得好我继续发课程定位“Java程序”课程覆盖SCJP认证所要求的知识点,是J2EE课程体系中的基础课程。本课程面向的学员应该具有基本的编程概念,能够编写简单的程序,并学习过操作系统,数据结构等计算机理论知识。课程选用最新的JDK5.0版本作为开发平台,教学的宗旨是:激发兴趣,理解知识,树立面向对象编程思维。  课程目标 认识Java平台,了解java application和applet的开发,激发学员对Java编程语言的兴趣。 学习和掌握Java变量,运算符,控制结构,数组,方法等基本语法。 培养和建立面向对象编程的思维方式,可以运用封装、继承和多态三大基本特性编写面向对象的程序。 理解和应用Java异常,常用类,IO,集合和多线程等开发技术。 课时安排 总学时:52学时 授课:48学时 (含约20学时实验) 考试:4学时 预备知识 了解和使用操作系统,计算机的基本组成,简单的程序开发技术 参考教材 “Java 程序设计教程” 第5 版 清华大学出版社 “SCJP学习指南” 人民邮电出版社 “Java 编程思想” 第3版 机械工业出版社 教学内容和要求知识点 重要程度 使用频度 难度Java 入门 高 中 易变量和运算符 高 高 中控制结构 高 高 易数组 高 高 中方法 很高 高 中封装 很高 很高 难继承 很高 很高 难多态 很高 高 很难内部类 高 中 难异常和断言 高 高 难常用类 高 很高 中基本数据结构 高 很高 难集合 很高 很高 难IO和串行化 高 中 难知识点 重要程度 使用频度 难度第1章 Java入门 4课时 了解Java程序开发环境,理解JVM的运作机制。 初步认识面向对象编程,Java视一切为对象。 使用输入和输出语句编写简单的Java应用程序。 区分applet与application(浏览器和虚拟机上运行)。 编写简单的applet,并嵌入HTML文档,掌握其运行方法。 掌握编程规范,如命名,缩进,空格,空行等。 使用javac, java, appletviewer等命令编译和运行application和applet。第2章 面向过程(变量和控制结构) 4课时 掌握变量的内存概念,8种基本类型,字面值和赋值。 正确使用各种Java运算符,如一元运算符,算术运算符,关系运算符,逻辑运算符,条件运算符和赋值运算符等。 辨别使用if,if…else,switch选择结构执行不同的动作。 辨别使用while,for,do…while循环结构执行不同的动作。 使用程序控制语句break和continue。 使用基本类型的包装器类,理解装箱和拆箱。 [*]了解Java内存机制:栈、堆、常量池等,理解垃圾回收机制。第3章 面向过程(数组和方法) 4课时 理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。 清楚数组作为对象处理,创建数组对象时指定数组大小。 能够声明和操作多维数组。 掌握定义方法(声明方法)和调用方法,通过参数和返回值传递数据。 理解实际参数与形式参数以及参数类型的提升(隐式转型)。 掌握方法重载(overload)的基本要求。 区别和掌握按值传递与按引用传递。第4章 面向对象(封装) 4课时 理解类封装属性(数据成员)和行为(方法成员),区别类和对象。 能够定义类,创建类的对象(实例化类)和通过对象引用访问数据成员和方法成员;形成定义类和使用类的两种不同的思维方式。 理解构造函数的作用(分配对象空间),理解和定义重载的构造函数。 明白this引用的两种用法。 弄清对象类型与基本类型的区别。 掌握private, public访问控制符。 理解和使用关
好的,以下是使用C语言并使用链表头插法实现的简单贪吃蛇代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define WIDTH 40 #define HEIGHT 20 enum DIRECTION { STOP = 0, LEFT, RIGHT, UP, DOWN }; typedef struct Node { int x; int y; struct Node* next; } Node; Node* head = NULL; Node* tail = NULL; int fruitX, fruitY; enum DIRECTION dir; int score; int gameover; void init_snake() { head = (Node*)malloc(sizeof(Node)); head->x = WIDTH / 2; head->y = HEIGHT / 2; head->next = NULL; tail = head; dir = STOP; score = 0; gameover = 0; } void print_board() { system("cls"); printf("Score: %d\n", score); for (int i = 0; i <= WIDTH + 1; i++) printf("#"); printf("\n"); for (int i = 0; i < HEIGHT; i++) { printf("#"); for (int j = 0; j < WIDTH; j++) { if (j == head->x && i == head->y) printf("O"); else if (j == fruitX && i == fruitY) printf("F"); else { Node* p = head->next; int printed = 0; while (p) { if (j == p->x && i == p->y) { printf("o"); printed = 1; break; } p = p->next; } if (!printed) printf(" "); } } printf("#\n"); } for (int i = 0; i <= WIDTH + 1; i++) printf("#"); printf("\n"); } void generate_fruit() { srand(time(NULL)); fruitX = rand() % WIDTH; fruitY = rand() % HEIGHT; } void add_node(int x, int y) { Node* new_node = (Node*)malloc(sizeof(Node)); new_node->x = x; new_node->y = y; new_node->next = head; head = new_node; } void remove_tail() { Node* p = head; while (p->next != tail) p = p->next; p->next = NULL; free(tail); tail = p; } void input() { if (_kbhit()) { switch (_getch()) { case 'a': if (dir != RIGHT) dir = LEFT; break; case 'd': if (dir != LEFT) dir = RIGHT; break; case 'w': if (dir != DOWN) dir = UP; break; case 's': if (dir != UP) dir = DOWN; break; case 'x': gameover = 1; break; } } } void logic() { // update snake position switch (dir) { case LEFT: add_node(head->x - 1, head->y); break; case RIGHT: add_node(head->x + 1, head->y); break; case UP: add_node(head->x, head->y - 1); break; case DOWN: add_node(head->x, head->y + 1); break; } // check if snake hits the wall or itself if (head->x < 0 || head->x >= WIDTH || head->y < 0 || head->y >= HEIGHT) { gameover = 1; return; } Node* p = head->next; while (p) { if (head->x == p->x && head->y == p->y) { gameover = 1; return; } p = p->next; } // check if snake eats the fruit if (head->x == fruitX && head->y == fruitY) { generate_fruit(); score++; } else { remove_tail(); } } int main() { init_snake(); generate_fruit(); while (!gameover) { print_board(); input(); logic(); } printf("Game Over! Your final score is %d.\n", score); return 0; } ``` 这个代码示例使用了链表头插法来维护贪吃蛇的身体,实现了基本的游戏逻辑。然而,这个代码示例还有很多可以改进和优化的地方,比如添加更多的游戏元素和难度级别,使用更复杂的算法来控制贪吃蛇的移动等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值