实验8 指针
- 格式:docx
- 大小:63.58 KB
- 文档页数:8
实验八子程序实验一、实验目的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次。
注意体会各指令作用。
提醒:欲间接存取字节,将指针用一递增或递减。
欲间接存取字,将指针用二递增或递减。
欲间接存取双字,将指针用四递增或递减。
实验8 探究阻力对物体运动的影响基础考点梳理(1)实验装置【分析现象】 水平面越光滑,小车的速度减小得越慢,运动距离越远 ;【实验结论】①运动物体受到的阻力越大,运动的越近,阻力越小,运动得越远。
①若运动的物体不受阻力,物体的运动速度将不会减小,将保持做匀速直线运动。
【实验方法】:①控制变量法:控制小车从斜面上 同一高度处 由静止释放,使小车到斜面底端时具有 相同的初速度 ; ①转换法:通过小车在水平面上 滑行距离的长短 来间接判断小车所受阻力大小;①实验推理法:若小车不受阻力时,小车的速度将 不会减小 ,将永远做 匀速直线运动 ;【交流与讨论】(3)小车到达斜面底端继续前行的原因:小车具有 惯性 ;(4)小车最终会停下来的原因:受到 摩擦阻力(非平衡力) 的作用;(5)牛顿第一定律的内容:一切物体在没有受到外力作用时,总保持静止状态或匀速直线运动状态;(6)牛顿第一定律得到的方法:在大量 经验事实 的基础上,通过科学的 推理 总结归纳出来的, 不能直接 由实验得到。
(7)对牛顿第一定律的理解:力不是 维持 物体运动状态的原因,力是 改变 物体运动状态的原因。
(8)对小车受力情况的判断:小车在水平面上运动时 重力 和 支持力 相互平衡,水平方向上受到阻力的作用,做 减速 直线运动;(9)小车在运动过程中做功与能量转化:从斜面顶端滑动到水平面的过程中,重力势能转化为 动能和内能 ;从水平面运动到静止的过程中,动能转化为内能, 机械能不守恒 ,但能量的总量 不变 ;小车在三种不同的水平面上克服阻力做功的关系:321W W W ==,功率:321P P P >>(依次为毛巾、棉布和木板)。
【评估】(1)本实验选用小车而不选用木块的原因是:相同条件下,小车受到的阻力较小,实验现象较明显.(2)小车到达水平面后最终停下来的原因是:小车在水平面上受摩擦力的作用,力能改变物体的运动状态.典型例题赏析实验结论:(1)在其他条件相同时,平面越光滑,滑块受到的阻力越小,滑块前进的距离越远.(2)假如水平面足够光滑(完全没有摩擦阻力),滑块的速度不会减小,滑块将做匀速直线运动.1.实验小组为探究“阻力对物体运动的影响”,设计了如图所示的斜面实验,让小车从斜面上滑到接触面分别为毛巾、棉布和木板的水平面上,观察小车在水平面上滑行的距离.(1)实验时要固定斜面,分别将小车从斜面上同一位置由静止释放,目的是保证小车到达斜面底端的初速度相同.(2)本实验通过木块在水平面上滑行距离大小来判断阻力对小车运动的影响.(3)分析实验现象可知:水平面越光滑,运动的小车所受的阻力小,速度减小得慢,小车向前滑行的距离远.并进一步推测:若水平面完全光滑且足够长,小车将一直做匀速直线运动,表明物体的运动不需要(选填“需要”或“不需要”)力来维持;(4)(现象分析)(2022武汉)实验中,小车在水平面上最终都会静止下来,说明力可以改变物体的运动状态.(5)从能量转化的角度看,小车在水平面上克服阻力所做的功三次一样多(选填“在毛巾上更多”、“在棉布上更多”、“在木板上更多”或“三次一样多”),小车在水平面上克服阻力做功的功率大小关系在毛巾上最大(选填“在毛巾上最大”、“在棉布上最大”、“在木板上最大”或“三次一样大”);(6)小组的小芋同学思考了一个问题:当自己荡秋千运动到右侧最高点时,假设受到的力全部消失,自己将处于怎样的运动状态呢?你认为下列选项中正确的是D (图中的黑点表示小芋)A.做匀速圆周运动B.做匀速直线运动C.继续来回摆动D.保持静止状态(7)若让同一小车从同一斜面的不同高度由静止开始下滑,则还可以探究小车的②④关系(选填序号).①重力势能与质量;①重力势能与高度;①动能与质量;①动能与速度.(8)小芋想测出小车在毛巾表面运动时所受阻力的大小,请你利用合适的实验器材,帮她写出实验步骤:使用弹簧测力计水平匀速拉动小车,则弹簧测力计的示数就代表物体所受摩擦力大小。
实验8-1 指针(一)1【实验目的】(1)掌握指针的概念和定义和使用指针变量的方法(2)能正确使用数组的指针和指向数组的指针变量(3)能正确使用字符串的指针和指向字符串的指针变量【实验要求】(1)熟练掌握和使用一维数组的指针和指向一维数组的指针变量(2)能正确使用字符串的指针和指向字符串的指针变量【实验环境】(1) Microsoft XP操作系统(2) Microsoft VC++ 6.0【实验内容】1、两个数比较/acmhome/problemdetail.do?&method=showdetail&id=1002题目描述:求2个数中较大者。
输入:第一行为测试的数据组数N,接下来的N行分别是两个待比较的整数输出:输出N行,每一行的值为每组数中较大的整数样例输入21 215 10样例输出2152、三个数排序/JudgeOnline/problem.php?id=1511题目描述:输入三个整数,按由小到大的顺序输出。
输入:三个整数输出:由小到大输出成一行,每个数字后面跟一个空格样例输入:2 3 1样例输出:1 2 33、字符串排序/acmhome/problemdetail.do?&method=showdetail&id=1484描述:输入3个字符串,按字典序从小到大进行排序。
输入:输入数据有一行,分别为3个字符串,用空格分隔。
输出:输出排序后的三个字符串,用空格分隔。
样例输入:abcd cdef bcde样例输出:abcd bcde cdef4、重置最值/JudgeOnline/problem.php?id=1513题目描述:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写三个函数;①输入10个数;②进行处理;③输出10个数。
输入:10个整数输出:整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)样例输入:2 1 3 4 5 6 7 8 10 9样例输出:1 2 3 4 5 6 7 8 9 105、复制部分字符串/JudgeOnline/problem.php?id=1516题目描述:有一字符串,包含n个字符。
高考物理实验8、电表改装历年高考题1.(2019·新课标全国Ⅰ卷)某同学要将一量程为250 μA的微安表改装为量程为20 mA的电流表。
该同学测得微安表内阻为1 200 Ω,经计算后将一阻值为R的电阻与该微安表连接,进行改装。
然后利用一标准毫安表,根据图(a)所示电路对改装后的电表进行检测(虚线框内是改装后的电表)。
(1)根据图(a)和题给条件,将(b)中的实物连接。
(2)当标准毫安表的示数为16.0 mA时,微安表的指针位置如图(c)所示,由此可以推测出改装的电表量程不是预期值,而是。
(填正确答案标号)A.18 Ma B.21 mA C.25mA D.28 mA(3)产生上述问题的原因可能是。
(填正确答案标号)A.微安表内阻测量错误,实际内阻大于1200Ω B.微安表内阻测量错误,实际内阻小于1200ΩC.R值计算错误,接入的电阻偏小 D.R值计算错误,接入的电阻偏大(4)要达到预期目的,无论测得的内阻值是否正确,都不必重新测量,只需要将阻值为R的电阻换为一个阻值为kR的电阻即可,其中k= 。
解析:(1)电表改装时,微安表应与定值电阻R并联接入虚线框内,则实物电路连接如下图所示:(2)由标准毫安表与该装表的读数可知,改装后的电流表,实际量程被扩大的倍数为:n=16mA=100倍。
故当原微安表表盘达到满偏时,实际量程为:250×10―3×100=25mA,故本小160×10-3mA题选C;(3)根据ab,得:I=1g,改装后的量程偏大的原因可能是,原微安表内阻测量值偏小,即电表实际内阻R g真实值,大于1200Ω;或者因为定值电阻R的计算有误,计算值偏大,实际接入定值电阻R阻值偏小。
故本小题选AC;(4)由于接入电阻R时,改装后的表实际量程为25 mA,故满足I g R g=25―I g R;要想达到预期目的,即将微安表改装为量程为20 mA电流表,应满足I g R g=20―I g kR,其中I g=250μA=0.25mA,。
C语言上机实验(指针)目标:1.熟悉指针变量的含义,熟悉简单变量和指针的关系;2.熟悉指针变量做为函数的参数;内容(1)熟悉书中案例,熟悉简单变量和指针的关系,了解指针值的变化;(2)通过指针变量访问整型变量。
解题思路:先定义2个整型变量,再定义2个指针变量,分别指向这两个整型变量,通过访问指针变量,可以找到它们所指向的变量,从而得到这些变量的值。
#include <stdio.h>main(){ int a=100,b=10;int *pointer_1, *pointer_2;pointer_1=&a;pointer_2=&b;printf(“a=%d,b=%d\n”,a,b);printf(“*pointer_1=%d,*pointer_2=%d\n”,*pointer_1,*pointer_2);}(3)输入a和b两个整数,按先大后小的顺序输出a和b。
(模仿p119页3.32)解题思路:用指针方法来处理这个问题。
不交换整型变量的值,而是交换两个指针变量的值。
#include <stdio.h>main(){ int *p1,*p2,*p,a,b;printf(“integer numbers:");scanf(“%d,%d”,&a,&b);p1=&a; p2=&b;if(a<b){ p=p1; p1=p2; p2=p; }printf(“a=%d,b=%d\n”,a,b);printf(“%d,%d\n”,*p1,*p2);}(4)对输入的两个整数按大小顺序输出。
(程序改错) (答案略)现用函数处理,而且用指针类型的数据作函数参数。
解题思路:定义一个函数swap,将指向两个整型变量的指针变量作为实参传递给swap函数的形参指针变量,在函数中通过指针实现交换两个变量的值。
(1)#include <stdio.h>main(){swap(int *p1,int *p2);int a,b; int*pointer_1,*pointer_2; printf("please enter a and b:"); scanf(“%d,%d”,&a,&b);pointer_1=&a;pointer_2=&b;if (a<b) swap(pointer_1,pointer_2); printf(“max=%d,min=%d\n”,a,b);}swap(int *p1,int *p2){ int *temp; (无确定方向)*temp=*p1;*p1=*p2;*p2=*temp;}(2)#include <stdio.h>main(){swap(int *p1,int *p2);int a,b; int*pointer_1,*pointer_2;printf("please enter a and b:");scanf(“%d,%d”,&a,&b);pointer_1=&a;pointer_2=&b;if (a<b) swap(pointer_1,pointer_2);printf(“max=%d,min=%d\n”,a,b);}swap(int *p1,int *p2){ int *temp; (只交换了指针的值)temp=p1;p1=p2;p2=temp;}(5)输入3个整数a,b,c,要求按由大到小的顺序将它们输出。
c语言程序设计教程(第2版)课后题及模拟题参考答案习题1 (3)1-1 填空题 (3)1-2 思考题 (3)1-3 编程题 (3)习题2 (4)2-1 单选题 (4)2-2 思考题 (4)习题3 (5)3-1 选择题 (5)3-2 填空题 (5)3-3 编程题 (5)习题4 (7)4-1单选题 (7)4-2填空题 (7)4-3 编程题 (7)习题5 (10)5-1单选题 (10)5-2填空题 (10)5-3 编程题 (10)习题6 (13)6-1单选题 (13)6-2填空题 (13)6-3 编程题 (13)习题7 (15)7-1单选题 (15)7-2填空题 (15)7-3 编程题 (15)习题8 (16)8-1单选题 (16)8-2填空题 (16)8-3 编程题 (16)习题9 (18)9-1单选题 (18)9-2填空题 (18)9-3 编程题 (18)习题10 (22)10-1单选题 (22)10-2填空题 (22)10-3 编程题 (22)习题11 (24)11-1单选题 (24)11-2填空题 (24)习题12 (25)12-1单选题 (25)12-2 填空题 (25)实验篇 (26)实验1 熟悉Visual C++6.0可视化集成开发环境 (26)实验2 顺序结构程序设计 (26)实验3 选择结构程序设计 (26)实验4 循环结构程序设计 (26)实验5 函数 (28)实验6 数组 (32)实验7 指针 (33)实验8 结构体和共用体 (35)实验9 文件 (36)实验10 综合编程 (36)模拟试卷(一)参考答案 (37)模拟试卷(二)参考答案 (38)习题11-1 填空题1.函数2.主函数main(),主函数main()3.主函数main()4.函数首部,函数体5.{, }6./*, */7.顺序结构,选择结构,循环结构8..c, .obj, .exe1-2 思考题1.结构化程序设计是指:为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。
实验八描绘小电珠的伏安特性曲线【考纲全景透析】一、实验目的1.描绘小电珠的伏安特性曲线.2.分析伏安特性曲线的变化规律.二、实验器材小电珠(3.8 V,0.3 A)或(2.5 V,0.6 A)一个、电压表(0~3 V~15 V)与电流表(0~0.6 A~3 A)各一个、滑动变阻器(最大阻值20 Ω)一个、学生低压直流电源(或电池组)、开关一个、导线若干、坐标纸、铅笔.三、实验原理1.用电流表测出流过小电珠的电流,用电压表测出小电珠两端的电压,测出多组(U,I)值,在U-I坐标系中描出各对应点,用一条平滑的曲线将这些点连起来.2.电流表外接:因为小电珠的电阻很小,如果电流表内接,误差明显较大;滑动变阻器采用分压式:使电压能从零开始连续变化.3.滑动变阻器两种接法的对比4.分压和限流电路的选择原则(1)若采用限流式接法不能控制电流满足实验要求,即若滑动变阻器阻值调到最大时,待测电阻上的电流(或电压)仍超过电流表(或电压表)的量程,或超过待测电阻的额定电流(或电压),则必须选用分压式电路. (2)若待测电阻的阻值比滑动变阻器总电阻大得多,以致在限流电路中,滑动变阻器的滑片从一端滑到另一端时,待测电阻上的电流或电压变化范围不够大,此时,应改用分压式电路.(3)若实验中要求电压从零开始调节,则必须采用分压式电路.(4)两种电路均可使用的情况下,应优先采用限流式接法,因为限流式接法电路简单、能耗低.【热点难点全析】一、实验步骤1.确定电流表、电压表的量程,采用电流表外接法,滑动变阻器采用分压式接法,按图中的原理图连接好实验电路.2.把滑动变阻器的滑片调节到图中最左端,接线经检查无误后,闭合开关S.3.移动滑动变阻器滑片位置,测出12组左右不同的电压值U和电流值I,并将测量数据填入表格中,断开开关S.4.拆除电路,整理仪器.(1)闭合开关S前,滑动变阻器触头应移到最左端,以使开关闭合时小电珠电压能从0开始变化;同时,这样做也防止开关刚闭合时小电珠两端电压过大而烧坏灯丝.(2)移动滑动变阻器触头的位置,测出12组不同的电压值U和电流值I,并将测量数据填入表格.【例1】在“描绘小电珠的伏安特性曲线”的实验中,某同学测得电流—电压的数据如表所示:(1)用表中数据描绘电压随电流的变化曲线;(2)为了探究灯丝电阻与温度的关系,已作出电阻随电流的变化曲线如图所示,请指出灯丝的特征,并解释形成的原因【答案】(1)用表中数据描绘电压随电流的变化曲线,如图所示(2)电阻随电流增大存在三个区间,电阻的变化快慢不同,第一区间电流很小时,电阻变化不大;第二区间灯丝温度升高很快,电阻增大得快;第三区间部分电能转化为光能,灯丝温度升高变慢,电阻增大也变慢.二、数据处理1.在坐标纸上以U为横轴,以I为纵轴,建立坐标系.2.在坐标纸上描出各组数据所对应的点.(坐标系纵轴和横轴的标度要适中,以使所描图线充分占据整个坐标纸为宜)3.将描出的点用平滑的曲线连接起来,就得到小电珠的伏安特性曲线.4.误差分析(1)由于电压表、电流表不是理想电表,电表内阻对电路的影响会带来误差.(2)电流表、电压表的读数带来误差,要严格按照读数规则读数.(3)在坐标纸上描点、作图带来操作误差.5.注意事项(1)电路的连接方式电流表应采用外接法:因为小电珠(3.8 V,0.3 A)的电阻很小,与0~0.6 A的电流表串联时,电流表的分压影响很大.滑动变阻器应采用分压式连接:目的是使小电珠两端的电压能从零开始连续变化.(2)闭合开关S前,滑动变阻器的触头应移到使小电珠分得电压为零的一端,使开关闭合时小电珠的电压从零开始变化,同时也是为了防止开关刚闭合时因小电珠两端电压过大而烧坏灯丝.=1.0 V左右将发生明显弯曲,故在U=(3)I-U图线在U1.0 V左右绘点要密,以防出现较大误差.(4)电流表选择0.6 A量程,电压表量程的选择视小电珠的额定电压而定,即使用的若是“3.8 V,0.3 A”的小电珠,选用电压表的15 V量程;若使用“2.5 V,0.6 A”的小电珠,则选用电压表的3 V量程.(5)当小电珠的电压接近额定值时要缓慢增加,到额定值记录I后马上断开开关.(6)误差较大的点要舍去,I-U图线应是平滑曲线而非折线.【例证2】在“描绘小电珠的伏安特性曲线”的实验中,用导线a、b、c、d、e、f、g和h按如图所示方式连接好电路,电路中所有元器件都完好,且电压表和电流表已调零.闭合开关后:(1)若不管怎样调节滑动变阻器,小电珠亮度能发生变化,但电压表、电流表的示数总不能为零,则可能是_____导线断路.(2)某同学测出电源和小电珠的U-I图线如图所示,将小电珠和电阻R串联后接到电源上,要使电路中电流为1.0 A,则R=_____Ω.(3)某同学在实验中还测出a、b、c三种元件的伏安特性曲线分别如图中的(a)、(b)、(c),下列说法正确的是( )A.a可以作为标准电阻使用B.b能作为标准电阻使用C.b的阻值随电压升高而增大D.c的阻值随电压升高而增大【答案】(1)g (2)0.8 (3)A、C【详解】(1)若调节滑动变阻器,小电珠的亮度变化,但电压表、电流表示数总不能为零,说明滑动变阻器不起分压作用,所以可能是g导线断路.(2)由电源的U-I图线知E=3.0 V,r=1 Ω,当小电珠与电阻串联后,由闭合电路欧姆定律得E=I(R+r)+R灯又由小电珠的U-I图线得==1.2 ΩR灯解得R=0.8 Ω.(3)因a元件的I-U线是直线,说明其阻值不随电压的变化而变化,故可作为标准电阻,故A对,B错;因I-U图线的斜率的倒数表示电阻值的变化,故C对D错.【高考零距离】【2012年】22.(2)J4[2012·四川卷] 某学习小组的同学拟探究小灯泡L的伏安特性曲线,可供选用的器材如下:小灯泡L,规格“4.0 V,0.7 A”;,量程3 A,内阻约为0.1 Ω;电流表A1电流表A,量程0.6 A,内阻r2=0.2 Ω;2电压表V,量程3 V,内阻r V=9 kΩ标准电阻R1,阻值1 Ω;标准电阻R2,阻值3 kΩ;滑动变阻器R,阻值范围0~10 Ω;学生电源E,电动势6 V,内阻不计;开关S及导线若干.图1图2图3 图4①甲同学设计了如图l所示的电路来进行测量,当通过L的电流为0.46 A时,电压表的示数如图2所示,此时L的电阻为________Ω.②乙同学又设计了如图3所示的电路来进行测量,电压表指针指在最大刻度时,加在L上的电压值是________V.③学习小组认为要想更准确地描绘出L完整的伏安特性曲线,需要重新设计电路.请你在乙同学的基础上利用所供器材,在图4所示的虚线框内补画出实验电路图.并在图上标明所选器材代号.22.(2)[答案] ①5②4③如图所示.答图1 答图2[解析] ①由图2知,电压表的读数为2.30 V ,根据欧姆定律,L 的电阻R L =U I =2.300.46Ω=5 Ω;②电压表与电阻R 2串联,电压表两端的电压3 V ,根据串联电路电阻与电压的关系,电阻R 2两端的电压为1 V ,灯泡L 两端的电压为电压表和电阻R 2两端的电压之和,即为4 V ;③如答图1和答图2所示.22.Ⅱ.J4[2012·安徽卷] 图12为“测绘小灯泡伏安特性曲线”实验的实物电路图,已知小灯泡额定电压为2.5 V.图12(1)完成下列实验步骤:①闭合开关前,调节滑动变阻器的滑片,______; ②闭合开关后,逐渐移动变阻器的滑片,______;③断开开关,……根据实验数据在方格纸上作出小灯泡灯丝的伏安特性曲线. (2)在虚线框中画出与实物电路相应的电路图.图13Ⅱ.[答案] (1)①使它靠近变阻器左端的接线柱②增加小灯泡两端的电压,记录电流表和电压表的多组读数,直至电压达到额定电压 (2)如图所示[解析] (1)①为了保护电表不被损坏,不会因为合上开关时电流过大而超过电表量程,应将滑片移至滑动变阻器的最左端,使滑动变阻器接入电路的阻值最大;②要测绘小灯泡的伏安特性曲线,应增加电压,记下多组电流和电压值,要使数据有明显的变化,并且在移动滑动变阻器时要注意不得超过电表的量程.(2)画电路图时应注意:电流表为外接法,滑动变阻器为分压接法.【详解】○1由图2可读出电压表的示数为2.30V ,所以此时L 的电阻为2.30V/0.46A=5Ω; ○2电压表指针指在最大刻度时,电压表示数为3.00V ,加在L 上的电压值为()V42=+=R r r U U V VV L○3由于电压表量程太小,所以需要改装,将它与R2串联即成为一个量程为4.0V 的新的电压表;电流表A1量程太大,不可用,可以将A2改装:将它并联一个小电阻R1则成为一个量程为0.72A 的新的电流表了。
实验8 指针一、实验目的1. 熟练掌握指针的定义、赋值的方法2. 掌握间接引用运算符的使用方法3. 掌握通过指针引用数组元素的方法4. 掌握使用指针处理字串的方法二、实验内容实训1 循环输入学生某门课的成绩,将成绩存储到数组中,统计最高分和获得最高分的学生人数,最后输出统计信息。
1)在VS2013中新建项目,在项目中新建C++源文件,输入下面程序。
#include<iostream>// 包含输入输出接口文件using namespace std; // 引用标准命名空间int main() // 主函数{const int n = 5; // 使用常变量定义学生人数int score[n]; // 定义成绩数组,有n个整型元素int maxScore = 0; // 最高分,并初始化为int maxStudent = 0; // 得到最高分的学生人数int i; // 循环变量int *p = 0;p = score; // p指向score[0]for (i = 0; i < n; i++) // 计数循环{ // 开始循环cout << "请输入第" << i << "位学生的成绩:";cin >> p[i]; // 输入第i位学生的成绩,并存储到score[i]if (maxScore < p[i]) // 如果第i位学生的成绩高于原最高分{maxScore = p[i]; // 将最高分修改为第i位学生的成绩}} // 结束循环cout << "本班最高分为" << maxScore << endl;cout << "得到最高分的学生序号为:" << endl;for (i = 0; i < n; i++) // 计数循环{ // 循环开始if (*(p + i) == maxScore) // 如果第i位学生的成绩等于最高分{maxStudent++; // 得最高分的学生人数增1cout << i << endl; // 输出该生序号}} // 循环结束cout << "共有" << maxStudent << "位学生得到最高分" << endl;return 0;} //主函数结束2)出现下列情况。
3)在第20行处设置断点,然后按F5启动调试,当程序在第20行处暂停时,观察i、p[i]、score[i]、&score[i]、p+i、*(p+i)等表达式的值,说明这些表达式中,哪些具有相同的值。
可以看出p[i]、score[i]、*(p+i)值相同。
而&score[i]、p+i值相同。
实训2学生成绩存储在数组中,查询得到某一分数的学生的序号。
我们对第4章例4.1程序稍作修改即可完成。
1)在VS2013中新建项目,在项目中新建C++源文件,输入下面程序。
#include<iostream>// 包含输入输出接口文件using namespace std; // 引用标准命名空间int main() // 主函数{const int n = 10; // 使用常变量定义学生人数// 定义成绩数组,有n+1个整型元素,其中下标处未存放学生成绩int score[n + 1] = { 0, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98 };int x; // 待查找的学生成绩int *p = 0; // 指向数组元素的指针变量cout << "请输入待查找的学生成绩:";cin >> x;score[0] = x; // 在下标处设置监视哨for (p = score + n; *p != x; p--); // 顺序查找,从后到前循环比较当前元素if (p == score){cout << "在成绩册中查找不到该分数!" << endl;}else{cout << "查找到该分数所在的位置为:" << p - score << endl;}return 0;} //主函数结束2)出现下列情况。
3)在第21行处设置断点,然后按F5启动调试,当程序在第20行处暂停时,观察p、*p、score、p-score等表达式的值。
按F10单步执行,观察上述表达式的值。
4)第20行、21行的循环变量是指针变量p,如果将循环变量改为score,即将第20行改为:for(p = score + n; score < p && *score != x; score++),程序能得到正确的结果吗?说明理由。
能得到正确结果实训3输入一个字符串,要求按相反的顺序输出各个字符。
例如,输入为AbcD,则输出为DcbA。
则NS图如下:1)在VS2013中新建项目,在项目中新建C++源文件,输入下面程序。
#include<iostream>using namespace std;int main(){char str[100] = "";char *p = NULL;cout << "请输入字符串:";gets_s(str);for (p = str; *p != '\0'; p++);cout << "逆序输出的字符串:";for (p = p - 1; p >= str; p--);{cout << *p;}cout << endl;return 0;}2)出现下列情况。
实训4定义课程结构类型,从键盘输入多门课程的信息,然后将其按课程号从小到大排序后输出。
要求课程的门数由键盘输入。
假设课程信息包含以下属性:课程编号:字符串,不超过20字符,不包含空格,如“303177020”课程名称:字符串,不超过100字符,可包含空格,如“The C Programming”学分:数值,可为小数,如1.5学时:整数,如32周学时:数值,可为小数,如1.5学期:整数,如5则NS图如下:#include <iostream>using namespace std;struct classInfo{int classno;char classna[20];float grade;int classtime;int weektime;int term;};int main(){classInfo kzxx[100] = { 0 };classInfo *p = 0;int n = 0;int i = 0, j = 0, changed = 0;cout << "请输入课程门数:";cin >> n;p = kzxx + 1;for (; p <= kzxx + n; p++){cout << "请输入课程编号:";cin >> (*p).classno;cout << "请输入课程名称:";cin >> (*p).classna;cout << "请输入学分:";cin >> (*p).grade;cout << "请输入学时:";cin >> (*p).classtime;cout << "请输入周学时:";cin >> (*p).weektime;cout << "请输入学期数:";cin >> (*p).term;}p = kzxx;for (i = 1; i < n; i++){changed = 0;for (j = 1; j <= n - i; j++){if (p[j].classno >p[j + 1].classno){kzxx[0] = p[j];p[j] = p[j + 1];p[j + 1] = kzxx[0];changed = 1;}}if (changed == 0){break;}}for (p++; p <= kzxx + n; p++){cout << "课程编号:" << (*p).classno << endl;cout << "课程名称:" << (*p).classna << endl;cout << "学分:" << (*p).grade << endl;cout << "学时:" << (*p).classtime << endl;cout << "周学时:" << (*p).weektime << endl;cout << "学期数:" << (*p).term << endl;}return 0;}2)出现下列情况。
实验心得1.通过此次实验我学会了数组的简单应用。
在C语言的学习上又迈出了一大步。
2.我也终于明白指针的作用:程序的数据结构从原子级别的数据结构:整型、浮点型、字符型、枚举型,到分子级别的数组、结构体(又称为“记录”),再到数据结构中的队列、栈、链表、树等,无论如何复杂,数据结构总是位于计算机的内存中,因此必有地址。
利用指针就可以使用地址作为一个完整值的速记符号,因为一个内存地址在内部表示为一个整数。
当数据结构本身很大时,这种策略能节约大量内存空间。