概述
//练习7-9
//计算某个日期对应该年的第几天
#include<stdio.h>
int day_of_year(int year,int month,int day);
int main()
{
int year,month, day;
printf("Enter year, month, day: ");
scanf("%d%d%d",&year,&month,&day);
day_of_year(year, month, day);
printf("%d",day_of_year(year, month, day));
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++) //闰年,leap=1;非闰年,leap=0;
{
day=day+tab[leap][k];
}
return day;
}
Enter year, month, day: 2000 3 1
61
//练习7-5
//将列下标作为外循环变量,行下标作为内循环变量
#include<stdio.h>
int main()
{
int col,i,j,row;
int a[3][2];
printf("Enter 6 intergers: n");
for(j=0; j<2; j++)
for(i=0; i<3; i++)
scanf("%d",&a[i][j]);
//按矩阵的形式输出二维数组
for(i=0; i<3; i++)
{
for(j=0; j<2; j++)
printf("%4d",a[i][j]);
printf("n");
}
//找出最大值 a[row][col]
row=col=0;
for(i=0; i<3; i++)
for(j=0; j<2; j++)
if(a[i][j]>a[row][col]){
row=i;
col=j;
}
printf("max=a[%d][%d]=%dn",row,col,a[row][col]);
return 0;
}
Enter 6 intergers:
3 2
10 -9
6 -1
3 -9
2 6
10 -1
max=a[2][0]=10
不同于例7-7按行存放
练习7-5为按列存放
j i 值 1 0 0 3 2 0 1 2 3 0 2 10 4 0 0 -9 5 0 1 6 6 0 2 2
//练习7-6-1
#include<stdio.h>
int main()
{
int i,j,n,temp;
int a[6][6];
printf("Enter n: ");
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j]=i*n +j+1; //给数组赋值
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(i>=j){ //只需遍历下三角
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
for(i=0; i<n; i++){
for(j=0; j<n; j++)
{
printf("%4d",a[i][j]);
}
printf("n");
}
return 0;
}
Enter n: 3
1 4 7
2 5 8
3 6 9
评价:遍历上三角和下三角结果相同,结果都是i和j的值转换。
练习7-6-2
#include<stdio.h>
int main()
{
int i,j,n,temp;
int a[6][6];
printf("Enter n: ");
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j]=i*n +j+1; //给数组赋值
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(i>=j||j>=i){ //遍历整个矩阵
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
for(i=0; i<n; i++){
for(j=0; j<n; j++)
{
printf("%4d",a[i][j]);
}
printf("n");
}
return 0;
}
Enter n: 3
1 2 3
4 5 6
7 8 9
评价:将i转换成j,又将j的值转换成i,结果不变。
//练习7-7
//计算除了矩阵副对角线,最后一列,最后一行的所有元素之和
#include<stdio.h>
int main()
{
int i,j,n,temp,sum;
int a[6][6];
printf("Enter n: ");
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
a[i][j]=i+j;
for(i=0; i<n; i++){
for(j=0; j<n; j++)
{
printf("%4d",a[i][j]);
}
printf("n");
}
sum=0;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
if(i!=n-1&&j!=n-1&&(i+j)!=n-1)
{
sum+=a[i][j];
}
printf("%d",sum);
return 0;
}
Enter n: 6
0 1 2 3 4 5
1 2 3 4 5 6
2 3 4 5 6 7
3 4 5 6 7 8
4 5 6 7 8 9
5 6 7 8 9 10
80
//练习7-8
//方阵循环右移
#include<stdio.h>
int main()
{
int n,i,j,m;
int a[6][6],b[6][6];
printf("Enter n: ");
scanf("%d",&n);
for(i=0; i<n; i++)
for(j=0; j<n; j++)
scanf("%d",&a[i][j]);
for(i=0; i<n; i++){
for(j=0; j<n; j++)
{
printf("%4d",a[i][j]);
}
printf("n");
}
printf("Enter m: ");
scanf("%d",&m);
for( i=0; i<n; i++ ){
for( j=0; j<n; j++ ){
b[i][(j+m)%n ] = a[i][j]; //列元素向右移m各位置
}
}
for(i=0; i<n; i++){
for(j=0; j<n; j++)
{
printf("%4d",b[i][j]);
}
printf("n");
}
return 0;
}
Enter n: 3
1 2 3 4 5 6 7 8 9
1 2 3
4 5 6
7 8 9
Enter m: 2
2 3 1
5 6 4
8 9 7
最后
以上就是纯情云朵为你收集整理的C语言学习系列二十七——二维数组训练(矩阵计算)的全部内容,希望文章能够帮你解决C语言学习系列二十七——二维数组训练(矩阵计算)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复