实验一:
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> void average1(int score[5][3],double ave[]); void average2(int score[5][3],double ave[]); int main() { int score[5][3]={0},i,j,sum,sum1=0; double ave[5]; for(i=0;i<5;i++) { printf("请分别输入学生%d的语文,数学,英语成绩: ",i+1); for(j=0;j<=2;j++) { scanf("%d",&score[i][j]); } } average1(score,ave); average2(score,ave); printf("学号 语文 数学 英语 总分 平均分 "); for(i=0;i<5;i++) { sum=0; printf("学生%d:",i+1); for(j=0;j<3;j++) { printf(" %d",score[i][j]); sum=sum+score[i][j]; } printf(" %d",sum); sum1=sum1+sum; printf(" %.2f",ave[i]); printf(" "); } printf("平均分 "); for(j=0;j<3;j++) { printf("%.2f ",ave[j]); } printf("%d",sum1); return 0; } void average1(int score[5][3],double ave[5]) { int sum,i,j; for(i=0;i<5;i++) { sum=0; for(j=0;j<3;j++) { sum=sum+score[i][j]; } ave[i]=(double)sum/3.0; } } void average2(int score[5][3],double ave[3]) { int sum,i,j; for(j=0;j<3;j++) { sum=0; for(i=0;i<5;i++) { sum=sum+score[i][j]; } ave[j]=(double)sum/5.0; } }
实验二:
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #define N1 100 #define N2 100 int main() { int zhen[N1][N2],n1,i,j,sum; printf("请输入方阵的行数:"); scanf("%d",&n1); for(i=0;i<n1;i++) { printf("请输入第%d行的数 ",i+1); for(j=0;j<n1;j++) { scanf("%d",&zhen[i][j]); } } for(i=0;i<n1;i++) { printf(" "); for(j=0;j<n1;j++) { printf(" %d ",zhen[i][j]); } } for(i=0;i<n1;i++) { sum=0; for(j=0;j<n1;j++) { sum+=zhen[i][j]; } printf(" 方阵第%d行的和为:%d",i+1,sum); } for(j=0;j<n1;j++) { sum=0; for(i=0;i<n1;i++) { sum+=zhen[i][j]; } printf(" 方阵第%d列的和为:%d",j+1,sum); } sum=0; for(i=0;i<n1;i++) { for(j=0;j<n1;j++) { if(i==j) { sum+=zhen[i][j]; } } } printf(" 对角线元素之和为%d",sum); sum=0; for(i=0;i<n1;i++) { for(j=0;j<n1;j++) { if(i+j==n1-1) sum+=zhen[i][j]; } } printf(" 对角线元素之和为%d",sum); return 0; }
附加题一:
1.按照以下形式打印杨辉三角(要求输出10行)
杨辉三角形具有如下特点:(1)第一列和对角线上的元素都为1 (2)除第一列和对角线上的元素之外,其他元素的值均为前一行上的同列元素和前一列元素之和。
#include<stdio.h> #define N 10 int main() { int yanghui[N][N]={0},i,j; for(i=0;i<N;i++) { for(j=0;j<=i;j++) { if(j==0||j==i) { yanghui[i][j]=1; } else { yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j]; } } } for(i=0;i<N;i++) { printf(" "); for(j=0;j<9-i;j++) { printf(" "); } for(j=0;j<N;j++) { if(yanghui[i][j]==0) { printf(" "); } else { printf(" %4d ",yanghui[i][j]); } } } }
实验总结
1 二维数组虽然称作二维,但在计算机中存储时是一维的;
2 二维数组的完成需要两个循环,内层控制行,外层控制列;
3 二维数组的长度不能省略,一位数组可以;
4 二维数组的第一维表示数组行数度第二维表示数组的列;
5 字符数组也可以是二维数组;