C语言习题~day8

简介: C语言习题

1.以下能对二维数组a进行正确初始化的语句是:( )

A.int a[2][]={{0,1,2},{3,4,5}};


B.int a[][3]={{0,1,2},{3,4,5}};


C.int a[2][4]={{0,1,2},{3,4},{5}};


D.int a[][3]={{0,,2},{},{3,4,5}};


对于二维数组int array[M][N], 说明如下:


1. M和N都必须为常数,


2. M代表数组有M行,N代表每行中有N个元素


3. 其中M可以省略,省略后必须给出初始化表达式,编译器从初始化结果中推断数组有多少行


4. N一定不能省略,因为N省略了就不能确定一行有多少个元素,也不能确定数组有多少行


A:错误,参数上述说明


B:正确,参考上述说明


C:错误,数组有两行,但是初始化给了三行


D:错误,初始化不允许{0,,2}该种情况存在


因此,选择B

2.若定义int a[2][3]={1,2,3,4,5,6};则值为4的数组元素是( )

A.a[0][0]


B.a[1][0]


C.a[1][1]


D.a[2][1]


int a[2][3]表示2行3列的二维数组,根据其初始化知:


第0行即a[0]存储3个元素: 1,2,3


第1行即a[1]存储3个元素: 4,5,6


因此值为4的元素在第1行第0列


因此,选择B

3.在C语言中,以下哪个选项描述了变长数组(Variable Length Array,VLA)的特点?

A.变长数组的大小在编译时确定,不能改变。


B.变长数组的大小可能在运行时确定,比如使用变量来指定数组大小,一旦确定大小后,它的大小是固定的,无法改变。


C.一旦确定大小后,它的大小是固定的,无法改变


D.变长数组只能用于存储字符类型的数据。


变长数组( variable-length  array),C语言术语,也简称VLA。是指用 整型变量或表达式声明或定义的数组 ,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的 。


代码示例:

int n;
scanf ("%d", &n);
int array[n];

注意上述语法在C99之前是不支持的。


A选项错误:编译时无法确定,编译时候编译器不知道n是什么值,n的值要等到程序运行起来后,用户输入之后n的值确定了,才能确定数组的大小


B选项:说法不严谨,一定是在运行时确定大小的,而不是可能


C选项正确


D选项错误:存储什么类型数据,看定义时候给数组名前放什么类型,比如int a[n]就是存放int类型 short a[n]就是存在short类型

4.关于C语言函数描述正确的是:( )

A.函数必须有参数和返回值


B.函数的实参只能是变量


C.库函数的使用必须要包含对应的头文件


D.有了库函数就不需要自定函数了


A:错误,可以没有参数和返回值类型,根据具体功能实现


B:错误,函数的实参可能是变量,也可能是常量,也可能是宏,也可能是指针等等


C:正确,在使用库函数时,必须要包含该库函数所在的头文件,否则编译器将不能识别


D:错误,库函数是语言设计者为了让用户能够更好的使用,而给出的,但并不能解决用户的所有问题,因此其他问题还需要用户自己写方法解决

5.以下叙述中不正确的是:( )

A.在不同的函数中可以使用相同名字的变量


B.函数中的形式参数是在栈中保存


C.在一个函数内定义的变量只在本函数范围内有效


D.在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)


A:正确 不同的函数属于不同的作用域,因此不同的函数中定义相同名字的变量不会冲突


B:正确 在C语言中,函数的形参一般都是通过参数压栈的方式传递的


C:正确 在函数内定义的变量,称为局部变量,局部变量只能在其定义的函数中使用


D:错误 复合语句中定义的变量只能在复合语句中使用


因此:选择D

6.以下关于函数设计不正确的说法是:( )

A.函数设计应该追求高内聚低耦合


B.要尽可能多的使用全局变量


C.函数参数不易过多


D.设计函数时,尽量做到谁申请的资源就由谁来释放


A:正确,高内聚低耦合即:函数体内部实现修改了,尽量不要对外部产生影响,否则:代码不方便维护


B:错误,全局变量每个方法都可以访问,很难保证数据的正确性和安全性


C:正确,参数越少越好,否则用户在使用时体验不是很好,还得必须将所有参数完全搞明白才可以使用


D:正确,谁申请的谁维护谁释放,否则如果交给外部使用者释放,外部使用者可能不知道或者忘记,就会造成资源泄漏


因此,选择B

7.【一维数组】交换数组    将数组A中的内容和数组B中的内容进行交换。(数组一样大)

/*
思路:题目比较简单,请参考代码以及注释
*/
 
 
#include <stdio.h>
 
 
int main()
{
  int arr1[10] = {0};
  int arr2[10] = {0};
  int i = 0;
 
 
  printf("请输入10个数字:>");
  for(i=0; i<10; i++)
  {
    scanf("%d", &arr1[i]);
  }
  printf("请输入10个数字:>");
  for(i=0; i<10; i++)
  {
    scanf("%d", &arr2[i]);
  }
  //交换
  for(i=0; i<10; i++)
  {
    int tmp = arr1[i];
    arr1[i] = arr2[i];
    arr2[i] = tmp;
  }
  
  return 0;
}

8.【一维数组】输入10个整数,求平均值   编写一个程序,从用户输入中读取10个整数并存储在一个数组中。然后,计算并输出这些整数的平均值。

#include <stdio.h>
 
 
int main() {
    int numbers[10];
    int sum = 0;
 
    // 读取用户输入的整数并存储到数组中
    for (int i = 0; i < 10; i++) {
        scanf("%d", &numbers[i]);
        sum += numbers[i];
    }
    double average = (double)sum / 10;
    printf("平均值为:%lf\n", average);
 
    return 0;
}
 
目录
相关文章
TU^
|
4月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
26 1
|
2月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
54 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
4月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
20 2
TU^
|
4月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
36 1
TU^
|
4月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
25 1
TU^
|
4月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
23 1
TU^
|
4月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
16 1
TU^
|
4月前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
22 1
TU^
|
4月前
|
自然语言处理 C语言 C++
C语言习题~day29
C语言习题~day29
TU^
18 1
TU^
|
4月前
|
存储 C语言
C语言习题~day28
C语言习题~day28
TU^
18 1