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

news/2024/10/27 22:23:12/

 

 一.目的

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.ppmy.cn/news/154143.html

相关文章

Shell脚本数组应用(查增改删)

记录&#xff1a;438 场景&#xff1a;Shell脚本数组应用&#xff0c;数组定义、数组查询、数组增加、数组修改、数组删除。 版本&#xff1a;CentOS Linux release 7.9.2009。 1.Shell脚本数组 (1)Shell脚本中使用小括号()来表示数组、元素之间使用空格分隔。赋值号“”的…

SpringCloud GateWay 学习

SpringCloud GateWay 文章目录 SpringCloud GateWay1 Gateway 介绍2 代码实现 1 Gateway 介绍 有一个前后端分离项目&#xff0c;分析如图 使用网关服务Gateway&#xff0c;重构项目架构 Gateway 是在 Spring 生态系统之上构建的 API 网关服务&#xff0c;基于 Spring &#x…

首款国产全画幅8K50P广播级摄像机

近日&#xff0c;在2021中国网络媒体论坛央视总台展位上首次曝光博冠8K全新的广播级摄像机,其搭载了最新的35mm全画幅8K CMOS图像传感器,约4800万有效像素(8192 x 4320)支持H.265,10-bit格式拍摄的8K 50fps视频,,双原生ISO感光技术(ISO:640-2560),使视频拍摄时获取更宽的感光范…

aps和php撒意思?,aps-c画幅是什么意思

aps-c画幅是指数码相机的CCD(CMOS)的尺寸与APS的C型画幅大小相仿&#xff0c;在25mmX17mm左右&#xff1b;差不多是全画幅CCD(CMOS)面积的一半&#xff0c;也称半幅机。 本文演示环境&#xff1a;Windows7系统&#xff0c;Dell G3电脑 APS-C画幅意思&#xff1a;APS-C画幅指的就…

天津哪个相机行卖单反最好

天津金典相机行 &#xff0c;专业销售&#xff0c;收购&#xff0c;回收单反相机&#xff0c;为您提供优质的服务&#xff0c;我们同时在蜂鸟、佳友、色影无忌、淘宝、中国摄影网络等网站上均开设了网上商店,欢迎广大摄影爱好者在我们的网上商店交、购买、出售、租赁、交换喜爱…

国产博冠8K全画幅摄像机B1获ISLE创新奖

4月7日-9日&#xff0c;2023国际智慧显示及系统集成展&#xff08;ISLE&#xff09;与第11届中国电子信息博览会&#xff08;CITE&#xff09;在深同步盛大开启。BOSMA博冠8K作为国产8K摄像机先行者&#xff0c;受邀参与&#xff0c;并携2大产品系列及场景解决方案亮相&#xf…

摄影基础之【**相机画幅、人眼视角范围**】

摄影基础之【相机画幅、人眼视角范围】 [来源于网络] 1.画幅 画幅指单反相机CCD感光器面积的大小&#xff0c;由大至小分大画幅、中画幅、全画幅、APS-C画幅、APS画幅等。 详见http://www.360doc.com/content/13/0226/13/8146789_267994474.shtml 2.人眼视角范围 视角是指人…