5-1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//01234
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
#define _CRT_SECURE_NO_WARNINGS
#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
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//54321
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
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i = 0, m = 2;
int a[] = {17,23,36};
int b[3] = { 0 };
//方法一:
for (i = 0; i < 3; i++)
{
b[i] = a[m];
m--;
if (m < 0)
break;
}
/*方法二:
for(i=0;i<3;i++)
{
b[i]=a[2-i];
}*/
puts(" a b");
puts("-------");
for (i = 0; i < 3; i++)
{
printf("%d %d \n", a[i], b[i]);
}
return 0;
}
5-5
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 4
int main()
{
int i = 0;
int arr[NUMBER] = {0};
for (i = 0; i < NUMBER; i++)
{
printf("x[%d]:", i);
scanf("%d", &arr[i]);
}
puts("倒叙排列了。");
for (i = 0; i < (NUMBER/2); i++)
{
int temp = arr[i];
arr[i] = arr[NUMBER - 1 - i];
arr[NUMBER -1 - i] = temp;
}
for (i = 0; i < NUMBER; i++)
{
printf("x[%d]=%d\n", i, arr[i]);
}
return 0;
}
5-6
b=1;
a=1.0;
//因为b是int型,所以1.5传给b之后变为1,然后再将b传给a,由于a是double型,所以显示1.0;
ps:程序运行之后显示的a是1.000000,也可以在打印的时候改为%.2d让其显示1.0;
5-7
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 4
/*这道题我觉得题干有问题,体感说读取数组中的信息,但是又说要用
对象式宏来声明数组元素的个数,既然个数是提前声明好的,读取数据
个数有什么意义呢,这里改为定义数组个数,然后依次输入数组元素,
最终显示数组中所有元素。*/
int main()
{
int arr[NUMBER] = {};
int i = 0;
printf("数据个数:%d\n",NUMBER);
for (i = 0; i < NUMBER; i++)
{
printf("%d号:", i + 1);
scanf("%d", &arr[i]);
}
printf("{");
for (i = 0; i < NUMBER; i++)
{
if (i < NUMBER - 1)
{
printf("%d,", arr[i]);
}
else
{
printf("%d", arr[i]);
}
}
printf("}");
return 0;
}
5-8
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 80
int main()
{
int num = 0;
int arr[NUMBER] = { 0 };
int i = 0;
int px[11] = {0};
printf("请输入学生人数:");
do
{
scanf("%d", &num);
if (num < 0 || num>80)
{
printf("请输入1~%d的数:",NUMBER);
}
} while (num < 0 || num>80);
printf("请输入%d人的分数。\n", num);
for (i = 0; i < num; i++)
{
printf("%2d号:", i + 1);
do
{
scanf("%d", &arr[i]);
if (arr[i] < 0 || arr[i]>100)
{
printf("请输入1~100之间的整数:");
}
} while (arr[i] < 0 || arr[i]>100);
px[arr[i] / 10]++;
}
puts("---分布图---");
int j = 0;
for (i = 0; i < 10; i++)
{
printf("%3d-%3d:", i * 10 , (i * 10 + 9));
for (j = 0; j < px[i]; j++)
{
putchar('*');
}putchar('\n');
}
printf(" 100:");
for (j = 0; j < px[10]; j++)
{
putchar('*');
}
return 0;
}
5-9
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define NUMBER 80
/*现在是2022.4.12,目前还在封校,神经网络作业还没写,还没解封,快递什么的也是,
听说这道题有点难度,我从上午开始断断续续的开始看找思路,这道题大约花了我将近一
个半小时或者两个小时,虽然时间有点长,但是还是做出来了,还需要加油呀,希望我现
在学的,对我以后真的会有帮助!加油!*/
/*找到px数组中的最大值,也就是在某一分数段出现的最大次数,在此题中为3,所以看到
3就打一个星号,没看到就打空格,在第一行完成后,将最大值减一,就可以继续完成后面
的算法,从每一行的角度来看非常方便理解。*/
int main()
{
int num = 0;
int arr[NUMBER] = { 0 };
int i = 0;
int px[11] = {0};
char a = '*';
char b = ' ';
printf("请输入学生人数:");
do
{
scanf("%d", &num);
if (num < 0 || num>80)
{
printf("请输入1~%d的数:",NUMBER);
}
} while (num < 0 || num>80);
printf("请输入%d人的分数。\n", num);
for (i = 0; i < num; i++)
{
printf("%2d号:", i + 1);
do
{
scanf("%d", &arr[i]);
if (arr[i] < 0 || arr[i]>100)
{
printf("请输入1~100之间的整数:");
}
} while (arr[i] < 0 || arr[i]>100);
px[arr[i] / 10]++;
}
puts("---分布图---");
/*int j = 0;
for (i = 0; i < 10; i++)
{
printf("%3d-%3d:", i * 10 , (i * 10 + 9));
for (j = 0; j < px[i]; j++)
{
putchar('*');
}putchar('\n');
}
printf(" 100:");
for (j = 0; j < px[10]; j++)
{
putchar('*');
}*/
int max = 0;
for (i = 0; i < 11; i++)
{
if (px[i] > max)
{
max = px[i];
}
}
do
{
for (i = 1; i <= 11; i++)
{
if (px[i-1] == max)
{
printf("%4c",a);
px[i-1]--;
}
else
printf("%4c", b);
}
putchar('\n');
max--;
} while (max > 0);
puts("----------------------------------------------");
for (i = 0; i < 101; i += 10)
{
printf("%4d", i);
}
return 0;
}
5-10
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*这道题最好列出所得四阶矩阵,再去看之间的关系,我们会发现,其实在第0行的时候,要进行
4次的循环,此4次循环行不变,列依次加1,所以引用了m变量,想明白其实挺简单的,就这个小
程序又花了一个半小时,看来还是有很长的路要走呀!*/
int main()
{
int arr1[4][3] = { 0 };
int arr2[3][4] = { 0 };
int b[4][4] = {0};
int i = 0, j = 0, m = 0, a = 0;
printf("给四行三列的数组赋值:\n");
for (i = 0; i < 4; i++)
{
for (j = 0; j < 3; j++)
scanf("%4d", &arr1[i][j]);
}
printf("给三行四列的数组赋值:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
scanf("%4d", &arr2[i][j]);
}
for (i = 0; i < 4; i++)
{
while (m < 4)
{
for (j = 0; j < 3; j++)
{
b[i][m] += arr1[i][j] * arr2[j][m];
}
m++;
}
m = 0;
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
printf("%4d", b[i][j]);
putchar('\n');
}
return 0;
}
5-11
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
/*两行六列,行为成绩,列为学生,题干没说成绩怎么来的,这里为了增加难度,
成绩由键盘输入*/
int main()
{
int i = 0, j = 0;
int arr[2][6] = { 0 };
puts(" A B C D E F");
for (i = 0; i < 2; i++)
{
if (i == 0)
{
printf("语文:");
}
else
{
printf("数学:");
}
for (j = 0; j < 6; j++)
{
scanf("%4d", &arr[i][j]);
}
}
puts("-----------------------");
puts(" 总分 平均分");
int sum1 = 0, sum2 = 0, ave1 = 0, ave2 = 0;
for (j = 0; j < 6; j++)
{
sum1 += arr[0][j];
}
ave1 = sum1 / 6;
printf("语文: %d %d \n", sum1, ave1);
for (j = 0; j < 6; j++)
{
sum2 += arr[1][j];
}
ave2 = sum2 / 6;
printf("数学: %d %d \n", sum2, ave2);
return 0;
}
5-12
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int i, j,k;
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 (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 3; k++)
{
printf("%3d", tensu[i][j][k]);
}
putchar('\n');
}
}
return 0;
}
更多推荐
明解C语言 入门 课后习题练习答案 第五章
发布评论