计算机二级C语言程序设计题

128 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

计算机二级C语言程序设计题

题目:

程序定义了N×N的二维数组,并在主函数中赋值。请编写一个函数fun(),函数的功能是:求数组周边元素的平方和作为函数值返回给主函数。例如,若函数a中的值为: 0 1 2 7 9 1 11 21 5 5 2 21 6 11 1 9 7 9 10 2 5 4 1 4 1 输出结果为:310.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 5
int fun(int w[][N])
{
?
}
main()
{
	int a[N][N]={{0,1,2,7,9},{1,11,21,5,5,},{2,21,6,11,1},{9,7,9,10,2},{5,4,1,4,1}};
	int i, j, s;
	FILE *wf;
	printf("*****The array*****\n");
	for(i=0; i<N; i++)
	{
		for(j=0; j<N; j++)
		{
			printf("%4d", a[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	s=fun(a);
	wf=fopen("out.dat","w");
	fprintf(wf, "%d", s);
	printf("*****The Result*****\n");
	printf("The sum is%d\n", s);
	printf("\n");
	fclose(wf);
	system("pause");
}

解题思路:

周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素,使用嵌套循环判断每一个元素是否为周边元素,若是,则计算平方和,最后返回周边元素的平方和。

参考答案:

int fun(int w[][N])
{
	int i, j, k=0, s=0;
	for(i=0; i<N; i++)
	{
		for(j=0; j<N; j++)
		{
			if(i==0 || i==N-1 || j==0 || j==N-1)
			{
				s=s+w[i][j]*w[i][j];
			}
		}
	}
	return s;
}

补充:

1:数组的访问 (1).通过下标访问

(2).数组中括号中间的值什么时候代表长度? 当数组定义的时候,中括号中间的值代表着长度,并且必须是常量。

(3).数组中括号中间的值什么时候代表着下标? 当数组使用的时候,中括号中间的值代表着下标,可以是常量,也可以是变量。

2:数组长度的求法 公式: sizeof(arr)/sizeof(arr[0]) 数组整个的字节/第一个格子的字节 == 有多少个格子 注意:求数组长度公式只能用在,定义这个数组的同一个函数内部。

3: 数组越界问题 访问到不属于自己的内存,会发生数组越界,不安全。

4.二维数组定义: 类型 数组名[行号][列号];

5.二维数组初始化: 二维数组默认:行优先 int arr[][4];ok 因为默认行优先,所以行号可以省略,而列号不能省 int arr[3][];//error

6.二维数组的使用: 二维数组名做函数参数传递的时候, 行信息会丢失,列信息不会丢失