实验08 指针
- 格式:doc
- 大小:359.50 KB
- 文档页数:20
第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)。
专题08 探究弹力与弹簧伸长之间的关系【总分为:110分时间:90分钟】实验题〔共10小题,每题11分〕1.在“探究弹力和弹簧伸长关系〞的实验中,某实验小组将不同数量的钩码分别挂竖直弹簧下端,进展测量,根据实验所测数据,利用描点法做出了所持钩码的重力G与弹簧总长L的关系图象,根据图象回答以下问题。
〔1〕弹簧的原长为______.〔2〕弹簧的劲度系数为______.〔3〕分析图象,总结出弹簧力F跟弹簧长度L之间的关系式为.【答案】〔1〕10cm 〔2〕 1000N/m 〔3〕F=1000L-100 〔N〕【名师点睛】此题比拟简单,结合图象考查了胡克定律的根底知识,是一道考查根底知识的好题.在研究弹簧的伸长与拉力的关系问题时,一定要特别区分“弹簧的长度〞与“弹簧的伸长〞的不同。
2.橡皮筋也像弹簧一样,在弹性限度内伸长量x与弹力F成正比,即F=kx,k的值与橡皮筋的原长L、横截面积S有关,理论与实验都证明Sk YL,其中Y是由材料决定的常数,材料力学中称之为杨氏模量〔1〕在国际单位中,杨氏模量Y 的单位应为A 、NB 、mC 、N/mD 、2N /m〔2〕某同学通过实验测得该橡皮筋的一些数据,做出了外力F 与伸长量x 之间的关系图像如下列图,由图像可求得该橡皮筋的劲度系数k =______________ N/m〔3〕假设橡皮条的原长为10.0cm ,面积为1.02mm ,如此该橡皮筋的杨氏模量Y 的大小是_________〔只填数字,单位取〔1〕中正确单位,结果保存两位有效数字〕【答案】〔1〕D 〔2〕2510/N m ⨯〔3〕725.010/N m ⨯3.某同学在“探究弹力和弹簧伸长量的关系〞时,将轻质弹簧竖直悬挂,弹簧下端挂一个小盘,在小盘中增添砝码,改变弹簧的弹力,通过旁边竖直放置的刻度尺可以读出弹簧末端指针的位置x ,实验得到了弹簧指针位置x 与小盘中砝码质量m 的图象如图2所示,取g =10m/s 2.回答如下问题.(1)某次测量如图1所示,指针指示的刻度值为cm 〔刻度尺单位为:cm 〕.(2)从图2可求得该弹簧的劲度系数为N/m 〔结果保存两位有效数字〕;(3)另一同学在做该实验时有如下做法,其中错误的答案是.A .刻度尺零刻度未与弹簧上端对齐B.实验中未考虑小盘的重力C.读取指针指示的刻度值时,选择弹簧指针上下运动最快的位置读取D.在利用x-m图线计算弹奏的劲度系数时舍弃图中曲线局部数据.【答案】(1)18.00 (2)0.3 (3)AC【名师点睛】此题考查探究弹国和弹簧伸长之间的关系实验,要注意明确实验原理与实验中的须知事项,并正确根据图象分析实验数据.4.某物理兴趣小组的同学在研究弹簧弹力的时候,测得弹力的大小F和弹簧长度l的关系如图1所示,如此由图线可知:〔1〕弹簧的劲度系数为N/m.〔2〕为了用弹簧测定两木块A和B间的动摩擦因数μ,两位同学分别设计了如图2所示的甲、乙两种方案.①为了用某一弹簧测力计的示数表示A和B之间的滑动摩擦力的大小,你认为方案更合理.②假设A和B的重力分别为10.0N和20.0N.当A被拉动时,弹簧测力计a的示数为6.0N,b 的示数为11.0N,c的示数为4.0N,如此A和B间的动摩擦因数为.【答案】〔1〕300/N m;〔2〕①甲;②0.3【解析】〔1〕由图读出,弹簧的弹力0F=时,弹簧的长度为10L cm=,即弹簧的原长为10cm,由图读出弹力为60F N=,弹簧的长度为5L cm=,弹簧压缩的长度004020200.2x L L cm m=-=-==;由胡克定律得弹簧的劲度系数为600.2/300/k N m N mxF===。
2021年高考物理【热点·重点·难点】专练(山东专用)热点08 电学实验仪器选择问题【热点解读】(1)、实验仪器的选择根据实验原理和实验室条件选择仪器是进行正确测量的前提,一般遵循以下三原则:①安全性原则:要能够根据实验要求和客观条件选用合适的仪器,使实验切实可行,能达到预期目标。
另外还要注意测量仪器的量程,电阻类器件的电流不能超过其最大允许电流等。
②准确性原则:根据实验的需要,选用精度合适的测量工具,但对某个实验来讲,精确程度够用即可,并不是精度越高越好。
③操作性原则:实验时需考虑调节方便,便于操作,如滑动变阻器的选择,既要考虑它的额定电流,又要考虑它的阻值范围,在二者都能满足实验要求的情况下,还要考虑阻值大小对实验操作中是否调节方便的影响。
根据教学大纲及高考考核的要求,选择电学实验仪器主要是选择电表、滑动变阻器、电源等器件,通常可以从以下三方面人手:a.根据不使电表受损和尽量减少误差的原则选择电表.首先保证流过电流表的电流和加在电压表上的电压均不超过使用量程.然后合理选择量程。
务必使指针有较大偏转(一般取满偏的1/3-2/3左右),以减少测读的误差.b.根据电路中可能出现的电流或电压范围需选择滑动变阻器.注意流过滑动变阻器的电流不超过它额定值.对高阻值的变阻器,如果滑动头稍有移动,使电流电压有很大变化的,不宜采用.c.应根据实验的基本要求来选择仪器.对于这种情况.只有熟悉实验原理.才能做出恰当的选择.对器材的选择的一般步骤是:①找出唯一性的器材;②草画电路图(暂不把电表接入);③估算最大值(在限流电路中把滑动变阻器触头推向最小值);④考虑能否都使电表达到满偏的1/3以上。
※在“伏安法测电阻”和“伏安法测电池电动势和内电阻”的实验中,一般选用总阻值较小的滑动变阻器,前者可方便调节,后者可减少误差。
※①在滑动变阻器作限流作用时,为使负载R X既能得到较宽的电流调节范围,又能使电流变化均匀,选择变阻器时,应使其总电阻,R0大于R X,一般在2—5倍为好。
C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。
2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。
3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。
4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。
【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。
6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。
&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。
1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。
2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。
3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。
C++上机实验报告实验名称:指针专业班级:姓名:学号:实验日期:目录1.实验目的2.实验内容3.程序代码4.调试结果5.实验心得1.实验目的(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;(2)能正确使用数组的指针和指向数组的指针变量;(3)能正确使用字符串的指针和指向字符串的指针变量;(4)能正确使用引用型变量。
2.实验内容编程序并上机调试运行程序(要求用指针或引用处理)。
(1)输入3个整数,按由小到大的顺序输出。
编译一个程序,用指针变量作为参数。
(2)在上题的基础上将程序改为:输入3个字符串,按由小到大的顺序输出。
(3)用引用指针变量作为形参,实现3个整数由小到大输出。
(4)有n个人围成一圈,顺序排号。
从第1个人开始报数(从1~3报数),凡是到3的人退出圈子,问最后留下的人原来排在第几号。
(5)在主函数中输入10个字符串。
用另一个函数最它们排序。
然后在主函数输出这10个已排好的字符串。
要求用以下方法编程:Ⅰ.指向一维数组的指针座函数参数;Ⅱ.用string数组方法。
3.程序代码(1)#include<iostream>using namespace std;int main(){void swap(int *p1,int *p2);int n1,n2,n3;int *p1,*p2,*p3;cout<<"input three integers n1,n2,n3:";cin>>n1>>n2>>n3;p1=&n1;p2=&n2;p3=&n3;if(n1>n2) swap(p1,p2);if(n1>n3) swap(p1,p3);if(n2>n3) swap(p2,p3);cout<<"Now,the order is:"<<n1<<" "<<n2<<" "<<n3<<endl; return 0;}void swap(int *p1,int *p2){int p;p=*p1;*p1=*p2;*p2=p;}(2)Ⅰ.用字符数组方法的源程序#include<iostream>using namespace std;int main(){void swap(char *,char *);char str1[20],str2[20],str3[30];cout<<"input three line:"<<endl;gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); cout<<endl<<"Now,the order is:"<<endl; cout<<str1<<endl<<str2<<endl<<str3<<endl; return 0;}void swap(char *p1,char *p2){char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}Ⅱ.用string方法的源程序(程序中使用了指针和引用)#include<iostream>#include<string>using namespace std;int main(){void change(string &,string &);string str1=" ",str2=" ",str3=" ";char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0];cout<<"input three line:"<<endl;gets(p1);gets(p2);gets(p3);if(str1>str2) change(str1,str2);if(str1>str3) change(str1,str3);if(str2>str3) change(str2,str3);cout<<endl<<"Now,the order is:"<<endl;cout<<str1<<endl<<str2<<endl<<str3<<endl; return 0;}void change(string &st1,string &st2) {string st;st=st1;st1=st2;st2=st;}(3)#include<iostream>using namespace std;int main(){void exchange(int *,int *,int *);int a,b,c,*p1,*p2,*p3;cin>>a>>b>>c;p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);cout<<a<<" "<<b<<" "<<c<<endl;return 0;}void exchange(int *q1,int *q2,int *q3){void swap(int *,int *);if( *q1> *q2) swap(q1,q2);if( *q1> *q3) swap(q1,q3);if( *q2> *q3) swap(q2,q3);}void swap(int *pt1,int *pt2){int temp;temp=*pt1;*pt1=*pt2;*pt2=temp;}(4)#include<iostream>using namespace std;int main(){int i,k,m,n,num[50],*p;cout<<"input number of person:n="; cin>>n;p=num;for(i=0;i<n;i++)*(p+i)=i+1;i=0;k=0;m=0;while(m<n-1){if(*(p+i)!=0) k++;if(k==3){*(p+i)=0;k=0;m++;}i++;if(i==n) i=0;}while(*p==0)p++;cout<<"The last one is NO."<<*p<<endl; return 0;}(5)Ⅰ.指向一维数组的指针最函数参数的源程序#include<iostream>using namespace std;int main(){void sort(char (*p)[6]);int i;char str[10][6];char (*p)[6];cout<<"input 10 strings:"<<endl;for(i=0;i<10;i++)cin>>str[i];p=str;sort(p);cout<<"Now,the sequence is:"<<endl; for(i=0;i<10;i++)cout<<str[i]<<endl;return 0;}void sort(char (*s)[6]){int i,j;char temp[6],*t=temp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[+j+1]);strcpy(s[j+1],t);}}Ⅱ.用string数组方法的源程序#include<iostream>#include<string>using namespace std;int main(){void sort(string*);int i;string str[10],*p=str;cout<<"input 10 strings:"<<endl;for(i=0;i<10;i++)cin>>str[i];sort(p);cout<<"Now,the sequence is:"<<endl; for(i=0;i<10;i++)cout<<str[i]<<endl;return 0;}void sort(string *s){int i,j;string temp;for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(s[j]>s[j+1]){temp=s[j];s[j]=s[+j+1];s[j+1]=temp;}}4.调试结果(1)input three integers n1,n2,n3:54 -12 2 Now,the order is:-12 2 54(2)input three lines:I study very hard.C language is very interesting.He is a professor.Now,the order is:C language is very interesting.He is a professor.I study very hard.(3)12 6 876 12 87(4)input number of person:n=8The last one is No.7(5)input 10 strings: Now,the sequence is:China BurmaJapan ChinaKorea EgyptEgypt GhanaNepal ItalyBurma JapanGhana KoreaSudan LibyaItaly NepalLibya Sudan5.实验心得指针同数组一样,是C++中一个重要的概念,一个重要的知识点。
建议5min测定某导体最基本的方法叫做是伏安法;其实验原理是根据;实验时所用的两个电表在接入电路时应注意:①选择适当的②正确连接。
建议10min建议70min知识点一、伏安法测电阻实验原理及操作【知识梳理】【实验原理】:R=U/I【实验步骤】:(1)如图所示连接电路,电键处于断开状态,滑动变阻器连入电路中的电阻处于最大值。
(2)移动滑片到三个不同位置,记下相应的电流表示数和电压表示数。
(3)根据公式计算三次的电阻,最后通过求平均值得到待测电阻的阻值。
滑动变阻器在实验中作用:保护电路;测电阻时是为了改变电路的电流、电压,进行多次测量,取平均值,减小误差。
【例题精讲】例1. 在做“用电流表、电压表测电阻”的实验中,连接电路时电键必须处于状态(选填“断开”或“闭合”)。
现有待测电阻R x、滑动变阻器、电压表、电流表、电键、若干导线和多节干电池,小李按照图17(a)所示的电路正确连接电路,在闭合电键前,他应将滑动变阻器的滑片P移到(选填“A”或“B”)端,闭合电键后测得R x两端的电压是4伏,电流表示数如图17(c)所示是安,计算此时电阻R x的阻值是欧。
实验时要测量多组数据,以便将计算结果取平均值来减小误差,下列做法可行的是。
A.按照图17(a)所示的电路,移动滑动变阻器的滑片P的位置;B.按照图17(b)所示的电路,多更换几个相同的待测电阻R x;C.按照图17(b)所示的电路,改变串联干电池的节数;【巩固练习】1.实验名称:用电压表、电流表测电阻实验目的:实验步骤:(1)根据实验要求,在右边的方框内画出实验电路图;(2)若已有的器材是:导线、电键、待测电阻、电流表、电压表。
则还应当补充的器材是和;(3)本实验的实验原理是;(4)根据电路图,用笔线代替导线把图示的实验器材组成实验电路;(5)在连接电路时,电键应处在状态,在闭合电键前,实物图中滑动变阻器滑片P应处在端(根据连接的电路选填“A”或“B”);(6)若实验中电流表、电压表的指针位置如右图所示,则电流表的示数为 A,电压表的示数为 V,所测电阻的阻值大小为Ω。
指针万用表实验报告指针万用表实验报告引言:指针万用表是一种常见的电子测量仪器,用于测量电压、电流、电阻等电学量。
本实验旨在通过使用指针万用表,对不同电路中的电压、电流和电阻进行测量,掌握其使用方法和注意事项。
实验一:电压测量在实验一中,我们将使用指针万用表测量直流电源的电压。
首先,将电源的正极与指针万用表的红色测试笔连接,将电源的负极与指针万用表的黑色测试笔连接。
然后,将指针万用表的旋钮调整至适当的量程,观察指针的偏转情况,并读取相应的电压数值。
实验结果表明,指针万用表能够准确测量直流电源的电压。
然而,需要注意的是,在测量过程中应避免过大的电压,以免损坏仪器或导致人身伤害。
实验二:电流测量在实验二中,我们将使用指针万用表测量电路中的电流。
首先,将电路中的一段导线与指针万用表的黑色测试笔连接,将另一段导线与指针万用表的红色测试笔连接。
然后,将指针万用表的旋钮调整至适当的量程,观察指针的偏转情况,并读取相应的电流数值。
实验结果表明,指针万用表能够准确测量电路中的电流。
然而,需要注意的是,在测量过程中应避免过大的电流,以免损坏仪器或导致人身伤害。
实验三:电阻测量在实验三中,我们将使用指针万用表测量电路中的电阻。
首先,将指针万用表的旋钮调整至适当的量程。
然后,将指针万用表的两个测试笔分别与电阻器的两个引脚相连接。
观察指针的偏转情况,并读取相应的电阻数值。
实验结果表明,指针万用表能够准确测量电路中的电阻。
然而,需要注意的是,在测量过程中应避免过大的电阻,以免损坏仪器或导致测量误差。
实验四:其他功能除了上述实验外,指针万用表还具有其他功能,如测量交流电压、测试二极管和晶体管等。
这些功能的使用方法与前述实验类似,只需要根据具体情况调整指针万用表的量程和测试笔的连接方式。
总结:通过本次实验,我们掌握了指针万用表的基本使用方法和注意事项。
指针万用表作为一种常见的电子测量仪器,具有准确、实用的特点。
然而,在使用过程中仍需谨慎操作,避免超出仪器的测量范围,以确保测量结果的准确性和仪器的安全性。
函数和指针程序设计实验总结与反思通过函数和指针程序设计实验还是反映出比较多的问题,我感觉第八章的指针比较难理解,与前面数组部分联系起来了,上理论课时有一些地方不太明白。
通过此次老师重点讲解函数和指针程序设计实验,加深了我对字符指针和指针数组的掌握,理解会好很多,思路也更清晰很多,但还是要多去理解,也有些东西需要去记忆。
比如一个字符串在内存中是连续存储的,它的开始地址为指向字符串的指针值。
当使用指针作为形参时,实参必须是地址,也应是数组名。
一开始写完这个程序的时候运行出来的输出结果数字与数字之间没有间隔,就是一长串的数字,但是顺序是对的,通过对代码的再次检查,在输出后面加上空格,就得到了正确的格式,这种小问题发现比较难,在打代码的时候就要留心。
我从函数和指针程序设计实验中学习到很多。
我们写代码的时候一定要仔细,定义的函数与调用时的要一致,不要犯一些低级的错误。
总之还是要多去理解代码,多从错误中学习。
贵州大学实验报告学院:计算机科学与信息专业:通信工程班级:实验内容1. 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、输出。
2.编写函数reverse(char *s)的倒序递归程序,使字符串s倒序。
实验数据1、代码如下:#include<iostream>#include <string>using namespace std ;int main(){string Str;char ch ;int i=0,j=0;cout << "input str:" <<endl;getline(cin , Str );for ( i=0;i<Str.length();i++ ){if ( Str[i] >='a' && Str[i]<='z' || Str[i] >='A' && Str[i]<='Z' ) j++;}cout << "str="<<Str<<endl ;cout << "The number is:" << j <<endl ;system("pause");return 0;}运行结果:2、代码和运行结果:实验总结1、这次试验让我了解了在C++程序中的输入输出和字符串的统计。
2、掌握了一点点递归的方法。
3、通过这次试验觉得自己还是有很多不足,对基础知识掌握不牢。
指导教师意见签名:年月日注:各学院可根据教学需要对以上栏木进行增减。
表格内容可根据内容扩充。
实验八指针操作实验目的(1)掌握指针概念及定义,指针变量的引用和操作。
(2)掌握通过指针操作数组元素的方法。
(3)掌握指针参数在函数中传递地址值。
(4)掌握通过指针使用字符串。
(5)了解main函数中参数的使用。
实验内容1.读程序写结果(1) /****** s8-1.c ******/#include <stdio.h>main(){int a[]={2,3,4};int *p,s,i;s=1;p=a;for(i=0;i<3;i++)s*=*(p+i);printf("s=%d\n ",s);}上机前分析结果:实际上机结果:(2) /****** s8-2.c ******/#include<stdio.h>main(){int a[]={1,3,5,7,9},*p=a;printf("%d\n ",(*p++));printf("%d\n ",(*++p));printf("%d\n ",(*++p)++);printf("%d\n ",*p);}上机前分析结果:实际上机结果:(3) /****** s8-3.c ******/#include <stdio.h>main(){char s1[]="Today is Friday!";char *s2="Tomorrow ",*p;p=s1;while (*s2!=’\0’)*p++=*s2++;printf("%s\n ",s1);}上机前分析结果:实际上机结果:(4) /****** s8-4.c ******/#include <stdio.h>int fun(int *s){static int t=0;t=*s+t;return t;}main(){int i,k;for (i=0;i<4;i++){k=fun(&i);printf("%4d",k);}printf("\n");}上机前分析结果:实际上机结果:2.完善程序(1) 程序功能:函数strcat(str1,st2)实现将字符串str2拼接到字符串str1后面的功能。
实验八指针程序设计班级:学号:姓名:评分:提交时间:2013-12-13之前一.【实验目的】1、理解指针、地址和数组间的关系。
2、掌握通过指针操作数组元素的方法。
3、掌握数组名作为函数参数的编程方式。
4、进一步掌握C程序的调试方法和技巧。
二.【实验内容和步骤】1、程序调试题A.目标:进一步学习掌握程序调试的方法和技巧。
B.内容:参照《实验指导》教材P77“1.调试示例”,有n个整数,使前面各数顺序循环移动m个位置(m<n)。
编写一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个整数。
改正程序中的错误,使其实现程序的功能。
(注:程序文件保存在“调试示例”文件夹中,文件名为error09_1.cpp)①调试正确的源程序清单#include <stdio.h>void mov(int *, int, int);int main(){int m, n, i, a[80], *p;printf("Input n, m:");scanf("%d%d",&n,&m);for(p=a,i=0;i<n;i++)scanf("%d",p++);mov(a,n,m);printf("After move: ");for(i=0;i<n;i++)printf("%5d",a[i]);printf("\n");return 0;}void mov(int *x, int n, int m){int i,j,k;for(i=0;i<m;i++){k=x[n-1];for(j=n-1;j>0;j--)x[j]=x[j-1]; /* 调试时设置断点 */x[0]=k;}}②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。
2、完善程序,并调试运行程序题目(1)在数组中查找指定元素。
程序功能:输入一个整数n(1<n≤10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a中查找x,如果找到则输出相应的下标,否则输出“Not found”。
要求定义一个函数search(int list[],int n,int x),在数组list中查找元素x,若找到则返回相应下标,否则返回-1,其中:n为list数组中的元素个数。
在main函数中调用search函数实现程序功能。
(注:程序文件保存在“第1题”文件夹中)打开proj1.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单//程序功能:输入一个整数n(1<n≤10),然后输入n个整数存入数组a中,再输入一个整数x,在数组a 中// 查找 x,如果找到则输出相应的下标,否则输出"Not found"。
//要求:定义并调用一个函数search(int list[],int n,int x),在数组list中查找元素x,若找到// 则返回相应下标,否则返回-1,其中:n为list数组中的元素个数。
//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include <stdio.h>void main(){int i, x, a[10], res;int search(int *, int, int);for(i=0; i<10; i++) scanf("%d", &a[i]);scanf("%d", &x);//请在两条星线之间填入相应的代码, 调用search函数,查找整数x在数组a中的位置。
/*************************************************************************/res=search(a,10,x);/*************************************************************************/ if(res==-1)printf("Not found\n");else printf("The position is %d\n", res);}//定义一个函数search(int list[],int n,int x),在数组list中查找元素x,若找到则//返回相应下标,否则返回-1,其中:n为list数组中的元素个数。
int search(int *p, int n, int x){int i, pos;//请在两条星线之间填入相应的代码, 查找x在指针p指向的含n个元素的数组中的位置//要求:利用指针方法来处理。
/*************************************************************************/pos=-1;for(i=0;i<n;i++,*p++){if(*p==x)pos=i;}/*************************************************************************/return pos;}②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。
题目(2)排序。
程序功能:输入一个整数n(1<n≤10),然后输入n个整数存入数组a中,要求定义一个函数void sort(int list[],int n),用选择法对list数组中的元素升序排列,其中:n为list数组中的元素个数。
在main函数中调用sort函数实现排序,最后输出排序后的结果。
(注:程序文件保存在“第2题”文件夹中)打开proj2.cpp 文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单//程序功能:输入一个整数n(1<n≤10),然后输入n个整数存入数组a中,定义并调用一个// 函数void sort(int list[],int n),用选择法对list数组中的元素按升序排// 列,其中:n为list数组中的元素个数。
最后输出排序后的结果。
//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include <stdio.h>void main(){int i, a[10];void sort(int *, int);for(i=0; i<10; i++) scanf("%d", &a[i]);//请在两条星线之间填入相应的代码, 调用sort函数,对数组a中的元素按照升序排列/*************************************************************************/sort(a,10);/*************************************************************************/printf("The result is: ");for(i=0;i<10;i++)printf("%d ",a[i]); //输出排序后的结果printf("\n");}//定义一个函数void sort(int *p,int n),用选择法对指针p指向的数组中的元素按升序//排列,其中:n为数组中的元素个数。
void sort(int *p, int n){int i,j,iMin,temp;//请在两条星线之间填入相应的代码, 用选择法对指针p指向的数组中的元素升序排列//其中:n为list数组中的元素个数。
//要求:利用指针方法来处理。
/*************************************************************************/for(i=0;i<n;i++){iMin=i;for(j=i+1;j<n;j++)if(*(p+iMin)>*(p+j))iMin=j;temp=*(p+i);*(p+i)=*(p+iMin);*(p+iMin)=temp;}/*************************************************************************/ }②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。
题目(3)找最长的字符串。
程序功能:连续输入5个以空格分隔的字符串(字符串的长度不超过80),输出其中长度最长的字符串。
例如:输入:li wang zhang jin xiao,输出:zhang。
(注:程序文件保存在“第3题”文件夹中)打开proj3.cpp文件,在两条星线之间填入相应的代码,使程序完成该功能。
①调试正确的源程序清单//程序功能:连续输入5个字符串(字符串的长度不超过80),输出其中长度最长的字符串。
//提示:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include <stdio.h>#include <string.h>void main( ){int i,MaxLen;char str[80], longest[80], *p;printf("Input 5 strings: ");scanf("%s",str);//输入第一个字符串strcpy(longest,str);MaxLen=strlen(str);//将第一个字符串设置为初始的最长字符串p=str;//将指针p指向字符串str//请在两条星线之间填入相应的代码, 输入其它4个字符串,查找其中最长的字符串。
//要求:利用指针方法来处理。
/***********************************************************************/for(i=0;i<4;i++){scanf("%s",p);if(strlen(p)>MaxLen){MaxLen=strlen(p);strcpy(longest,p);}}/************************************************************************/ printf("The longest string is: %s \n", longest);}②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。