明解C语言入门篇第三版练习代码(部分)------第五/六章

第五章

练习5-9

//编写一段程序,像右边这样纵向显示练习5-8中得到的分布图。

#include <stdio.h>
#define NUMBER 80

int main ()
{
	int i,j;
	int num,max;
	int tensu[NUMBER];
	int bunpu[11] = {0};

	printf("请输入学生人数:");

	do {
        scanf("%d",&num);
        if (num < 1 || num >NUMBER)
            printf("\a请输入1~%d的数:",NUMBER);
	} while (num < 1 || num > NUMBER);

	printf("请输入%d人的分数。\n",num);
    for (i = 0; i < num; i++) {
		printf("%2d号:", i + 1);
		do {
			scanf("%d", &tensu[i]);
			if (tensu[i] < 0 || tensu[i] > 100)
				printf("\a请输入1~100 的数:");
		} while (tensu[i] < 0 || tensu[i] > 100);
		bunpu[tensu[i] / 10]++;
	}

    max = bunpu[0];
    for (i=1; i<11; i++) {
        if (bunpu[i]>max)
            max = bunpu[i];
    }

    printf("分布图:\n");
    for (i=0; i<max; i++) {
        for (j=0; j<11; j++) {
            if (bunpu[j]>= (max-i) )
                printf ("   *");
            else
                printf("    ");
        }
        printf("\n");
    }
    printf("---------------------------------------------\n");
    for (i=0; i<11; i++) {
        printf("%4d",10*i);
    }

	return 0;
}

练习5-10

//编写一段程序,求4行3列矩阵和3行4列矩阵的乘积。各构成元素的值从键盘输入。

#include <stdio.h>

int main ()
{
	int a[4][3],b[3][4],c[4][4];
	int i,j,k;

    printf("请横向输入4行3列矩阵:\n");
	for (i=0; i<4; i++) {
        printf("第%d行:",i+1);
        for (j=0; j<3 ; j++)  {
            scanf("%d",&a[i][j]);  //不要忘记取址符号&!
        }
	}

	printf("\n请横向输入3行4列矩阵:\n");
	for (i=0; i<3; i++) {
        printf("第%d行:",i+1);
        for (j=0; j<4 ; j++) {
            scanf("%d",&b[i][j]);
        }
	}

	for (i=0; i<4; i++) {
        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];
            }
        }
	}

	printf("\n乘积为:\n");
	for (i=0; i<4; i++) {
        for (j=0; j<4; j++) {
            printf("%5d ",c[i][j]);
        }
        printf("\n");
	}

	return 0;
}

第六章

练习6-5

//创建一个函数,返回1到n之间所有整数的和。

#include <stdio.h>

int sumup (int n)
{
    int sum=n;

    while (n-- >0) {   //先判断n是否大于0,n=n-1,在求和!
        sum += n;
    }

    return sum;
}

int main ()
{
	int n;

	printf("请输入整数n:");
	scanf("%d",&n);

	printf("1到整数%d的所有整数的和为%d",n,sumup(n));

	return 0;
}

练习6-9

//创建一个函数,对元素个数为n的int型数组v进行倒序排列。

#include <stdio.h>
#define NUMBER 5

void rev_intary (int v[], int n)
{
    int temp,i;
    for (i=0; i<n/2; i++) {
        temp=v[i];
        v[i] = v[n-1-i];        //一定是v[n-1-i]!
        v[n-1-i] = temp;
    }

    printf("\n倒序排列:\n");
    for(i=0; i<n; i++) {
        printf("v[%d] = %d\n",i,v[i]);
    }
}

int main ()
{
	int i,v[NUMBER];

	printf("请输入数组v:\n");
    for (i=0; i<NUMBER; i++) {
        printf("v[%d] = ",i);
        scanf("%d",&v[i]);
    }

    rev_intary(v,NUMBER);
	
	return 0;
}

练习6-10

//创建一个函数,对元素个数为n的int型数组v2进行倒序排列,并将其结果保存在数组v1中。

#include <stdio.h>
#define NUMBER 5

void intary_rcpy (int v1[], const int v2[], int n)
{
    int i;
    for (i=0; i<n; i++) {
        v1[i] = v2[n-1-i];
    }

    printf("\n数组v1:\n");
    for(i=0; i<n; i++) {
        printf("v1[%d] = %d\n",i,v1[i]);
    }
}

int main ()
{
	int i,v1[NUMBER],v2[NUMBER];

	printf("请输入数组v2:\n");
    for (i=0; i<NUMBER; i++) {
        printf("v2[%d] = ",i);
        scanf("%d",&v2[i]);
    }

    intary_rcpy(v1, v2 ,NUMBER);
	
	return 0;
}

练习6-11

//创建一个函数search_idx,将和有n个元素的数组v中的key相等的所有元素的下标存储在数组idx中,返回和key相等的元素的个数。

#include <stdio.h>
#define NUMBER 5

int search_idx (const int v[], int idx[], int key, int n)
{
    int i,j=0;
    for (i=0; i<n; i++) {
        if (v[i] == key) {
            idx[j] = i;
            printf("idx[%d] = %d\n",j,idx[j]);
            j++;
        }
    }

    return j;
}

int main ()
{
	int i,key,v[NUMBER],idx[NUMBER];

	printf("请输入数组v:\n");
    for (i=0; i<NUMBER; i++) {
        printf("v[%d] = ",i);
        scanf("%d",&v[i]);
    }
    printf("\n请输入key值:");
    scanf("%d",&key);

    printf("\n有%d个元素被存储在idx中。", search_idx(v,idx,key,NUMBER) );

    return 0;
}

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页