明解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;
}