#include<stdio.h> #define M 4 #define N 5 int fun( int a [M][N]) { int i,j,sum=0; for(i=0;i<M;i++) for(j=0;j<N;j++) if(i==0||i==M-1||j==0||j==N-1) /*只要下标中有一个为0或M-1或N-1,则它一定是周边元素*/ sum=sum+a[i][j]; /*将周边元素相加*/ return sum; } void main() { int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}}; int i, j, s; printf ("二维数组中的值为:\n "); for(i=0;i<M;i++) {for (j=0; j<N;j++) printf("%6d ",aa[i][j]); printf("\n "); } s=fun(aa); printf("\n二维数组周边元素之和: %d\n ",s); printf("\n "); }这个程序的优缺点
时间: 2024-04-28 15:26:15 浏览: 30
优点:
1. 程序简单易懂,逻辑清晰。
2. 定义了宏常量M和N,易于维护和修改。
3. 使用了函数封装,增加了代码的可读性和可维护性。
缺点:
1. 函数fun只能处理M和N都为正整数的二维数组,对于其他情况需要进行修改。
2. 函数fun只能计算二维数组周边元素之和,无法处理其他需求。
3. 没有进行输入数据的检查,当输入的二维数组不符合要求时会出现错误。
相关问题
完成以下C语言代码功能:将主函数中输入的字符串反序存放。#include<stdio. h> #include<conio. h> #include(string. h> #define N 50 void fun(char *str, int n)
我可以提供一个示例代码:#include <stdio.h>
#include <string.h>int main ()
{
char str[100], temp;
int i, j; printf("输入一个字符串: ");
gets(str); j = strlen(str) - 1; for (i = 0; i < j; i++, j--)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
} printf("反序后的字符串: %s", str); return 0;
}
#include <stdio.h> #include <stdlib.h> #include<string.h> #define N 10 void fun(char c,char a[ ]) { int i; char min=0; a[min]=a[0]; for(i=1;a[i]!='\0';i++) { if(a[i]<a[min]) min=i; } a[min+1]=c; for(i=strlen(a);i>min+1;i--) a[i]=a[i-1]; } int main() { char a[100],c; scanf("%c%s",&c,a); fun(c,a); puts(a); system("pause"); return 0; }这个有什么错误吗
这个程序存在一些问题:
1. 在读取输入时,应该使用 `%s%c` 而不是 `%c%s`,因为 `%c` 会将空格和换行符也读入,而 `%s` 只会读取非空格和非换行符的字符。
2. 函数 `fun` 中的 `a[min]=a[0]` 是多余的,因为 `a[0]` 的值不会改变。
3. 在插入新字符时,应该先将字符串末尾的 '\0' 向后移动一位,然后再将新字符插入到指定位置。
下面是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10
void fun(char c, char a[])
{
int i;
char min = 0;
for (i = 1; a[i] != '\0'; i++)
{
if (a[i] < a[min])
min = i;
}
for (i = strlen(a); i > min; i--)
{
a[i] = a[i-1];
}
a[min] = c;
}
int main()
{
char a[100], c;
scanf("%s%c", a, &c);
fun(c, a);
puts(a);
system("pause");
return 0;
}
```