C语言习题~day6

简介: C语言习题

1.关于while(条件表达式) 循环体,以下叙述正确的是( )? (假设循环体里面没有break,continue,return,goto等等语句)  

A.循环体的执行次数总是比条件表达式的执行次数多一次


B.条件表达式的执行次数总是比循环体的执行次数多一次


C.条件表达式的执行次数与循环体的执行次数一样


D.条件表达式的执行次数与循环体的执行次数无关


答案解析:


 while(条件表达式)


   循环体


 while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束


 故:while循环条件将会比循环体多执行一次。


 因此:选择B

2.有以下程序

#include <stdio.h>
int main()
{
  int a = 0, b = 0;
  for (a = 1, b = 1; a <= 100; a++)
  {
    if (b >= 20) break;
    if (b % 3 == 1)
    {
      b = b + 3;
      continue;
    }
    b = b-5;
  }
  printf("%d\n", a);
  return 0;
}

程序的输出结果是?( )

A.10

B.9

C.8

D.7

  #include <stdio.h>
  int main()
  {
    int a = 0, b = 0;
    // for循环将a和b的初始值均设置为1
    for (a = 1, b = 1; a <= 100; a++)
    {
      if (b >= 20) break;
      if (b % 3 == 1)
      {
        b = b + 3;
        continue;
      }
      b = b-5;
    }
    printf("%d\n", a);
    return 0;
  }

第一次循环:a = 1,b=1--->b小于20,if不成立,b%3==1%3==1成立,b=b+3, 此时b的值为4


 第一次循环:a = 2,b=4--->b小于20,if不成立,b%3==4%3==1成立,b=b+3, 此时b的值为7


 第一次循环:a = 3,b=7--->b小于20,if不成立,b%3==7%3==1成立,b=b+3, 此时b的值为10


 第一次循环:a = 4,b=10--->b小于20,if不成立,b%3==10%3==1成立,b=b+3, 此时b的值为13


 第一次循环:a = 5,b=13--->b小于20,if不成立,b%3==13%3==1成立,b=b+3, 此时b的值为16


 第一次循环:a = 6,b=16--->b小于20,if不成立,b%3==16%3==1成立,b=b+3, 此时b的值为19


 第一次循环:a = 7,b=19--->b小于20,if不成立,b%3==19%3==1成立,b=b+3, 此时b的值为22


 第一次循环:a = 8,b=22--->b大于20,if成立,循环break提出


 最后打印a:8


 因此:选择C

3.关于rand函数说法错误的是?

A.rand函数生成了0~32767之间的随机数


B.rand函数生成的是真正的随机数


C.rand函数在使用之前,需要调用srand函数设置随机数的生成器


D.rand函数的使用需要包含stdlib.h的头文件


B:rand函数生成的是伪随机数,是通过某种算法生成的随机数。  

4.关于一维数组描述不正确的是:( )

A.数组的下标是从0开始的


B.数组在内存中是连续存放的


C.数组名表示首元素的地址


D.随着数组下标的由小到大,地址由高到低


A:正确,C语言规定,数组的下标是从0开始的


B:正确,数组的空间是一段连续的内存空间


C:正确,数组名既可以表示数组的地址,也可以表示数组首元素的地址,两个在数值上是一样的,但是含义不一样。


 注意:数组名只有在sizeof和&后才代表整个数组,其它都表示首元素的地址


D:错误,这个要是系统而定,一般都是下标由小到大,地址由低到高


因此,选择D

5.关于一维数组初始化,下面哪个定义是错误的?( )

A.int arr[10] = {1,2,3,4,5,6};


B.int arr[] = {1,2,3,4,5,6};


C.int arr[] = (1,2,3,4,5,6);


D.int arr[10] = {0};


A:正确,10个int的一段连续空间,前6个位置被初始化为1,2,3,4,5,6,其他位置为0


B:正确,数组中有6个空间,并被初始化为1,2,3,4,5,6


C:错误,数组的初始化不能使用(),只能使用{}


D:正确,10个int类型的一段连续空间,每个位置都被初始化为0


因此,选择C

6.定义了一维 int 型数组 a[10] 后,下面错误的引用是:( )

A.a[0] = 1;


B.a[0] = 5*2;


C.a[10] = 2;


D.a[1] = a[2] * a[0];


数组是相同类型的一段连续的空间,下标是从0开始的,比如:int array[N]


下标的范围为[0,N),其中N位置不能存储有效元素


A:正确,将0号位置设置为1


B:正确,将0号位置设置为10


C:错误,越界


D:正确,1号位置初始化为a[2]*a[0]之后的结果


因此,选择C

7.给出以下定义

char acX[] = "abcdefg";
char acY[] = { 'a','b','c','d','e','f','g'};

A.数组acX和数组acY等价

B.数组acX和数组acY的长度相同

C.sizeof(acX)>sizeof (acY)

D.strlen (acX)>strlen (acY)

以下说法正确的是( )

答案解析:


acX和acY都是字符数组,但是初始化表达式不同,acX和acY的区别如下:


acX:数组中总共有8个元素,分别是:'a','b','c','d','e','f','g','\0'


acY:数组中总共有7个元素,分别是:'a','b','c','d','e','f','g'


sizeof这里求的是数组大小,数组大小等于有效元素个数*每个元素的大小。sizeof(acX) = 8,sizeof(acY) = 7


strlen求的是字符串长度,从首元素开始计算,遇见‘\0’停止,由于acY数组没有'\0‘,所以strlen(acY)的结果是个随机值


因此,选择C

8.下面代码的结果是:( )

#include <stdio.h>
int main()
{
    int arr[] = {1,2,(3,4),5};
    printf("%d\n", sizeof(arr));
    return 0;
}

A.4

B.16

C.20

D.5

答案解析:


对于int arr[] = {1,2,(3,4),5}数组,里面总共有4个元素,(3,4)为逗号表达式,取后者,因此数组中元素分别为:1,2,4,5


而sizeof(arr)求的是整个数组所占空间的大小,即:4*sizeof(int)=4*4=16


因此,选择B


目录
相关文章
TU^
|
1天前
|
C语言
C语言习题~day39
C语言习题~day39
TU^
4 0
C语言习题~day39
TU^
|
1天前
|
存储 C语言
C语言习题~day38
C语言习题~day38
TU^
2 0
TU^
|
1天前
|
C语言
C语言习题~day37
C语言习题~day37
TU^
3 0
TU^
|
1天前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
7 1
TU^
|
1天前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
7 1
TU^
|
1天前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
6 1
TU^
|
1天前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
7 1
TU^
|
1天前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
7 1
TU^
|
1天前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
6 2
TU^
|
1天前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
5 1