收藏 分销(赏)

C语言程序设计江宝钏著实验五答案.doc

上传人:精*** 文档编号:9809179 上传时间:2025-04-09 格式:DOC 页数:12 大小:30.04KB
下载 相关 举报
C语言程序设计江宝钏著实验五答案.doc_第1页
第1页 / 共12页
C语言程序设计江宝钏著实验五答案.doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述
5.4 实验五 函数与预处理 一、实验目的与要求 1. 掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2. 理解函数实参与形参的对应关系以及“值传递”的方式。 3. 掌握全局变量与局部变量动态变量、静态变量的概念与使用方法。 4. 掌握动态存储分配的方法。 5. 掌握宏定义与文件包含处理方法。 6. 实验4学时 二、实验内容 1.程序验证与改错题 (1) 程序验证题 ① 下面程序执行的结果是什么 void s 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<stdio.h> void s &x, int &y) int temp; temp=x; x=y; y=temp; void main() int a,b; scanf("%d%d",&a,&b); s); //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<stdio.h> int fun(int n) int m=0,i; for (i=1;i<=n;i++) if(i%2==1) m+=i; else m-=i; return m; void main() printf("m=%d\n",fun(10)); (2)程序改错题 下列程序的功能是利用自定义函数计算一无符号的整数各位数字的乘积。 #include<stdio.h> 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<stdio.h> 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<stdio.h> 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 <stdio.h> int f1(int n) int f2(int m) void main() 答: 1解(使用库函数) #include<stdio.h> void main() int i=4; char temp; int result=0; temp=getchar(); while(temp!='\n') result*=10; result+=((int)temp-48); temp=getchar(); printf("%c\n",temp); printf("%d\n",result); 2解(使用stdlib 库函数中的atoi ()函数) # include <stdio.h> # include <stdlib.h> void main () int num; char str[30]; gets(str); num = atoi(str); printf("num to int:%d\n",num); 编程题3 定义两个带参数的宏,将两个参数的值相加与相减,并写出程序,输入两个数作为使用宏时的实参。输出相加与相减后的与与差。 答: #include <stdio.h> #define P(m,n) m+n; #define Q(m,n) m-n; void main() int m,n,p,q; scanf("%d %d",&m,&n); p=P(m,n); q=Q(m,n); printf("%d=%d+%d\n",p,m,n); printf("%d=%d-%d\n",q,m,n); 编程题4 编程输出2到10000之间的所有完数。所谓完数是指因子之与与它本身相等的数。如6=1+2+3,6是一个完数。 要求:定义函数 factor(m) 判断m是否为完数;由主函数调用它,来对所有2到10000之间的所有数进行判断。 #include <stdio.h> #include <math.h> int factor(int m) int i,s=0; void main() int i,m,sum; 答: #include <stdio.h> #include <math.h> int factor(int m) int i,s=0; for(i=1;i<m;i++) if(m%i==0) s+=i; if(s==m) return s; else return 0; void main() int i,m,sum; m=10000; for(i=2;i<=m;i++) sum=factor(i); if(sum>0) printf("%d ",sum); printf("\n"); 3.较难编程题 编程题1 用函数调用实现求两个数的最大公因子与最小公倍数 答: #include <stdio.h> #include <math.h> int f(int m,int n) int i; for(i=1;;i++) if(m==n)break; if(m>n) m=m-n; else n=n-m; return n; int g(int x,int y,int z) int i; i=x*y/z; return i; void main() int a,b,c,d; scanf("%d %d",&a,&b); c=f(a,b); d=g(a,b,c); printf("最大公因子:%d\n",c); printf("最小公倍数:%d\n",d); 编程题2 用递归方法求1+2+3+...+n并将其中素数去除后之与。 #include <stdio.h> #include <math.h> int isprime (int number) long fact(int n) void main() int m,sum; 答: #include <stdio.h> #include <math.h> int isprime (int number) int i; for(i=2;i<number;i++) if(number%i==0)break; if(i==number) return 0; else return number; long fact(int n) long result,a; if(n==1) result=1; else a=isprime(n); result=a+fact(n-1); return result; void main() int m,sum; scanf("%d",&m); sum=fact(m); printf("%d\n",sum); 第 12 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服