程序设计综合实习(C语言):用指针优化学生成绩排名

news2024/11/25 13:48:15

 

 一.目的

1.熟悉变量的指针和指向变量的的指针变量的概念和使用

2.熟悉数组的指针和指向数组的的指针变量的概念和使用

3. 掌握冒泡法或选择法排序的算法

4. 掌握函数的定义、调用、声明,以及参数的两种传递方式

二、实习环境

    Visual Studio 2022

三.实习内容与步骤

1.定义一个数组stu[10]存放10个学生的成绩,从键盘输入数据,要求用指针实现

2.将数组stu[10]的内容输出到屏幕上,要求用指针实现

3.将成绩数组按照从高到低进行排序,要求用指针实现

4.将第三步内容放在函数中实现,在主函数中调用实现排序,用指针实现,输出排序后的成绩单

5. 采用指针方法,输入字符串“student score ”,复制该字符串并输出(复制字符串采用库函数或用户自定义函数)

      6.在实习报告中画出程序流程图,说明程序设计的算法,附主要程序段及运行结果(屏幕截图)。

      7. 在实习报告中说明知识点。

      8.在实习报告中说明程序设计过程中的难点、解决办法及编程小结或体会。

四.程序流程图、算法及运行结果

程序流程图

算法描述

1.声明变量stu、p、q、r、s、i、j、temp;

2.输入10个学生的成绩,将结果存放到stu数组中;

3.输出stu数组内容;

4.对stu数组降序排序,使用双重循环,外层循环控制每一轮比较的起始位置,内层循环控制比较过程:

i.将p指针指向当前起始位置,将q指针指向p位置之后的第一个数;

ii.比较p和q位置的数,如果*p<*q,则交换p和q指向的数;

iii.然后将q指针后移一位,重复上述操作直到q指针到达数组末尾;

iv.最后将p指针后移一位,继续进行下一轮比较;

5.输出stu数组内容;

6.输入一行字符串,使用fgets函数读入字符串并存放到s数组中;

7.将s数组中的字符串复制到r数组中;

8.输出字符串数组s中的内容;

9.结束程序。

程序代码

#include<stdio.h>
#include<string.h>
//用于交换两个数的函数
void swap(int* p, int* q)
{
	int temp;
	temp = *p;
	*p = *q;
	*q = temp;
}
int main()
{
	int stu[10];
	int* p, * q;
	char* r;
	char s[100];
	int i, j;
	int temp;
	printf("输入10个学生的成绩:\n");
	for (p = stu; p < stu + 10; p++) scanf("%d", p);//存放10个学生的成绩
	printf("输出10个学生的成绩:\n");
	for (p = stu; p < stu + 10; p++) printf("%d ", *p);//将内容输出到屏幕上
	for (p = stu; p < stu + 9; p++) {
		for (q = p + 1; q < stu + 10; q++) {
			if (*p < *q) {
				/*temp = *p;
				*p = *q;
				*q = temp;*/
				swap(p, q);//交换两个数
			}
		}
	}
	printf("\n降序输出10个学生的成绩:\n");
	for (p = stu; p < stu + 10; p++) printf("%d ", *p);//将内容降序输出到屏幕上
	r = s;
	printf("\n输入字符串:\n");
	getchar();//吸收输入缓冲区中的换行符
	fgets(r,100,stdin);//输入字符串
	strcpy(s, r);//复制字符串
	printf("输出字符串:\n");
	printf("%s\n", s);//输出字符串
	return 0;
}

运行结果 

五、知识点、难点及解决办法。

知识点

1.指针的使用:通过指针变量p和q存储和访问数组stu中的数据,分别实现遍历和交换操作。

2.函数定义和调用:程序中自定义一个swap函数,用于交换两个整数,然后在排序过程中多次调用该函数。

3.数组和循环结构:程序定义了一个长度为10的int类型数组stu,存储了10个学生的成绩,并利用双层for循环实现了选择排序算法,将数组元素按降序排序。

4.字符串的输入输出:程序使用fgets函数从标准输入流中获取一行字符串,并使用strcpy函数将获取到的字符串内容赋值给另一个字符数组s,最后将这个字符串输出

5.用char型指针访问字符串,指针指向字符串的首字符

难点及解决办法

1.scanf输入字符串遇到空格就会停止输入,所以改用fgets输入一行

2.在用fgets输入字符串前,缓冲区中有换行符,导致fgets遇到这个换行符会停止输入,所以用getchar()吸收换行符

3.在输入字符串到char型指针r前,应该先给指针赋值

六、编程小结或体会。

总的来说,该程序代码的是实现还是比较简单的,不过有一些细节还是要注意的,比如getchar()吸收换行符,在输入字符串到char型指针前要先给指针赋值,还有自定义函数swap传的是地址而不是值。程序涉及的知识点都是比较基础的,熟练掌握这些知识点对于编写和调试程序都非常重要。通过编写这个程序,我感觉自己对c语言的掌握程度有所提高,特别是对指针的理解和使用更加熟练了,同时也认识到仍有很多不足,需要日后的不断练习来提高自己的编程能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模拟集成电路设计-MOS器件物理基础(模集系列持续更新)

学习目的 欠缺的学习路径&#xff1a; 固体物理&#xff0c;半导体器件物理&#xff0c;器件模型&#xff0c;电路设计。所有的半导体器件都看成一个黑盒子&#xff0c;只关注端电压电流。 最佳的学习路径&#xff1a;两手抓&#xff0c;因为有些二阶效应会影响到电路本身. 本…

Vector-常用CAN工具 - 以太网工程更换环境无法打开解决

通常来说每个VN5000都有自己本身的以太网硬件网络配置&#xff0c;因此当我们打开别人的以太网CANoe工程或CANape工程的时候&#xff0c;无法进行正常的功能使用或者log的无法正常的显示&#xff0c;那我们该如何处理呢&#xff1f;这种情况常见的有以下2种可能&#xff1a; 1、…

数据的表示与运算

目录 一、进位计数制 二、信息编码 三、定点数数据表示 四、校验码 五、定点数补码加减运算 六、标志位的生成 七、定点数的移位运算 八、定点数的乘除运算 九、浮点数的表示 十、浮点数的运算 一、进位计数制 整数部分&#xff1a; 二进制、八进制、十六进制 --…

机器人模型预测控制MPC(model predictive control)

当前控制动作是在每一个采样瞬间通过求解一个有限时域开环最优控制问题而获得。过程的当前状态作为最优控制问题的初始状态&#xff0c;解得的最优控制序列只实施第一个控制作用。这是它与那些使用预先计算控制律的算法的最大不同。本质上模型预测控制求解一个开环最优控制问题…

使用APIPOST 进行压力测试

使用APIPOST 进行压力测试 目录概述需求&#xff1a; 设计思路实现思路分析1.apipost 压力测试 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for c…

​【指针和数组区别与理解】超万字

指针和数组的关系 指针指的是指针变量&#xff0c;不是数组&#xff0c;指针变量的大小是4/8个字节&#xff0c;是专门来存放地址的。数组也不是指针&#xff0c;数组是一块连续的空间&#xff0c;存放一组相同类型的数据的。 没有关系&#xff0c;但是它们之间有比较相似的地方…

代理模式的学习与使用

1、代理模式的学习 代理模式是一种结构型设计模式&#xff0c;它允许你提供一个代理对象&#xff0c;该对象可以控制对其他对象的访问。代理模式通过在代理对象和实际对象之间添加一个中间层&#xff0c;使得代理对象可以代表实际对象执行某些操作&#xff0c;从而实现对实际对…

ARM-系统移植(开发环境搭建)

基于STM32MP157单片机 一、安装tftp服务器 首先保证ubuntu连接网络成功 1. 安装步骤 作用&#xff1a;完成ubuntu和开发板之间传输文件 1&#xff09;安装tftp服务器的安装包 sudo apt-get install tftpd-hpa tftp-hpa tftpd-hpa : 服务器端 tftp-hpa : 客户端 2&#x…

Docker Desktop 如何运行容器

第一次使用windows环境下的DockerDesktop记录下使用方法 1、配置镜像源&#xff0c;虽然配置了镜像源&#xff0c;但是在界面你还是搜索不到镜像&#xff0c;应该默认使用的是官方dockerhub的原因&#xff0c;后面可以手动创建避开这个问题。 2、运行系统的windows powershell…

使用yolov5实现图像识别

文章目录 开始之前下载依赖下载数据集标记数据集整理文件新建 yaml 文件开始训练模型选择训练完成使用模型进行识别自定义模型下载数据集下载地址分享问题 开始之前 你应当先克隆这个仓库 git clone https://github.com/ultralytics/yolov5 # clone下载完毕后&#xff0c;进入…

【轻量化网络系列(5)】ShuffleNetV2论文超详细解读(翻译 +学习笔记+代码实现)

前言 今天我们要讲的是ShuffleNetV2&#xff0c;它是由旷视科技团队在 2018 年提出的&#xff0c;原论文发表在ECCV上。在同等复杂度下&#xff0c;ShuffleNetV2比ShuffleNet和MobileNetv2更准确。这篇论文除了提出这个全新的轻量化网络结构以外&#xff0c;还创新性地提出四…

redis第二章-第二课-主从模式和哨兵模式原理

主从模式 1、复制一份redis.conf&#xff0c;命名为redis-6380.conf文件 2、修改该文件&#xff0c;修改端口号&#xff0c;线程文件&#xff0c;日志文件&#xff0c;以及指定文件存放目录 3.在从节点上配置&#xff0c;这是核心配置 从本机6379的redis实例复制数据 replica…

如何准备一场面试

目录 一、心理准备1、内心的答案2、表述的答案 二、简历准备三、知识准备&面试流程1、一面&#xff1a;技术面2、二面&#xff1a;BOSS面3、终面&#xff1a;HR面 四、面试的技巧有哪些1、自信2、真诚3、主动4、复盘 五、补充&#xff1a;其他面试内容1、逻辑思维2、技术开…

圆柱点云展开为平面点云

文章目录 简单计算图示目标&#xff1a;将圆柱点云展开为平面点云用途&#xff08;目前想到的&#xff09;思路&#xff1a;本文展开思路关键点 简单计算图示 目标&#xff1a;将圆柱点云展开为平面点云 注意&#xff1a;工业实际场景中只能获取可见区域的圆柱侧面&#xff0c…

CC2530+ESP8266与手机APP通信

一、案例介绍 下面是一个基于CC2530和ESP8266的项目示例,演示了如何使用CC2530与ESP8266通信以及使用AT指令控制其WiFi模块设置和数据传输。 项目概述: 通过CC2530控制ESP8266将其配置成AP+TCP服务器模式,并通过手机APP连接到TCP服务器并完成数据传输。ESP8266将作为一个热…

基于Nginx部署的LNMP及搭建论坛

文章目录 1.部署LNMPLNMP架构拓扑图1.安装Nginx服务&#x1f60a;2.安装MySQL服务&#x1f923;3.安装配置PHP解析环境&#x1f602; 2.部署Discuz社区论坛Web应用3. 部署WordPress社区论坛Web应用4. fpm参数优化 1.部署LNMP LNMP架构拓扑图 1.安装Nginx服务&#x1f60a; ##…

DPDK相关开源代码汇总

上篇《DPDK相关学习资料汇总》中&#xff0c;我们讲了学习DPDK的相关资料&#xff0c;今天我们来讲一下DPDK相关的开源代码。 1、suricata Suricata引擎能够进行实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理。是一款开源、快速、高度稳定的网络入…

【Python wxPython】零基础也能轻松掌握的学习路线与参考资料

wxPython是一个基于wxWidgets C类库的Python GUI框架&#xff0c;使用它可以轻松创建跨平台的可视化应用程序。此外&#xff0c;wxPython与Python语言天然融合&#xff0c;让Python程序员可以轻松使用Python编写图形界面程序。因此&#xff0c;学习wxPython实际上就是学习如何用…

基本思维方式

经济学定义 人的欲望是无止境的&#xff0c;而资源有限&#xff0c;这是一个矛盾。 经济学是研究个人和社会如何最优利用由自然和前人提供的有限资源的学问。 经济学的范围 Microeconomics 微观经济学 研究各个行业的运作的以及企业和个人的决策行为的经济学分支。Macroeco…

BTC API:如何在比特币网络上创建应用程序?

比特币是一种去中心化的数字货币&#xff0c;可以通过比特币API与比特币网络进行交互。比特币API是一组允许开发人员与比特币网络进行交互的编程接口&#xff0c;可以帮助开发者构建各种比特币应用程序。 比特币API可以用于创建区块浏览器、钱包和比特币支付。其中利用比特币A…