第六章:数组实训【寒假作业】

一、阅读程序题

1、代码

#include<stdio.h>
int main()
{
	int k, j, m, n, a[6][6], b[6];
	m = 3, n = 2;
	for (k = 0; k < m; k++)
		for (j = 0; j < n; j++)
			a[k][j] = k * n + j + 1;
	for (k = 0; k < m; k++)
	{
		b[k] = 0;
		for (j = 0; j < n; j++)
			b[k] += a[k][j];
	}
	for (k = 0; k < m; k++)
		printf("%3d", b[k]);
	return 0;
}

运行结果

粗浅理解:第一题主要是一维数组和二维数组的定义和引用,引用是根据数组之间下标存储的值进行引用的,要清晰明白数组长度和数组下标的关系,二维数组同理。

2、代码

#include<stdio.h>
int main()
{
	int i, j, k, t, b[3][3] = { {9,8,7},{6,5,4},{3,2,1} };
	for (j = 0; j < 3; j++)
		for (k = 0; k < 2; k++)
			for (i = 0; i < 2; i++)
				if (b[i][j] > b[i + 1][j])
					t = b[i][j], b[i][j] = b[i + 1][j], b[i + 1][j] = t;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
			printf("%3d", b[i][j]);
		printf("\n");
	}
	return 0;
}

运行结果

 粗浅理解:这一题主要是二维数组的定义,引用和初始化,把一个3×3的矩阵的行位置进行调换的一个代码,可以把它理解为3个一维数组进行逐级分解,减低维数,对于理解多维数组的存储方法,初始化及指针有很大帮助。

3、代码

#include<stdio.h>
int main()
{
	int i, j, a[4][4];
	for (i = 0; i < 4; i++)
		for (j = 0; j < 4; j++)
			if (i < j)
				a[i][j] = 1;
			else
				a[i][j] = i - j + 1;
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
			printf("%3d", a[i][j]);
		printf("\n");
	}
	return 0;
}

运行结果

粗浅理解:本题主要是对二维数组各个元素进行赋值,然后依次输出,要熟悉行下标和列下标的关系,就能基本理解本题的运行结果。

4、代码

#include<stdio.h>
#include<string.h>
int main()
{
	char a[7] = "a0\0a0\0"; int i, j;
	i = sizeof(a); j = strlen(a);
	printf("%d %d",i,j);
	return 0;
}

运行结果

粗浅理解:本题主要是对比sizeof()函数和strlen()函数的区别,前者计算字符串所占空间字节数,后者计算字符串长度,遇‘\0’结束。

5、代码

#include<stdio.h>
int main()
{
	int i, j, b[3][3] = { 0 };
	for (i = 0; i < 3; i++)
	{
		for(j=0;j<3;j++)
			switch (i - j + 2)
			{
			case 0:
			case 1:b[i][j] = 1; break;
			case 2:b[i][j] = 2; break;
			case 3:b[i][j] = 3; break;
			case 4:b[i][j] = 4; break;
			}
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
			printf("%2d", b[i][j]);
		printf("\n");
	}
	return 0;
}

运算结果

 粗浅理解:这题也是对二维数组的进行赋值,利用两个for循环和switch语句对3×3的二维数组赋值,然后输出此数组的代码。

6、代码

#include<stdio.h>
int main()
{
	int a[3][3], b[3 * 3] = { 1,2 }, i, j;
	for (i = 2; i < 3 * 3; i++)
		b[i] = b[i - 1] + b[i - 2];
	for (i = 0; i < 3; i++)
		for (j = 0; j < 3; j++)
			a[j][i] = b[i * 3 + j];
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
			printf("%3d", a[i][j]);
		printf("\n");
	}
	return 0;
}

运行结果

 粗浅理解:此题主要是对一维数组进行赋值,然后再根据一维数组的值,把一维数组的值依次赋值给二维数组,然后输出结果。主要注意的是对二维数组进行赋值时的行下标和列下标的位置问题,然后根据一维数组表达式的值对二维数组赋值。

二、编程题

(1)假设10个整数存储在数组a[10]中,要求把其中能被12整除的数标记为T,其他标记为F。标记存储在字符数组b[10]中下标相同的对应位置。试编写程序,实现以上功能,并输出两个数组。

代码

#include<stdio.h>
int main()
{
	int i, a[] = { 11,12,23,36,48,56,72,78,89,96 };
	char b[10];
	for (i = 0; i < 10; i++)
	{
		printf("%d  ", a[i]);
		if (a[i] % 12 == 0)b[i] = 'T';
		else b[i] = 'F';
	}
	printf("\n");
	for (i = 0; i < 10; i++)
		printf("%c   ", b[i]);
	return 0;
}

运行结果

 粗浅理解:此题根据要求先初始化一个有10个元素的一维数组,然后再定义一个字符数组用于存放字符‘T’和‘F’,先用for循环把已经初始化的a数组进行输出,然后判断a数组里的数是否能被12整除,能在字符数组b中存入字符‘T’,否则存入字符‘F’,第一个for循环结束后换行,再把b字符数组在a数组下面输出。

(2)编写程序,将输入的10名学生的成绩保存到数组中,求出其最高分、最低分及平均分。

#include<stdio.h>
int main()
{
	int i;
	float a[10], max = 0, min = 100, avg = 0;
	for (i = 0; i < 10; i++)
	{
		scanf("%f", &a[i]);
		if (a[i] > max)max = a[i];
		if (a[i] < min)min = a[i];
		avg = avg + a[i];
	}
	avg = avg / 10;
	printf("max=%.1f\n", max);
	printf("min=%.1f\n", min);
	printf("avg=%.1f\n", avg);
	return 0;
}

运行结果

 粗浅理解:根据题目要求,定义一个for循环,依次输入学生的成绩,存入a数组中,在其中用两个if判断语句判断最大值和最小值,再把总成绩累加到avg变量,结束for循环后进行求平均成绩,此时输入的10名学生成绩的最高分、最低分、平均分都以得出,依次输出即可。

(3)设计一个程序统计某个班全体学生3门课的考试成绩。要求能输入学生人数,并按编号从小到大的顺序依次输入学生的成绩,再统计出每门课程的全班总分、平均分及每个考生所在考试的总分和平均分。

#include<stdio.h>
int main()
{
	int i, j, n;
	float a[80][3], sumcj[80] = { 0 }, avg[4] = { 0 }, s[3] = { 0 };
	printf("Pease input rs:");
	scanf("%d", &n);
	for (i = 0; i < n; i++) {
		printf("Please input %d student cj:",i+1);
		scanf("%f,%f,%f", &a[i][0], &a[i][1], &a[i][2]);
		for (j = 0; j < 3; j++) {
			sumcj[i] = sumcj[i] + a[i][j];
			s[j] = s[j] + a[i][j];
		}
	}
	for (i = 0; i < n; i++) {
		printf("Sum=%.1f Avg=%.1f\n", sumcj[i], sumcj[i] / 3);
	}
	for (i = 0; i < 3; i++)
		printf("Sum=%.1f Avg=%.1f\n", s[i], s[i] / n);

	return 0;
}

运行结果

 粗浅理解:根据此题要求,需要一个二维数组记录全班学生的3门成绩,利用for循环依次输入每个学生的成绩,然后再嵌套一个for循环累加出每个学生的总分和每科成绩的总分,再利用for循环把每个学生的总分和平均分,每科的总分和平均分输出。

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏志121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值