c语言第八章课后题答案.doc

上传人:PIYPING 文档编号:11553292 上传时间:2021-08-23 格式:DOC 页数:17 大小:124KB
返回 下载 相关 举报
c语言第八章课后题答案.doc_第1页
第1页 / 共17页
c语言第八章课后题答案.doc_第2页
第2页 / 共17页
c语言第八章课后题答案.doc_第3页
第3页 / 共17页
c语言第八章课后题答案.doc_第4页
第4页 / 共17页
c语言第八章课后题答案.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《c语言第八章课后题答案.doc》由会员分享,可在线阅读,更多相关《c语言第八章课后题答案.doc(17页珍藏版)》请在三一文库上搜索。

1、一、第八章习题8(p222-p228),8.1-8.3全做,8.4-8.12中选做四道,8.13-8.19中选做三道,要求给出所选择题目的程序及执行结果。8-1(1)、#include void Func(int x)x=20;int main()int x=10;Func(x);printf(%d,x);return 0;结果:分析:调用函数时只发生值的传递,形参与实参之间再也没有关系,子函数一旦退出,内部变量就释放空间(2)#include void Func(int b)int j;for(j=0; j4; j+)bj=j;int main()static int a = 5,6,7,8

2、,i;Func(a);for(i=0; i4; i+)printf(%d,ai);return 0;结果:分析:数组传递时向函数传递的是数组的地址值,实参与形参共享空间,在被调函数中对数组进行修改就会造成主函数中的数组也被修改。8.2(1)int PositiveNum(int a,int n)int i,count=0;for(i=0; i0) count+;return count;(2)void Fib(long f,int n)int i;f0=0;f1=1;for(i=2; in; i+)fi=fi-1+fi-2;(3)#include int main()int a10,n,max

3、,min,maxPos,minPos;for(n=0; n10; n+)scanf(%d,&an);max=min=a0;maxPos=minPos=0;for(n=0; nmax)max=an;maxPos=n;else if(anmin)min=an;minPos=n;printf(max=%d,pos=%dn,max,maxPos);printf(min=%d,pos=%dn,min,minPos);return 0;结果:(4)#include #define ROW 2#define COL 3MultiplyMatrix(int aROWCOL,int bCOLROW,int cR

4、OWROW)int i,j,k;for(i=0; iROW; i+)for(j=0; jROW; j+)cij=0;for(k=0; kCOL; k+)cij=cij+aik*bkj;void PrintMatrix(int aROWROW)int i,j;for(i=0; iROW; i+)for(j=0; jROW; j+)printf(%6d,aij);printf(n);int main()int aROWCOL,bCOLROW,cROWROW,i,j;printf(Input 2*3 matrix a:n);for(i=0; iROW; i+)for(j=0; jCOL; j+)sc

5、anf(%d,&aij);printf(Input 3*2 matrix b:n);for(i=0; iCOL; i+)for(j=0; jROW; j+)scanf(%d,&bij);MultiplyMatrix(a,b,c);printf(Results:n);PrintMatrix(c);return 0;结果:8-3、viod DivArray(int pArray,int n)int i;for (i=0; in; i+)pArrayi/=pArray0;错误分析:原代码中定义了一个未初始化的指针,而不是数组,有可能会使指针访问到不该访问的内存空间,造成危险,应该定义数组,对数组中的

6、数进行修改操作。8-6、#include #define N 40int Readscore(int score, long num);int FindMax(int score,long num,int n);void main()int scoreN;long numN;int n;int m;n=Readscore(score,num); /*接收人数*/m=FindMax(score,num,n);printf(最高的成绩:%dn学号为:%ldn,scorem,numm);int Readscore(int score, long num)int i=-1;doi+;printf(请输

7、入学号:);scanf(%ld,&numi);printf(请输入成绩:);scanf(%d,&scorei);while(scorei=0 & numi=0);return i;int FindMax(int score,long num,int n)int i;int k;int max=score0;for(i=0; imax)max=scorei;k=i;return k;结果:8-7#include void Sort(int score);void Readscore(int score);void main()int score10;Readscore(score);Sort(s

8、core);void Readscore(int score)int i;for(i=0; i10; i+)printf(input score: );scanf(%d,&scorei);void Sort(int score)int i;int k,p;int temp;int max=score0;int min=score0;for(i=0; imax)max=scorei;k=i;else if(scoreimin)min=scorei;p=i;temp=scorek;scorek=scorep;scorep=temp;for(i=0; i10; i+)printf(%d ,score

9、i);printf(n);结果:8-10#include void main()int i;int n;int j;int a1010;int sum1=0;int sum2=0;printf(请输入维数n (n=10): );scanf(%d,&n);for(i=0; in; i+)for(j=0; jn; j+)printf(请输入元素a%d%d:,i,j);scanf(%d,&aij);printf(n);for(i=0; in; i+)sum1+=aii;sum2+=ain-1-i;printf(主对角线之和:%dn副对角线之和:%dn,sum1,sum2);结果:8-12#inclu

10、de void main()int a77;int i;int j;for(i=0; i7; i+) /*使对角线上、第一列的数均为1*/aii=1;ai0=1;for(i=2; i7; i+) /*计算中间的数*/for(j=1; ji; j+)aij=ai-1j-1+ai-1j;for(i=0; i7; i+) /*打印杨辉三角形*/for(j=0; j=i; j+)printf(%d ,aij);printf(n);#include void main()int a77;int i;int j;for(i=0; i7; i+)aii=1;ai0=1;for(i=2; i7; i+)for

11、(j=1; ji; j+)aij=ai-1j-1+ai-1j;for(i=0; i7; i+)for(j=0; j=i; j+)printf(%d ,aij);printf(n);结果:8-13#include long Fibonacci(int n);void main()long m;m=Fibonacci(12);printf(%ldn,m);long Fibonacci(int n)if(n=0)return 0;else if(n=1)return 1;elsereturn Fibonacci(n-1)+Fibonacci(n-2);结果8-14#include #include

12、#include void main()float a=0,b=0,c=0,d=0,e=0,f=0;int i;int m;srand(time(NULL); /*注意:只能将产生随机数种子写在循环外面*/for(i=0; i6000; i+)m=rand()%6+1;switch (m)case 1:a+;break;case 2:b+;break;case 3:c+;break;case 4:d+;break;case 5:e+;break;case 6:f+;break;printf(面数:-1-2-3-4-5-6-n);printf(概率:%.2f% %.2f% %.2f% %.2f%

13、 %.2f% %.2f%,a/6000,b/6000,c/6000,d/6000,e/6000,f/6000);结果:8-15#include #include #include void ProduceNum(int num);void GuessNum(int guess);void PanZhengWu(int num, int guess, int result);void main()int num4;int guess4;int result2;int i;int n;int flag=0;ProduceNum(num);printf(请输入您想猜的次数: );scanf(%d,&

14、n);for(i=0; in; i+)GuessNum(guess);PanZhengWu(num, guess, result);if(result0=4)printf(Congradulations!n);flag=1;break;if(flag=0)printf(Sorry! You havent guess the right number!n);/*功能:产生4位相异的数字放入num【4】中 入口参数:无 返回值:无*/void ProduceNum(int num)int flag=0;int i,j;srand(time(NULL);donum0=rand()%10;num1=r

15、and()%10;num2=rand()%10;num3=rand()%10;for(i=0; i4; i+)for(j=i+1; j4; j+)if(numi=numj) /*判断是否产生4个完全相异的数字*/flag=1;/if(flag=0)/printf(%d %d %d %dn,num0,num1,num2,num3);while(flag);/*功能:用户输入所猜的数并存入guess【4】中 入口参数:无 返回值:无*/void GuessNum(int guess)int i;printf(n);printf(请输入4位您猜的数:n);for(i=0; i4; i+)printf

16、(输入第 %d 个数: ,i+1);scanf(%d,&guessi);/*功能:判断猜数正误 入口参数:计算机产生的数、用户猜的数 返回值:无*/void PanZhengWu(int num, int guess, int result)int i;int x=0;int y=0;int j;for(i=0; i4; i+)if(numi=guessi) /*数字对且位置对*/x+;for(j=0; j4; j+)if(numi=guessj) /*数字对(含有位置对和位置不对的两种情况)*/y+;y=y-x;result0=x;result1=y;printf(猜测结果:%dA%dBn,

17、result0,result1);结果:二、收集资料,总结数组(包括一维数组和二维数组)作为函数参数时应注意的问题,以及参数传递的特点。向函数传递数组时,只需使用不带方括号的的数组名作为函数实参调用即可(即:仅仅用一个数组名,不带方括号和下标)注意:1、由于数组名代表数组第一个元素的地址,因此用数组名作为函数实参实际上是将数组的首地址传给被调函数2、将数组的首地址传给被调函数后,形参与实参数组具有相同的首地址,实际上占用相同的存储空间3、在被调函数中修改形参数组元素时,实际上相当于修改是参数组中的元素4、数组作函数形参时,数组的长度可不出现在数组名的方括号内,通常用另一个整型实参来制定数组的长度成绩批阅教师批阅日期

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1