还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验七函数——参考程序
一、程序调试方法实验
1.找出并改正以下源程序中错误,得出正确的运行结果源程序如下#includestdio.h//函数声明intaddintaintb;voidmain{intab;scanf%d%dab;printfa+b=%daddab;}voidaddintab//改为intaddintaintb{returna+b;}
2.找出并改正以下源程序中错误,得出正确的运行结果,其中max函数的功能是得到数组中最大元素的值源程序如下#includestdio.h#defineN10;//去掉尾部分号floatmaxfloata[]intn//尾部加上分号voidmain{floatdata[N];inti;fori=0;iN;i++scanf%fdata[i];//改为scanf%fdata[i];printfmaxis=%fmaxdata[N]N;//改为printfmaxis=%fmaxdataN;}floatmaxfloata[]intn{intiresult;//改为inti;floatresult;//增加result=a
[0];fori=0;in;i++{ifa[i]resultresult=a[i];}returnresult;}
3.找出并改正以下源程序中错误,得出正确的运行结果,其中converse函数的功能是逆序输出n个字符解题思路已知字符串的长度,逆序输出字符串如果只有1个字符,直接输出该字符后结束否则输出后面的所有字符之后,再输出该字符源程序如下#includestdio.hvoidmain{inti=5;voidconverseintn;printfInput5characters:;conversei;printf\n;}voidconversen;//改为voidconverseintn并去掉分号{charnext;ifn=1//改为ifn==1{next=getchar;putcharnext;}else{next=getchar;conversen-1;putcharnext;}}
四、编写程序
1、编写一个函数,其功能是判断形式参数是否为小写字母,若是,返回其对应的大写字母,否则返回原字符然后在main函数中输入一个字符,调用该函数得到其大写字母并输出#includestdio.hcharisLowcharch{ifch=ach=zreturnch-32;elsereturnch;}voidmainvoid{charch;printf请输入一个字符\n;scanf%cch;printf%c\nisLowch;}
2、编写函数reverse(intnumber),它的功能是将number逆序输出,在main函数中输入一个整数,调用该函数得到逆序的数并输出例如reverse
(11233)的返回值为33211#includestdio.hintreverseintn{intrev=0num;do{num=n%10;rev=rev*10+num;n=n/10;}whilen;returnrev;}voidmainvoid{intnumrevnum;printf请输入一个整数\n;scanf%dnum;revnum=reversenum;printf逆序后整数为%d\nrevnum;}
3、编写函数完成如下功能将长整型数中数字为偶数的数依次取出,构成一个新数返回,例如,当s中的数为87653142时,则返回的数为8642提示依次取出长整型数的每一位数字,如果是偶数,则放入新数中在main函数中输入一个长整型数,调用该函数得到新的数,并输出结果#includestdio.hlongfunclongs;voidmain{longa;printf请输入一个整数;scanf%lda;printf%ld\nfunca;}longfunclongn{longresult=0;intnumweight=1;//weight表示数位的权值(即个、
十、百,)whilen!=0{num=n%10;//得到最低位ifnum%2==0{result=num*weight+result;//重新组织成新的数weight=weight*10;}n/=10;//去掉最低位}returnresult;}
4、编写一个函数sort,实现数组元素的升序(或降序)排列在main函数中输入数组元素,调用该函数进行排序,最后输出排序后的结果#includestdio.h#defineN10voidsortfloata[]intn//无返回值,在原数组上排序并带回{intij;floattemp;fori=0;in-1;i++/*冒泡排序*/forj=i+1;jn;j++ifa[i]a[j]{temp=a[i];a[i]=a[j];a[j]=temp;}}voidmainvoid{floata[N];inti;printf请输入%d个数值\nN;fori=0;iN;i++scanf%fa[i];sortaN;printf升序排序后的数组为\n;fori=0;iN;i++printf%
6.2fa[i];printf”\n”;}
5、编写函数求出二维整型数组中元素的最大值及其下标号提示这里至少需要返回二维数组元素的行,列两个值,而函数只能返回1个值(无法返回2个值),所以只能通过数组作为参数的方法将值带回来在main函数中输入一个二维整型数组,调用该函数得到最大值所在的下标,并输出最大值及其下标号#includestdio.hvoidmax_valueintarray[]
[4]intindex[]//没有返回值的函数,结果通过与index对应的数组带回{intijmax;max=array
[0]
[0];fori=0;i3;i++forj=0;j4;j++ifmaxarray[i][j]{index
[0]=i;index
[1]=j;max=array[i][j];}}voidmain{inta
[3]
[4]={{18234}{8765}{9101112}};intmaxindex
[2]={0};//定义数组maxindex以保存最大值的行、列下标因为函数无法返回2个值,只能通过数组带回来intij;max_valueamaxindex;i=maxindex
[0];j=maxindex
[1];printfMax=array[%d][%d]=%d\nija[i][j];}
6、编写函数,统计给定字符串中各个字母出现的次数,不区分大小写在main函数中输入一个字符串,调用该函数进行计算,然后输出统计结果提示统计结果可以保存到一个数组中,如intcount
[26],分别存储每个字母出现的次数,初值0,然后将数组作为函数参数将值带回来#includestdio.hvoidfunchars[]inta[]//将统计26个字母的结果存放在与数组a对应的实参中{intij;fori=0;s[i];i++{ifs[i]=As[i]=Zj=s[i]-A;//得到该字母在26个字母中的序号elseifs[i]=as[i]=zj=s[i]-a;a[j]++;//对应字母的个数加1}}intmainvoid{charstr
[80];intcount
[26]={0}i;//count数组26个元素分别存储每个字母出现的次数,初值0printf请输入一串字符以回车键结束\n;getsstr;funstrcount;//输出统计结果fori=0;i26;i++ifcount[i]!=0printf%c或%c出现的次数为%d\na+iA+icount[i];}
7、编写函数substring(char[]charsub[]),查找sub串在字符串s中第一次出现的下标位置提示若找到,函数返回对应下标,否则返回-1例如s串为“abcdefg”,sub串为“def”,则返回值为4在main函数中输入主串和子串,调用该函数并输出结果#includestdio.h#includestring.hintsubstringchars[]charsub[]//查找sub在s中第一次出现的位置,若找到返回对应下标,否则返回-1{intendij;end=strlens-strlensub;/*计算结束位置*/ifend0/*子串sub小于字符串s*/{fori=0;i=end;i++/*用循环从首字符开始依次比较*/{forj=0;sub[j];j++{ifs[i+j]!=sub[j]break;}ifsub[j]==\0/*找到(即sub中所有字符都匹配),返回位置*/returni+1;}}return-1;/*未找到,返回-1*/}voidmainvoid{charstring
[100];charsubstr
[100];intresult;printf请输入字符串;getsstring;/*读取字符串*/printf请输入要搜索的子字符串==;getssubstr;/*读取子字符串*/result=substringstringsubstr;/*定位子字符串*/ifresult0printf子字符串%s位置在%d\nsubstrresult;elseprintf没有找到子字符串%s\nsubstring;}
8、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数函数的功能是删除所有值为y的元素已在主函数中给数组元素赋值,y的值由主函数通过键盘读入注意部分源程序已给出,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句源程序如下#includestdio.h#defineM20intfunintbb[]intninty{intij;fori=0;in;i++{ifbb[i]==y//当某个元素等于y时,把i后的元素顺次往前挪动一个位置{forj=i;jn-1;j++bb[j]=bb[j+1];n--;i--;}}returnn;}voidmain{intaa[M]={123321123454321}n=15yk;printfTheoriginaldatais:\n;fork=0;kn;k++printf%daa[k];printf\nEnteranumbertodeleted:;scanf%dy;n=funaany;printfThedataafterdeleted%d:\ny;fork=0;kn;k++printf%daa[k];printf\n\n;}第七课后习题
7、
8、9参考程序
7、/*在字符串中插入子串*/#includestdio.h#includestring.hvoidinsertchars1[]chars2[]intpos{intlen1len2ijk;len1=strlens1;/*计算字符串1的长度*/len2=strlens2;/*计算字符串2的长度*/ifposlen1/*插入位置是字符串的尾部*/pos=len1;elseifpos0/*插入位置是字符串的头部*/pos=0;k=len1+len2;/*计算新字符串的长度*/fori=len1-1j=k-1;i=pos;j--i--/*将插入点后字符移至串1尾部*/s1[j]=s1[i];s1[k]=\0;fori=posj=0;s2[j];i++j++/*将字符串2插入到字符串1中*/s1[i]=s2[j];}voidmainvoid{chars1
[80]s2
[20];//假定输入时串1不超60字符,串2不超20字符intpos;printf请输入字符串1:\n;getss1;printf请输入字符串2:\n;getss2;printf请输入将字符串2插入字符串1的位置:\n;scanf%dpos;inserts1s2pos-1;printf插入字符串2后的字符串1为%s\ns1;}
8、/*输出字符串中最长的单词*/#includestdio.h#includestring.hvoidlongwordchars1[]chars2[]{charword
[100]={0};/*初始化为空字符*/inti=0j=0k=0m=0n=0;fori=0;s1[i];i++{ifs1[i]!=/*单词之间用空格隔开*/{word[j]=s1[i];/*word记录当前考查的单词*/j++;/*j记录当前考查单词的长度*/}ifs1[i]==/*新单词*/{ifjn/*word记录的单词长度超过最长单词*/{word[j]=\0;strcpys2word;/*最长单词赋给s2*/n=j;/*n记录最长单词的长度*/}strcpyword;/*middle字符数组重新初始化为空串*/j=0;/*j记录新单词的长度*/}}ifjn/*与最后一个单词比较*/{word[j]=\0;strcpys2word;}}voidmainvoid{charsetence
[100]max
[100];/*max记录最长单词*/printf请输入一串单词\n;getssetence;longwordsetencemax;printf最长单词为;putsmax;}
9、/*逆序打印字符*/#includestdio.hvoidreverseprint{charch;ch=getchar;ifch!=\nreverseprint;putcharch;}voidmainvoid{reverseprint;putchar\n;}。