440 likes | 757 Views
实验 8. 参考答案. 1 .改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.1] 下列程序的功能为:求三角形面积。. #include "math.h" #include "stdio.h" float area(float,float,float); void main() { float a,b,c; printf(" 请输入三角形的三个边长值: <br>"); scanf("%f%f%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a)
E N D
实验8 参考答案
1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.1]下列程序的功能为:求三角形面积。
#include "math.h" #include "stdio.h" float area(float,float,float); void main() { float a,b,c; printf("请输入三角形的三个边长值:\n"); scanf("%f%f%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) printf("Area=%f\n",area(a,b,c)); } float area(float a,float b,float c) { float s,area_s; s=(a+b+c)/2.0; area_s=sqrt(s*(s-a)*(s-b)*(s-c)); return(area_s); }
1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.2]下列程序的功能是:从键盘输入一个数字n,计算从0+1+。。。。+n的值,并输出。
#include<stdio.h> int s(int n); void main() { int n; printf("input number\n"); scanf("%d",&n); printf("n=%d\n",s(n));} int s(int n) { int i; for(i=n-1;i>=1;i--) n=n+i; return n; }
1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.3]本程序用于实数返还指定小数位数的四舍五入后的值。
#include<stdio.h> #include "math.h" float round(float x,int n) { float z; long i; i=pow(10,n); z=(int)(x*i+0.5)/(float)i; return z; } main() { float x,y; int n; printf("input x n\n"); scanf("%f%d",&x,&n); y=round(x,n); printf("x=%f, round(%f)=%f\n",x,x,y); }
2.程序填空(请填写适当的符号,使程序实现其功能)2.程序填空(请填写适当的符号,使程序实现其功能) [2.1] avg函数的作用是计算数组array的平均值返回。
float avg(float array[]) { int i ; float avgr , sum=0 ; for (i=0; i<10; i++) sum+=array[i]; avgr = sum / 10 ; return avgr; } main() { float a[10];int i; for(i=0;i<10;i++) scanf("%f",&a[i]); printf("%f",avg(a)); }
2.程序填空(请填写适当的符号,使程序实现其功能)2.程序填空(请填写适当的符号,使程序实现其功能) [2.2] 以下程序的功能是:计算x/y/z.函数。
# include <stdio.h> float fun(float a,float b); main ( ) { float x,y,z,f ; scanf("%f%f%f",&x,&y,&z); f = fun (x,y); f = fun (f,z); printf("f=%f",f); } float fun(float a,float b) { return (a/b) ; }
2.程序填空(请填写适当的符号,使程序实现其功能)2.程序填空(请填写适当的符号,使程序实现其功能) [2.3] del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除后的数组a元素个数。
int del (int a[],intn,int x) { int p=0,i ; while (x>=a[p]&&p<n) p++; for (i=p-1; i<n; i++) a[i]=a[i+1]; return (n-1) ; } main() { int a[15]={1,2,44,55,67,87,89,90,91,92},i,j=55,s; s=del(a,10,j); for(i=0;i<s;i++) printf("%4d",a[i]);printf("\n%d",s); }
3.编程题 [3.1] 编写程序,计算s=52!+62!。 要求:除主函数外,另编写两个函数,一个是用来计算平方值的函数,另一个是用来计算阶乘值的函数。
#include "stdio.h" long fun1(int x) { int z; z=x*x; return z; } long fun2(long n) { long s=1; int i; for(i=1;i<=n;i++) s=s*i; return s; } main() { printf("2平方!+3平方!=%ld\n",fun2(fun1(5))+fun2(fun1(6))); }
3.编程题 [3.2] 编写函数fl(int n)用来统计正整数n的各位数字之积(例如,n=423时函数返回24)。
#include "stdio.h" fl(int n) { int s=1; while(n) { s*=n%10; n=n/10; } return s;} main() { int n; printf("input n of value\n"); scanf("%d",&n); printf("result=%d\n",fl(n)); }
3.编程题 [3.3] 编写函数fun,功能是:统计用数字0~9可以组成多少个位值相同的3位偶数。
#include "stdio.h" fun1(int n) { if(n%2) return 0; else return 1; } fun2(int n) { int s=0; while(n) {s=s+n%10; n=n/10; } return s; }
fun() { int i,j,k,m=0; for(i=100;i<=999;i++) {j=fun2(i); for(k=100;k<=999;k++) if((fun2(k)==j)&&fun1(k)) m++; } return m; } main() { printf("result=%d\n", fun()); }
[测试题] 1.选择题 1、关于建立函数的目的以下说法正确的是B。 A.提高程序的执行效率 B.提高程序的可读性 C.减少程序的篇幅 D.减少程序文件所占内存
2、以下正确的说法是C。 A.用户若需要调用标准库函数,调用前必须重新定义 B.用户可以重新定义标准库函数,如若此,该函数将失去原有定义 C.系统不允许用户重新定义标准库函数 D.用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。
3、以下正确的说法是D。 A.实参和与其对应的形参各占用独立的存储单元 B.实参和与其对应的形参共占用一个存储单元 C.只有当实参和与其对应的形参同名时才共占用相同的存储单元 D.形参时虚拟的,不占用存储单元
4、下面关于函数的说法正确的是A 。 A. 任何一个C程序都由函数构成 B. 如果函数值的类型和return语句中表达式的值不一致,则以return语句中表达式的类型为准 C. 凡不加函数值类型说明的函数,一律自动按void类型处理 D. 实参不可以是表达式
5、下面关于函数参数的说法正确的是C 。 A. 函数必须要有参数,否则就不是函数了 B. 实参变量对形参变量的数据传递是“值传递” C. 实参与形参的类型必须一致 D. 定义函数时,形参的类型可以不指定 6、以下正确的函数定义是A。 A.double fun(int x , int y) B.double fun(int x ; int y) C.double fun(int x , int y) ; D.double fun(int x,y)
7、有以下函数定义: void fun(int n, double x) { …… } 若以下选项中的变量都已正确定义并赋值(double x,int n),则对函数fun的正确调用语句是B 。 。 A.fun(int y,double m); B.fun(10,12.5); C.fun(x,n); D.void fun(n,x); 8、以下错误的说法是:C语言规定 B。 A.实参可以是常量,变量或表达式 B.形参可以是常量,变量或表达式 C.实参可以为任何类型 D.形参应与其对应的实参类型一致
9、 C语言中,形参缺省的存储类型说明是A。 A.auto(自动)B.static(静态)C.register(寄存器) D.extern(外部) 10、以下正确的说法是B。 A.对于用户自定义函数,在使用之前必须加以说明 B.说明函数必须指明其参数类型和返回类型 C.函数可以返回一个值,也可以什么值也不返回 D.空函数不完成任何操作,所以在程序设计中没有用处
二、填空题 1、在C语言中,程序的基本单位是___函数_____ 。 2、函数形参的作用域是函数体,全局的外部变量与函数体内定义的局部变量同名时,在函数体内, 局部变量起作用。 3、函数中的形参和调用时的实参都是数组时,参数传递方式为 地址 ;都是普通变量时,参数传递方式为值。
二、填空题 4、若自定义函数要求要求返回一个值,则在该函数体中应有一条return 语句;若自定义函数要求不返回值,则应在该函数说明时加一个类型说明符void 。 5、以下程序的运行结果是____4__,fun函数的作用是___第2参数-第1参数的绝对值_____。
三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) 【3.1】十进制数转换成十六进制数
#include<stdio.h> int DtoH(int n,char str[]) { int i,d; for(i=0; n!=0;i++) { d=n%16; if(d<10) str[i]='0'+d; else str[i]='A'+d-10; n/=16; } return i-1; }
main() { int i,k,n;char str[80]; scanf("%d",&n); k=DtoH(n,str); for(i=k-1;i>=0;i--) printf("%c",str[i]);printf("\n"); getch(); }
三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) • 【3.2】下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。请改正程序中的错误,使程序能得出正确的结果。
#include <stdio.h> int fun(int k) { int m=0, mc=0; while ((mc<10)) { if ((k%13==0)||(k%17==0)) {m=m+k;mc++;} k--; } return m; } main() { printf("%d\n",fun(500)); }
四、程序填空 • 【4.1】在字符串中删除所有数字字符
#include<stdio.h> #include "string.h" int f(char s[]) { int i=0; int count=0; while(s[i]!='\0') if(s[i]>='0'&&s[i]<='9') { strcpy(s+i,s+i+1); count=count+1; } else i++; return count; }
main() {int m;char str[80]; gets(str); m=f(str); printf(“删除数字字符后的字符串\n”) ; puts(str); printf(“所删除的数字字符个数:%d\n",m); }
四、程序填空 【4.2】函数fun()的功能是:根据形参m,计算下列公式的值。 t=1-1/2+1/3-1/4+…+(-1)(m+1)/m 例如,若输入5,则应输出0.783333。
#include <stdio.h> double fun (int m) { double t=1.0,j=1.0; int i; for(i=2;i<=m;i++) { if(i%2==0) t=t-1.0/i; else t+=1.0/i; } return t; }
main() { int m; printf("\nPlease enter 1 integer number: "); scanf("%d",&m); printf("\nThe result is %lf\n", fun (m)); }
五、编程题 1、编写一个函数,返回一个四位正整数的逆序数,在主函数中输入一个四位数,例如6789,输出它的逆序数9876。
#include <stdio.h> int fun(int x) { int y=0; while (x) { y=y*10+x%10; x=x/10; } return y; } main() { int n; printf("请输入1个四位的正整数:"); scanf("%d",&n); printf("该数的逆序数是:%d\n",fun(n)); }
2、编程实现以下功能:第一个数是1,从第二个数起每个数都是它的前一项加5,求第n个数是多少?(n从键盘输入,用递归的方法实现该算法)。2、编程实现以下功能:第一个数是1,从第二个数起每个数都是它的前一项加5,求第n个数是多少?(n从键盘输入,用递归的方法实现该算法)。
#include <stdio.h> long add(int n) { long m; if (n==1) m=1; else m=5+add(n-1); return(m); } main() { long m; int n; printf("input n:\n"); scanf("%d",&n); m=add(n); printf("%ld\n",m); }