资源描述
实验7.2 二维数组
1 求矩阵各行元素之和(调试示例error07_3)
2 矩阵运算
3 九九乘法表
4 判断上三角矩阵
5 算算看,这是第几天?
6 找鞍点(选作)
1 求矩阵各行元素之和(调试示例error07_3)
/*-----程序填空,不要改变与输入输出有关的语句。输入2个正整数 m 和 n (1<=m<=6, 1<=n<=6),然后输入矩阵 a(m 行 n 列)中的元素,分别求出各行元素之和,并输出。输出使用语句:printf("sum of row %d is %d\n", i, sum);
输入:
3 2 (m=3,n=2)
6 3
1 -8
3 12
输出:
sum of row 0 is 9
sum of row 1 is -7
sum of row 2 is 15
----*/
#include <stdio.h>
int main(void)
{
int i, j, m, n, sum;
int a[6][6];
scanf("%d%d",&m,&n);
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
for(i=0;i<m;i++){
sum=0;
for(j=0;j<n;j++)
sum=sum+a[i][j];
printf("sum of row %d is %d\n", i, sum);
}
return 0;
}
2 矩阵运算
/*---程序填空,不要改变与输入输出有关的语句。输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:读入 1 个正整数 n(1≤n≤6), 再读入 n 阶方阵 a , 计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入输出示例:括号内为说明
输入:
1 (repeat=1)
4 (n=4)
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
sum = 35 (2+3+4+5+6+7+8=35)
------*/
#include "stdio.h"
int main(void)
{
int i, j, n, sum;
int repeat, ri;
int a[6][6];
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
sum=0;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
sum=sum+a[i][j];
for(i=2;i<n-1;i++)
for(j=n-i;j<n-1;j++)
sum=sum+a[i][j];
printf("sum = %d\n", sum);
}
return 0;
}
3 九九乘法表
/*---程序填空,不要改变与输入输出有关的语句。输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:输入一个正整数 n(0<n<10),输出九九乘法表的前n×n项。提示:将乘数、被乘数和乘积放入一个二维数组中,再输出该数组。输入输出示例:括号内为说明
输入:
1 (repeat=1)
3 (n=3)
输出:
* 1 2 3
1 1
2 2 4
3 3 6 9
------*/
#include "stdio.h"
int main(void)
{
int i, j, n;
int a[10][10];
int repeat, ri;
scanf("%d",&repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(j=1;j<=n;j++)
a[0][j]=j;
for(i=1;i<=n;i++)
a[i][0]=i;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
a[i][j]=a[0][j]*a[i][0];
for(i = 0; i <= n; i++){
for(j = 0; j <= n; j++)
if(i == 0 && j == 0) printf("%-4c", '*');
else if(i == 0 || j <= i) printf("%-4d", a[i][j]);
printf("\n");
}
}
return 0;
}
4 判断上三角矩阵
/*---程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入1 个正整数 n (1≤n≤6)和 n 阶方阵 a 中的元素,如果 a 是上三角矩阵, 输出"YES", 否则, 输出"NO"。
上三角矩阵指主对角线以下的元素都为0的矩阵, 主对角线为从矩阵的左上角至右下角的连线。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
3 (n=3)
1 2 3
0 4 5
0 0 6
2 (n=2)
1 0
-8 2
输出:
YES
NO
------*/
#include "stdio.h"
#include "math.h"
int main(void)
{
int flag, i, j, n;
int a[6][6];
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
flag=1;
for(i=1;i<n;i++)
for(j=0;j<i;j++)
if(a[i][j]!=0)
flag=0;
else break;
if(flag != 0) printf("YES\n");
else printf("NO\n");
}
return 0;
}
5 算算看,这是第几天?
/*--程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入日期(年、月、日),输出它是该年的第几天。
要求定义与调用函数 day_of_year(year, month, day),计算并返回year(年)、month(月)和day(日)对应的是该年的第几天,函数形参year、month和day的类型是int,函数类型也是int。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
1981 3 1 (1981年3月1日)
2000 3 1 (2000年3月1日)
输出:
days of year: 60 (1981年3月1日是该年的第60天)
days of year: 61 (2000年3月1日是该年的第61天)
-------*/
#include "stdio.h"
int main(void)
{
int day, day_year, month, year;
int repeat, ri;
int day_of_year(int year, int month, int day);
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d%d%d", &year, &month, &day);
day_year=day_of_year(year,month,day);
printf("days of year: %d\n", day_year);
}
return 0;
}
/*---------*/
int day_of_year(int year, int month, int day)
{
int k,leap;
int tab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
leap=(year%4==0&&year%100!=0||year%400==0);
for(k=1;k<month;k++)
day=day+tab[leap][k];
return day;
}
6 找鞍点(选作)
/*----程序填空,不要改变与输入输出有关的语句。
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入 1 个正整数 n(1≤n≤6)和 n 阶方阵 a 中的元素,假设方阵 a 最多有1个鞍点,如果找到 a 的鞍点, 就输出其下标, 否则,输出"NO"。
鞍点的元素值在该行上最大, 在该列上最小。
输入输出示例:括号内为说明
输入:
2 (repeat=2)
4 (n=4)
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
2 (n=2)
1 7
4 1
输出:
a[2][1] = 6
NO
-----*/
(1)错误的
#include "stdio.h"
int main(void)
{
int flag, i, j, k, row, col, n,x;
int a[6][6];
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
x=0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
flag=0;
for(i=0;i<n;i++){
k=a[i][0];
row=i;col=0;
for(j=1;j<n;j++){
if(a[i][j]>k){
k=a[i][j];
row=i;col=j;
}
}
for(i=0;i<n;i++){
if(k<a[i][col])
x++;}
if(x==n-1){
flag=1;
break;
}
}
if(flag != 0)
printf("a[%d][%d] = %d\n", row, col,a[row][col]);
else
printf("NO\n");
}
return 0;
}
(2)正确
#include "stdio.h"
int main(void)
{
int flag, i, j, k, row, col, n;
int a[6][6];
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%d", &n);
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);
flag=0;
for(i=0;i<n;i++){
row=i;col=0;
for(j=1;j<n;j++)
if(a[i][j]>a[i][col])
col=j;
for(k=0;k<n;k++)
if(a[k][col]<a[row][col])
break;
if(k==n){
flag=1;
break;
}
}
if(flag != 0)
printf("a[%d][%d] = %d\n", row, col,a[row][col]);
else
printf("NO\n");
}
return 0;
}
展开阅读全文