-
一、实验目的
1、掌握二维数组、字符数组的定义、赋值和输入、输出的方法;
2、能用循环处理二维数组、字符数组,用二维数组、字符数组存储数据;
3、掌握与二维数组、字符数组应用有关的算法(例如求最大值、最小值算法,冒泡法排序算法、选择法排序算法等)。
-
二、实验设备及器材
计算机,编译器
-
三、实验内容和要求
1、二维数组、字符数组的定义、赋值、输入和输出;
2、用循环处理维数组、字符数组,维数组、字符数组元素的引用;
3、二维数组、字符数组的应用:求最大值、最小值问题,冒泡法排序,选择法排序。
-
四、实验步骤
一、程序调试
1、分析以下程序,写出运行结果。
/* 文件名:ex8_1.c */
#define Row 2
#define Col 3
#include "stdio.h"
main()
{ int i, j, array[Row][Col];
for(i=0; i<Row; i++)
for(j=0; j<Col; j++)
{ printf("please input array[%2d][%2d]:",i,j);
scanf("%d",&array[i][j]);
}
printf("\n");
for(i=0;i<Row;i++)
{ for(j=0;j<Col;j++)
printf("%d\t",array[i][j]);
printf("\n");
}
}
答:一个个抓取元素再输出。
二、编程题:
1.从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。源程序以ex8_2.c保存在自己的文件夹内。
#include<stdio.h>
#define N 80
int main (void)
{
char a[N];
scanf("%s",a);
printf("%s\n",a);
}
2.求一个5×5的整型矩阵对角线元素之和。源程序以ex8_3.c保存在自己的文件夹内。
#include<stdio.h>
#define N 5
int a[N][N];
void input();
void output();
int func();
void main()
{
int i,j,sum;
input();
output();
sum = func();
printf("sum=%d\n",sum);
}
void input()
{
int i,j;
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
scanf("%d",&a[i][j]);
}
}
}
void output()
{
int i,j;
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
printf("%4d",a[i][j]);
printf("\n");
}
}
}
int func()
{
int i,j,sum = 0;
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
if(i==j || i+j==N-1)
sum+=a[i][j];
}
}
return sum;
}
3.有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩和每门课程的平均成绩。源程序以ex8_4.c保存在自己的文件夹内。
#include<stdio.h>
#define M 100
#define N 3
void ReadScore(int score[][N], int n);
void AveStu(int score[][N], int n, int sum[], float aver[]);
void AveCou(int score[][N], int n, int sum[], float aver[]);
void Print(int score[][N], int n, int sumS[], float averS[], int sumC[], float averC[]);
int main(void)
{
int score[M][N], sumS[M], sumC[N], n;
float averS[M], averC[N];
printf("学生的总人数为:");
scanf("%d",&n);
ReadScore(score, n);
AveStu(score, n, sumS, averS);
AveCou(score, n, sumC, averC);
Print(score, n, sumS, averS, sumC, averC);
return 0;
}
void ReadScore(int score[][N], int n)
{
int i, j;
printf("输入学生各科成绩:\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < N; j++)
{
scanf("%d",&score[i][j]);
}
}
}
void AveStu(int score[][N], int n, int sum[], float aver[])
{
int i, j;
for(i = 0; i < n; i++)
{
sum[i] = 0;
for(j = 0; j < N; j++)
{
sum[i] = sum[i]+score[i][j];
}
aver[i] = (float)sum[i]/N;
}
}
void AveCou(int score[][N], int n, int sum[], float aver[])
{
int i, j;
for(j = 0; j < N; j++)
{
sum[j];
for(i = 0; i < n; i++)
{
sum[j] = sum[j]+score[i][j];
}
aver[j] = (float)sum[j]/n;
}
}
void Print(int score[][N], int n, int sumS[], float averS[], int sumC[], float averC[])
{
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < N; j++)
{
printf("%4d\t",score[i][j]);
}
printf("%4d\t%5.1f\n",sumS[i], averS[i]);
}
for(j = 0; j < N; j++)
{
printf("%4.1f\t",averC[j]);
}
printf("\n");
}
五、实验小结
通过本次实验我掌握了二维数组、字符数组的定义、赋值和输入、输出的方法;能用循环处理二维数组、字符数组,用二维数组、字符数组存储数据;还掌握了与二维数组、字符数组应用有关的算法(例如求最大值、最小值算法,冒泡法排序算法、选择法排序算法等)。