2019-03-09 计算机二级C语言程序设计之课后习题(5)

参考资料:高教版《全国计算机等级考试二级教程——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
--------------------------------------------------------------------------

其他的题目暂时都不会了,本菜鸟算法不行也没学过矩阵,等以后啃完算法慢慢补吧……

你可能感兴趣的:(2019-03-09 计算机二级C语言程序设计之课后习题(5))