• 明解C语言第五章习题


    数组

    练习5-1:从头顺次为数组中的元素赋值0 1 2 3 4

    #include
    int main()
    {
    	int i;
    	int v[5];
    	for (i = 0; i < 5; i++)
    	{
    		v[i] = i;
    	}
    	for (i = 0; i < 5; i++)
    	{
    		printf("v[%d]=%d\n", i, v[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    练习5-2:从头顺次为数组中的元素赋值5 4 3 2 1

    #include
    int main()
    {
    	int i;
    	int v[5];
    	for (i = 0; i < 5; i++)
    	{
    		v[i] = 5-i;
    	}
    	for (i = 0; i < 5; i++)
    	{
    		printf("v[%d]=%d\n", i, v[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    练习5-3:对5-5修改使从头开始使用5 4 3 2 1 修改

    #include
    int main()
    {
    	int i;
    	int v[5] = { 5,4,3,2,1 };
    	for (i = 0; i < 5; i++)
    	{
    		printf("v[%d]=%d\n", i, v[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    练习5-4:修改5-6,将数组a中的元素按照倒序复制到数组b中

    #include
    int main()
    {
    	int i;
    	int a[5] = { 1,2,3,4,5 };
    	int b[5] = { 0 };
    	for (i = 0; i < 5; i++)
    	{
    		b[4 - i] = a[i];
    	}
    	for (i = 0; i < 5; i++)
    	{
    		printf("a[%d]=%d  b[%d]=%d\n", i, a[i], i, b[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    练习5-5:对5-8修改,改为定义式宏来定义元素个数

    #define NUMBER 7
    #include
    int main()
    {
    	int i;
    	int x[NUMBER];
    	for (i = 0; i < 7; i++)
    	{
    		printf("x[%d]:", i);
    		scanf("%d", &x[i]);
    	}
    	for (i = 0; i < 3; i++)
    	{
    		int temp = x[i];
    		x[i] = x[6 - i];
    		x[6 - i] = temp;
    	}
    	for (i = 0; i < 7; i++)
    	{
    		printf("\nx[%d]=%d\n", i, x[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    练习5-6:假设a是double型,b是int型,a=b=1.5; 求a,b?

    答案:a=1;b=1

    .

    练习5-7:利用对象宏式来说明元素个数

    #include 
    #define NUMBER    80    
    int main()
    {
    	int v[NUMBER];
    	int num;
    	int i;
    	printf("数据个数:");
    	scanf("%d", &num);
    	for (i = 0; i < num; i++) 
    	{
    		printf("%d号:", i + 1);
    		scanf("%d", &v[i]);
    	}
    	printf("{");
    	for (i = 0; i < num - 1; i++) 
    	{
    		printf("%d, ", v[i]);
    	}
    	printf("%d", v[num - 1]);
    	printf("}");
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    练习5-8:逆向显示5-12分布图

    #include 
    
    #define NUMBER    80        /* 人数上限 */
    
    int main()
    {
    	int i, j;
    	int num;                /* 实际的人数 */
    	int tensu[NUMBER];        /* 学生的分数 */
    	int bunpu[11] = { 0 };    /* 分布图 */
    	printf("请输入学生人数:");
    	scanf("%d", &num);
    	printf("请输入%d 人的分数。\n", num);
    	for (i = 0; i < num; i++) 
    	{
    		printf("%2d号:", i + 1);
    		scanf("%d", &tensu[i]);
    		bunpu[tensu[i] / 10]++;
    	}
    
    	puts("\n---分布图---");
    	for (i = 0; i <= 9; i++)
    	{                /* 不到100分 */
    		printf("%3d - %3d:", i * 10, i * 10 + 9);
    		for (j = 0; j < bunpu[i]; j++)
    			putchar('*');
    		putchar('\n');
    	}
    	printf("      100:");
    	for (j = 0; j < bunpu[10]; j++)            /* 100分 */
    		putchar('*');
    	putchar('\n');
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    练习5-9:显示5-8的图

    #include 
    #define NUMBER 100 
    int main()
    {
    	int i, j;
    	int a[NUMBER];
    	int dis[11];
    	int b;
    	printf("请输入学生人数:");
    	scanf("%d", &b);
    	for (i = 0; i < b; i++)
    	{
    		printf("%2d号:", i + 1);
    		do
    		{
    			scanf("%d", &a[i]);
    			if (a[i] < 0 || a[i]>100)
    				printf("请输入0-100之间的数:");
    		} while (a[i] < 0 || a[i]>100);
    
    		dis[a[i] / 10]++;
    	}
    	int max = dis[0];
    	for (i = 1; i < 11; i++)
    	{
    		if (dis[i] > max)
    			max = dis[i];
    	}
    	for (; max > 0; max--)
    	{
    		for (j = 0; j < 11; j++)
    		{
    			if (dis[j] >= max)
    				printf("   *");
    			else
    				printf("    ");
    		}
    		putchar('\n');
    	}
    	putchar('\n');
    	for (i = 0; i < 45; i++)
    	{
    		printf("-");
    	}
    	putchar('\n');
    	for (i = 0; i < 11; i++)
    	{
    		printf("%4d", i * 10);
    	}
    	putchar('\n');
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    我也是初学者,这题我也不太会,答案是借鉴网上的。

    多维数组

    练习5-10:求3行4列矩阵和4行3列的矩阵。

    #include
    int main()
    {
    	int a[4][3];
    	int b[3][4];
    	int i, j, k, x, y, c[4][4];
    	printf("输入4*3 个数 以空格隔开:\n");
    	for (i = 0; i < 4; i++)
    		for (k = 0; k < 3; k++)
    			scanf("%d", &a[i][k]);
    	printf("输入3*4 个数 以空格隔开:\n");
    	for (i = 0; i < 3; i++)
    		for (k = 0; k < 4; k++)
    			scanf("%d", &b[i][k]);
    	for (i = 0; i < 4; i++) {    //计算矩阵c的值 
    		for (j = 0; j < 4; j++) {
    			c[i][j] = 0;
    			for (k = 0; k < 3; k++) {
    				c[i][j] += a[i][k] * b[k][j];
    			}
    		}
    	}
    	for (x = 0; x < 4; x++)
    	{
    		for (y = 0; y < 4; y++)
    			printf("%d\t", c[x][y]);
    		printf("\n");
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    目前还是高中森一枚,没学过行列式 =.= 答案 为了题目的完整性,参考了网上的优秀答案

    练习5-11 输入6名同学2门课程的分数,显示平均分和总分。

    #include 
    
    int main(void)
    {
        int i, j;
        double x, y;
        x = y = 0;
        int tensu1[6][1];
        int tensu2[6][1];
        int sum[6][1];            /* 总分 */
        puts("请依次输入语文和数学的成绩,用空格分隔");
        puts("输入分数:");
        puts("语文:");
        for (i = 0; i < 6; i++) {
            for (j = 0; j < 1; j++) {
                scanf("%d", &tensu1[i][j]);
            }
        }
        for (i = 0; i < 6; i++) {
            for (j = 0; j < 1; j++) {
                printf("%6d\t", tensu1[i][j]);
                x += tensu1[i][j];
            }
        }
        putchar('\n');
        printf("语文的总分是%.2f,平均分是:%.2f", x, x / 6);
        putchar('\n');
        puts("数学:");
        for (i = 0; i < 6; i++) {
            for (j = 0; j < 1; j++) {
                scanf("%d", &tensu2[i][j]);
            }
        }
        for (i = 0; i < 6; i++) 
        {
            for (j = 0; j < 1; j++)
            {
                printf("%6d\t", tensu2[i][j]);
                y += tensu2[i][j];
            }
        }
        putchar('\n');
        printf("数学的总分是%.2f平均分是:%.2f", y, y / 6);
        /* 求两次考试的分数之和 */
        for (i = 0; i < 6; i++)
        {
            for (j = 0; j < 1; j++)
                sum[i][j] = tensu1[i][j] + tensu2[i][j];
        }
        putchar('\n');
    
    
        /* 显示总分 */
        puts("总分");
        for (i = 0; i < 6; i++)
        {
            for (j = 0; j < 1; j++)
                printf("%6d\t", sum[i][j]);
    
        }
        putchar('\n');
        puts("平均分");
        for (i = 0; i < 6; i++) 
        {
            for (j = 0; j < 1; j++)
                printf("%.2f\t", (double)sum[i][j] / 2);
    
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    练习5-12:改写5-13的程序,将两次考试成绩分别储存在三维数组tensu中

    #include 
    int main(void)
    {
    	int x, y, z;
    	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 (x = 0; x < 2; x++) 
    	{
    		for (y = 0; y < 4; y++) 
    		{
    			for (z = 0; z < 3; z++) 
    			{
    				printf("%4d", tensu[x][y][z]);
    			}
    			printf("\n");
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    WinUI(WASDK)使用HelixToolkit加载机器人3D模型并进行项目实践
    CSS三大特性之层叠性
    猿创征文|实战开发openGauss DataStudio的sql联想结构
    RabbitMQ的架构模型
    MySQL 表的增删查改
    挑灯夜读——Redis实现分布式锁:含解决分布式问题思路
    专项学习:软件开发
    软考 系统架构设计师系列知识点之软件质量属性(3)
    涵盖Java核心知识的综合指南:JavaGuide | 开源日报 0912
    ZPM介绍(3)
  • 原文地址:https://blog.csdn.net/weixin_61084441/article/details/126065518