1 / 44

实验 8

实验 8. 参考答案. 1 .改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.1] 下列程序的功能为:求三角形面积。. #include &quot;math.h&quot; #include &quot;stdio.h&quot; float area(float,float,float); void main() { float a,b,c; printf(&quot; 请输入三角形的三个边长值: <br>&quot;); scanf(&quot;%f%f%f&quot;,&amp;a,&amp;b,&amp;c); if(a+b&gt;c&amp;&amp;a+c&gt;b&amp;&amp;b+c&gt;a)

demi
Télécharger la présentation

实验 8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验8 参考答案

  2. 1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.1]下列程序的功能为:求三角形面积。

  3. #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); }

  4. 1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.2]下列程序的功能是:从键盘输入一个数字n,计算从0+1+。。。。+n的值,并输出。

  5. #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; }

  6. 1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)1.改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.3]本程序用于实数返还指定小数位数的四舍五入后的值。

  7. #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); }

  8. 2.程序填空(请填写适当的符号,使程序实现其功能)2.程序填空(请填写适当的符号,使程序实现其功能) [2.1] avg函数的作用是计算数组array的平均值返回。

  9. 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)); }

  10. 2.程序填空(请填写适当的符号,使程序实现其功能)2.程序填空(请填写适当的符号,使程序实现其功能) [2.2] 以下程序的功能是:计算x/y/z.函数。

  11. # 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) ; }

  12. 2.程序填空(请填写适当的符号,使程序实现其功能)2.程序填空(请填写适当的符号,使程序实现其功能) [2.3] del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除后的数组a元素个数。

  13. 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); }

  14. 3.编程题 [3.1] 编写程序,计算s=52!+62!。 要求:除主函数外,另编写两个函数,一个是用来计算平方值的函数,另一个是用来计算阶乘值的函数。

  15. #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))); }

  16. 3.编程题 [3.2] 编写函数fl(int n)用来统计正整数n的各位数字之积(例如,n=423时函数返回24)。

  17. #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)); }

  18. 3.编程题 [3.3] 编写函数fun,功能是:统计用数字0~9可以组成多少个位值相同的3位偶数。

  19. #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; }

  20. 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()); }

  21. [测试题] 1.选择题 1、关于建立函数的目的以下说法正确的是B。 A.提高程序的执行效率 B.提高程序的可读性 C.减少程序的篇幅 D.减少程序文件所占内存

  22. 2、以下正确的说法是C。 A.用户若需要调用标准库函数,调用前必须重新定义 B.用户可以重新定义标准库函数,如若此,该函数将失去原有定义 C.系统不允许用户重新定义标准库函数 D.用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。

  23. 3、以下正确的说法是D。 A.实参和与其对应的形参各占用独立的存储单元 B.实参和与其对应的形参共占用一个存储单元 C.只有当实参和与其对应的形参同名时才共占用相同的存储单元 D.形参时虚拟的,不占用存储单元

  24. 4、下面关于函数的说法正确的是A 。 A. 任何一个C程序都由函数构成 B. 如果函数值的类型和return语句中表达式的值不一致,则以return语句中表达式的类型为准 C. 凡不加函数值类型说明的函数,一律自动按void类型处理 D. 实参不可以是表达式

  25. 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)

  26. 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.形参应与其对应的实参类型一致

  27. 9、 C语言中,形参缺省的存储类型说明是A。 A.auto(自动)B.static(静态)C.register(寄存器) D.extern(外部) 10、以下正确的说法是B。 A.对于用户自定义函数,在使用之前必须加以说明 B.说明函数必须指明其参数类型和返回类型 C.函数可以返回一个值,也可以什么值也不返回 D.空函数不完成任何操作,所以在程序设计中没有用处

  28. 二、填空题 1、在C语言中,程序的基本单位是___函数_____ 。 2、函数形参的作用域是函数体,全局的外部变量与函数体内定义的局部变量同名时,在函数体内, 局部变量起作用。 3、函数中的形参和调用时的实参都是数组时,参数传递方式为 地址 ;都是普通变量时,参数传递方式为值。

  29. 二、填空题 4、若自定义函数要求要求返回一个值,则在该函数体中应有一条return 语句;若自定义函数要求不返回值,则应在该函数说明时加一个类型说明符void 。 5、以下程序的运行结果是____4__,fun函数的作用是___第2参数-第1参数的绝对值_____。

  30. 三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) 【3.1】十进制数转换成十六进制数

  31. #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; }

  32. 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(); }

  33. 三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)三、改错题(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) • 【3.2】下列给定程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。请改正程序中的错误,使程序能得出正确的结果。

  34. #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)); }

  35. 四、程序填空 • 【4.1】在字符串中删除所有数字字符

  36. #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; }

  37. main() {int m;char str[80]; gets(str); m=f(str); printf(“删除数字字符后的字符串\n”) ; puts(str); printf(“所删除的数字字符个数:%d\n",m); }

  38. 四、程序填空 【4.2】函数fun()的功能是:根据形参m,计算下列公式的值。 t=1-1/2+1/3-1/4+…+(-1)(m+1)/m 例如,若输入5,则应输出0.783333。

  39. #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; }

  40. main() { int m; printf("\nPlease enter 1 integer number: "); scanf("%d",&m); printf("\nThe result is %lf\n", fun (m)); }

  41. 五、编程题 1、编写一个函数,返回一个四位正整数的逆序数,在主函数中输入一个四位数,例如6789,输出它的逆序数9876。

  42. #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)); }

  43. 2、编程实现以下功能:第一个数是1,从第二个数起每个数都是它的前一项加5,求第n个数是多少?(n从键盘输入,用递归的方法实现该算法)。2、编程实现以下功能:第一个数是1,从第二个数起每个数都是它的前一项加5,求第n个数是多少?(n从键盘输入,用递归的方法实现该算法)。

  44. #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); }

More Related