实验6 函数 习题及答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序说明:用一个一维数组存放10个学生的成绩,写一个函数求出平均分、最高分和最低分。
#include "stdio.h"
float max=0,min=0;
float average(float score[],int n)
{
int i;
float ave,sum=score[0];
max=min=score[0];
#include "stdio.h"
int swap(int a,int b)
{
int c,s;
c=a;
a=b;
b=c;
s=a+b;
return s;
}
void main()
{
int a,b,s;
a=3;b=4;
s=swap(a,b);
printf("a=%d b=%d s=%d\n",a,b,s);
int c,i,flag,flag1;
char t[MAX];
i=0;
flag=0;
flag1=1;
printf("\ninput a HEX number: ");
while((c=getchar())!='\0' && i<MAX && flag1)
{
if((c>='0' && c<='9')||(c>='a' && c<='f')||(c>='A' && c<='F'))
#include <stdio.h>
#include <string.h>
void main()
{
int letter(char);
int longest(char s[]);
int i;
char str[100];
printf("\n input the string:");
gets(str);
printf("The longest word is:");
{
int i=11;
printf("%d->",i);
dtob(i);
printf("(2)\n");
}
(5)a5.cpp
静态变量,求1到4的阶乘
#include "stdio.h"
int f1(int n)
{
static int f=1;
f=f*n;
return(f);
}
void main()
{
int i;
{
u=v;
v=r;
}
return(v);
}
int loc(int u,int v,int h)
{
return(u*v/h);
}
(5)写一函数,输入一个十六进制数,输出相应的十进制。
#include <stdio.h>
#define MAX 100
void main()
{
int htoi(char s[]);
}
int longest(char s[])
{
int len=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;
putchar('\n');
}
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
(4)求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一函数根据求出的最大公约数求最小公倍数。
不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。
实验
班级:
学号:
姓名:
日期:
一、
(1)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系,以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法;
(5)学习对多文件的程序编译和运行。
二、
1
(1)a1.cpp
变量的虚实耦合,实现的是值传递,是单向传递
}
(3)a3.cpp
变量的作用域,当在函数内定义了与全局变量同名的局部变量时,全局变量被屏蔽
#include "stdio.h"
int a=3,b=5,c;
void f(int b)
{
c=a+b;
printf("%d %d %d\n",a,b,c);
}
void main()
{
int a=8;
f(3);
void convert(int n);
int number;
printf("input an integer:");
scanf("%d",&number);
printf("output: ");
if(number<0)
{
putchar('-');
number=-number;
}
convert(number);
int i;
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);
for(i=longest(str);letter(str[i]);i++)
printf("%c",str[i]);
printf("\n");
}
int letter(char c)
{
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
return(1);
else
return(0);
for(i=1;i<=4;i++)
printf("%5d",f1(i));
printf("\n");
}
2
(1)b1.cpp
程序说明:下面程序将输入的十进制数n转换为b进制数,并将转换结果输出。转换的方法是:除b取余法。
#include "stdio.h"
void transfer(int m,int k)
#include "stdio.h"
int prime(int x) //判断x是否为素数,如果x为素数,则返回1,否则返回0
{
int k,flag=1;
for(k=2;k<=x/2;k++)
if(x % k==0)
{
flag=0;
break;
}
return(flag);
}
void main()
{
int m,n;
}
(4)b4.cpp
程序说明:在主函数中读入一字符串,再读入一字符,然后调用函数dele在字符串中查找并删除该字符,最后输出该字符串。
#include "stdio.h"
#include <string.h>
void dele(char p[],char ch)
{
int i=0,j;
while(p[i]!='\0')
{
if(p[i]==ch)
for(j=i;p[j]!='\0';j++)
p[j]=p[j+1];
else
i++;
}
}
void main()
{
char p[80],ch;
scanf("%s",p);
ch=getchar();
scanf("%c",&ch);
dele(p,ch);
printf("%s", p );
{
int a[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");
printf("%d %d %d\n",a,b,c);
}
(4)a4.cpp
递归,将十进制11转换为二进制
#include "stdio.h"
void dtob(int n)
{
int i;
if(n>1)
{
i=n%2;
dtob(n/2);
}
else
i=n;
printf("%d",i);
}
void main()
{
flag=1;
t[i++]=c;
}
else if(flag)
{
t[i]='\0';
printf("decimal number %d:\n",htoi(t));
printf("continue or not(Y/N)?");
c=getchar();
if(c=='N' || c=='n')
flag1=0;
else
{
flag=0;
i=0;
printf("\ninput a HEX number: ");
}
}
}
}
int htoi(char s[])
{
int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{
if(s[i]>='0' && s[i]<='9')
}
3
(1)写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
本程序应当准备以下测试数据:17、34、2、1、0。分别运行并检查结果是否正确。
#include <stdio.h>
#include <math.h>
void main()
{
int prime(int);
int n;
printf("\nplease input a integer:");
{
if(n%i==0)
flag=0;
}
return(flag);
}
(2)用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数。
把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。
把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。
letter函数用于测试是否字母,longest函数用于返回最长单词的起始位置。
用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设置为全局变量,在主函数中输出它们的值。
#include <stdio.h>
void main()
{
int hcf(int,int);
int lcd(int,int,int);
int u,v,h,l;
}
void main()
{
int b,n;
scanf("%d%d", &b,&n);
transfer(n,b);
}
(2)b2.cpp
程序说明:歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和,例如4=2+2 6=3+3 8=3+5… 50=3+47。下面程序将4-50之间的所有偶数用两个素数之和表示,判断一个整数是否为素数用函数prime完成。
scanf("%d",&n);
if(prime(n))
printf("\n%d is a prime!",n);
else
printf("\n%d is not a prime!",n);
}
int prime(int n)
{
int i,flag=1;
for(i=2;i<=n/2 && flag==1;i++)
for(m=4;m<=50;m=m+2)
for(n=2;n<m-1;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
for(i=1;i<n;i++)
{
if(score[i]>max)
max=score[i];
else if(score[i]<min)
min=score[i];
sum=sum+score[i];
}
ave=sum/10;
returnave;
}
void main()
{
float ave,score[10];
if(len>=length)
{
length=len;
place=point;
}
len=0;
}
return(place);
}
(3)用递归法将一个整数n转换成字符串。例如,输入483,应源自文库出字符串“483”。N的位数不确定,可以是任意的整数。
#include <stdio.h>
void main()
{
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);
}
int hcf(int u,int v)
{
int t,r;
if(v>u)
{
t=u;
u=v;
v=t;
}
while((r=u%v)!=0)
}
(2)a2.cpp
将十进制数26的各位数字相乘
#include "stdio.h"
int fun(int num)
{
int k=1;
do
{
k*=num %10;/
num/=10;
}while(num);
return(k);
}
void main()
{
int n=26;
printf("%d\n",fun(n));
#include "stdio.h"
float max=0,min=0;
float average(float score[],int n)
{
int i;
float ave,sum=score[0];
max=min=score[0];
#include "stdio.h"
int swap(int a,int b)
{
int c,s;
c=a;
a=b;
b=c;
s=a+b;
return s;
}
void main()
{
int a,b,s;
a=3;b=4;
s=swap(a,b);
printf("a=%d b=%d s=%d\n",a,b,s);
int c,i,flag,flag1;
char t[MAX];
i=0;
flag=0;
flag1=1;
printf("\ninput a HEX number: ");
while((c=getchar())!='\0' && i<MAX && flag1)
{
if((c>='0' && c<='9')||(c>='a' && c<='f')||(c>='A' && c<='F'))
#include <stdio.h>
#include <string.h>
void main()
{
int letter(char);
int longest(char s[]);
int i;
char str[100];
printf("\n input the string:");
gets(str);
printf("The longest word is:");
{
int i=11;
printf("%d->",i);
dtob(i);
printf("(2)\n");
}
(5)a5.cpp
静态变量,求1到4的阶乘
#include "stdio.h"
int f1(int n)
{
static int f=1;
f=f*n;
return(f);
}
void main()
{
int i;
{
u=v;
v=r;
}
return(v);
}
int loc(int u,int v,int h)
{
return(u*v/h);
}
(5)写一函数,输入一个十六进制数,输出相应的十进制。
#include <stdio.h>
#define MAX 100
void main()
{
int htoi(char s[]);
}
int longest(char s[])
{
int len=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;
putchar('\n');
}
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
(4)求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一函数根据求出的最大公约数求最小公倍数。
不用全局变量,分别用两个函数求最大公约数和最小公倍数。两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。
实验
班级:
学号:
姓名:
日期:
一、
(1)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系,以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法;
(5)学习对多文件的程序编译和运行。
二、
1
(1)a1.cpp
变量的虚实耦合,实现的是值传递,是单向传递
}
(3)a3.cpp
变量的作用域,当在函数内定义了与全局变量同名的局部变量时,全局变量被屏蔽
#include "stdio.h"
int a=3,b=5,c;
void f(int b)
{
c=a+b;
printf("%d %d %d\n",a,b,c);
}
void main()
{
int a=8;
f(3);
void convert(int n);
int number;
printf("input an integer:");
scanf("%d",&number);
printf("output: ");
if(number<0)
{
putchar('-');
number=-number;
}
convert(number);
int i;
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);
for(i=longest(str);letter(str[i]);i++)
printf("%c",str[i]);
printf("\n");
}
int letter(char c)
{
if((c>='a' && c<='z') || (c>='A' && c<='Z'))
return(1);
else
return(0);
for(i=1;i<=4;i++)
printf("%5d",f1(i));
printf("\n");
}
2
(1)b1.cpp
程序说明:下面程序将输入的十进制数n转换为b进制数,并将转换结果输出。转换的方法是:除b取余法。
#include "stdio.h"
void transfer(int m,int k)
#include "stdio.h"
int prime(int x) //判断x是否为素数,如果x为素数,则返回1,否则返回0
{
int k,flag=1;
for(k=2;k<=x/2;k++)
if(x % k==0)
{
flag=0;
break;
}
return(flag);
}
void main()
{
int m,n;
}
(4)b4.cpp
程序说明:在主函数中读入一字符串,再读入一字符,然后调用函数dele在字符串中查找并删除该字符,最后输出该字符串。
#include "stdio.h"
#include <string.h>
void dele(char p[],char ch)
{
int i=0,j;
while(p[i]!='\0')
{
if(p[i]==ch)
for(j=i;p[j]!='\0';j++)
p[j]=p[j+1];
else
i++;
}
}
void main()
{
char p[80],ch;
scanf("%s",p);
ch=getchar();
scanf("%c",&ch);
dele(p,ch);
printf("%s", p );
{
int a[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");
printf("%d %d %d\n",a,b,c);
}
(4)a4.cpp
递归,将十进制11转换为二进制
#include "stdio.h"
void dtob(int n)
{
int i;
if(n>1)
{
i=n%2;
dtob(n/2);
}
else
i=n;
printf("%d",i);
}
void main()
{
flag=1;
t[i++]=c;
}
else if(flag)
{
t[i]='\0';
printf("decimal number %d:\n",htoi(t));
printf("continue or not(Y/N)?");
c=getchar();
if(c=='N' || c=='n')
flag1=0;
else
{
flag=0;
i=0;
printf("\ninput a HEX number: ");
}
}
}
}
int htoi(char s[])
{
int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{
if(s[i]>='0' && s[i]<='9')
}
3
(1)写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。
本程序应当准备以下测试数据:17、34、2、1、0。分别运行并检查结果是否正确。
#include <stdio.h>
#include <math.h>
void main()
{
int prime(int);
int n;
printf("\nplease input a integer:");
{
if(n%i==0)
flag=0;
}
return(flag);
}
(2)用一个函数来实现将一行字符串中最长的单词输出。此行字符串从主函数传递给该函数。
把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。
把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。
letter函数用于测试是否字母,longest函数用于返回最长单词的起始位置。
用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最大公约数和最小公倍数都设置为全局变量,在主函数中输出它们的值。
#include <stdio.h>
void main()
{
int hcf(int,int);
int lcd(int,int,int);
int u,v,h,l;
}
void main()
{
int b,n;
scanf("%d%d", &b,&n);
transfer(n,b);
}
(2)b2.cpp
程序说明:歌德巴赫猜想指出:任何一个充分大的偶数都可以表示为两个素数之和,例如4=2+2 6=3+3 8=3+5… 50=3+47。下面程序将4-50之间的所有偶数用两个素数之和表示,判断一个整数是否为素数用函数prime完成。
scanf("%d",&n);
if(prime(n))
printf("\n%d is a prime!",n);
else
printf("\n%d is not a prime!",n);
}
int prime(int n)
{
int i,flag=1;
for(i=2;i<=n/2 && flag==1;i++)
for(m=4;m<=50;m=m+2)
for(n=2;n<m-1;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
for(i=1;i<n;i++)
{
if(score[i]>max)
max=score[i];
else if(score[i]<min)
min=score[i];
sum=sum+score[i];
}
ave=sum/10;
returnave;
}
void main()
{
float ave,score[10];
if(len>=length)
{
length=len;
place=point;
}
len=0;
}
return(place);
}
(3)用递归法将一个整数n转换成字符串。例如,输入483,应源自文库出字符串“483”。N的位数不确定,可以是任意的整数。
#include <stdio.h>
void main()
{
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);
}
int hcf(int u,int v)
{
int t,r;
if(v>u)
{
t=u;
u=v;
v=t;
}
while((r=u%v)!=0)
}
(2)a2.cpp
将十进制数26的各位数字相乘
#include "stdio.h"
int fun(int num)
{
int k=1;
do
{
k*=num %10;/
num/=10;
}while(num);
return(k);
}
void main()
{
int n=26;
printf("%d\n",fun(n));