开启掘金成长之旅!这是我参与「掘金日新计划 · 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.二维数组的使用: 二维数组名做函数参数传递的时候, 行信息会丢失,列信息不会丢失