C语言作业六

1. 选择题

关于数组初始化,下列说法不正确的是:

A. 二维数组初始化的时候,列数是必须给出的,行数可以由编译器来数。

B. 二维数组初始化的时候,每行⼀个{},逗号分隔。

C. 对⼀维数组初始化的时候,即使给全部元素都赋了初值,也不能省略数组长度。

D. 二维数组初始化的时候,最后的逗号可以存在。

 答:D

二维数组初始化的时候,最后一个元素后面的逗号是不能存在的。

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

不能直接使用 “ = ”将字符串赋值给字符数组的时候,应使用strcpy函数。

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

每一行元素个数为 m,所以 i 行之前的元素个数为 i * m。再加上 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;}

答:AC 

B:没有使用中间变量来交换元素,a[i]的值会被覆盖,无法完成交换。

D:当 i 等于 n-1 时,a[n-1-i] 会变成 a[0],最后一个元素则没有被交换。

5. 填空题

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

#include 
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​​​​​​​​​​​​​​​​​​​​​​​​​​​​2​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​3​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

3​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​4​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​5​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

第一个 for 语句读取数组 a 的行,第二个 for 语句读取数组 a 的列。但因为每行只有两个数,所以当 i = 0, j = 2 时,读取到了3。

6. 编程题

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

#include <stdio.h>  
int findlowest(int score[], int size) 
{  
    int lowestscore;
	int i; 
	lowestscore = 0;
    for (i = 0; i < size; i++) 
	{  
        if (score[i] < score[lowestscore]) 
		{  
            lowestscore = i;  
        }  
    }  
    return lowestscore;  
}  
int main() 
{
    int n, lowest, i;
    scanf("%d", &n);
    int a[100];
    for (i = 0; i < n; i++) 
	{
        scanf("%d", &a[i]);
    }
    lowest = findlowest(a, n);
    printf("%d", a[lowest]);
    return 0;
}

7. 编程题

参考学习通上传的PPT「第八章 数组」,仿照【例8.8】用交换法对成绩降序排序,使用 「数组 + 函数」,对10个double类型的数值进行从小到大进行排序 

#include <stdio.h>
void DataSort(double score[], int n) 
{
	int i,j;
	double temp;
	for (i = 0; i < n-1; i++) 
	{
		for (j = i+1; j < n ;j++) 
		{
			if (score[j] < score[i]) 
			{
			    temp = score[j];
				score[j] = score[i];
				score[i] = temp;
			}
		}
	}
}
int main() 
{
	int n = 10, i;
	double a[100];
	    for (i = 0; i < n; i++) 
		{
            scanf("%lf", &a[i]);
        }
		DataSort(a, n);	
		for (int i = 0; i < n; i++) 
		{
			printf("%lf ", a[i]);
		}
		return 0;
}

8. 附加题

题目:输入一个二维数组的行数 m(m ≤ 10),列数 n(n ≤ 0),二维数组的各元素值。输出周边元素之和。

说明:「周边元素是指首行、首列、末行、末列的数组元素」

输入示例: 3 行 4 列,后接具体的 3 行 4 列数组。 

#include <stdio.h>
int main()
{
    int n1, n2;
    scanf("%d %d", &n1, &n2);
    int a[10][10];
    int i, j, sum = 0;
    for (i = 0; i < n1; i++)
	{
        for (j = 0; j < n2; j++)
		{
            scanf("%d", &a[i][j]);
        }
    }
    for (i = 0; i < n1; i++)
	{
        sum += a[i][0]; 
        sum += a[i][n2 - 1]; 
    }
    for (j = 1; j < n2 - 1; j++)
	{
        sum += a[0][j]; 
        sum += a[n1 - 1][j]; 
	}
    printf("%d", sum);
    return 0;
}

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值