《明解C语言》第三版 (入门篇) 第五章练习答案

题目就不放出来了,对着练习题号就行 

练习5-1 


#include<stdio.h>
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

#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

#include<stdio.h>//5-3
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

#include <stdio.h>//5-4

int main()
{
    int i;
    int a[5] = { 17, 23, 36 };    // 使用{17,23,36,0,0} 进行初始化
    int b[5];

    for (i = 0; i < 5; i++) {
        b[4 - i] = a[i];
    }

    puts("  a    b");
    puts("---------");
    for (i = 0; i < 5; i++)
        printf("%4d%4d\n", a[i], b[i]);

    return 0;
}

练习5-4

#include <stdio.h>
#define number 7

int main(void)
{
    int i;
    int x[number];                    

    for (i = 0; i < number; 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;
    }

    puts("倒序排列了。");
    for (i = 0; i < number; i++)        
        printf("x[%d] = %d\n", i, x[i]);

    return 0;
}

练习5-6

 结果都是1

练习5-7

#include <stdio.h>
#define number    80    

int main(void)
{
    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;
}

练习5-8


#include <stdio.h>

#define NUMBER    80        /* 人数上限 */

int main(void)
{
    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;
}

练习5-9

#include <stdio.h>
#define NUMBER 80        

int main(void)
{
    int i, j;
    int num, higt;                
    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("-------------------------------------------");//以下是空间高度
	higt = bunpu[0];
	for(i = 0;i < 11;i++)
	{
		if(bunpu[i] > higt){
			higt = bunpu[i];
		}
	}

	for( ;higt > 0;higt--)//限定空间的高,确定有从上到下有几行
	{
		for(j = 1;j <= 11;j++)//从1到11遍历一行中的每一列
		{
			if(bunpu[j] >= higt){//判定数组bunpu[j]>大于该层空间最大值
				printf("   *");//bunpu数组某个数大于空间最大值时,输出两个空格加*号
			}
			else{
				printf("    ");//bunpu数组不大于空间最大值时,输出三个空格
			}	
		}
		putchar('\n');
	}
	
	puts("————————————————————————————————————————————");
    for (i = 0; i <= 10; i++)
    {
        printf("%4d",i*10);
    }
    
    return 0;
}

练习5-10

int main()
{
	int arr1[4][3];//4行3列
	int arr2[3][4];//3行4列	
	int c[4][4];//乘积变成4行4列
	int i,j,k,a,b;
	
	puts("4行3列");	
	for(i = 0;i < 4;i++){//4行3列
		for(j = 0;j < 3;j++){
			scanf("%2d ",&arr1[i][j]);
		}
	}
	
	puts("3行4列");
	for(i = 0;i < 3;i++){//3行4列	
		for(j = 0;j < 4;j++){
			scanf("%2d ",&arr1[i][j]);
		}
	}
	
	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] += arr1[i][k] * arr2[k][j];
			}
		}
    }
	
	for (a = 0; a < 4; a++)
    {
        for (b = 0; b < 4; b++){
            printf("%d\t", c[a][b]);
		}
		printf("\n");
    }
	
	return 0;
}


//别人的
int main(void)
{
    int a,b,c,d = 0;            
    int array1[4][3];   //矩阵1
    int array2[3][4];   //矩阵2
    int origion[4][12] = {0};   //原始矩阵乘积数据的数组初始化
    int product[4][4] = {0};    //最终矩阵乘积的数组初始化

    puts("请依次输入矩阵1的各值");

    for (a = 0; a < 4; a++)     //遍历矩阵1来赋值
    {
        for (b = 0; b < 3; b++)
        {
            printf("矩阵1[%d][%d]:",a,b);
            scanf("%d",&array1[a][b]);
        }
    }
    
    for (a = 0; a < 3; a++)     //遍历矩阵2来赋值
    {
        for (b = 0; b < 4; b++)
        {
            printf("矩阵2[%d][%d]:",a,b);
            scanf("%d",&array2[a][b]);
        }
        
    }
    //遍历各个乘积赋值到原始数据矩阵中
    for ( a = 0; a < 4; a++)       //矩阵1的每一行
    {
        d = 0;
        for (b = 0; b < 4; b++)     //矩阵2的每一列
        {
            for (c = 0; c < 3; c++)     //矩阵2每一列的各行
            {   
                origion[a][d] = array1[a][c] * array2[c][b];    //将矩阵的原始乘积(未合并)赋值到原始数据数组origion
                d += 1;
            }
        }
        putchar('\n');
    }

    puts("{");
    //将原始乘积合并,赋值到product二维数组,即矩阵的乘积
    for ( a = 0; a < 4; a++)
    {
        b = 0;
        for (d = 0; d < 12; d++ )
        {
            product[a][b] += origion[a][d];
            if ((d+1)%3 == 0)                   //变量从0开始,原始数据矩阵每3个相乘数为一组相加
            {   printf("%4d",product[a][b]);     
                b++;                            //每一组加完后,更换到product数组元素的第二个元素
            }
        }
        putchar('\n');
    }
    puts("}");

    
    return 0;
}

练习5-11

#include <stdio.h>

int main(void)
{
    int s = 6;          /*学生数量*/
    int c = 2;          /*科目数量*/
    double tensu[s][c];
    int i, j;
    double sum0 = 0, sum1 = 0;      /*科目1、科目2的总分*/
    double tmp = 0;

    for(i = 0; i < s; i++)
    {
        printf("学生%d\n", i + 1);
        for(j = 0; j < c; j++)
        {
            printf("        科目%d:",  j + 1);
            scanf("%lf", &tensu[i][j]);
            /*验证 显示每次输入的分数
            printf("        %.1f", tensu[i][j]);*/

            /*通过判断j的值,为0时,或为1时,分别计入到不同的统计结果中*/
            switch(j)
            {
                case 0 : sum0 += tensu[i][j];   break;
                case 1 : sum1 += tensu[i][j];   break;
            }

            putchar('\n');
        }
    }

    /*验证 显示输入后所有的科目以及对应分数
    for(i = 0; i < s; i++)
    {
        printf("学生%d\n", i + 1);
        for(j = 0; j < c; j++)
        {
            printf("        科目%d:%.1f", j + 1, tensu[i][j]);
            putchar('\n');
        }
    }*/
  
    for(i = 0; i < c; i++)          /*有c个科目*/
    {
       for(j = 0; j < s; j++)       /*将s个学生的成绩加在一起*/
       {
           tmp += tensu[j][i];      /*临时储存每个科目的总分*/
       }
        printf("科目%d  总分:%.1f  平均分:%.1f", i + 1, tmp, tmp / s);
        tmp = 0;
        printf("\n");
    }

    printf("\n\n");
    
    for(i = 0; i < s; i++)          /*有s个学生*/
    {
        for(j = 0; j < c; j++)      /*将c个科目的成绩加在一起*/
        {
            tmp += tensu[i][j];     /*临时储存每个学生的总分*/
        }
        printf("学生%d  总分:%.1f  平均分:%.1f", i + 1, tmp, tmp / c);
        tmp = 0;                /*计算出每个学生的平均分后,将临时储存清空*/
        printf("\n");
    }
   
 
    return 0;
}



方法2,理解成6名学生在两次考试的成绩


int main()
{
    int a,b,c,d = 0;            
    int array1[6][1];   
    int array2[6][1];
	int sum[6][1];
	

    puts("请依次输入成绩的各值");

    for (a = 0; a < 6; a++)     //遍历矩阵1来赋值
    {
        for (b = 0; b < 1; b++)
        {
            printf("成绩[%d][%d]:",a,b);
            scanf("%3d",&array1[a][b]);
        }
		printf("\n");
    }
	for (a = 0; a < 6; a++)     //遍历矩阵2来赋值
    {
        for (b = 0; b < 1; b++)
        {
            printf("成绩[%d][%d]:",a,b);
            scanf("%3d",&array2[a][b]);
        }
		printf("\n");
    }
	
	for (a = 0; a < 6; a++)     //两次分数
    {
        for (b = 0; b < 1; b++)
        {
            sum[a][b] = array1[a][b] + array2[a][b];
        }
    }
	puts("总分");
	for (a = 0; a < 6; a++)     //总分
    {
        for (b = 0; b < 1; b++)
        {
            printf("%3d",sum[a][b]);
        }
		putchar('\n');
    }
	puts("平均分");
	for (a = 0; a < 6; a++)     //平均分
    {
        for (b = 0; b < 1; b++)
        {
            printf("%3d",sum[a][b]/2);
        }
		putchar('\n');
    }
	
	
	return 0;
}

练习5-12

#include <stdio.h>

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]);
            
            }
            putchar('\n');
        }
    }    
    return 0;


}

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
明解C语言 第3版 入门篇》的第六章包括两个练习题,分别是练习6-3和练习6-6。练习6-3是一个计算输入数的立方的程序,代码如下: #include<stdio.h> int cube(int x) { return x*x*x; } int main(void) { int a ; printf("请输入A的值:"); scanf("%d",&a); printf("该值的立方为:%d",cube(a)); return 0; } 练习6-6是一个根据输入的n值,按照次数发出响铃的程序,代码如下: #include<stdio.h> void alert(int ch, int n) { putchar(ch); } int main(void) { int a, i; printf("请输入n值:"); scanf("%d",&a); for(i=1;i<=a;i++) { alert('\a',i); } return 0; }<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [明解C语言(第3版)入门篇.[日]柴田望洋(带详细书签).pdf 【半高清】](https://download.csdn.net/download/kxjrzyk/11049496)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [明解C语言入门篇)第六章](https://blog.csdn.net/a237664181a/article/details/89043758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

漏洞嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值