5-1

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//01234
int main()
{
	int i = 0;
	int arr[5] = {0};
	for (i = 0; i < 5; i++)
	{
		arr[i] = i;
	}
	for (i = 0; i < 5; i++)
	{
		printf("arr[%d]=%d\n", i, i);

	}
	return 0;
}

5-2

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//54321
int main()
{
	int i = 0;
	int arr[5] = {0};
	int a = 5;
	for (i = 0; i < 5; i++)
	{
		arr[i] = a;
		a--;
	}
	for (i = 0; i < 5; i++)
	{
		printf("arr[%d]=%d\n", i, arr[i]);

	}
	return 0;
}

5-3

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//54321
int main()
{
	int i = 0;
	int v[] = { 5,4,3,2,1 };
	for (i = 0; i < 5; i++)
	{
		printf("v[%d]=%d\n", i, v[i]);
	}
	return 0;
}

5-4

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 0, m = 2;
	int a[] = {17,23,36};
	int b[3] = { 0 };
	//方法一:
	for (i = 0; i < 3; i++)
	{
		b[i] = a[m];
		m--;
		if (m < 0)
			break;
	}
	/*方法二:
	for(i=0;i<3;i++)
	{
	b[i]=a[2-i];
	}*/
	puts(" a  b");
	puts("-------");
		for (i = 0; i < 3; i++)
		{
			printf("%d  %d  \n", a[i], b[i]);
	}
		return 0;
}

5-5

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 4
int main()
{
	int i = 0;
	int arr[NUMBER] = {0};
	for (i = 0; i < NUMBER; i++)
	{
		printf("x[%d]:", i);
		scanf("%d", &arr[i]);
	}
	puts("倒叙排列了。");
	for (i = 0; i < (NUMBER/2); i++)
	{
		int temp = arr[i];
		arr[i] = arr[NUMBER - 1 - i];
		arr[NUMBER -1 - i] = temp;
	}
	for (i = 0; i < NUMBER; i++)
	{
      printf("x[%d]=%d\n", i, arr[i]);
	}
	return 0;
}

5-6

b=1;
a=1.0;
//因为b是int型,所以1.5传给b之后变为1,然后再将b传给a,由于a是double型,所以显示1.0;
ps:程序运行之后显示的a是1.000000,也可以在打印的时候改为%.2d让其显示1.0;

5-7

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 4
/*这道题我觉得题干有问题,体感说读取数组中的信息,但是又说要用
对象式宏来声明数组元素的个数,既然个数是提前声明好的,读取数据
个数有什么意义呢,这里改为定义数组个数,然后依次输入数组元素,
最终显示数组中所有元素。*/
int main()
{
	int arr[NUMBER] = {};
	int i = 0;
	printf("数据个数:%d\n",NUMBER);
	for (i = 0; i < NUMBER; i++)
	{
		printf("%d号:", i + 1);
		scanf("%d", &arr[i]);
	}
	printf("{");
	for (i = 0; i < NUMBER; i++)
	{
		if (i < NUMBER - 1)
		{
			printf("%d,", arr[i]);
		}
		else
		{
			printf("%d", arr[i]);
		}
	}
	printf("}");
	return 0;
}

5-8

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 80
int main()
{
	int num = 0;
	int arr[NUMBER] = { 0 };
	int i = 0;
	int px[11] = {0};
	printf("请输入学生人数:");
	do
	{
		scanf("%d", &num);
		if (num < 0 || num>80)
		{
			printf("请输入1~%d的数:",NUMBER);
			
		}
	} while (num < 0 || num>80);
	printf("请输入%d人的分数。\n", num);
	for (i = 0; i < num; i++)
	{
		printf("%2d号:", i + 1);
		do
		{
           scanf("%d", &arr[i]);
		   if (arr[i] < 0 || arr[i]>100)
		   {
			   printf("请输入1~100之间的整数:");
		   }
		} while (arr[i] < 0 || arr[i]>100);
		px[arr[i] / 10]++;
	}
	puts("---分布图---");
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%3d-%3d:", i * 10 , (i * 10 + 9));
		for (j = 0; j < px[i]; j++)
		{
			putchar('*');
			
		}putchar('\n');
	}
	printf("    100:");
	for (j = 0; j < px[10]; j++)
	{
		putchar('*');
	}
	return 0;
}

5-9

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 80
/*现在是2022.4.12,目前还在封校,神经网络作业还没写,还没解封,快递什么的也是,
听说这道题有点难度,我从上午开始断断续续的开始看找思路,这道题大约花了我将近一
个半小时或者两个小时,虽然时间有点长,但是还是做出来了,还需要加油呀,希望我现
在学的,对我以后真的会有帮助!加油!*/
/*找到px数组中的最大值,也就是在某一分数段出现的最大次数,在此题中为3,所以看到
3就打一个星号,没看到就打空格,在第一行完成后,将最大值减一,就可以继续完成后面
的算法,从每一行的角度来看非常方便理解。*/
int main()
{
	int num = 0;
	int arr[NUMBER] = { 0 };
	int i = 0;
	int px[11] = {0};
	char a = '*';
	char b = ' ';
	printf("请输入学生人数:");
	do
	{
		scanf("%d", &num);
		if (num < 0 || num>80)
		{
			printf("请输入1~%d的数:",NUMBER);
			
		}
	} while (num < 0 || num>80);
	printf("请输入%d人的分数。\n", num);
	for (i = 0; i < num; i++)
	{
		printf("%2d号:", i + 1);
		do
		{
           scanf("%d", &arr[i]);
		   if (arr[i] < 0 || arr[i]>100)
		   {
			   printf("请输入1~100之间的整数:");
		   }
		} while (arr[i] < 0 || arr[i]>100);
		px[arr[i] / 10]++;
	}
	puts("---分布图---");
	/*int j = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%3d-%3d:", i * 10 , (i * 10 + 9));
		for (j = 0; j < px[i]; j++)
		{
			putchar('*');
			
		}putchar('\n');
	}
	printf("    100:");
	for (j = 0; j < px[10]; j++)
	{
		putchar('*');
	}*/
	int max = 0;
	for (i = 0; i < 11; i++)
	{
		
		if (px[i] > max)
		{
			max = px[i];
		}
	}
	do 
	{
     for (i = 1; i <= 11; i++)
	  {
		 
		if (px[i-1] == max)
		{
			printf("%4c",a);
			px[i-1]--;
		}
		else
            printf("%4c", b);
	  }
	 putchar('\n');
	max--;
	} while (max > 0);
	puts("----------------------------------------------");
	for (i = 0; i < 101; i += 10)
	{
		printf("%4d", i);
	}
	return 0;
}

5-10

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*这道题最好列出所得四阶矩阵,再去看之间的关系,我们会发现,其实在第0行的时候,要进行
4次的循环,此4次循环行不变,列依次加1,所以引用了m变量,想明白其实挺简单的,就这个小
程序又花了一个半小时,看来还是有很长的路要走呀!*/
int main()
{
	int arr1[4][3] = { 0 };
	int arr2[3][4] = { 0 };
	int b[4][4] = {0};
	int i = 0, j = 0, m = 0, a = 0;
	printf("给四行三列的数组赋值:\n");
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 3; j++)
			scanf("%4d", &arr1[i][j]);
	}
	printf("给三行四列的数组赋值:\n");
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
			scanf("%4d", &arr2[i][j]);
	}
	for (i = 0; i < 4; i++)
	{
		while (m < 4)
		{
			for (j = 0; j < 3; j++)
			{
				b[i][m] += arr1[i][j] * arr2[j][m];
			}
			m++;
		}
		m = 0;
	}
	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
			printf("%4d", b[i][j]);
		putchar('\n');
	}
	return 0;
}

5-11

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*两行六列,行为成绩,列为学生,题干没说成绩怎么来的,这里为了增加难度,
成绩由键盘输入*/
int main()
{
	int i = 0, j = 0;
	int arr[2][6] = { 0 };
	puts("      A  B  C  D  E  F");

	for (i = 0; i < 2; i++)
	{
		if (i == 0)
		{
			printf("语文:");
		}
		else
		{
			printf("数学:");
		}
		for (j = 0; j < 6; j++)
		{
			scanf("%4d", &arr[i][j]);
		}
	}
	puts("-----------------------");
	puts("      总分  平均分");
	int sum1 = 0, sum2 = 0, ave1 = 0, ave2 = 0;
	for (j = 0; j < 6; j++)
	{
		sum1 += arr[0][j];
	}
	ave1 = sum1 / 6;
	printf("语文: %d     %d  \n", sum1, ave1);
	for (j = 0; j < 6; j++)
	{
		sum2 += arr[1][j];
	}
	ave2 = sum2 / 6;
	printf("数学: %d     %d  \n", sum2, ave2);
	return 0;
}

5-12

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int i, j,k;
	int tensu[2][4][3] = { {{91,63,78},{67,72,46},{89,34,53},{32,54,34}},{{97,67,82},{ 73,43,46 }, { 97,56,21 }, { 85,46,35 } } };
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < 4; j++)
		{
			for (k = 0; k < 3; k++)
			{
				printf("%3d", tensu[i][j][k]);
			}
			putchar('\n');
		}
	}
	return 0;
}

更多推荐

明解C语言 入门 课后习题练习答案 第五章