《C语言程序设计》(江宝钏著)实验五答案培训资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》(江宝钏著)实验五答
案
5.4 实验五函数与预处理
一、实验目的与要求
1. 掌握C语言函数的定义方法、函数的声明及函数的调用方法。
2. 理解函数实参与形参的对应关系以及“值传递”的方式。
3. 掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
4. 掌握动态存储分配的方法。
5. 掌握宏定义和文件包含处理方法。
6. 实验4学时
二、实验内容
1.程序验证与改错题
(1) 程序验证题
①下面程序执行的结果是什么
void swap(int x, int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void main()
{
int a,b;
scanf(“%d%d”, &a,&b);
if(a>b)
swap(a, b);
printf(“%d\t %d”, a,b);
}
思考:为什么a,b的值没有交换?
答:
修改后的函数为
#include
void swap(int &x, int &y)
{
int temp;
temp=x;
y=temp;
}
void main()
{
int a,b;
scanf("%d%d",&a,&b);
swap(a,b); //if语句被去掉//
printf("%d\t %d\n", a,b);
}
因为调用函数中改变的是形参而非实参,加上&,其意义是改变实参的地址。
If语句中,只有当a>b时才交换a,b的值去掉后在任何情况下都交换a,b的值
②调用函数fun计算:m=1+2+3+4+…+9+10,并输出结果。请验证下面的程序是否符合题目要求。
#include”stdio.h”
int fun(int n)
{
int m, i;
for (i=1; i<=n; i++)
{
m+=i;
}
return m;
}
void main()
{
printf("m=%d\n", fun(10));
}
在上面程序的基础上,修改程序. 计算m=1-2+3-4+…+9-10。
答:
#include
int fun(int n)
{
int m=0,i;
for (i=1;i<=n;i++)
{
if(i%2==1)
m+=i;
m-=i;
}
return m;
}
void main()
{
printf("m=%d\n",fun(10));
}
(2)程序改错题
下列程序的功能是利用自定义函数计算一无符号的整数各位数字的乘积。
#include
unsigned f(unsigned num)
{
unsigned k=0;
do
{
k*=num/10;
num/=10;
}while(k);
return k;
}
void main()
{
int x;
printf(“input x=:\n”);
scanf(“%d”, x);
printf(“%d”, f(x));
}
答:
#include
unsigned f(unsigned num)
{
unsigned k=1;
do
{
k*=num%10;
num/=10;
}while(num!=0);
return k;
}
void main()
{
int x;
printf("input x=:\n");
scanf("%d",&x);
printf("%d", f(x));
}
2.一般编程题
编程题1编写一函数,把输入的4个数字字符转换成一个int数据存放,如输入4123这字符转换为4123这个整数,并通过主函数验证结果。
答:
#include
int f(char c)
{
int a;
a=int(c)-48;
return a;
}
void main()
{
int a,b=0;
char c;
while((c=getchar())!='\n')
{
a=f(c);
b=b*10+a;
}
printf("%d\n",b);
printf("%d+%d=%d\n",b,b,b+b);
printf("\n");
}
编程题2编写程序求:1*1*1+2*2*2+3*3*3+4*4*4+5*5*5
提示:主函数用来现实结果,f1( )函数用来求一个数的立方,f2( )函数用来求和。
#include
int f1(int n)
{
……
}
int f2(int m)
{
……