实验7函数程序.docx

上传人:b****1 文档编号:2630646 上传时间:2023-05-04 格式:DOCX 页数:17 大小:19.34KB
下载 相关 举报
实验7函数程序.docx_第1页
第1页 / 共17页
实验7函数程序.docx_第2页
第2页 / 共17页
实验7函数程序.docx_第3页
第3页 / 共17页
实验7函数程序.docx_第4页
第4页 / 共17页
实验7函数程序.docx_第5页
第5页 / 共17页
实验7函数程序.docx_第6页
第6页 / 共17页
实验7函数程序.docx_第7页
第7页 / 共17页
实验7函数程序.docx_第8页
第8页 / 共17页
实验7函数程序.docx_第9页
第9页 / 共17页
实验7函数程序.docx_第10页
第10页 / 共17页
实验7函数程序.docx_第11页
第11页 / 共17页
实验7函数程序.docx_第12页
第12页 / 共17页
实验7函数程序.docx_第13页
第13页 / 共17页
实验7函数程序.docx_第14页
第14页 / 共17页
实验7函数程序.docx_第15页
第15页 / 共17页
实验7函数程序.docx_第16页
第16页 / 共17页
实验7函数程序.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验7函数程序.docx

《实验7函数程序.docx》由会员分享,可在线阅读,更多相关《实验7函数程序.docx(17页珍藏版)》请在冰点文库上搜索。

实验7函数程序.docx

实验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');

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2