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

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

作者: NoelleMu | 来源:发表于2019-03-09 13:46 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/etpspqtx.html