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

2023-10-30

 

 一.目的

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语言的掌握程度有所提高,特别是对指针的理解和使用更加熟练了,同时也认识到仍有很多不足,需要日后的不断练习来提高自己的编程能力

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 配置 Nginx 错误和访问日志

    Nginx 是一个开源的 高性能的 HTTP 和反向代理服务器负责处理互联网上一些最大网站的负载 管理时NGINX对于 Web 服务器 您将执行的最常见的任务之一是检查日志文件 了解如何配置和读取日志在排除服务器或应用程序问题时非常有用 因

随机推荐

  • 如何在 Debian 10 Linux 上安装 VirtualBox 来宾添加

    虚拟盒子是一款开源 跨平台虚拟化软件 允许您同时运行多个来宾操作系统 虚拟机 VirtualBox 提供了一组可以安装在来宾操作系统中的驱动程序和应用程序 VirtualBox Guest Additions 来宾添加为来宾计算机提供了多种
  • 【JS 逆向百例】百度翻译接口参数逆向

    文章目录 逆向目标 逆向过程 抓包分析 获取 token 获取 sign 完整代码 baidu encrypt js baidufanyi py 逆向目标 目标 百度翻译接口参数 主页 https fanyi youdao com 接口 h
  • 查看: 1280

    查看 1280 回复 0 电容三点式LC振荡器电路组成及工作原理简述 复制链接 husk2012 95 主题 0 听众 3189 积分 VIP会员 收听TA 发消息 电梯直达
  • line-height:1是什么意思

    line height 1是什么意思 其实仍旧是设置行高的一种方法 只不过简化了语句 举个例子 比如此时你设置了font size 20px 之后你设置了line height 1 转义过来的意思就是line height 20px 行高为
  • 傻瓜式-根据自定义规则编码生成

    private final ReentrantLock lock new ReentrantLock public Result addProvider Provider proNew new Provider try lock lock
  • c语言ox是什么意思啊,ox什么意思

    营销树今天精心准备的是 ox什么意思 下面是详解 OX是什么意思 OX是无色透明的化学液体邻二甲苯的英文简写 OX作为英文单词是可数名词 基本含义是牛 读音为 英 ks 美 ks 复数 oxen 同义词 wild ox 例句They are
  • 福大计算机学硕扩招,福州大学2021年推免数据,快来了解这所211大学的保研情况!...

    福州大学是省部共建高校 是 双一流 建设高校 是 211工程 建设高校 学校现有1个国家重点实验室 8个国家级工程研究中心 3个国家国际科技合作基地 3个教育部重点实验室 有11个博士后科研流动站 11个一级学科博士点 2021年推荐优秀应
  • Arthas开源一周年,Github Star 160K,我们一直在坚持什么?

    缘起 最近看到一个很流行的标题 开源XX年 star XXX 我是如何坚持的 看到这样的标题 忽然发觉Arthas从2018年9月开源以来 刚好一年了 正好在这个秋高气爽的时节做下总结和回顾 Arthas Arthas是Alibaba开源的
  • WSL2创建多实例--发行版管理工具wsl2distromanager使用

    简介 wsl2 distro manager是github上的一款WSL的开源实例管理工具 它具有GUI界面 是目前我发现的比较方便的管理工具 项目地址如下 https github com bostrot wsl2 distro mana
  • 氮化镓 服务器电源管理系统报价,基于氮化镓的电源解决方案总体拥有成本评估...

    引言 近年来 电信市场正在朝云计算的方向转变 这导致超大规模数据中心空前快速的增长 而每个机架需要处理的功能也越来越多 反过来 这种趋势也意味着对功率的需求快速增加 而重点则是采用消耗更少电力的更高效 体积更紧凑的电源 散热同样是这里需要考
  • 信息安全保障体系规划方案

    本文转载自公众号爱方案 ID ifangan 本文内容为信息安全技术体系 运维体系 管理体系的评估和规划 是信息安全保障体系的主体 一 概述 1 1引言 本文基于对XX公司信息安全风险评估总体规划的分析 提出XX公司信息安全技术工作的总体规
  • C语言实战例题:必会的 10 个C语言经典练习题,源码分享

    这些都是基本的 C 程序 可以帮助刚踏入 C 编程世界的新手 快来试试吧 1 C 语言编程 Hello World include
  • 虚拟服务器磁盘 厚置备置零,VMware ESXi 虚拟硬盘格式记录:厚置备延迟置零、厚置备置零、精简置备...

    创建磁盘时 会进行两个操作 分配空间 置零 1 厚置备延迟置零 默认的创建格式 创建磁盘时 直接从磁盘分配空间 但对磁盘保留数据不置零 所以当有I O操作时 只需要做置零的操作 磁盘性能较好 时间短 适合于做池模式的虚拟桌面 2 厚置备置零
  • 微信小程序授权登录流程

    自我介绍 我是IT果果日记 微信公众号请搜索 IT果果日记 一个普通的技术宅 定期分享技术文章 欢迎点赞 关注和转发 请多关照 首先 我们要了解什么是微信小程序登录 它的作用是什么 用户登录 微信小程序登录是为了让开发者的服务器获取用户的o
  • MySQL主从复制实现读写分离

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 读写分离 1 1 多台数据库 1 2 MySQL
  • Java集合框架图析(Collection-List)

    Java集合框架图析 Collection List 前言 Java 集合 也称作容器 主要是由两大接口 Interface 派生出来的 Collection 和 Map 顾名思义 容器就是用来存放数据的 那么这两大接口的不同之处在于 Co
  • Android 指纹识别(给应用添加指纹解锁)

    使用指纹 说明 指纹解锁在23 的时候 官方就已经给出了api 但是由于Android市场复杂 无法形成统一 硬件由不同的厂商开发 导致相同版本的软件系统 搭载的硬件千变万化 导致由的机型不支持指纹识别 但是 这也挡不住指纹识别在接下来的时
  • nmake编译Qt第三方库出现无法打开包含文件type_traits

    最近需要为个人项目ShaderLab添加内嵌的代码编辑窗口功能 支持语法高亮和Intellisense 最初使用了QCodeEditor 发现这个第三方的库对词法分析的实现效果不太行 代码换行后直接缩进到首行 无法定位到前一句的首行 考虑换
  • c++ 学习之 构造函数的使用

    上代码 class person public person cout lt lt person 的无参默认构造函数 lt lt endl person int age cout lt lt person 的有参默认构造函数 lt lt e
  • 程序设计综合实习(C语言):用指针优化学生成绩排名

    一 目的 1 熟悉变量的指针和指向变量的的指针变量的概念和使用 2 熟悉数组的指针和指向数组的的指针变量的概念和使用 3 掌握冒泡法或选择法排序的算法 4 掌握函数的定义 调用 声明 以及参数的两种传递方式 二 实习环境 Visual St