C语言实验报告 实验三 参考答案

  • 格式:doc
  • 大小:35.50 KB
  • 文档页数:2

实验十 参考答案(指针)

三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)

1. 程序填空题 给定程序BLACK10-1.C中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。

例如,输入一个数:27638496,新的数:为739。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

【解题思路】

第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。

第二处:判断是否是奇数,所以应填:0。

第三处:最后通形参n来返回新数x,所以应填:x。

2. 程序改错题 给定程序MODI10-1.C中函数fun的功能是: 计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。

例如,7的5次方是16807, 其低3位数的和值是15。

【解题思路】

第一处:变量d的初始值应为1。

第二处:整除的符号是 /。

3. 程序设计题 请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。

【解题思路】

本题是求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

【参考答案】

void fun ( int x, int pp[], int *n )

{ int i; *n=0;

for(i=1; i <= x; i++)

if((x % i== 0) && (i % 2)) pp[(*n)++]=i;

}

4. 程序填空题 给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。

【参考答案】

第一处:把每列的第1值赋值给b[i],所以应填:a[0][i]。

第二处:如果b[i]值小于a[j][i]的值,则把a[j][i]重新赋值给b[i]中,保存最大的值,所以应填:<。

第三处:在主函数中,x是存放矩阵数据,y是存放每列的最大值,所以应填:x,y。

5. 程序改错题 给定程序MODI10-2.C中函数fun的功能是:根据形参m的值(2≤m≤9〕,在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入2,则输出:4221,若输入4,则输出:

1612841296386424321

【解题思路】

第一处:在函数体fun中可知,a是一个字符串数组型变量,所以应改为:fun(int a[][M], int m)。

第二处:根据输出的结果可知,应改为:a[j][k]=(k+1)*(j+1);。

6. 程序设计题 请编写一个函数 fun (int *a,int n,int *odd,int *even),函数的功能是分别求出数组 a 中所有奇数之和以及所有偶数之和。形参 n 给出数组元素的个数,整型指针 odd 返回偶数之和,even 返回奇数之和。 例如:a 数组中各数组元素的值依次为:1,9,2,3,11,6,则调用函数 fun后,指针 odd

返回偶数之和 8,even 返回奇数之和 24。

【解题思路】

用 for 循环语句依次判断整型数组中的每一个数组元素是偶数还是奇数,判断偶数和奇数只需将数组元素与 2 取模,结果为 0 的数是偶数,为 1 的是奇数。如果是偶数,则把该数加到*odd 中;是奇数,加到*even 中。

【参考答案】

fun ( int *a, int n, int *odd, int *even )

{ int i;

*odd = * even = 0;

for ( i = 0; i < n;i ++ )

if (a[i] % 2 == 0) /*用 if(a[i]%2==0)来判断是否是偶数*/

*odd += a[i]; /*计算所有偶数之和并将计算后的结果赋给*odd*/

else

*even += a[i]; /*计算所有奇数之和并将计算后的结果赋给*even*/

}

7. 程序填空题 下列给定程序中,函数 fun()的作用是:将字符串 tt 中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入"Ab,cD",则输出"ab,cd"。

【参考答案】第一处:* 第二处:'Z' 第三处:tt

8. 程序改错题 给定程序 MODI10-3.C 中,函数 fun 的功能是:从 N 个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。 请改正程序中的错误,使它能得出正确结果。

【参考答案】 第一处:fun(char (*sq)[M])改为char *fun(char ( *sq)[M])

第二处:return sq;改为return sp;

9. 程序设计题 编写一个函数 void fun ( char *s ),函数的功能是把字符串 s 中的所有字符前移一个位置,串中的第一个字符移到最后。 例如:s 串中原来的字符串为:"Mn.123xyZ",则调用该函数后,s 串中的内容为:"n.123xyZM"。

【解题思路】

该题要先将字符串的头元素存到某一变量(用 tmp=*s)中,然后后面的字符依向前移(用 for()循环),要记得在串的未尾加一个结束符

【参考答案】

fun(char *s)

{ char tmp=*s;

for(;*(s+1);s++)

*s=*(s+1);

*s=tmp;

*(s+1)='\0';

}