
求这个C语言题的答案和过程详细点的分析
把a[n][n]二维数组对角线元素置1,并求其余元素之和,要求用函数完成。
(本题令n=4)
要求:
主函数中完成:
1)输入a数组元素值。
2)输出对角线置1后a数组。
3)输出其余元素之和。
被调用函数中完成:
1)对角线元素(主、副两条对角线)置1。
2)求其余元素之和后返回其值。
注意:要给出至少两次的运行的输入输出结果。
【实验目的】
1.熟悉函数的一般形式以及函数的定义与调用。
2.掌握函数的实参与形参的对应关系。
3.掌握自定义函数的编写。
【评分标准】实验报告内容中写明:1.题目:10分2.算法描述:20分3.源程序:50分u主函数30分u被调用函数20分4.运行结果:20。注意,每次运行结果10分。 展开
#include <stdio.h>
#define n 4
int Arr(int a[][n])
{
int i,j;
int sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if((j==i)||(j+i==n-1))
a[i][j]=1;
else
sum+=a[i][j];
}
return sum;
}
void main()
{
int i,j;
int a[n][n];
printf("请输入%d行%d列的数组a:\n",n,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("对角线置1后的数组a:\n");
Arr(a);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("除对角线外其余元素这和为:%d\n",Arr(a));
}
楼主啊,刚才那个人回答的是对的,可能你没有输入正确。我用的是codeblocks,它要求main改为int,我试了试就是68啊。。
#include <stdio.h>
#define n 4
int Arr(int a[][n])
{
int i,j;
int sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if((j==i)||(j+i==n-1))
a[i][j]=1;
else
sum+=a[i][j];
}
return sum;
}
int main()
{
int i,j;
int a[n][n];
printf("请输入%d行%d列的数组a:\n",n,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("对角线置1后的数组a:\n");
Arr(a);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
printf("除对角线外其余元素这和为:%d\n",Arr(a));
return 0;
}
要注意 void main() 是错误的,应该为int main(), 虽然有的VC可以编译通过,但最好养成习惯,因为有时候它会引发各种未知错误。
亲能不能给点算法描述是在谢谢了为了应付老师,协商一些就好例如
例3-14:求10名学生的3门功课的每门平均成绩。
S1 定义、初始化变量
S1.1 int i /*循环计数变量*/
S1.2 double sum /*计和*/
S1.3 double average /*计平均值*/
#include <stdio.h>
#define N 4
int change(int a[N][N])
{
int i,j,k=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
if(j==i||i+j==N-1) a[i][j]=1; //主副对角线元素置1
else k+=a[i][j]; //其余元素相加
}
return k; //返回其余元素的和
}
void main()
{
int i,j,a[N][N],s;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]); //读取数组元素
s=change(a);
printf("\n对角线元素置1后的数组:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%-4d",a[i][j]);
printf("\n"); //输出改动后的数组
}
printf("\n其余元素之和=%d",s); //输出其余元素之和
}
运行示例:
#include<stdio.h>
#include<unistd.h>
#include<time.h>
#include<stdlib.h>
#define N 4 //数组大小
int fun(int (*)[N]);
int main()
{
int a[N][N];
srand(time(NULL));
int sum;
while(1)
{
system("clear");
fun(a);
sleep(10);
}
return 0;
}
int fun(int (*a)[N])
{
int i,j;
int sum=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=rand()%1000+20;//设置数组数据
printf("数组数据是:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("数组置一后为:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==j||(i+j)==3)
a[i][j]=1;
else
sum+=a[i][j];
printf("%5d",a[i][j]);
}
printf("\n");
}
printf("其余数据之和为%d\n",sum);
return sum;
}