个别练习的解题方法很多本答案不是唯一答案
练习6-1
int main()//6-1(1)
{
int a, b, c, min;
scanf("%d%d", &a, &b);
min = a<b?a:b;
printf("最小值 = %d", min);
return 0;
}
方法二
int add(int x,int y)//6-1(2)
{
int min=0;
if(x>y) min = y;
if(y>x) min = x;
printf("min=%d",min);
return min;
}
int main()
{
int a=4;
int b=6;
add(a,b);
return 0;
}
练习6-2
int add(int a,int b,int c)//6-2(1)
{
int min;
if (a < b) {
if (a < c) {
min = a;
} else {
min = c;
}
} else {
if (b < c) {
min = b;
} else {
min = c;
}
}
printf("最小的数是 %d\n", min);
}
int main()
{
int a, b, c;
printf("请输入三个整数:\n");
scanf("%d%d%d", &a, &b, &c);
add(a,b,c);
return 0;
}
方法二
int add(int x,int y,int z)//6-2(2)
{
int min = x; //假设x为最小数
if (y<min) min = y;
if (z<min) min = z;
printf("最小数是:%d\n", min);
}
int main()
{
int x, y ,z;
scanf("%d%d%d", &x, &y, &z);
add(x, y ,z);
return 0;
}
练习6-3
int cube(int x){//6-3
return x*x*x;
}
int main(void)
{
int a;
scanf("%d",&a);
printf("%d的立方为:%d",a,cube(a));
return 0;
}
练习6-4
int sqr(int x)//6-4(1)
{
return x * x;
}
int pow4(int x)
{
return sqr(x)*sqr(x);
}
int main(void)
{
int x;
printf("整数x:");
scanf("%d", &x);
printf("x的四次幂是%d。\n", pow4(x));
return 0;
}
方法2
int sqr(int x) {//6-4(2)
return x * x ; //求一个数的平方
}
int main(void) {
int x;
printf("请输入一个数:");
scanf("%d", &x);
printf("它的四次幂是%d", sqr(sqr(x)));
return 0;
}
练习6-5
int sumup(int n) {//6-5(1)
int sum = 0;
while (n-->0)
{
sum += n;
}
return sum;
}
int main()
{
int x;
printf("请输入一个数:");
scanf("%d", &x);
printf("从1到%d之间所有整数的和是%d",x, sumup(x));
return 0;
}
方法2
int sumup(int n)//6-5(2)
{
int i;
int sum = 0;
for (i = 1; i <= n; i++)
sum += i;
return sum;
}
int main(void)
{
int a;
printf("请输入一个正整数:");
do {
scanf_s("%d", &a);
if (a < 1)
printf("请不要输入小于1的整数。");
} while (a < 1);
printf("从1到%d之间所有的整数的和为%d。\n", a, sumup(a));
return 0;
}
练习6-6
void alert(int n) {//6-6(1)
while (n-- > 0)
{
putchar('\a');
}
}
int main()
{
int x;
printf("请输入要发出响铃的次数:");
scanf("%d", &x);
alert (x);
return 0;
}
方法2
void alert(int n)//6-6(2)
{
int i;
for (i = 0; i < n; i++)
{
printf("\a");
}
return;
}
int main(void)
{
int n;
printf("整数n:");
scanf("%d", &n);
printf("连续发出%d次响铃。\n",n);
alert(n);
return 0;
}
练习6-7
void hello(void)
{
puts("你好。");
}
int main(void)
{
hello();
return 0;
}
练习6-8
int min_of(const int v[], int n)
{
int min;
int i;
min = v[0];
for (i = 1; i < n; i++)
{
if (v[i] < min)
min = v[i];
}
return min;
}
int main(void)
{
int min;
int v[4] = {19,63,34,76};
min = min_of(v,4);
printf("min = %d\n",min);
return 0;
}
方法二
#define NUMBER 5 // 学生人数
//--- 返回元素个数为n的数组v中的最小值
int min_of(const int v[], int n)
{
int i;
int min = v[0];
for (i = 1; i < n; i++){
if (v[i] < min){
min = v[i];
}
}
return min;
}
int main(void)
{
int i;
int eng[NUMBER];
int min_e;
printf("请输入%d名学生的分数。\n", NUMBER);
for (i = 0; i < NUMBER; i++) {
printf("[%d]英语:", i + 1);
scanf("%d", &eng[i]);
}
min_e = min_of(eng, NUMBER); /* 英语的最低分 */
printf("英语的最低分=%d\n", min_e);
return 0;
}
练习6-9
void daoxu(int v[], int n)//不可以用const int v[]
{
int tmp;
int i;
for(i=0;i<n/2;i++)
{
tmp=v[i];
v[i]=v[n-1-i];
v[n-1-i]=tmp;
}
}
int main()
{
int i;
int v[4] = {1,2,3,4};
daoxu(v,4);
for (i = 0; i < 4; i++)
{
printf("v[%d] = %d\n",i,v[i]);
}
return 0;
}
练习6-10
void intary_rcpy(int v1[], const int v2[], int n)
{
int i;
for(i=0;i<n;i++)
{
v1[i]=v2[n-i-1];//减一才能获取v1[0]
}
}
int main()
{
int i;
int x[number];
int y[number];
for (i = 0; i < number; i++) {
printf("x[%d] : ", i);
scanf("%d", &x[i]);
}
intary_rcpy(y, x, number);
puts("倒序:");
for (i = 0; i < number; i++){
printf("y[%d] = %d\n", i, y[i]);
}
return 0;
}
练习6-11
#define NUMBER 5
int search_idx(const int v[], int idx[], int key, int n)
{
int i=0;
int j=0;
for(i=0;i<n;i++)
{
if(v[i] == key){
j++;
}
idx[j] = v[i];
}
return j;
}
int main()
{
int arr1[NUMBER];
int arr2[NUMBER + 1];
int i;
int key;
printf("要找的:");
scanf("%d",&key);
for(i=0;i<NUMBER;i++)
{
printf("v[%d]=",i);
scanf("%d",&arr1[i]);
}
int tmp = search_idx(arr1,arr2,key,NUMBER);
printf("有%d个相同的元素",tmp);
return 0;
}
练习6-12
int main()
{
int a[4][3];
int b[3][4];
int i, j, k, x, y, c[3][3];
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]);
}
}
mat_mul(a, b, c);
for (x = 0; x < 3; x++)
{
for (y = 0; y < 3; y++)
{
printf("%d\t", c[x][y]);
}
printf("\n");
}
return 0;
}
练习6-13
/*--- 将4行3列矩阵a和b的和存储在c中 ---*/
void mat_add(const int a[4][3], const int b[4][3], int c[2][4][3])
{
int x, y, z;
for (x = 0; x < 2; x++)
for (y = 0; y < 4; y++)
for (z = 0; z < 3; z++) {
c[x][y][z] = a[y][z] + b[y][z];
}
}
/*--- 显示4行3列矩阵m ---*/
void mat_print(const int m[4][3])
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++)
printf("%4d", m[i][j]);
putchar('\n');
}
}
int main(void)
{
int tensu1[4][3] = { {91, 63, 78}, {67, 72, 46}, {89, 34, 53}, {32, 54, 34} };
int tensu2[4][3] = { {97, 67, 82}, {73, 43, 46}, {97, 56, 21}, {85, 46, 35} };
int sum[2][4][3]; /* 总分 */
mat_add(tensu1, tensu2, sum); /* 求两次考试中成绩的总和 */
puts("第一次考试的分数"); mat_print(tensu1); /* 显示第一次考试的分数 */
puts("第二次考试的分数"); mat_print(tensu2); /* 显示第二次考试的分数 */
puts("总分"); mat_print(sum); /* 显示总分 */
return 0;
}
练习6-14
int main(void)
{
int i;
static double a[5];
for (i = 0; i < 5; i++)
{
printf("a[%d] = %.1f\n",i,a[i]);
}
return 0;
}
练习6-15
static int n;
void put_count(void)
{
return n++;
}
int main(void)
{
put_count();
printf("put_count:第%d次\n",n);
put_count();
printf("put_count:第%d次\n", n);
put_count();
printf("put_count:第%d次\n", n);
return 0;
}