第1页共5页《C语言程序设计A》课程作业评讲(2)下面我们将对形成性考核作业册(第一次作业)中的第五题进行作业评讲。下文中,黑色的是问题与答案,绿色是说明和解释。五、根据下列每个题目要求编写程序1.编写一个函数,函数头格式为“voidfun4(char*a,intb[])”,分别求出由字符指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组b的相应元素。此题的考核知识点有3个:⑴第三章流程控制语句中的while循环语句和if语句的编程;⑵第四章中一维数组应用;⑶第六章函数的编程。分析:此题主要考核第六章函数的编程,要求熟悉函数的格式以及参数的传递方式,要求用函数来实现统计每种十进制数字出现的次数,统计次数用数组来完成。答案:#includestdio.hvoidfun4(char*a,intb[]){do{if(*a='0'&&*a='9')b[*a-48]++;}while(*a++);}/*voidmain(){char*a=122333444499888;intb[10]={0};fun4(a,b);for(inti=0;i10;i++)第2页共5页printf(%d,b[i]);}*/2.编写一个函数,函数头格式为“doubleMean(doublea[M][N],intm,intn)”,要求返回二维数组a[m][n]中所有元素的平均值,假定在计算过程是采用变量v存放平均值。此题的考核知识点有3个:⑴第三章流程控制语句中的for循环语句的编程;⑵第四章中二维数组应用;⑶第六章中函数的编程。分析:此题主要考核第六章函数的编程,要计算平均值,必须先求所有元素之和,所以要用到累加求和程序“s=s+x”,最后除以所有元素的个数即可。答案:#includestdio.hconstintM=2,N=3;doubleMean(doublea[M][N],intm,intn){doublev=0;for(inti=0;im;i++)for(intj=0;jn;j++)v+=a[i][j];returnv/(m*n);}/*voidmain(){doublea[2][3]={1,2,3,4,5,6};printf(%lf\n,Mean(a,2,3));}*/3.编写一个递归函数“intFF(inta[],intn)”,求出数组a中所有元素n个元素之积并第3页共5页返回。此题的考核知识点有4个:⑴第三章流程控制语句中的if语句的编程;⑵第四章中一维数组应用;⑶第六章中函数的编程;⑷第六章中递归函数的编程;。分析:此题主要考核第六章递归函数的编程,要求熟悉递归函数的格式以及参数的传递方式,此题的关键是要构造递归表达式“mul=a[n-1]*FF(a,n-1);”。答案:#includestdio.hintFF(inta[],intn){intmul=1;if(n==1)mul*=a[0];elsemul=a[n-1]*FF(a,n-1);returnmul;}/*voidmain(){inta[6]={1,2,3,4,5,6};printf(%d\n,FF(a,6));}*/4.编写一个主函数,利用while循环,求出并显示满足不等式1+1/2+1/3+……+1/n5的最小n值。此题的考核知识点是:第三章流程控制语句中的if语句和while循环的编程。分析:此题主要考核第三章中利用流程控制语句中的if语句和while循环来实现累加求和的程第4页共5页序,很显然要用到累加求和程序“s=s+x”。答案:#includestdio.hvoidmain(){doublesum=0;intn=1;while(true){if(sum+1/(double)n5)break;elsesum+=1/(double)n;n++;}printf(%d,%lf\n,n,sum);}5.编写一个主函数,求满足不等式22+42+……+n21000的最大n值,假定分别用i和s为取偶数值和累加值的变量,并限定使用do循环编程。此题的考核知识点是:第三章流程控制语句中的if语句和do---while循环的编程。分析:此题的编程方法跟上题类似。答案:#includestdio.hvoidmain(){ints=0,i=2;do{s+=i*i;第5页共5页if(s+(i+2)*(i+2)=1000)break;elsei+=2;}while(true);printf(i=%d,s=%d,i,s);}6.编写一个主函数,计算并输出n!的值,其中n值由键盘输入。此题的考核知识点是:第三章流程控制语句中的for循环的编程。分析:此题主要考核第三章中利用流程控制语句中的for循环来实现累乘求和的程序,很显然要用到累加求和程序“s=s*x”。答案:#includestdio.hvoidmain(){ints=0,n;printf(请输入n的值:);scanf(%d,&n);for(inti=1;i=n;i++)s=s*i;printf(n=%d,s=%d,n,s);}