实验6函数习题及答案.docx
- 文档编号:27950147
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:17
- 大小:45.24KB
实验6函数习题及答案.docx
《实验6函数习题及答案.docx》由会员分享,可在线阅读,更多相关《实验6函数习题及答案.docx(17页珍藏版)》请在冰豆网上搜索。
实验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章。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 函数 习题 答案