C语言习题06_数组

C语言习题06_数组

习题06(01)十进制转换为二进制

题目描述
将输入的十进制正整数 n 转换为二进制数,并将转换结果输出,输出按高位在左,低位在右
的顺序。
输入描述
输入一个不大于 65536* 65536 的正整数。
输出描述
从第一个非零的高位开始输出,高位在左,低位在右。
输入样例
72
输出样例
1001000
#include <stdio.h>
#include <math.h>
int main()
{
    unsigned int n, r, i, j, sum;
    unsigned int a[33] = {0};
    scanf("%d", &n);
    r = 1;
    sum = 0;
    i = 31;
    j = 0;
    while (n)
    {
        r = n % 2;
        n = n / 2;
        a[i] = r;
        i--;
        j++;
    }
    for (i = 32 - j; i < 32; i++)
    {
        printf("%d", a[i]);
    }
    printf("\n");
    return 0;
}

习题06(02)读入数组元素的值按要求计算和

题目描述
编程实现读入 5 行 4 列矩阵中的前 4 行 3 列整数(如下图,数据可变),然后将各行之和、
各列之和与所有数字之和求出,并对应填入表中的最后一列、最后一行以及矩阵的右下角位
置并输出。
7  8  9 
4  5  6 
1  2  3 
9  8  7
输入描述
以行优先的顺序依次输入矩阵中的 12 个数,每行输入一个整数。
输出描述
以方阵的形式输出整个矩阵的数据,格式控制为:printf("%4d",a[i][j]);
输入样例
1
2
3
4
5
6
7
8
9
11
12
13
输出样例
1 2 3 6
4 5 6 15
7 8 9 24
11 12 13 36
23 27 31 81
#include <stdio.h>
int main()
{
    int i, j, t;
    int a[5][4];
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 3; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    a[0][3] = a[0][0] + a[0][1] + a[0][2];
    a[1][3] = a[1][0] + a[1][1] + a[1][2];
    a[2][3] = a[2][0] + a[2][1] + a[2][2];
    a[3][3] = a[3][0] + a[3][1] + a[3][2];
    a[4][0] = a[0][0] + a[1][0] + a[2][0] + a[3][0];
    a[4][1] = a[0][1] + a[1][1] + a[2][1] + a[3][1];
    a[4][2] = a[0][2] + a[1][2] + a[2][2] + a[3][2];
    a[4][3] = a[0][3] + a[1][3] + a[2][3] + a[3][3];
    t = 0;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 4; j++)
        {
            if (t % 4 == 0)
            {
                printf("\n");
            }
            printf("%4d ", a[i][j]);
            t++;
        }
    }
    printf("\n");
    return 0;
}

习题06(03) 魔方阵

题目描述
输出魔方阵,所谓魔方阵即它的每一行、每一列和对角线之和均相等。
输入描述
请输入 1 到 15 之间的奇数作为魔方的行列宽度。
输出描述
以矩阵的形式输出魔方矩阵数据。以 printf("%5d",a[i][j])的格式要求分开相邻数据。
输入样例
5
输出样例
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
#include <stdio.h>
int main()
{
    unsigned long int a[30][30];
    int i, j, k, n;
    scanf("%ld", &n);
    if ((n != 0) && (n <= 15) && (n % 2 != 0))
    {
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= n; j++)
            {
                a[i][j] = 0;
            }
        }
        j = n / 2 + 1;
        a[1][j] = 1;
        for (k = 2; k <= n * n; k++)
        {
            i = i - 1;
            j = j + 1;
            if ((i < 1) && (j > n))
            {
                i = i + 2;
                j = j - 1;
            }
            else
            {
                if (i < 1)
                    i = n;
                if (j > n)
                    j = 1;
            }
            if (a[i][j] == 0)
                a[i][j] = k;
            else
            {
                i = i + 2;
                j = j - 1;
                a[i][j] = k;
            }
        }
        for (i = 1; i <= n; i++)
        {
            for (j = 1; j <= n; j++)
            {
                printf("%5ld", a[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}

习题06(04) 在数组中插入一个数

题目描述
有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
输入描述
已排好序的数组数据由程序固定给出。输入任意一个待插入的数,类型为整型。
输出描述
输出插入数据后的数组
输入样例
5
输出样例
1,4,5,7,10,11,24,34,45,56,76
#include <stdio.h>
int main()
{
    int a[11] = {1, 4, 7, 10, 11, 24, 34, 45, 56, 76};
    int t1, t2, n, end, i, j, t;
    scanf("%d", &n);
    end = a[9];
    if (n >= end)
    {
        a[10] = n;
    }
    else
    {
        for (i = 0; i < 10; i++)
        {
            if (a[i] > n)
            {
                t1 = a[i];
                a[i] = n;
                for (j = i + 1; j < 11; j++)
                {
                    t2 = a[j];
                    a[j] = t1;
                    t1 = t2;
                }
                break;
            }
        }
    }
    t = 0;
    for (i = 0; i < 11; i++)
    {
        if (t > 0)
        {
            printf(",");
        }
        printf("%d", a[i]);
        t++;
    }
    printf("\n");
    return 0;
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bmNkotc2AECynaY6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值