实验八:二维数组及字符数组

  • 一、实验目的

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");
}

五、实验小结

通过本次实验我掌握了二维数组、字符数组的定义、赋值和输入、输出的方法;能用循环处理二维数组、字符数组,用二维数组、字符数组存储数据;还掌握了与二维数组、字符数组应用有关的算法(例如求最大值、最小值算法,冒泡法排序算法、选择法排序算法等)。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值