例如,若输入252,则输出应该是20;若输入202,则输出应该是0。
请改正程序中的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
long fun(long num)
{
long k;
do
{
k*=num%10 ;
num\=10;
}while(num);
return (k);
}
main()
{
long n;
printf("\Please enter a number:");
scanf("%ld",&n);
printf("\n%ld\n",fun(n));
}
【答案及解析】
仔细阅读题目和程序后可以知道k是连乘的结果,但k未赋初值,应该给k赋值1。因此将long k;改为long k=1;或long k;k=1;第2处错误为/=被误写成\=,因此应该改为:num/=10。
三、编程题
程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N], int n),函数的功能是:使N×N的二维数组左下三角元素中的值乘以n。
例如:若n的值为3,a数组中的值为:
1 9 7
(1)本题主要考查二维数组的有关概念。题目要求是使N×N的二维数组左下三角元素中的值乘以n。即第1行1个,第2行2个,……,第N行N个元素乘n。这就需要用双重循环来进行判断,并设变量j、k,j从0到N-1,k从0到j,将a[j][k]乘n。
(2)按上述分析写出的函数是:
int fun(int a[][N],int n)
{
int j,k;
for(j=0;j<N;j++)
for(k=0;k<j+1;k++)
a[j][k]*=n;
}
2 3 8
4 5 6
则返回主程序后a数组中的值应为:
3 9 7
6 9 8
12 15 18
注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
#include <stdio.h>
#include <stdlib.h>
#define N 5
int fun(int a[][N],int n)
{
}
main()
{
int a[N][N],n,i,j;
printf("***The array***\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=rand()%10;
printf( "%4d", a[i][j] );}
printf("\n");
}
do n=rand()%10; while(n>=3);
printf("n=%4d\n",n);
fun(a,n);
printf ("***THE RESULT***\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}