参考资料:高教版《全国计算机等级考试二级教程——C语言程序设计》
P145 编程题
9.28
题目:
编写函数,对具有10个整数的数组进行如下操作:从下标为n的元素开始直到最后一个元素,依次向前移动一个位置。输出移动后的结果。
题解:
此题目的隐含条件应该是“0 < n <= 10”,否则会出错。因为没有进一步的解释,所以我就认为将最后一个元素的内容保留了。
由于这个函数没有返回值,所以定义为void类型。
定义函数fun()如下:
void fun(int a[], int n)
{
int m = 0, i = 0;
//数组下标n是从0开始的,而我们需要移动第m个元素,就需要在数组下标上减1
m = n - 1;
for (i = m; i < 9; i++)
{
//这一句报了警告C6386,说缓冲区溢出,不知道是为什么,欢迎各位大神指教
a[i] = a[i + 1]; //移动数组中的元素
}
}
运行测试:
完整程序如下:
#include
void fun(int *, int); //函数的说明语句
int main(void)
{
int a[10] = { 0 }, i = 0, n = 0;
printf("输入10个整数:\n");
//利用for循环依次读入数字并放入数组中
for (i = 0; i <= 9; i++)
scanf("%d", &a[i]);
//输出输入的数组
printf("输入的数组为:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
printf("\n输入n:\n");
scanf("%d", &n); //输入n
//利用一个if-else语句来判断n是否在范围内
if (n <= 1 && n > 10)
printf("输入的数据无效。\n");
else
fun(a, n);
//输出移动后的结果
printf("移动后的结果为:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
return 0;
}
void fun(int a[], int n)
{
int m = 0, i = 0;
//数组下标n是从0开始的,而我们需要移动第m个元素,就需要在数组下标上减1
m = n - 1;
for (i = m; i < 9; i++)
a[i] = a[i + 1]; //移动数组中的元素
}
输入输出:
输入10个整数:
11
12
13
14
15
16
17
18
19
20
输入的数组为:
11 12 13 14 15 16 17 18 19 20
输入n:
6
移动后的结果为:
11 12 13 14 15 17 18 19 20 20
9.29
题目:
编写函数,把数组中所有的奇数放在另一个数组中返回。
题解:
定义两个数组,一个存放初始数据,一个用来存放奇数。
这个函数也没有返回值,所以定义为void类型。
定义函数fun()如下:
void fun(int a[])
{
int b[10] = { 0 }, i = 1, j = 0;
//判断数组a中第i个元素是否为奇数。如果是,则将其存放到数组b中
for (i = 0; i < 9; i++)
{
if (a[i] % 2 != 0)
{
b[j] = a[i];
j++;
}
}
printf("\n输入的数组为:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
printf("\n");
printf("\n奇数为:\n");
for (i = 0; i < j; i++)
printf("%d ", b[i]);
}
完整程序如下:
#include
void fun(int*); //函数的说明语句
int main(void)
{
//定义数组a用来存放输入的10个数
int a[10] = { 0 }, i = 0;
printf("输入10个整数:\n");
//输入10个整数
for (i = 0; i <= 9; i++)
scanf_s("%d", &a[i]);
fun(a);
return 0;
}
void fun(int a[])
{
//定义数组b用来存放奇数
int b[10] = { 0 }, i = 1, j = 0;
//判断数组a中第i个元素是否为奇数。如果是,则将其存放到数组b中
for (i = 0; i < 9; i++)
{
if (a[i] % 2 != 0)
{
b[j] = a[i];
j++;
}
}
printf("\n输入的数组为:\n");
for (i = 0; i <= 9; i++)
printf("%d ", a[i]);
printf("\n");
printf("\n奇数为:\n");
for (i = 0; i < j; i++)
printf("%d ", b[i]);
}
输入输出:
输入10个整数:
1
2
3
4
5
6
7
8
9
10
输入的数组为:
1 2 3 4 5 6 7 8 9 10
奇数为:
1 3 5 7 9
9.30
题目:
编写函数,把数组中所有的字母按由大到小的字母顺序进行排序。
题解:
(还没学到排序法,这里先空着,等学到排序法了再补上)
9.31
题目:
输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中。插入后,数组中的数仍然有序。请对插在最前、插在最后、插在中间三种情况运行程序,以便验证程序是否正确。
题解:
(暂时还不会,先空着)
9.32
题目:
编写函数,把任意十进制正整数转换成二进制数。提示:把十进制数不断被2除的余数放在一个一维数组中,直到商数为0。在主函数中进行输出,要求不得按逆序输出。
题解:
写了一大堆没一个正确的……从这里扒了一个过来:https://blog.csdn.net/wjkhello/article/details/78149441
#include
int main(void)
{
int a,b,k,i;
int remainder[30]; //定义了一个remainder数组,用来收集短除法除得的余数,栈倒序输出。
a=1000;
k=0;
while(a!=0)
{
b=a/2;
k++;
remainder[k]=a-b*2;
a=a/2;
}
for (i=k;i>=1;i--)
{
printf("%d",remainder[i]);
}
return 0;
}
我发现不啃算法不行了,这几天啃啃算法吧,要不然二级考试可能就凉凉了……
9.36
题目:
编写程序打印出以下形式的乘法九九表。
* * A MULTIPLICATION TABLE * *
(1) (2) (3) (4) (5) (6) (7) (8) (9)
--------------------------------------------------------------------------
(1) 1 2 3 4 5 6 7 8 9
(2) 2 4 6 8 10 12 14 16 18
(3) 3 6 9 12 15 18 21 24 27
(4) 4 8 12 16 20 24 28 32 36
(5) 5 10 15 20 25 30 35 40 45
(6) 6 12 18 24 30 36 42 48 54
(7) 7 14 21 28 35 42 49 56 63
(8) 8 16 24 32 40 48 56 64 72
(9) 9 18 27 36 45 54 63 72 81
--------------------------------------------------------------------------
题解:
总算看到一个比较简单的。
程序如下:
#include
int main(void)
{
int a[9] = { 0 },j = 0, i = 0, k = 1; //定义一个数组和计数变量
for (i = 0, j = 1; i <= 8; i++, j++)
a[i] = j; //将数字1-9存入该数组
//打印表头
printf("\t* * A MULTIPLICATION TABLE * *\n");
putchar('\t');
for (i = 1; i <= 9; i++)
printf("(%d)\t", i);
putchar('\n');
printf("--------------------------------------------------------------------------\n");
//利用嵌套的for循环来打印乘法表
for (k = 1; k <= 9; k++)
{
//打印每一列前的数字
printf("(%d)\t", k);
//用k分别乘以a数组中的每个元素的方式打印乘法表中的第k行
for (i = 0; i <= 8; i++)
{
printf("%d\t", a[i] * k);
}
putchar('\n');
}
printf("--------------------------------------------------------------------------\n");
return 0;
}
输出:
* * A MULTIPLICATION TABLE * *
(1) (2) (3) (4) (5) (6) (7) (8) (9)
--------------------------------------------------------------------------
(1) 1 2 3 4 5 6 7 8 9
(2) 2 4 6 8 10 12 14 16 18
(3) 3 6 9 12 15 18 21 24 27
(4) 4 8 12 16 20 24 28 32 36
(5) 5 10 15 20 25 30 35 40 45
(6) 6 12 18 24 30 36 42 48 54
(7) 7 14 21 28 35 42 49 56 63
(8) 8 16 24 32 40 48 56 64 72
(9) 9 18 27 36 45 54 63 72 81
--------------------------------------------------------------------------
其他的题目暂时都不会了,本菜鸟算法不行也没学过矩阵,等以后啃完算法慢慢补吧……