二维数组
来源:互联网 发布:CSI网络犯罪调查百度云 编辑:程序博客网 时间:2024/06/05 05:40
例题一:学生成绩统计
思路:成绩存于5行3列的二维数组,行代表学生,列代表课程。5个学生的平均成绩存入数组avg[5]中,3门课程的平均分数存入数组courseavg[3]中。
/*5个人参加了3门课程的考试,编程输入所有成绩,求出每个人的平均成绩和每门课的平均分数*/#include <stdio.h>#define NOS 5 //number of students#define NOC 3 //number of classesint main(){ int a[NOS][NOC]; double sts[NOS] = {0}; // students total score double cts[NOC] = {0};//classes total score double ts = 0;// total score int i,j; printf("input\n"); for(i = 0; i < NOS; i++) for(j = 0; j < NOC; j++) { scanf("%d", &a[i][j]); sts[i] += a[i][j]; cts[j] += a[i][j]; ts += a[i][j]; } printf("total score for every student:\n"); for(i = 0; i < NOS; i++) printf("%d:%lf\n", i+1, sts[i]); printf("average score for every class:\n"); for(j = 0; j < NOC; j ++) printf("%d:%lf\n", j+1, cts[j]/NOS); printf("average score for every student:\n"); for(i = 0; i < NOS; i++) printf("%d:%lf\n", i+1, sts[i]/NOC);}
二维数组定义:
数组类型名 数组名[行数][列数];float a[3][4]; // 定义数组a为3行4列的二维实型数组.int d[2][3];//定义数组d为2行3列的二维数组。
注意:一维数定义中的元素个数必须为常量表达式相同,二维数组定义中行数和列数也必须为常量表达式不能为变量。
二维数组的引用:
数组名 [行下标][列下标];例如:a[2][3];这里下标用来标识数组元素在数组中的位置。
二维数组和一维数组注意事项一样这里不再解释说明。
/*二维数组的输入和输出*/#include <stdio.h>int main(){ int a[2][3]; int i,j; printf("输入一个2*3阶数组\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } printf("输出2*3阶数组\n"); for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("%6d",a[i][j]); } printf("\n"); }}
设有一个m行n列的二维数组,按顺序在内存中存放,元素a[i][j](0<=i<=m-1,0<=j<=n-1)
是该数组的第i*n+j+1个元素。
二维数组的初始化中行数可以省略但是列数绝对不能省略。
例题一:找出矩阵中的最大值及其行下标和列下标。
/*二维数组中找出最大元素值及其行下标和列下标输出该数组*/#include<stdio.h>int main(){ int i,j; int a[3][3]; //输入数组 printf("输入数组元素\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } //输出数组元素 for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf("%3d",a[i][j]); } printf("\n"); } //找出最大值 int m=0,n=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(a[i][j]>a[m][n]) { m=i; n=j; } } } printf("max=a[%d][%d]=%d\n",m,n,a[m][n]); return 0;}
例题二:求矩阵的转置。
/*求矩阵的转置*/#include<stdio.h>int main(){ int i,j,t; int n; int a[3][3]; printf("输入一个整数\n"); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } printf("\n"); } printf("输出该数组\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%3d",a[i][j]); } printf("\n"); } printf("行列互换\n"); for(i=1;i<n;i++) { for(j=0;j<i;j++) { t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } } printf("输出转置后的行列式\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%6d",a[i][j]); } printf("\n"); } return 0;}
程序说明:遍历转置矩阵循环也可以写成
for(i=0;i<n;i++){ for(j=0;j<n;j++) if(i<j) { ...... }}或者for(i=0;i<n;i++){ for(j=i+1;j<n;j++) { ...... }}
例题三:求矩阵的主对角线之和。
/*求矩阵的主对角线之和*/#include<stdio.h>int main(){ int i,j,t; int n; int sum=0; int a[3][3]; printf("输入一个整数\n"); scanf("%d",&n); printf("请输入矩阵\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&a[i][j]); } printf("\n"); } printf("输出该数组\n"); for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%3d",a[i][j]); } printf("\n"); } printf("求矩阵的主对角线\n"); for(i=0;i<n;i++) { sum=sum+a[i][i]; } printf("输出矩阵的主对角线之和为:%d\n",sum); return 0;}
例题四:计算某个日期对应年的第几天。
/*计算某个日起对应年的第几天*/#include<stdio.h>int main(){ int year,month,day; int days=0; int dayofyear(int year,int month,int day);//函数声明 printf("输入年、月、日\n"); scanf("%d%d%d",&year,&month,&day); days=dayofyear(year,month,day); printf("%d年%d月%d日是该年的第%d天\n",year,month,day,days);}int dayofyear(int year,int month,int day){ int i,j; int k[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}/*数组第一行为闰年每月天数*/ }; j=((year%4==0)&&(year%100!=0)||(year%400==0)); for(i=0;i<month;i++) { day=day+k[j][i]; } return day;}
阅读全文
0 0
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 二维数组
- 奇怪的群名片
- C++ Excel库使用记录
- 1123. Is It a Complete AVL Tree (30)
- hdu
- SpringCloud 学习记录(一):服务注册与发现(eureka+feign)
- 二维数组
- python中的try/except/else/finally语句
- 小P的故事——神奇的发票报销(背包问题)
- WebService的学习笔记00
- redis安装配置
- DeepFashion︱衣物时尚元素关键点定位+时尚元素对齐技术
- Ubuntu14.04中创建SWAP交换分区
- 快速简单理解——直接插入排序
- PAT-A 1002. A+B for Polynomials (25)