实验7函数程序.docx
- 文档编号:2630646
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:17
- 大小:19.34KB
实验7函数程序.docx
《实验7函数程序.docx》由会员分享,可在线阅读,更多相关《实验7函数程序.docx(17页珍藏版)》请在冰点文库上搜索。
实验7函数程序
实验七函数——参考程序
一、程序调试方法实验
1.找出并改正以下源程序中错误,得出正确的运行结果。
源程序如下:
#include
//函数声明intadd(inta,intb);
voidmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("a+b=%d",add(a,b));
}
voidadd(inta,b)//改为intadd(inta,intb)
{
returna+b;
}
2.找出并改正以下源程序中错误,得出正确的运行结果,其中max函数的功能是得到数组中最大元素的值。
源程序如下:
#include
#defineN10;//去掉尾部分号
floatmax(floata[],intn)//尾部加上分号
voidmain()
{
floatdata[N];
inti;
for(i=0;i scanf("%f",data[i]);//改为scanf("%f",&data[i]); printf("maxis=%f",max(data[N],N));//改为printf("maxis=%f",max(data,N)); } floatmax(floata[],intn) { inti,result;//改为inti; floatresult; //增加result=a[0]; for(i=0;i { if(a[i]>result) result=a[i]; } returnresult; } 3.找出并改正以下源程序中错误,得出正确的运行结果,其中converse函数的功能是逆序输出n个字符。 解题思路: 已知字符串的长度,逆序输出字符串 如果只有1个字符,直接输出该字符后结束 否则: 输出后面的所有字符之后,再输出该字符 源程序如下: #include voidmain() { inti=5; voidconverse(intn); printf("Input5characters: "); converse(i); printf("\n"); } voidconverse(n);//改为voidconverse(intn)并去掉分号 { charnext; if(n>=1)//改为if(n==1) { next=getchar(); putchar(next); } else { next=getchar(); converse(n-1); putchar(next); } } 四、编写程序 1、编写一个函数,其功能是判断形式参数是否为小写字母,若是,返回其对应的大写字母,否则返回原字符。 然后在main函数中输入一个字符,调用该函数得到其大写字母并输出 #include charisLow(charch) { if(ch>='a'&&ch<='z') returnch-32; else returnch; } voidmain(void) { charch; printf("请输入一个字符: \n"); scanf("%c",&ch); printf("%c\n",isLow(ch)); } 2、编写函数reverse(intnumber),它的功能是将number逆序输出,在main函数中输入一个整数,调用该函数得到逆序的数并输出。 例如reverse(11233)的返回值为33211。 #include intreverse(intn) { intrev=0,num; do { num=n%10; rev=rev*10+num; n=n/10; }while(n); returnrev; } voidmain(void) { intnum,revnum; printf("请输入一个整数: \n"); scanf("%d",&num); revnum=reverse(num); printf("逆序后整数为: %d\n",revnum); } 3、编写函数完成如下功能: 将长整型数中数字为偶数的数依次取出,构成一个新数返回,例如,当s中的数为: 87653142时,则返回的数为: 8642。 提示: 依次取出长整型数的每一位数字,如果是偶数,则放入新数中。 在main函数中输入一个长整型数,调用该函数得到新的数,并输出结果。 #include"stdio.h" longfunc(longs); voidmain() { longa; printf("请输入一个整数: "); scanf("%ld",&a); printf("%ld\n",func(a)); } longfunc(longn) { longresult=0; intnum,weight=1;//weight表示数位的权值(即个、十、百,。 。 。 。 ) while(n! =0) { num=n%10;//得到最低位 if(num%2==0) { result=num*weight+result;//重新组织成新的数 weight=weight*10; } n/=10;//去掉最低位 } return(result); } 4、编写一个函数sort,实现数组元素的升序(或降序)排列。 在main函数中输入数组元素,调用该函数进行排序,最后输出排序后的结果。 #include #defineN10 voidsort(floata[],intn)//无返回值,在原数组上排序并带回 { inti,j; floattemp; for(i=0;i for(j=i+1;j if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } voidmain(void) { floata[N]; inti; printf("请输入%d个数值: \n",N); for(i=0;i scanf("%f",&a[i]); sort(a,N); printf("升序排序后的数组为: \n"); for(i=0;i printf("%6.2f",a[i]); printf(”\n”); } 5、编写函数求出二维整型数组中元素的最大值及其下标号。 提示: 这里至少需要返回二维数组元素的行,列两个值,而函数只能返回1个值(无法返回2个值),所以只能通过数组作为参数的方法将值带回来。 在main函数中输入一个二维整型数组,调用该函数得到最大值所在的下标,并输出最大值及其下标号。 #include voidmax_value(intarray[][4],intindex[]) //没有返回值的函数,结果通过与index对应的数组带回 { inti,j,max; max=array[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if(max { index[0]=i; index[1]=j; max=array[i][j]; } } voidmain() { inta[3][4]={{18,2,3,4}, {8,7,6,5}, {9,10,11,12}}; intmaxindex[2]={0}; //定义数组maxindex以保存最大值的行、列下标,因为函数无法返回2个值,只能通过数组带回来 inti,j; max_value(a,maxindex); i=maxindex[0]; j=maxindex[1]; printf("Max=array[%d][%d]=%d\n",i,j,a[i][j]); } 6、编写函数,统计给定字符串中各个字母出现的次数,不区分大小写。 在main函数中输入一个字符串,调用该函数进行计算,然后输出统计结果。 提示: 统计结果可以保存到一个数组中,如intcount[26],分别存储每个字母出现的次数,初值0,然后将数组作为函数参数将值带回来。 #include"stdio.h" voidfun(chars[],inta[])//将统计26个字母的结果存放在与数组a对应的实参中 { inti,j; for(i=0;s[i];i++) { if(s[i]>='A'&&s[i]<='Z') j=s[i]-'A';//得到该字母在26个字母中的序号 elseif(s[i]>='a'&&s[i]<='z') j=s[i]-'a'; a[j]++;//对应字母的个数加1 } } intmain(void) { charstr[80]; intcount[26]={0},i;//count数组26个元素分别存储每个字母出现的次数,初值0 printf("请输入一串字符以回车键结束: \n"); gets(str); fun(str,count); //输出统计结果 for(i=0;i<26;i++) if(count[i]! =0) printf("%c或%c出现的次数为: %d\n",'a'+i,'A'+i,count[i]); } 7、编写函数substring(char[],charsub[]),查找sub串在字符串s中第一次出现的下标位置。 提示: 若找到,函数返回对应下标,否则返回-1。 例如s串为“abcdefg”,sub串为“def”,则返回值为4。 在main函数中输入主串和子串,调用该函数并输出结果。 #include #include intsubstring(chars[],charsub[]) //查找sub在s中第一次出现的位置,若找到返回对应下标,否则返回-1 { intend,i,j; end=strlen(s)-strlen(sub);/*计算结束位置*/ if(end>0)/*子串sub小于字符串s*/ { for(i=0;i<=end;i++)/*用循环从首字符开始依次比较*/ { for(j=0;sub[j];j++) { if(s[i+j]! =sub[j]) break; } if(sub[j]=='\0')/*找到(即sub中所有字符都匹配),返回位置*/ returni+1; } } return-1;/*未找到,返回-1*/ } voidmain(void) { charstring[100]; charsubstr[100]; intresult; printf("请输入字符串: "); gets(string);/*读取字符串*/ printf("请输入要搜索的子字符串==>"); gets(substr);/*读取子字符串*/ result=substring(string,substr);/*定位子字符串*/ if(result>0) printf("子字符串%s位置在%d\n",substr,result); else printf("没有找到子字符串%s\n",substring); } 8、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。 函数的功能是: 删除所有值为y的元素。 已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。 注意: 部分源程序已给出,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。 源程序如下: #include #defineM20 intfun(intbb[],intn,inty) { inti,j; for(i=0;i { if(bb[i]==y)//当某个元素等于y时,把i后的元素顺次往前挪动一个位置 { for(j=i;j bb[j]=bb[j+1]; n--; i--; } } returnn; } voidmain() { intaa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1},n=15,y,k; printf("Theoriginaldatais: \n"); for(k=0;k printf("%d",aa[k]); printf("\nEnteranumbertodeleted: "); scanf("%d",&y); n=fun(aa,n,y); printf("Thedataafterdeleted%d: \n",y); for(k=0;k printf("%d",aa[k]); printf("\n\n"); } 第七课后习题7、8、9参考程序 7、/*在字符串中插入子串*/ #include #include voidinsert(chars1[],chars2[],intpos) { intlen1,len2,i,j,k; len1=strlen(s1);/*计算字符串1的长度*/ len2=strlen(s2);/*计算字符串2的长度*/ if(pos>len1)/*插入位置是字符串的尾部*/ pos=len1; elseif(pos<0)/*插入位置是字符串的头部*/ pos=0; k=len1+len2;/*计算新字符串的长度*/ for(i=len1-1,j=k-1;i>=pos;j--,i--)/*将插入点后字符移至串1尾部*/ s1[j]=s1[i]; s1[k]='\0'; for(i=pos,j=0;s2[j];i++,j++)/*将字符串2插入到字符串1中*/ s1[i]=s2[j]; } voidmain(void) { chars1[80],s2[20];//假定输入时串1不超60字符,串2不超20字符 intpos; printf("请输入字符串1: \n"); gets(s1); printf("请输入字符串2: \n"); gets(s2); printf("请输入将字符串2插入字符串1的位置: \n"); scanf("%d",&pos); insert(s1,s2,pos-1); printf("插入字符串2后的字符串1为: %s\n",s1); } 8、/*输出字符串中最长的单词*/ #include #include voidlongword(chars1[],chars2[]) { charword[100]={0};/*初始化为空字符*/ inti=0,j=0,k=0,m=0,n=0; for(i=0;s1[i];i++) { if(s1[i]! ='')/*单词之间用空格隔开*/ { word[j]=s1[i];/*word记录当前考查的单词*/ j++;/*j记录当前考查单词的长度*/ } if(s1[i]=='')/*新单词*/ { if(j>n)/*word记录的单词长度超过最长单词*/ { word[j]='\0'; strcpy(s2,word);/*最长单词赋给s2*/ n=j;/*n记录最长单词的长度*/ } strcpy(word,"");/*middle字符数组重新初始化为空串*/ j=0;/*j记录新单词的长度*/ } } if(j>n)/*与最后一个单词比较*/ { word[j]='\0'; strcpy(s2,word); } } voidmain(void) { charsetence[100],max[100];/*max记录最长单词*/ printf("请输入一串单词\n"); gets(setence); longword(setence,max); printf("最长单词为: "); puts(max); } 9、/*逆序打印字符*/ #include"stdio.h" voidreverseprint() { charch; ch=getchar(); if(ch! ='\n') reverseprint(); putchar(ch); } voidmain(void) { reverseprint(); putchar('\n'); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 函数 程序