实验6函数习题及答案.docx

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

实验6函数习题及答案.docx

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

实验6函数习题及答案.docx

实验6函数习题及答案

实验6函数

班级:

学号:

姓名:

日期:

一、实验目的

(1)掌握定义函数的方法;

(2)掌握函数实参与形参的对应关系,以及“值传递”的方式;

(3)掌握函数的嵌套调用和递归调用的方法;

(4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法;

(5)学习对多文件的程序编译和运行。

二、实验内容

1.阅读下面程序,写出程序运行结果,并且上机进行验证。

(1)a1.cpp

变量的虚实耦合,实现的是值传递,是单向传递

#include"stdio.h"

intswap(inta,intb)

{

intc,s;

c=a;

a=b;

b=c;

s=a+b;

returns;

}

voidmain()

{

inta,b,s;

a=3;b=4;

s=swap(a,b);

printf("a=%db=%ds=%d\n",a,b,s);

}

(2)a2.cpp

将十进制数26的各位数字相乘

#include"stdio.h"

intfun(intnum)

{

intk=1;

do

{

k*=num%10;/

num/=10;

}while(num);

return(k);

}

voidmain()

{

intn=26;

printf("%d\n",fun(n));

}

(3)a3.cpp

变量的作用域,当在函数内定义了与全局变量同名的局部变量时,全局变量被屏蔽

#include"stdio.h"

inta=3,b=5,c;

voidf(intb)

{

c=a+b;

printf("%d%d%d\n",a,b,c);

}

voidmain()

{

inta=8;

f(3);

printf("%d%d%d\n",a,b,c);

}

(4)a4.cpp

递归,将十进制11转换为二进制

#include"stdio.h"

voiddtob(intn)

{

inti;

if(n>1)

{

i=n%2;

dtob(n/2);

}

else

i=n;

printf("%d",i);

}

voidmain()

{

inti=11;

printf("%d->",i);

dtob(i);

printf("

(2)\n");

}

(5)a5.cpp

静态变量,求1到4的阶乘

#include"stdio.h"

intf1(intn)

{

staticintf=1;

f=f*n;

return(f);

}

voidmain()

{

inti;

for(i=1;i<=4;i++)

printf("%5d",f1(i));

printf("\n");

}

2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。

并上机进行调试验证)

(1)b1.cpp

程序说明:

下面程序将输入的十进制数n转换为b进制数,并将转换结果输出。

转换的方法是:

除b取余法。

#include"stdio.h"

voidtransfer(intm,intk)

{

inta[20],i;

for(i=0;m;i++)//当商m为0时,循环结束,否则继续循环

{

a[i]=m%k;//将m对k的余数存放在数字a中

m/=k;//m=m/k,即将m除k的商放在m中

}

for(i--;i>=0;i--)

printf("%d",a[i]);

printf("\n");

}

voidmain()

{

intb,n;

scanf("%d%d",&b,&n);

transfer(n,b);

}

(2)b2.cpp

程序说明:

歌德巴赫猜想指出:

任何一个充分大的偶数都可以表示为两个素数之和,例如4=2+26=3+38=3+5…50=3+47。

下面程序将4-50之间的所有偶数用两个素数之和表示,判断一个整数是否为素数用函数prime完成。

#include"stdio.h"

intprime(intx)//判断x是否为素数,如果x为素数,则返回1,否则返回0

{

intk,flag=1;

for(k=2;k<=x/2;k++)

if(x%k==0)

{

flag=0;

break;

}

return(flag);

}

voidmain()

{

intm,n;

for(m=4;m<=50;m=m+2)

for(n=2;n

if(prime(n)&&prime(m-n))//如果n和m-n均为素数,则prime(n)和prime(m-n)返回的值均为1,非零即真

{

printf("%d=%d+%d\n",m,n,m-n);

break;

}

}

(3)b3.cpp

程序说明:

用一个一维数组存放10个学生的成绩,写一个函数求出平均分、最高分和最低分。

#include"stdio.h"

floatmax=0,min=0;

floataverage(floatscore[],intn)

{

inti;

floatave,sum=score[0];

max=min=score[0];

for(i=1;i

{

if(score[i]>max)

max=score[i];

elseif(score[i]

min=score[i];

sum=sum+score[i];

}

ave=sum/10;

returnave;

}

voidmain()

{

floatave,score[10];

inti;

for(i=0;i<10;i++)

scanf("%f",&score[i]);

ave=average(score,10);//如果形参是数组,则调用时实参应该用数组名,实现的是地址传递

printf("max=%6.2fmin=%6.2faverage=%6.2f\n",max,min,ave);

}

(4)b4.cpp

程序说明:

在主函数中读入一字符串,再读入一字符,然后调用函数dele在字符串中查找并删除该字符,最后输出该字符串。

#include"stdio.h"

#include

voiddele(charp[],charch)

{

inti=0,j;

while(p[i]!

='\0')

{

if(p[i]==ch)

for(j=i;p[j]!

='\0';j++)

p[j]=p[j+1];

else

i++;

}

}

voidmain()

{

charp[80],ch;

scanf("%s",p);

ch=getchar();

scanf("%c",&ch);

dele(p,ch);

printf("%s",p);

}

3.编写程序并上机调试运行之。

(1)写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。

本程序应当准备以下测试数据:

17、34、2、1、0。

分别运行并检查结果是否正确。

#include

#include

voidmain()

{

intprime(int);

intn;

printf("\npleaseinputainteger:

");

scanf("%d",&n);

if(prime(n))

printf("\n%disaprime!

",n);

else

printf("\n%disnotaprime!

",n);

}

intprime(intn)

{

inti,flag=1;

for(i=2;i<=n/2&&flag==1;i++)

{

if(n%i==0)

flag=0;

}

return(flag);

}

(2)用一个函数来实现将一行字符串中最长的单词输出。

此行字符串从主函数传递给该函数。

把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。

把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。

letter函数用于测试是否字母,longest函数用于返回最长单词的起始位置。

#include

#include

voidmain()

{

intletter(char);

intlongest(chars[]);

inti;

charstr[100];

printf("\ninputthestring:

");

gets(str);

printf("Thelongestwordis:

");

for(i=longest(str);letter(str[i]);i++)

printf("%c",str[i]);

printf("\n");

}

intletter(charc)

{

if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))

return

(1);

else

return(0);

}

intlongest(chars[])

{

intlen=0,i,length=0,flag=1,place=0,point;

for(i=0;i<=strlen(s);i++)

if(letter(s[i]))

if(flag)

{

point=i;

flag=0;

}

else

len++;

else

{

flag=1;

if(len>=length)

{

length=len;

place=point;

}

len=0;

}

return(place);

}

(3)用递归法将一个整数n转换成字符串。

例如,输入483,应输出字符串“483”。

N的位数不确定,可以是任意的整数。

#include

voidmain()

{

voidconvert(intn);

intnumber;

printf("inputaninteger:

");

scanf("%d",&number);

printf("output:

");

if(number<0)

{

putchar('-');

number=-number;

}

convert(number);

putchar('\n');

}

voidconvert(intn)

{

inti;

if((i=n/10)!

=0)

convert(i);

putchar(n%10+'0');

}

(4)求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。

用另一函数根据求出的最大公约数求最小公倍数。

不用全局变量,分别用两个函数求最大公约数和最小公倍数。

两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。

用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。

将最大公约数和最小公倍数都设置为全局变量,在主函数中输出它们的值。

#include

voidmain()

{

inthcf(int,int);

intlcd(int,int,int);

intu,v,h,l;

scanf("%d%d",&u,&v);

h=hcf(u,v);

printf("H.C.F=%d\n",h);

l=loc(u,v,h);

printf("L.C.D=%d\n",l);

}

inthcf(intu,intv)

{

intt,r;

if(v>u)

{

t=u;

u=v;

v=t;

}

while((r=u%v)!

=0)

{

u=v;

v=r;

}

return(v);

}

intloc(intu,intv,inth)

{

return(u*v/h);

}

(5)写一函数,输入一个十六进制数,输出相应的十进制。

#include

#defineMAX100

voidmain()

{

inthtoi(chars[]);

intc,i,flag,flag1;

chart[MAX];

i=0;

flag=0;

flag1=1;

printf("\ninputaHEXnumber:

");

while((c=getchar())!

='\0'&&i

{

if((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F'))

{

flag=1;

t[i++]=c;

}

elseif(flag)

{

t[i]='\0';

printf("decimalnumber%d:

\n",htoi(t));

printf("continueornot(Y/N)?

");

c=getchar();

if(c=='N'||c=='n')

flag1=0;

else

{

flag=0;

i=0;

printf("\ninputaHEXnumber:

");

}

}

}

}

inthtoi(chars[])

{

inti,n;

n=0;

for(i=0;s[i]!

='\0';i++)

{

if(s[i]>='0'&&s[i]<='9')

n=n*16+s[i]-'0';

if(s[i]>='a'&&s[i]<='f')

n=n*16+s[i]-'a'+10;

if(s[i]>='A'&&s[i]<='F')

n=n*16+s[i]-'A'+10;

}

return(n);

}

三、预习内容

教材第7章。

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

当前位置:首页 > 经管营销 > 经济市场

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

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