C语言实验四由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言实验四”。
实
验
报
告
课程名称实验项目
学院 系别 班级/学号 学生姓名 实验日期 成绩 指导教师
程序设计基础(C语言)实验四 数组
(二)
一、实验目的1.掌握二维数组的定义和初始化。2.掌握二维数组元素的引用及其应用。
二、实验内容
注:本次实验完成前三个题目或者仅完成第四个题目最高分为90分,完成全部四个题目最高分100分。
题目1:输入十个人的姓名,并按升序输出。(用选择法或者冒泡法排序)
流程图:
代码:
#include #include int main(){
{ int i,j;char a[10][5],t[2];printf(“请输入十个人的名字:n”);for(i=0;i
} printf(“排序输出:n”);for(i=0;i
} if(strcmp(a[i],a[i+1])>0){
} strcpy(t,a[i]);strcpy(a[i],a[i+1]);strcpy(a[i+1],t);gets(a[i]);} puts(a[i]);return 0;}
题目2:求两个矩阵的积。如:
运算规则为:
第i行第j列相乘得到结果矩阵中r[i][j]的值。比如:
r[0][0] = 1*1+2*5+3*8=35;r[0][1] = 1*5+2*3+3*1=14;r[1][0] = 4*1+5*5+6*8=77;r[1][1] = 4*5+5*3+6*1=41;要求:
1.数组的行数和列数不超过100。
2.输入第一行中,第一个正整数m,表示第一个矩阵的行数,输入第二个正整数n,表示第一个矩阵的列数,也即是第二个矩阵的行数,输入第三个正整数p,表示第二个矩阵的列数。
3.接下来的m*n个数是第一个矩阵中的数。4.再接下来的n*p个数是第二个矩阵中的数。5.输出计算结果,为一个m行,p列的矩阵。流程图:
#include int main(){
int a[100][100]={0},b[100][100]={0},c[100][100]={0},i,j,k,n,m,p;printf(“请输入第一个矩阵的行数m:n”);scanf(“%d”,&m);printf(“请输入正整数n(第一个矩阵的列数,也是第二个矩阵的行数):n”);
for(i=0;i
for(j=0;j
printf(“这两个矩阵的和为:n”);for(i=0;i
} for(j=0;j
题目3:求矩阵的鞍点。鞍点位置上的元素在该行中值最大,在该列中值最小。如下面矩阵的鞍点为35。
【输入】前两个数为行数和列数,其后是矩阵中的元素
【输出】如果没有鞍点,输出NO;如果有输出格式为:[值1,行下标1,列下标1],[值2,行下标2,列下标2]…… 流程图:
#include int main(){
int a[100][100];int m,n,i,j,t,k;printf(“请输入行数m和列数n:n”);scanf(“%d%d”,&m,&n);printf(“请输入这个%d*%d矩阵:n”,m,n);for(i=0;i
for(j=0;j
for(t=0,j=1;ja[j][t])break;if(j>=m){
} k=1;printf(“鞍点[%d]是%d:行下标%d,列下标%dn”,k,a[i][t],i,t);k++;} return 0;} 运行结果:
题目4:学生成绩统计
一个班共有6名学生,已知每个学生有5门课程的成绩 请输出每个学生的平均成绩 请输出每门课程的平均成绩 请输出学生的最高平均成绩和序号 请输出课程的最高平均成绩和序号 流程图:
#include int main(){
float a[7][6],b[7],c[6];int m,n,i;printf(“请输入6名学生的5门课程的成绩:n”);for(m=1;m
} for(m=1;m
} for(n=1;n
} for(m=1;m
} {
} for(m=1;m
} return 0;i=0;for(n=1;n
} if(i==5)printf(“第%d门课成绩最高为%.1fn”,m,c[m]);if(c[m]>=c[n])i++;i=0;for(n=1;n
} if(i==6)printf(“第%d名学生成绩最高为%.1fn”,m,b[m]);if(b[m]>=b[n])i++;运行结果:
题目5:井字格游戏
程序大致的执行过程如图所示: 功能包括:
1.允许两个玩家下棋 2.允许玩家输入下棋的坐标 3.显示当前棋盘状态
4.判断玩家是否下错位置,即在已经下过棋的位置再次下棋 5.判断玩家下棋后,输赢状态 6.在屏幕提示中指导玩家交替下棋
流程图: 省列。代码:
#include #include int c,i,j,kongzhi=1,i=1;int basic[3][3]={0,0,0,0,0,0,0,0,0};int tasic[3][3]={0,0,0,0,0,0,0,0,0};char T[3][3];int printerA(int site1,int site2){ if(tasic[site1][site2]==0&&basic[site1][site2]==0){basic[site1][site2]=1;
T[site1][site2]='X';for(i=0;i
printf(“-------n”);for(j=0;j
} else return 99;} printf(“-------n”);} return 0;int printerB(int site1,int site2){
if(tasic[site1][site2]==0&&basic[site1][site2]==0){ tasic[site1][site2]=-1;T[site1][site2]='O';for(i=0;i
{ printf(“|”);printf(“%c”,T[i][j]);} printf(“|n”);if(i==2){ printf(“-------n”);} } return 0;} else return-99;} int main(){ int m,n,a,b;while(kongzhi==1){
if((basic[0][0]+basic[0][1]+basic[0][2]==3)||(basic[1][0]+basic[1][1] do { a=0;printf(“请A下子:”);scanf(“%d%d”,&m,&n);
a=printerA(m,n);if(a==99)printf(“对不起,您下错位置了!n”);} while(a==99);+basic[1][2]==3)||(basic[2][0]+basic[2][1]+basic[2][2]==3)||(basic[0][0]+basic[1][1]+basic[2][2]==3)||(basic[0][2]+basic[1][1]+basic[2][0]==3)){ printf(“A赢了!n”);return 0;} do { b=0;printf(“请B下子:”);scanf(“%d%d”,&m,&n);
b=printerB(m,n);if(b==-99)
printf(“对不起,您下错位置了!n”);} while(b==-99);if((tasic[0][0]+tasic[0][1]+tasic[0][2]==-3)||(tasic[1][0]+tasic[1][1]+tasic[1][2]==-3)||(tasic[2][0]+tasic[2][1]+tasic[2][2]==-3)||(tasic[0][0]+tasic[1][1]+tasic[2][2]==-3)||(tasic[0][2]+tasic[1][1]+tasic[2][0]==-3))
{ printf(“B赢了!n”);return 0;} i++;if(i==9){ printf(“平局!”);return 0;} } } 运行结果:
心得体会:这几道题加深了我对数组的理解,及其相关应用。