C程易错题、错题及易错点记录

C程易错题、错题及易错点记录

大一秋冬——C程序设计(C小)授课教师:zy


点击右侧四横杠图标可以打开目录快速浏览哦!

2022C-12班练习1-2022.9.22

  1. 若变量定义为int fahr;,则5(fahr-32)/9是符合C语言语法的表达式。(F)

    不要习惯性使用数学表达式哦。

  2. 若变量定义为double x;,则x % 2是符合C语言语法的表达式。(F)

    ”%“表达式左右要为整型变量。

  3. 实型数据可以进行求余数运算%。(F)

    同上。

2022C-12班练习2-2022.9.29

  1. 下列程序段的输出结果是(2)。

    int main(void)
    {  
         int  a=2,b=-1,c=2;
         if(a<b)
               if(b<0)  
                    c=0;
         else  c++;
         printf("%d\n",c);    
         return 0;
    }

    C语言规定else总是和之前与其最近的且不带else的if配对。

2022C-12班练习3-2022.10.8

  1. C语言中,大小写字母'A''B''C',…,'Z''a''b''c',…,'z'的ASCII码按升序连续排列。(F)

    不连续哦,但大写字母ASCII码确实小于小写字母。

  2. 下列程序段的输出结果是 (a=2,b=1)。

    int main(void)
    {    
         int x = 1, a = 0, b = 0;
         
         switch(x)        
        {
               case 0:   b++;
               case 1:   a++;
               case 2:   a++; b++;    
        }
         printf("a=%d,b=%d\n",a,b);        

         return 0;
    }

    关于switch

    default可以没有; break非必需; case中常量不可重复;

    case中只能为常量,常量表达式及define定义的常量等也可以;

    swich后的括号里可以放表达式等;case后面有多个语句也无需花括号;

    执行顺序:

    按顺序判断所有case(跳过default),进入

    符合条件的,若都false,进入default。

    进入后开始按代码中顺序执行,遇到break或执行完所有case/default停止。

    可以试着运行下面代码感受一下:

    #include<stdio.h>
    #define N 1000
    int main()
    {
    int x=1000;
    switch(x)
    {
    case N: printf("1");
    default: printf("2");
    case N%2: printf("3");
    case N+1: printf("4");
    case 1+1: printf("5");
    }
    printf("\n");
    switch(x)
    {
    case N: printf("1");
    default: printf("2"); break;
    case N%2: printf("3");
    case N+1: printf("4");
    case 1+1: printf("5");
    }
    printf("\n");
    x=0;
    switch(x)
    {
    case N: printf("1");
    default: printf("2");
    case N%2: printf("3");
    case N+1: printf("4");
    case 1+1: printf("5");
    }
    printf("\n");
    x=9;
    switch(x)
    {
    case N: printf("1");
    default: printf("2");
    case N%2: printf("3");
    case N+1: printf("4");
    case 1+1: printf("5");
    }
    printf("\n");
    //输出:
    //12345
    //12
    //345
    //2345
       return 0;
    }

2022C-12班阶段性考试1理论-2022.10.13

  1. 如果变量已经正确定义,则执行以下程序段后,x的值不变。(F)

    x = 4; 
    if (x < 0){
       y = -1;
    }else if (x = 0){
       y = 0;
    }else{
       y = 1;
    }  

    不要上当哩,x=0!!!不是x==0哦~

  2. 写出以下程序段的运行结果。请注意,直接填数字、单词或者两者的组合,前后不要加空格等任何其他字符。

    char op;
    int value1, value2;
    scanf("%d%c%d", &value1, &op, &value2);
    switch(op){
      case '+': printf("%d", value1 + value2);
      default: printf("Error");
      case '-': printf("%d", value1 - value2);
    }

    输入11+1,输出(12Error10)

    输入14-5,输出(9)

    输入10$100,输出(Error-90)

    有不懂的可以看看练习3.2关于switch。

2022C-12班练习4-2022.10.13

  1. while语句的一般形式如下,其中的循环体语句只能是一条语句。(T)

    while (表达式)
       循环体语句

    用“{}”包围的算是复合语句,也只能算一条哦。

  2. 若变量已正确定义,执行以下while语句将陷入死循环。(T)

    i = 1;
    while (i <= 10) ;
       i++;

    注意空语句。

  3. 设有程序段

    int m=20; while (m=0) m=m++;

    则下面描述中正确的是(循环体语句一次也不执行 )

    注意是m=0不是m==0;

    m=c(c为常数)是将c赋给m后,以m来判断真假。

  4. 要求通过 while 循环不断输出字符,当读入字母 N 时结束循环。若变量已正确定义,下列程序段正确的是( )

      while ((ch = getchar()) != 'N')
    printf("%c", ch);

    注意运算优先级哦,例如以下代码不符合条件:。

      while (ch = getchar() != 'N')
    printf("%c", ch);

2022C-12班练习5-2022.10.22

  1. 在嵌套循环(多层循环)中, 每一层循环中都不应该改变其他层使用的循环变量的值,以免互相干扰。(T)

    我觉得不能这么绝对的,oi中我觉得我改变过?只能说尽量不改变(可能是阅读理解问题

  2. 以下两个程序段不等价,执行程序段B将陷入死循环。(T)

    /* 程序段A*/
    s = 0;
    for(i = 1; i <= 10; i++) {
       if(i % 2 == 0){
           continue;
      }
       s = s + i;
    }
    /* 程序段B */
    s = 0;
    i = 1;
    while(i <= 10){
       if(i % 2 == 0){
           continue;
      }
       s = s + i;
       i++;
    }

    B段到2之后i不改变了,一直continue。

2022C-12班练习6-2022.10.27

  1. 函数的实参和形参都可以是变量、常量和表达式。(F)

    形参nope。

  2. 按照C语言的规定,在参数传递过程中,既可以将实参的值传递给形参,也可以将形参的值传递给实参,这种参数传递是双向的。(F)

    形参nope。

  3. 为了便于计算机存储管理,C语言把保存所有变量的数据区,分成动态存储区和静态存储区,静态局部变量被存放在动态存储区。(F)

    初始值

    静态存储区(初始值为0):全局变量,静态局部变量(static)

    动态存储区(初始值为随机值):自动变量(Auto(可省略))

    数组初始化时,初始值个数小于数组元素的个数,则其余赋0,如果是没有初始值的自动变量为随机值

  4. 以下关于函数叙述中,错误的是( B)。

    A.函数未被调用时,系统将不为形参分配内存单元

    B.实参与形参的个数必须相等,且实参与形参的类型必须对应一致

    C.当形参是变量时,实参可以是变量、常量或表达式

    D.如函数调用时,实参与形参都为变量,则这两个变量不可能占用同一内存空间

    四个选项都看一看吧。

    B.数量相同,类型不一定

  5. 在C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为(int)。

    no void!!!

  6. 以下正确的函数定义形式是(D)。

    A.double fun(int x, int y)
    B.double fun(int x ; int y)
    C.double fun(int x, int y);
    D.double fun(int x, y)

    注意区分定义与声明哦

    这是声明

    double fun(int x, int y);

2022C-12班练习7-2022.11.3

  1. C的double类型数据可以精确表示任何实数。(F)

    printf输出:

    int k=11;
    printf("k=%d,k=%o,k=%x\n",k,k,k);
    //k=11,k=3,k=b
  2. 函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为( 15)。

    int f(int m)
    {  static int i=0;
      int s=0;

      for(;i<=m;i++)
        s+=i;

      return s;
    }
  3. 阅读以下程序段,如果从键盘上输入1234567<回车>,则程序的运行结果是( i = 123, j = 45)。

    int i,j;
    scanf("%3d%2d",&i,&j);
    printf("i = %d, j = %d\n",i,j);

    一些读入tip:

    //%c读入一个字符 
    //%s读入一个字符串
    //%o读入八进制整数
    //%x读入十六进制整数
    //%u输入unsigned
    //&f或e输入实型数(用小数形式或指数形式) (float exponent)
    scanf("i=%d", &i);//必须输入i=123
    scanf("%d %d", &i,&j);//必须输入123 456,空格不能少
    //简而言之,少加非输入控制符
    //但有时候也要加,根据题目需要
    //如题目输入分式的格式为:分子/分母
    scanf("%d/%d",&fz,&fm);//这样会方便许多
    scanf("%3d",&i);//读取三位
    //“*”用以表示跳过该输入值
    scanf("%d %*d %d",&a,&b);
    //输入1 2 3
    //结果:a=1 b=3
  4. 已知字符'A'的ASCII码是65,分别对应八进制数101和十六进制数41,以下( D)不能正确表示字符'A'。

    A.'A'
    B.'\101'
    C.'\x41'
    D.'\0x41'

    八进制三位小于8

    十六进制x/X+两位小于16

2022C-12班练习8-2022.11.10

  1. 表达式 ~(~2<<1)的值是5。(T)

  2. 在所有的关系运算符(>=、>、==、!=、<=、<)中,优先级最低的运算符是“==、!=”。(T)

    优先级表

    来个优先级表,将此类问题一网打尽

    优先级运算符特征结合方向
    1 () [] -> . 初等运算符 从左往右
    2 ! ~ +(正号) -(负号) (类型名) *(取指针) & ++ -- sizeof 单目运算符 从右往左
    3 *(乘) / % 算术运算符 从左往右
    4 +(加) -(减) 算术运算符 从左往右
    5 << >> 位移运算 从左往右
    6 > < >= <= 关系运算 从左往右
    7 == != 关系运算 从左往右
    8 & 位逻辑运算 从左往右
    9 ^ 位逻辑运算 从左往右
    10 | 位逻辑运算 从左往右
    11 && 逻辑运算 从左往右
    12 || 逻辑运算 从左往右
    13 ? : 三目运算 从右往左
    14 = += -= *= /= %= &= ^= |= >>= <<= 赋值运算 从右往左
    15 , 逗号运算 从左往右

    穿插一题

    int i=0;
    printf("%d ",++i+(++i)+i++);
    //6
    printf("%d ",(7<<1>>2^2 ));
    //1
    printf("%d ",~(10<<1)&4);
    //0
  3. 表达式 (z=0, (x=2)||(z=1),z) 的值是1。(F)

    ||是左结合,判断x=2为真后不再执行z=1,所以z仍为0

    &&同理,若左表达式为假,不再执行右表达式。

  4. 执行下面程序中的输出语句后,输出结果是(20 )。

    int a;
    printf("%d\n",(a=3*5,a*4,a+5));
  5. 表达式 (j=3, j++) 的值是(3)。

    括号中有多个表达式,以最后一个子表达式的值作为整个表达式的值。

  6. C语言里,下列选项正确的赋值语句是( ABC)。

    A.t += 1;
    B.n1 = (n2 = (n3 = 0));
    C.k = i = j;
    D.a = b + c = 1;
  7. 写出下列关系表达式的运行结果。 已知:变量的定义和初始化如下:

    char ch = 'w';
    int a = 2, b = 3, c = 1, d, x=10;
    printf("%d", a > b == c);
    printf("%d", d = a > b);
    printf("%d", ch >'a' + 1);
    printf("%d", d = a + b > c);
    printf("%d", d = a + b > c);
    printf("%d", 3 <= x <= 5);
    //最后一个不要以为是不合法的表达式
    //其实它是(3<=x)<=5
    //就是1<=5
    //001101
  8. 写出下列关系表达式的运行结果。 已知:变量的定义和初始化如下:

    char ch = 'w';
    int a=2,b=0,c=0;
    float x=3.0; 
    printf("%d", a && b);
    printf("%d", a || b && c);
    printf("%d", !a && b);
    printf("%d", a||3+10&&2);
    printf("%d", !(x == 2));
    printf("%d", !x == 2);
    printf("%d", ch || b);
    //0101101
  9. int a = 5, b = 6; 则表达式(++a == b--) ? ++a : --b的值是(7)

  10. c = 'w', a = 1, b = 2, d = -5; ,写出下列表达式的值:

    'x' + 1 > c: 1

    'y' != c + 2:0

    -a - 5 * b <= d + 1:1

    b == (a = 2):1

2022C-12班阶段性考试2理论-2022.11.17

  1. 执行以下程序段,输入20,输出20.00

    double x;   
    scanf("%f", &x);  
    printf("%.2f", x);   

    输出了0.00,因为scanf要用%lf......

  2. sizeof( )是C语言的一个函数,可以计算参量所占内存的字节数。如sizeof(int)可计算整型所占的内存字节数。(F)

    有没有可能sizeof是一种运算符呢(奸笑.jpg)

  3. 下面这段程序,若scanf输入k的值为50,则是无限循环,程序将始终运行、无法结束(假设运行该程序的计算机系统永远不会发生意外情况而崩溃或断电)。(F)

    #include <stdio.h>
    int main(){
       int k;
       scanf("%d", &k);
       int i=100;
       while(i > k){
           printf("%d ", i);
           i++;
      }
       return 0;
    }

    超出int取值范围之后就变成负数,就停止了

  4. 如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为:(静态变量)

2022C-12班练习9-2022.11.17

  1. 数组定义后,数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。(T)

    数组名是一个指针。

  2. 数组定义后,只能引用单个的数组元素,而不能一次引用整个数组。(T)

2022C-12班练习10-2022.11.24

  1. 二维数组的元素在内存中按行/列方式存放,即先存放第0行的元素,再存放第1行的元素……其中每一行的元素再按照列的顺序存放。(T)

  2. 二维数组的元素在内存中按行/列方式存放,即先存放第0行的元素,再存放第1行的元素……其中每一行的元素再按照列的顺序存放。(T)

    类型名 数组名[行长度][列长度] = {初值表};
  3. 执行语句int *p = 1000;后,指针变量p指向地址为1000的变量。(F)

  4. 只要将多个指针作为函数的参数,函数就一定会返回多个值。(F)

  5. 以下程序的输出结果是(19)。

    int main(void)
    {
         int aa[4][4]={ {1, 2, 3, 4}, {5, 6, 7, 8}, {3, 9, 10, 2}, {4, 2, 9, 6} };
         int i, s=0;

         for(i=0; i<4; i++)
               s += aa[i][1];
         printf("%d\n", s);

        return 0;
    }

    注意看好题目数组下标从0还是1开始,千万别按自己的习惯。

  6. 设有数组定义:char array [ ]="China"; 则数组 array所占的空间为(六个字节)。

    注意有个'\0'

  7. 下述对C语言字符数组的描述中错误的是(C)。

    A.字符数组可以存放字符串

    B.字符数组中的字符串可以整体输入、输出

    C.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

    D.不可以用关系运算符对字符数组中的字符串进行比较

  8. 以下能正确定义数组并正确赋初值的语句是(D)。

    A.int N=5, b[N][N];
    B.int a[1][2]={{1}, {3}};
    C.int c[2][ ]={{1, 2}, {3, 4}};
    D.int d[3][2]={{1, 2}, {34}};

    省行不省列,大小为常数

  9. 以下程序的输出结果是(3 6 9)。

    int main(void)
    {
         int  m[ ][3] = { 1, 4, 7, 2, 5, 8, 3, 6, 9 };
         int  i, j, k=2;

         for (i=0; i<3; i++)
               printf ("%d ", m[k][i]);

         return 0;
    }

    i,k位置别搞错

  10. 选项( ABCD)与以下字符数组定义等价。

    static char s[6] = {'H', 'a', 'p', 'p', 'y', '\0'};
    A.static char s[6] = {'H', 'a', 'p', 'p', 'y'};
    B.static char s[6] ="Happy";
    C.static char s[6] ={"Happy"};
    D.static char s[6] = {'H', 'a', 'p', 'p', 'y', 0};
    E.char s[6] = {'H', 'a', 'p', 'p', 'y'};
  11. 对以下定义的二维数组a,数组元素 a[2][0]的值是(2)

    int a[ ][3] = {{0},{1},{2}};
  12. 以下选项中,对基本类型相同的指针变量不能进行运算的运算符是 ( A)。

    A. +
    B. -
    C. =
    D. ==

    A.错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。

    B.可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数

2022C-12班练习11-2022.12.1

  1. 对于定义int a[10],*p=a;语句p=a+1;a=a+1;都是合法的。(F)

    a=a+1 不允许,因为只有变量才可以被赋值,而a是一个数组名,是不能够被赋值的,所以a=a+1是错的。

  2. 两个任意类型的指针可以使用关系运算符比较大小。(F)

  3. 下面程序段的运行结果是(B)。

    char s[ ] = "language", *p = s;
    
    while( *p++ != 'u') {
        printf("%c", *p – 'a' + 'A');
    }

    A.LANGUAGE

    B.ANGU

    C.LANGU

    D.LANG

    *(取指针)和 ++ 为同级运算且从右往左。

  4. 若有以下说明,且0<=i<10,则对数组元素的错误引用是(C)。

    int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = a, i;

    A. *(a+i)

    B. a[p-a+i]

    C. p+i

    D. *(&a[i])

    int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p = a, i=2;
    printf("%d\n",*(a+i));
    printf("%d\n",a[p-a+i]);
    printf("%d\n",p+i);
    printf("%d\n",*(&a[i]));
    char s[]="string";
    printf("%s",s+2);
    //2
    //2
    //6487528
    //2
    //ring

2022C-12班练习12-2022.12.8

  1. 调用printf函数,%s的格式输出字符串时,字符数组名、字符指针和字符串常量都可以作为输出参数。(T)

  2. 调用strcmp函数比较字符串大小时,通常较长的字符串会较大。(F)

  3. 直接访问就是直接利用变量的地址直接进行访问。(T)

  4. char *s="C Language";表示s是一个指向字符串的指针变量,把字符串的首地址赋予s。(T)

  5. 在C语言中,数组名是不可改变的,不能对它进行赋值运算。(T)

  6. 对于如下说明,语法和语义都正确的赋值是(C)。

    int c, *s, a[]={1, 3, 5};

    A. c=*s;

    B. s[0]=a[0];

    C. s=&a[1];

    D. c=a;

  7. 有两个字符数组a,b,则以下正确的输入语句是(B)

    A.gets(a,b);
    B.scanf("%s%s",a,b);
    C.scanf("%s%s",&a,&b);
    D.gets("a"),gets("b");

    gets()读整行,scanf()读至空格。

  8. 下面程序段的运行结果是(ef)

    char str[]= "abc\0def\0ghi", *p = str;
    printf("%s", p+5) ;

2022C-12班阶段性考试3理论-2022.12.15

  1. 在对数组全部元素赋初值时,不可以省略行数,但能省略列数。(F)

  2. 函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同时,则返回0。(T)

  3. char s1[80],s2[80];s1=s2;这样赋值是正确的。(F)

    再次强调数组名是指针,不可修改

  4. 下列赋值语句或初始化语句中,(B)是错误的。

    A.char s[ ]="hello";
    B.char s[10]; s="hello";
    C.char *p="hello";
    D.char *p; p="hello";

    同上。

  5. 指向数组元素的指针只可指向数组的首元素。(F)

  6. 数组初始化时,初始值个数小于数组元素的个数,C语言自动将剩余的元素初始化为初始化列表中的最后一个初始值。(F)

    不会自动变为最好一个值,初始值个数小于数组元素的个数,其余赋0,如果是没有初始值的自动变量为随机值

  7. 语句int *p;printf("%d",*p);中的*p含义相同。(F)

    第一个:指针p 第二个:指针p指向的内容

  8. 如果函数的返回类型是指针,则可以返回0。(T)

  9. 字符串常量实质上是一个指向该字符串首字符的指针常量。(T)

  10. 如果函数的返回类型是指针,则可以返回函数内部任意变量的地址。(F)

    变量的生存周期不同,而且即使生存周期符合也应该是同类型变量地址

  11. 假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是(D)。

    A.char s[5]={"ABCDE"}; puts(s);
    B.char s[5]={'A', 'B', 'C', 'D', 'E'}; puts(s);
    C.char *s; scanf("%s", s); puts(s);
    D.char *s; s="ABCDE"; puts(s);
  12. 对于定义 char str[] = "abc\000def\n"(注:其中0为数字零),求字符串str的长度len和数组str的大小size,len和size分别是:(C)

    A.12 ,13

    B.3 ,11

    C.3 ,9

    D.3 ,4

  13. 若有以下定义:

    char s[20]="programming",*ps=s;

    则不能代表字符o的表达式是(A)

    A.ps+2

    B.s[2]

    C.ps[2]

    D.ps+=2,*ps

    判断好是地址还是数据

  14. 下列程序段中哪一个完全正确?(C)

    A.int *p; scanf("%d", &p);
    B.int *p; scanf("%d", p);
    C.int k, *p=&k; scanf("%d", p);
    D.int k, *p; *p= &k; scanf("%d", p);

    指针变量要先赋值再使用!!!

2022C-12班练习13-2022.12.15

  1. 在定义结构类型时,关键字struct和它后面的结构名共同组成一个新的数据类型名。(T)

  2. 对于以下定义,不正确的叙述是(B )。

    struct  ex { 
    int x;
    float y;
    char z ;
    } example;

    A.struct是定义结构类型的关键字

    B.example是结构类型名

    C.x, y, z都是结构成员名

    D.struct ex是结构类型名

  3. 在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。(T)

    注意:

    struct student
    {  
     int no;
     char name[20];
     char sex;
     struct{
       int year;
       int month;
       int day;
    }birth;
    };
    struct student s;
  4. 假设结构指针p已定义并正确赋值,其指向的结构变量有一个成员是int型的num,则语句 *p.num = 100;是正确的。(F)

    运算符优先级问题,应该是 (*p).num = 100;p->num = 100,下面的5,6也是运算符优先级问题,可以看练习8的优先级表

  5. 对于以下结构定义,++p->str中的++加在(A)。

    struct {
      int len;
      char *str;
    } *p;

    A.指针str

    B.指针p

    C.str指向的内容上

    D.语法错误

  6. 对于以下结构定义,(*p)->str++中的++加在(D)。

    struct { 
    int len;
    char *str
    } *p;

    A.指针str

    B.指针p

    C.str指向的内容上

    D.语法错误

  7. 以下定义结构变量的语句中,错误的是(C)。

    A.

    struct student{ 
      int num;
      char name[20];
    } s;

    B.

    struct { 
    int num;
    char name[20];
    } s;

    C.

    struct student{ 
    int num;
    char name[20];
    };
    student s;

    D.

    struct student{ 
    int num;
    char name[20];
    };
    struct student s;

    C的花括号后面多了一个分号

    两种改法:一种A,一种B

    注:具有相同类型的结构变量可以直接赋值

2022C-12班练习14-2022.12.22

吐槽:文件的东西好烦耶,跟大计基似的...

  1. 从文件的逻辑结构上看,c语言把文件看作数据流,并将数据按顺序以一维方式组织存储。(T)

  2. c语言源程序是文本文件,目标文件和可执行文件是二进制文件。(T)

  3. 对于缓冲文件系统,在进行文件操作时,系统自动为每一个文件分配一块文件内存缓冲区(内存单元)。(T)

  4. 文件指针指向文件缓冲区中文件数据的存取位置。(F)

  5. 随机操作只适用于文本文件。(F)

    我不太懂qwq

    知乎用户 花脸 的回答:
    随机操作文本指的是用seek函数重新定位文件指针进行读写操作,访问数组中的元素也是随机的,知道下标就可以,所以说随机操作不只是针对于文件来讲。
  6. 文件的读函数是从输入文件中读取信息,并存放在内存中。(T)

  7. C语言中的预处理命令都以“#”开头。(T)

  8. C语言中,编译预处理后,所有的符号常量名和宏名都用相应的字符串替换。(T)

  9. 以“a”方式打开一个文件时,文件指针指向文件首。(F)

  10. 若fopen()函数打开文件失败,其返回值是(C)。

    A.1
    B.-1
    C.NULL
    D.ERROR
  11. 若读文件还未读到文件末尾, feof()函数的返回值是( B)。

    A.-1
    B.0
    C.1
    D.非0
  12. fputc(ch,fp) 把一个字符ch写到fp所指示的磁盘文件中,若写文件失败则函数的返回值为(C )。

    A.0
    B.1
    C.EOF
    D.非0
  13. 以下语句将输出 (B)。

    #include <stdio.h>
    printf("%d %d %d", NULL, '\0', EOF);
    A.0 0 1
    B.0 0 -1
    C.NULL EOF
    D.1 0 EOF
  14. #define fun(x,y) x*y

    则fun(3+2,4+5)的值为( A)。

    A.16

    B.45

    C.21

    D.25

2022C-12班阶段性考试4理论-2022.10.13

  1. *字符数组(1-2)

    下面的程序段将输出 (C)。

    char s[10] = "abcd";
    printf("%d\n", sizeof(s));

    A.4

    B.5

    C.10

    D.11

    sizeof与strlen

    //sizeof会计算'\0'计,而strlen不会
    //sizeof会计算到字符串最后一个空字符\0并结束
    //但如果数组大小已确定,则为数组大小,与存放内容无关
    //而strlen遇到'\0'就会停止并计算遇到的'\0'前面的长度
    //sizeof是运算符,无需头文件
    //strlen是函数,需要头文件<string.h>
    // \000,\x0,\x00,\0三者等价
    char s[]="abe\x0r\0t y";
    printf("%d %d",sizeof(s),strlen(s));
    //10 3
    char s[15]="abe\x0r\0t y";
    printf("%d %d",sizeof(s),strlen(s));
    //15 3
  2. 若a、b、c1、c2、x、y均是整型变量,以下正确的switch语句是(D)

    A.

    switch(a+b);
    {    case 1: y=a+b; break;
        case 0:y=a-b; break;}

    B.

    switch(a*a+b*b)
    {
    case 3:
    case 1: y=a+b; break;
    case 3: y=b-a, break;}

    C.

    switch a
    {    case c1: y=a-b; break;
    case c2: x=a*b; break;
    default: x=a+b; }

    D.

    switch(a-b)
    {    default: y=a*b; break;
    case 3: case 4: x=a+b; break;
    case 10: case 11: y=a-b; break; }

    A.switch的括号后面没有分号

    B.两个3重复了

    C.case里面不能放变量

    可以仔细看练习3中有关switch的部分

  3. 若程序有以下的说明和定义:

    struct abc
    { int x;char y; }
    struct abc s1,s2;

    则会发生的情况是(A)

    A.编译时错

    B.程序将顺序编译、连接、执行

    C.能顺序通过编译、连接、但不能执行

    D.能顺序通过编译、但连接出错

  4. 函数fgetc的作用是从指定文件读入一个字符,该文件的打开方式可以是( C)。

    A.只写

    B.追加

    C.读或读写

    D.答案B和C都正确

  5. 下列程序段的输出结果是(4599)

    int main()
    { int a=3, b=4, c=5, t=99;
    if(b<a&&a<c) t=a; a=c; c=t;
    if(a<c&&b<c) t=b, b=a, a=t;
    printf("%d%d%d\n", a, b, c);
    return 0;  
    }

    if不加花括号只管一句!太久没做这种题,别忘了qwq

OTHERS

  1. 以下选项中不正确的整型常量是(D)

    A.0xa
    B.010L
    C.10
    D.1.0
  2. 表达式(B)的值不是0。

    A.1/2
    B.!’\0’
    C.!EOF
    D.NULL
  3. 判断i和j至少有一个值为非 0 的表达式是(B)

    A.i!=0 &&j!=0 
    B.i*j!=0
    C.!(i==0||j==0)
    D.i&&j
  4. 宏定义不是C语句,后面不得跟分号(T)

    宏定义

    宏名一般用大写字母,以与变量名区别;

    宏定义不是C语句,后面不得跟分号;

    宏定义可以嵌套使用;

    宏定义可以写在程序中任何位置,它的作用范围从定义书写处到文件尾;

    可以通过“# undef”强制指定宏的结束范围。

  5. 输出(7,-13)

    #define F(x)x-2
    #define D(x)x*F(x)
    int main()
    {
    printf("%d,%d",D(3),D(D(3)));
    return 0;
    }

     

 


2023.1.4纪念:更新完啦,希望明天可以取得个好成绩!

2023.1.15纪念:出分了~ 没能冲击到满绩,但也算是一个圆满的结束,新年快乐,明年不划水!C大加油!

2023.7.3更新:哈哈,你猜一个学期过去,有没有又划水呢~必然有 qwq 但是C大满绩啦!!!

 

 

posted @ 2022-11-28 14:59  CrLamb  阅读(1381)  评论(0)    收藏  举报