明解C语言(第3版)入门篇 - 第六章练习题解

明解C语言(第3版)入门篇 - 第六章练习题解


前言

本文章主要为本人在看明解C语言(第3版)入门篇的过程中对于书上的练习题的要求代码的实现。

1.练习6-1

具体代码的实现如下所示:

#include <stdio.h>

int min(int a , int b)
{
	return (a<b) ? a :b ;
}

int main(void)
{
	int a ,b;

	puts("请输入需要比大小的两位数。\n");

	printf("a = "); scanf("%d",&a);
	printf("b = "); scanf("%d",&b);

	printf("两整数中较小的数为:%d\n",min(a,b));

	return 0;
}

2.练习6-2

具体代码的实现如下所示:

#include <stdio.h>

int min(int a,int b,int c)
{
	int min=a;
	if(b<min) min=b;
	if(c<min) min=c;
	
	return min;
}

int main(void)
{
	int a,b,c;
	puts("请输入需要对比的三位整数。\n");

	printf("a="); scanf("%d",&a);
	printf("b="); scanf("%d",&b);
	printf("c="); scanf("%d",&c);

	printf("最小值为:%d\n",min(a,b,c));

	return 0;
}

3.练习6-3

具体代码的实现如下所示:

#include <stdio.h>

int cube(int x)
{
	return x*x*x;
}

int main(void)
{
	int x;
	printf("请输入需要立方计算的数:");
	scanf("%d",&x);

	printf("结果为:%d\n",cube(x));

	return 0;
}

4.练习6-4

具体代码的实现如下所示:

#include <stdio.h>

int sqr(int x)
{
	return x*x;
}

int biquadratic(int a)
{
	return sqr(a)*sqr(a);
}

int main(void)
{
	int x;
	puts("请输入需要进行运算的数字。\n");
	printf("x="); scanf("%d",&x);

	printf("%d的四次幂是:%d\n",x,biquadratic(x));

	return 0;
}

5.练习6-5

具体代码的实现如下所示:

#include <stdio.h>

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

	for(i=1;i<n+1;i++)
	{
		sum+=i;
	}

	return sum;
}

int main(void)
{
	int x;

	printf("请输入需计算的整数和:\t");
	scanf("%d",&x);
	printf("sum = %d",sumup(x));

	return 0;
}

6.练习6-6

具体代码的实现如下所示:

#include <stdio.h>
#include <Windows.h>

void alert (int n){
	for(int i=0;i<n;i++){
		putchar('\a');
		Sleep(1000);//Windows:参数-时间,单位-毫秒,1000即为1秒
	}
}

int main(){
	int num;
	
	printf("请输入需要发出的响铃数:");
	scanf("%d",&num);
	alert(num);

	return 0;
}

7.练习6-7

具体代码的实现如下所示:

#include <stdio.h>

void hello(void)
{
	printf("你好。\n");
}

int main(void)
{
	hello();
	return 0;
}

8.练习6-8

具体代码的实现如下所示:

#include <stdio.h>

#define NUMBER 7

int ary[NUMBER];

int min_of(int v[],int n)
{
	int min = v[0];
	for(int i=0;i<n;i++)
	{
		if(v[i]<min)
			min=v[i];
	}
	return min;
}

int main()
{
	extern int ary[];

	printf("请输入%d个元素的整型数组:",NUMBER);
	for(int i=0;i<NUMBER;i++)
	{
		printf("ary[%d]:",i+1);
		scanf("%d",&ary[i]);
		putchar('\n');
	}

	printf("整型数组中最小值为:%d",min_of(ary,NUMBER));

	return 0;
}

9.练习6-9

具体代码的实现如下所示:

#include <stdio.h>
#define NUMBER 7

int num[NUMBER];

void rev_intary(int v[],int n)
{
	int temp;
	int k;
	if(n%2!=0)
		k=(n-1)/2;
	else
		k=n/2+1;

	for(int j=0;j<k;j++)
	{
			temp=v[j];
			v[j]=v[n-j-1];
			v[n-j-1]=temp;
	}
}

int main(void)
{
	extern int num[];
	printf("请输入元素个数为%d的整型数组:\n",NUMBER);

	for(int i=0;i<NUMBER;i++)
	{
		printf("num[%d]:",i+1); scanf("%d",&num[i]);
		putchar('\n');
	}
	rev_intary(num,NUMBER);
	printf("整型数组进行倒序排列后为:\n");
	for(int j=0;j<NUMBER;j++)
	{
		printf("num[%d]:%d\n",j+1,num[j]);
		putchar('\n');
	}

	return 0;
}

10.练习6-10

具体代码的实现如下所示:

#include <stdio.h>
#define NUMBER 7

int num1[NUMBER];
int num2[NUMBER];

void intary_rcpy(int v1[],const int v2[],int n)
{
	int k;
	if(n%2!=0)
		//k=(n+1)/2;
		k=(n-1)/2;
	else
		k=n/2+1;

	for(int j=0;j<k+1;j++)
	{
			v1[j]=v2[n-j-1];
			v1[n-j-1]=v2[j];
	}
}

int main(void)
{
	extern int num1[];
	extern int num2[];
	printf("请输入元素个数为%d的整型数组:\n",NUMBER);

	for(int i=0;i<NUMBER;i++)
	{
		printf("num[%d]:",i+1); scanf("%d",&num2[i]);
		putchar('\n');
	}

	intary_rcpy(num1,num2,NUMBER);
	printf("整型数组进行倒序排列后为:\n");
	for(int j=0;j<NUMBER;j++)
	{
		printf("num[%d]:%d\n",j+1,num1[j]);
		putchar('\n');
	}

	return 0;
}

11.练习6-11

具体代码的实现如下所示:

#include <stdio.h>
#define NUMBER 7
#define FAILED -1

int vx[NUMBER];
int dx[NUMBER];
int j;

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

	if(j==0)
		return FAILED;
	else
		return j;
}

int main(void)
{
	int ikey,num;

	printf("请输入%d个元素数组的值:\n",NUMBER);
	for(int i=0;i<NUMBER;i++)
	{
		printf("vx[%d]:",i);
		scanf("%d",&vx[i]);
		putchar('\n');
	}
	
	printf("请输入需要查询的元素值ikey=");
	scanf("%d",&ikey);
	putchar('\n');

	num=search_idx(vx,dx,ikey,NUMBER);
	if(num==FAILED)
		printf("\a查找失败!\n");
	else
	{
		printf("元素值为%d在数组中的个数为%d\n",ikey,j);
		/*for(int k=0;k<j;k++)
			printf("在第%d个元素\n",dx[k]+1);*/
		printf("元素值在数组的位置为dx[%d]={",j-1);
		for(int k=0;k<j;k++)
		{
				printf("%d",dx[k]);
				if(k<j-1)
					putchar(',');
		}
		printf("}\n");
	}

	return 0;
}

12.练习6-12

具体代码的实现如下所示:

#include <stdio.h>
#define A 4
#define B 3

int j1[A][B]={0};
int j2[B][A]={0};
int j3[A][A]={0};

void input1(int x,int y,int v[][B])
{
	printf("请输入矩阵a的内容,a为%d*%d矩阵。\n",x,y);
	for(int i=0;i<x;i++)
	{
		for(int j=0;j<y;j++)
		{
			printf("a[%d][%d]:",i,j);
			scanf("%d",&v[i][j]);
		}
		putchar('\n');
	}
}

void input2(int x,int y,int v[][A])
{
	printf("请输入矩阵b的内容,b为%d*%d矩阵。\n",x,y);
	for(int i=0;i<x;i++)
	{
		for(int j=0;j<y;j++)
		{
			printf("b[%d][%d]:",i,j);
			scanf("%d",&v[i][j]);
		}
		putchar('\n');
	}
}

void mat_mul(const int a[A][B],const int b[B][A],int c[A][A])
{
	int temp;
	for(int i=0;i<A;i++)
	{
		for(int k=0;k<A;k++)
		{
			int sum=0;
			for(int j=0;j<B;j++)
			{
				temp=a[i][j]*b[j][k];
				sum=sum+temp;
			}
			c[i][k]=sum;
		}
	}
}

void mat_print(const int v[][A])
{
	printf("矩阵a与矩阵b的乘积矩阵c如下所示,c为%d*%d矩阵。\n",A,A);
	for(int k=0;k<A;k++)
	{
		for(int w=0;w<A;w++)
			printf("%4d",v[k][w]);
		putchar('\n');
	}
}

int main(void)
{
	input1(A,B,j1);
	input2(B,A,j2);
	mat_mul(j1,j2,j3);
	mat_print(j3);

	return 0;
}

13.练习6-13

具体代码的实现如下所示:

#include <stdio.h>
#define A 4
#define B 3
#define C 2

int tensu1[A][B]={0};
int tensu2[A][B]={0};
int tensu3[][A][B]={0};

void mat_scanf(int n,int x,int y,int v[][B])
{
	printf("请输第%d次考试的分数,tensu%d为%d*%d矩阵。\n",n,n,x,y);
	for(int i=0;i<x;i++)
	{
		for(int j=0;j<y;j++)
		{
			printf("tensu%d[%d][%d]:",n,i,j);
			scanf("%d",&v[i][j]);
		}
		putchar('\n');
	}
}

void mat_com(const int v1[][B],const int v2[][B],int v3[][A][B])
{
	for(int i=0;i<C;i++)
	{
		for(int j=0;j<A;j++)
		{
			for(int k=0;k<B;k++)
			{
				printf("i=%d\n",i);
				if(i<C-1)
					v3[i][j][k]=v1[j][k];
				else
					v3[i][j][k]=v2[j][k];
			}
		}
	}
}

void mat_print(const int v[][A][B])
{
	printf("两次的考试分数存于三维数组tensu3中,如下所示。\n");
	for(int i=0;i<C;i++)
	{
		for(int j=0;j<A;j++)
		{
			for(int k=0;k<B;k++)
				printf("%4d",v[i][j][k]);
		}
		putchar('\n');
	}
}


int main(void)
{
	int n=1;
	mat_scanf(n,A,B,tensu1);
	mat_scanf(n+1,A,B,tensu2);
	mat_com(tensu1,tensu2,tensu3);
	mat_print(tensu3);

	return 0;
}

14.练习6-14

具体代码的实现如下所示:

#include <stdio.h>
#define NUMBER 7

void mat_fun(const double v[],int n)
{
	for(int i=0;i<n;i++)
		printf("test[%d]=%.1f\n",i,v[i]);
}

int main(void)
{
	static double test[NUMBER];
	mat_fun(test,NUMBER);
	return 0;
}

15.练习6-15

具体代码的实现如下所示:

#include <stdio.h>

void put_count(int n)
{
	printf("put_count:第%d次\n",n+1);
}

int main(void)
{
	int num;
	printf("请输入需要调用put_count函数的次数。\n");
	scanf("%d",&num);

	for(int i=0;i<num;i++)
		put_count(i);

	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值