实验八指针
- 格式:doc
- 大小:134.00 KB
- 文档页数:5
第1篇一、实验目的1. 理解指针在排序算法中的应用。
2. 掌握几种常见的排序算法(如冒泡排序、选择排序、插入排序等)的指针实现方式。
3. 比较不同排序算法的效率,分析其优缺点。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容本次实验主要实现了以下排序算法:1. 冒泡排序2. 选择排序3. 插入排序以下是对每种排序算法的具体实现和性能分析。
1. 冒泡排序(1)算法原理冒泡排序是一种简单的排序算法。
它重复地遍历待排序的序列,比较每对相邻的元素,如果它们的顺序错误就把它们交换过来。
遍历序列的工作是重复地进行,直到没有再需要交换的元素为止。
(2)指针实现```cppvoid bubbleSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - 1 - i; j++) {if ((arr + j) > (arr + j + 1)) {int temp = (arr + j);(arr + j) = (arr + j + 1);(arr + j + 1) = temp;}}}}```(3)性能分析冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。
当待排序序列基本有序时,冒泡排序的性能较好。
2. 选择排序(1)算法原理选择排序是一种简单直观的排序算法。
它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
(2)指针实现```cppvoid selectionSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {int minIndex = i;for (int j = i + 1; j < len; j++) {if ((arr + j) < (arr + minIndex)) {minIndex = j;}}int temp = (arr + i);(arr + i) = (arr + minIndex);(arr + minIndex) = temp;}}```(3)性能分析选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。
实验八子程序实验一、实验目的1、掌握全局、局部变量的定义与作用;2、熟悉无参子程序和有参子程序的建立和调用方法3、进一步熟悉常用功能指令(加、减、数据类型转换、循环等(另:自学内容已经布置:数学运算指令和数据转换指令)二、实验设备TKPLC-1实验实训装置一台,装有STEP7软件的计算机一台,西门子编程电缆一根、连接导线若干。
三、实验内容与步骤1、不带参数子程序调用例子:设置存储器位或字节的几种方法(注意符号的定义与使用,其它功能指令的学习包含在子程序和中断程序实验中。
下同)本程序描述了用一定值存入预定的存储器位或字节,以及清除存储区内容的几种方法采用下列指令:FILL 设置一个或几个字FOR...NEXT FOR...NEXT循环R 对一位或几位置0输入以下子程序和主程序,注意体会各指令作用及符号的使用。
子程序0功能:如果输入I0.0=1,则把VW200中值复制到VW204至VW216子程序1功能:当输入I0.1=1时,把几个初始数复制到变量存储区。
循环次数取决于VW10中的首次循环数和VW0中的最后一次循环数。
当前循环次数存储在内存字VW20中,首次计数值(50)存储在累加器AC0中,计数值缓冲区首址(& VB100)存储在累加器AC1中,AC1为计数值缓冲区指针,每循环一次的功能:AC0的计数值存入AC1指针所指向的内存单元,AC1指针加2个字节,指向下一个内存字,AC0的计数值加4,直至最后一次循环。
子程序2的功能,使V100.0开始的176个位复位,V204.0开始的112个位复位。
2、带参数子程序的调用例子:求变量区和。
局部变量设置表:子程序功能:求VW100开始的10个数据字的和。
先将整形数转为双整型数,再加,指针值每次增2,循环10次。
注意体会各指令作用。
提醒:欲间接存取字节,将指针用一递增或递减。
欲间接存取字,将指针用二递增或递减。
欲间接存取双字,将指针用四递增或递减。
四《C语言程序设计》实验四选择结构程序设计一、实验目的1、掌握分支语句的格式和功能。
2、掌握选择结构的程序设计。
3、掌握分支结构的嵌套。
二、实验内容与要求1、编程,计算下列分段函数值:x2+3x-4,x<0且x≠-4f(x)= x2-6x+5,0=x<10且x≠1及x≠5x2-4x-1,其他要求如下:(1)用if语句实现分支。
自变量x与函数值均采用双精度类型。
(2)自变量x值从键盘输入,且输入前要有提示信息。
(3)数据的输出格式采用以下形式:x=输入值,f(x)=计算值(4)分别以-3.0,-1.0,0.5,1.5,2.5,3.5,4.5,5.5为自变量,运行该程序。
记录结果。
(5)源程序以sy4_1.c存盘。
2、编程,将一个百分制成绩转换成等级制成绩。
具体要求如下:(1)百分制与等级制的对应关系如下:(3)用键盘输入百分制成绩,输入前要有提示信息。
(4)要能判断输入数据的合理性,对于不合理的数据应输出错误信息。
(5)输出结果中应包含百分制成绩和成绩等级。
(6)分别输入成绩-10,99,60,85,70,101,45,运行该程序。
记录结果。
(7)源程序以sy4_2.c存盘。
三、思考题1、实现选择结构程序设计的方法有哪几种?各有什么特点?适用条件是什么?2、如何设置选择结构中的判断条件?它在程序设计中的意义何在?实验五循环结构程序设计(1)一、实验目的1、掌握循环的概念。
2、掌握三种常用的循环语句的格式和功能。
3、初步掌握循环结构的编程方法。
二、实验内容与要求1、编程,分别利用三种循环语句,求1+2+3+…50之和。
要求如下:(1)输出计算结果;数据的输出格式采用以下形式:1+2+3+…50=计算值(2)源程序分别以sy5_1.c、sy5_2.c、sy5_3.c存盘。
2、编程,穷举算法解百马百担问题(有100匹马驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大、中、小马各多少?)要求如下:(1)输出计算结果;在数据输出之前应有提示信息。
程序设计基础(一)实验实验一上机操作初步(2学时)一、实验方式:一人一机二、实验目的:1、熟悉VC++语言的上机环境及上机操作过程。
2、了解如何编辑、编译、连接和运行一个C程序。
3、初步了解C程序的特点。
三、实验内容:说明:前三题为必做题目,后两题为选做题目。
1、输出入下信息:*************************Very Good*************************2、计算两个整数的和与积。
3、从键盘输入一个角度的弧度值x,计算该角度的余弦值,将计算结果输出到屏幕。
4、在屏幕上显示一个文字菜单模样的图案:=================================1 输入数据2 修改数据3 查询数据4 打印数据=================================5、从键盘上输入两个整数,交换这两个整数。
四、实验步骤与过程:五、实验调试记录:实验二简单的C程序设计(4学时)一、实验方式:一人一机二、实验目的:1、掌握C语言的数据类型。
2、学会使用C语言的运算符及表达式。
3、掌握不同数据类型的输入输出方法。
三、实验内容:说明:前四题为必做题目,后两题为选做题目。
1、输入r1、r2,求出圆形垫片面积。
2、输入华氏温度h,输出摄氏温度c。
3、从键盘输入一个3位整数,将输出该数的逆序数。
4、输入并运行以下程序,分析运行结果。
#include <stdio.h>void main( ){ int i,j;i=8; j=10;printf(“%d,%d\n”,++i,++j);i=8; j=10;printf(“%d,%d\n”,i++,j++);i=8; j=10;printf(“%d,%d\n”,++i,i);i=8; j=10;printf(“%d,%d\n”,i++,i);}5、输入三角形三条边的边长,求三角形的面积。
6、输入3个字符型数据,将其转换成相应的整数后,求它们的平均值并输出。
《C语言》实验指导书2016年10月实验一 C程序的运行环境和运行方法一、实验目的1.掌握所用的C语言环境的基本操作方法。
2.掌握编辑、编译、连接和运行C程序。
二、实验内容和要求1.学习使用Visual C++6.0环境开发C程序。
(1)在磁盘上建立自己的文件夹,用于存放C程序,如“e:\cexam”。
(2)启动Visual C++6.0。
执行“开始”——“所有程序”——“Microsoft Visual Studio 6.0”——“Microsoft Visual Studio 6.0”命令,进入VC++编程环境,如图1 所示。
图1 Microsoft Visual Studio 6.0窗口(3)新建C 程序文件。
执行“文件”——“新建”命令,单击如图2所示的“文件”选项卡,选中“C++Source File”;图 2 新建文件在“文件”文本框中输入文件名test1, 则C源程序被命名为test1.cpp,若想指定扩展名为.c,则需在“文件”文本框中输入文件名test1.c;在“目录”下拉列表框选择已经建立的文件夹,如,单击“确定”按钮,就新建了C源程序文件,并显示编辑窗口和信息窗口,如图3所示,然后在编辑窗口中输入程序。
(4)保存程序。
在如图 3的界面输入程序代码。
由于完全是Windows 界面,输入及修改可借助鼠标和菜单进行,十分方便。
当输入结束后,执行“文件”——“保存”命令,保存源文件。
图 3 编辑源程序(5)编译程序。
信息窗口编辑窗口执行“组建”——“编译[test1.cpp]”命令,弹出消息框,如图4所示,单击“是”按钮,开始编译,并在信息窗口中显示编译信息。
如果信息窗口中显示“test1.obj-0 error(s),0 warning(s)”,表示编译正确,没有发现错误和警告,并生成了目标文件test1.obj。
图 4 产生工作区消息框如果显示错误信息,说明程序中存在严重的错误,必须改正,双击某行出错信息,程序窗口中会指示对应出错位置,根据信息窗口的提示分别予以纠正;如果显示警告信息,说明这些错误并未影响目标文件的生成,但通常也应该改正。
实验七函数程序设计(二)练习1.用递归方法解决猴子吃桃子的问题(P129习题6.10)。
运行结果:1534练习2.编写一个程序,其中包含一个子函数,功能为删除字符串中指定的某个字符,并显示删除后的字符串。
子函数要求:形式为:vo id delete_string(cha r str[],char ch);运行结果示例:练习3.编写一个程序,其中包含一个子函数,功能为求出一个二维数组(从键盘读入)中每列的最小元素,并依次放入一个一维数组中。
例:子函数要求:形式为:vo id fun(int tt[M][N],int pp[N]);(其中,tt是一个M行N列的二维数组,pp为存放结果的一维数组。
)*练习4.编写一个程序,功能为将一个无序数组b(包含5个元素)中的每个元素插入另一个有序数组a (包含10个元素)中的适当位置,使插入后的数组a依然有序。
其中,包含3个子函数,各函数要求如下:●子函数1:功能为读入一包含n个元素的数组;形式为:voi d i np ut(int a[],i nt n);●子函数2:功能为将一个数值x插入到包含n个元素的有序数组中;●形式为:voi d ins ert(int a[],i nt n,int x);●子函数3:功能为输出一包含n个元素的数组;形式为:voi d o ut p ut(int a[],i nt n);实验八指针程序设计(一)练习1.用指针变量的处理方法编写一个程序,功能为读入一组(10个)数据后,逆向输出。
程序要求:练习2.用指针变量的处理方法编写一个程序,功能为将数组s(共10个元素,由随机数生成)中的数据位置两两对倒,并输出结果。
程序要求:程序中对数组的处理全部使用指针方式。
练习3.用指针变量的处理方法编写一个子函数,功能为从键盘读入一个已经排好序的数组(共10个数),再输入一个数,将此数按次序规律将它插入到数组中后输出结果。
函数要求:实参为指针变量,形参为数组名,且形式为:vo id insert(int x[ ], int m);其中:形参m为要插入的数据;函数无返回值。
实验8-1 指针基本概念【知识点回顾】1.指针和指针变量1)内存地址:内存存储单元的编号,从0开始,以字节为单位2)指针:一个内存地址有且仅有一个内存存储单元对应,即一个地址“指向”一个单元,故将地址称为指针3)指针变量:C语言中允许将地址作为数据值,用一个变量来存放。
存放指针的变量称为指针变量。
2.指针变量使用三步骤1)声明:一般形式如:类型说明符*指针变量名;2)初始化:一般形式如:指针变量=&变量;3)访问数据:一般形式如:*指针变量3.指针运算符1)间接访问运算符“*”2)取地址运算符“&”4.printf和scanf是否使用指针对比:假定有int x,y;int *px=&x,*py=&y;1)不使用指针的输入输出语句:scanf(“%d %d”,&x,&y);printf(“%d %d”,x,y);2)使用指针的输入输出语句:scanf(“%d %d”,px,py);printf(“%d %d”,*px,*py);5.打印地址信息:1)使用%p占位符2)使用%x占位符【典型例题】1.例题1,指针的基本使用方法#include <stdio.h>int main(){int data=100;//第一种指针变量定义方式:声明与初始化分两步完成int * pd; //声明指针变量pd=&data; //初始化指针变量,注意细节,data变量必须之前声明过//下面是第二种指针变量定义方式:声明与初始化一步完成//int * pd = &data; //声明指针变量,同时初始化指针变量printf("Direct access: data = %d\n", data); //变量的直接访问printf("Indirect access: data = %d\n",*pd); //变量的间接访问printf("The address of data is %p\n", &data);//变量的地址输出printf("The address of data is %p\n",pd); //指针变量的输出return 0;}程序运行效果如下:2.例题2,两数求和。
预习要求:1.认真阅读本实验指导书,了解万用表的基本结构及万用表使用的基本方法和注意事项。
2.在正规的实验报告纸上预先写好实验报告的[实验目的]、[仪器和用具]、[实验原理]三部份并在分组实验时呈给指导教师检查。
待实验后再补充完实验报告余下的[实验内容、步骤]、[数据记录]、[数据处理]、[结果报道]、[结果讨论]、 [实验结论]等部分。
书写实验报告应注意如下几点:1.[仪器和用具]应按实际所使用的型号、规格给出。
2.[实验原理] 需叙述如下内容:一、简述万用电表的基本结构和基本使用方法;二、详述使用万用表应注意的问题;三、详述万用表的应用画出相应应的电路图(图8-2、图8-3)。
3.[实验内容、步骤] 必须根据具体的实验过程并参考讲义中的[实验内容、要求]进行叙述并画出图8-4及图8-5。
4.[数据记录] 必须画出记录表格并标明表中物理量的单位;表中所有数据均必须按有效数字规则给出。
5.数据处理时,应给出运算式并列出相应的数字式,计算结果的有效数字位数应根据有效数字合成规则来确定。
另,运算结果为物理量的,应给出单位。
6.[结果报道]中的测量值和相对误差值的有效数字位数亦必须按有效数字合成规则给出。
7.[结果讨论]8.[实验结论]1实验八万用电表的使用[目的]学会万用电表的使用及测量误差的分析和估算。
[仪器和用具]1.万用电表(MF-50型);2.直流稳定电源(MCH-305D-Ⅱ型0-30V、0-5A);3.单相自耦调压器(500V A 0-250V);4.实验电阻板(3.0KΩ、15KΩ、47KΩ、56Ω、0.62KΩ、1.5KΩ 0.25 W各1个);5.电学暗盒(内装有47μF电解电容1个、0.22μF普通电容器1个、;6.3V稳压二极管1个、1N4007硅二极管1个、47KΩ电阻器1个)6.单刀开关;[原理]一、万用电表的基本结构及使用的基本方法万用电表是实验室常用的一种仪表,可用来测量交直流电压、电流以及电阻等电量及晶体管直流放大倍数等,还可用来检查电路、排除电路故障和检查常用电子元器件的性能。
实验6 指针一、实验目的1.掌握指针的基本概念和基本用法。
包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;2.掌握数组与指针的关系并能够利用指针解决数组的相关问题;3.掌握字符串与指针的关系并能够利用指针处理字符串的问题;4.掌握指针与函数的关系并能够利用指针处理函数问题;5.了解指向指针的指针的概念及其使用方法;6.能够使用指针进行程序设计。
二、实验环境PC微机Windows 操作系统Visual studio 2019三、实验内容与步骤1.实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。
要求:(1)整数数组由初始化方式输入。
任意整数由scanf函数输入;(2)实现过程采用指针处理;(3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。
代码实现:#include<stdio.h>int main(){int num[11], * p = &num[10];//预先指向末尾for (int i = 0; i < 10; i++) {scanf("%d", &num[i]);}//输入已排序的数据printf("原始数组:");for (int i = 0; i < 10; i++) printf("%d ", num[i]);printf("\n");int newnum;scanf("%d", &newnum);//输入待插入的数bool flag = true;//判断是否是插入末尾for (int i = 0; i < 10; i++) {if (newnum <= num[i]) {//找到插入位置flag = false;for (int j = 9; j >= i; j--) {//插入数据并将其他数据后移*p = num[j];p--;if (j == i) {num[j] = newnum;}}break;}}if (flag) *p = newnum;printf("插入后的数组:");for (int i = 0; i < 11; i++) printf("%d ", num[i]);return 0;}实验结果:①插入最左边②插入最右边:③插入中间:④插入相同的数:实验分析:结果和预期一致。
数学与软件科学学院实验报告
学期:__2013_ 至_2014 第_ 1__ 学期 2013 年 11 月 19 日课程名称:_C语言程序设计专业:__ 信息与计算科学 2012 级 _6 班实验编号:八实验项目:指针
一、实验目的
(1) 掌握C语言环境下指针的声明、定义和使用方法;
(2) 掌握指针和变量以及指针和数组的关系;
(3) 掌握指针、数组之间的关系;
(4) 掌握指针、函数之间的关系。
二、实验内容
(1).熟悉指针的基本使用方法。
(2).想使指针变量pt1指向变量a和b中的大者,pt2指向其小者,以下程序能
实现此目的?为什么?如果不行,请给出实现的方法
(3)请仔细分析并执行以下程序段,并给出输入数据下的运行结果
三、实验准备
(1) 编写所选实验题目的程序代码和流程图;
(2) 检查源程序并给出其可能的运行结果说明。
四、实验步骤及结果
实验步骤:
(1) 上机验证所选题目,并做相应测试和分析;
(2) 进行实验分析;
(3) 总结指针及其程序设计、实现方法和经验;
(4) 编写实验报告。
实验结果:
(1) 根据测试目标写出测试报告;
(2) 测试结果分析说明;
(3) 测试程序代码清单。
第一题:程序一:
程序二:
程序三:
第二题
第三题
第四题
实验心得:这真是一项伟大的工程!。