C语言作业六

1.C

在初始化一维数组时,如果给定了所有元素的初始值,可以省略数组长度,编译器会根据提供的初始值自动确定数组的长度。

2.C

字符串是以字符数组的形式表示的,而字符数组不能使用赋值运算符直接给整个数组赋值。在选项 C 中,先声明了一个大小为 10 的字符数组 str,然后尝试用字符串常量 "string" 来赋值给 str,这是不允许的。正确的做法应该是使用 strcpy 函数或者逐个赋值字符来初始化字符数组。

3.D

在二维数组中,如果有m列,那么在a[i][j]之前的元素个数可以通过行数和列数来计算。每一行有m个元素,所以前面i行共有im个元素。对于第i行中的第j列元素a[i][j],还需要加上j个元素。因此,总共的元素个数为im+j。(在数组中,元素的位置是从0开始计数的,也就是说第一个元素的下标是0,第二个元素的下标是1,以此类推。但是题目中要求计算的是在a[i][j]之前的元素个数,这个计数不包括a[i][j]本身,所以需要将最后的结果加1才能得到正确的答案。)

4.C

选项 A 中的循环有两个索引变量 i 和 j,通过不断交换 a[i] 和 a[j] 的值来实现倒置。这种方法也是有效的,但是循环条件中的 i<j 可能会导致在数组长度为奇数时出现问题,因为中间的元素不需要进行交换。所以A在这道题看上去是对的但其实是不对的。

5.

这段代码存在数组越界的问题,因为 a 数组的定义是 int a[3][2] ,即3行2列的二维数组,但是在打印的循环中使用了 a[i][j] ,其中 i 的取值范围是0到1, j 的取值范围是0到2,因此在第二次循环时会访问到数组 a 之外的内存地址,导致输出结果不确定,可能会出现错误。

6.

#include <stdio.h>
#define N 40
int ReadScore(int score[]);
int FindMin(int score[],int n);
 
int main()
{
	int score[N], min, n;
	n = ReadScore(score);
	printf("Total:%d\n",n);
	min =  FindMin(score,n);
	printf("Lowest:%d\n",min);
	return 0;
 } 
 
 int ReadScore(int score[])
 {
 	int i = -1;
 	printf("Input a positive array, end input when a negative value is entered.");
 	do{
 		i++;
		scanf("%d",&score[i]); 
	 }while (score[i]>=0);
	 return i;
 }
 
 int FindMin(int score[],int n)
 {
 	int min,i;
 	min = score[0];
 	for(i=1;i<n;i++)
 	{
 		if(score[i]<min)
 		{
 			min = score[i];
		 }
	 }
	 return min;
 }

7.

#include <stdio.h>
#define N 10
 
void ReadScore(double score[], int n); 
void DataSort(double score[], int n); 
 
int main() {
	double score[N];
	int n=10, i;
	ReadScore(score, n);
	DataSort(score, n);
	return 0;
}
 
void ReadScore(double score[], int n) {
	int i;
	for (i=0; i<10; i++) {
		scanf ("%lf",&score[i]);
	}
} 
 
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;
			}
		}
	}
	for (i=0; i<n; i++) {
		printf ("%lf ",score[i]);
	}
}

8.

#include <stdio.h>

int main() {
    int m, n;
    scanf("%d %d", &m, &n);

    int a[10][10];
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &a[i][j]);
        }
    }

    int sum = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (i == 0 || i == m-1 || j == 0 || j == n-1) { 
                sum += a[i][j];
            }
        }
    }

    printf("%d\n", sum);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值