物联1234 C语言 第六次作业

选择题

1.

关于数组初始化,下列说法不正确的是:
A. ⼆维数组初始化的时候,列数是必须给出的,⾏数可以由编译器来数。
B. ⼆维数组初始化的时候,每⾏⼀个{},逗号分隔。
C. 对⼀维数组初始化的时候,即使给全部元素都赋了初值,也不能省略数组⻓度
D. ⼆维数组初始化的时候,最后的逗号可以存在

C、一维数组初始化的时候,可以省略数组长度,编译器会根据初始化值的个数自动计算数组长度。

2.

不正确的赋值或赋初值的⽅式是_____。请附上解释。

 A. char str[] = "string";
 B. char str[7] = {'s', 't', 'r', 'i', 'n', 'g'};
 C. char str[10]; str = "string";
 D. char str[7] = {'s', 't', 'r', 'i', 'n', 'g', '\0};

C、数组在定义后就不能整体赋值,只能定义时进行整体赋值。

3.

若⼆维数组a有m列,则在a[ i ][ j ]前的元素个数为( ).
A. i * m + j + 1
B. j * m + i
C. i * m + j
D. j * m + i + 1

C、a[ i ][ j ]有a[ i - 1 ][ m ] i * m 个元素和a[ i ][ 0 ]到a[ i ][ j ] j 个元素,所以共 i*m + j 个元素。

4.

下列程序段中能完成数组中n个元素前后倒置的是( )。如数组元素为3,1,8时,完成倒置后变为8,1,3 。
A.for(i=0, j=n-1; i<j; i++, j–){ x = a[i]; a[i] = a[j]; a[j] = x;}
B.for(i=0; i<n/2; i++) { a[i] = a[n-1-i]; a[n-1-i] = a[i];}
C.for(i=0; i<n/2; i++) { x = a[i]; a[i] = a[n-1-i]; a[n-1-i] = x;}
D.for(i=0; i<n; i++) { x = a[i]; a[i] = a[n-1-i]; a[n-1-i]= x;}

A

填空题

题⽬:有以下程序,程序运⾏后的输出结果是()。需附上简要解释。

#include <stdio.h>

int main()
{
    int i, j;
    int a[3][2] = {1, 2, 3, 4, 5, 6};
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

1 \t 2 \t 3
3 \t 4 \t 5
\t 代表输出制表符

编程题

1.

参考学习通上传的PPT「第⼋章数组」,仿照【例8.7】计算最⾼分,使⽤「数组函数」,计算最低分。这道题重点考查:如何向函数传递⼀位数组。

#include <stdio.h>

#define INPUT 20

int max(int score[INPUT], int n);

int main()
{
    int score[INPUT], input = INPUT, n;
    char c = 0;
    printf("请输入学生的成绩(最多%d个):\n", input);
    for (n = 0; n < 20 && c != '\n'; n++)
    {
        scanf("%d", &score[n]);
        c = getchar();
    }
    printf("最高分是%d\n", max(score, n));
    return 0;
}

int max(int score[INPUT], int n)
{
    int max = score[0];
    for (int i = 1; i < n; i++)
    {
        if (max < score[i])
            max = score[i];
    }
    return max;
}

在这里插入图片描述

7.

#include <stdio.h>

#define INPUT 20

void sort(double score[INPUT], int n);
void exchang(double *a, double *b);

int main()
{
    double score[INPUT];
    int begin = 1;
    int input = INPUT, n;
    char c = 0;
    printf("请输入学生的成绩(最多%d个):\n", input);
    for (n = 0; n < 20; n++)
    {
        scanf("%lf", &score[n]);
        c = getchar();
        if (c == '\n')
        {
            n++;
            break;
        }
    }
    sort(score, n);
    printf("分数由小到大排序为:\n");
    for (int i = 0; i < n; i++)
    {
        if (i + 1 < n)
        {
            printf("%.1lf,", score[i]);
        }
        else
        {
            printf("%.1lf。", score[i]);
        }
    }
    return 0;
}

void sort(double score[INPUT], int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        int min = i;
        for (int j = i + 1; j < n; j++)
        {
            if (score[min] > score[j])
                min = j;
        }
        exchang(&score[min], &score[i]);
    }
}

void exchang(double *a, double *b)
{
    double temp = *a;
    *a = *b;
    *b = temp;
}

在这里插入图片描述

附加题

题⽬:输⼊⼀个⼆维数组的⾏数 m(m≤10),列数 n(n≤10),⼆维数组的各元素值。输出周边元素之和。
说明:「周边元素是指⾸⾏、⾸列、末⾏、末的数组元素」输⼊⽰例:3⾏4列,后接具体的3⾏4列数组。

#include <stdio.h>

int main()
{
    int line, column;
    scanf("%d %d", &line, &column);
    int matrix[line][column];
    for (int i = 0; i < line; i++)
    {
        for (int j = 0; j < column; j++)
        {
            scanf("%d", &matrix[i][j]);
            getchar();
        }
    }
    int sum = 0;
    for (int i = 0; i < line; i++)
    {
        sum += matrix[i][0] + matrix[i][column - 1];
    }
    for (int i = 1; i < column - 1; i++)
    {
        sum += matrix[0][i] + matrix[line - 1][i];
    }
    printf("%d\n", sum);
    return 0;
}

在这里插入图片描述

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值