实验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;iscanf("%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;ifor(j=i+1;jif(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;iscanf("%f",&a[i]);
sort(a,N);
printf("升序排序后的数组为:
\n");
for(i=0;iprintf("%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;jbb[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;kprintf("%d",aa[k]);
printf("\nEnteranumbertodeleted:
");
scanf("%d",&y);
n=fun(aa,n,y);
printf("Thedataafterdeleted%d:
\n",y);
for(k=0;kprintf("%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');
}