2023.10.08~2023.10.14四次作业错题和易错题复盘

该博客总结了C语言学习中的易错点,涵盖编译和链接、转义字符、算术操作符、关系操作符等方面。涉及switch语句、关键字、main函数、ASCII码值、strlen函数等知识,分析了错题原因并给出相关概念介绍文章。

一.2023-10-08_编译和链接等

错题:

1.

swich语句如下:

#include<stdio.h>
int main()
{
     switch (a)
  {
   case 1:
      break;
      default:
   }
   return 0 ;
}

正确答案;A(错选D)

  客观分析:

  •   当变量表达式的内容与某个case后的常量相等后,就执行该case下的语句
  • break表示该case以后的内容不会执行,如果没有跟break,会继续执行当前case之后的case分支。
  •   当变量表达式的内容没有与那个case匹配,就会执行default下的内容。
  •   switch中常用的关键字:case 、break、 default,当然case中语句比较复杂时,可能会用if进行判断。
  •   continue是用来结束本次循环的,而switch不是循环,因此其中不能使用continue关键字。 

主观分析:swich语句不熟悉 

swich语句详细介绍请看下面文章:

https://blog.youkuaiyun.com/qianyujinghui/article/details/133949045

5.swich语句

2.

正确答案:C(错选B)

客观分析:

  •  C语言关键字:C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字
  •   define不是关键字,是编译器实现的,用来定义宏的预处理指令,不是C语言中的内容。
  •   int、struct和continue都是C语言中包含的关键字。

主观分析:

  • 不熟悉C语言中的关键字

C语言关键字详细介绍请看下列文章:

https://blog.youkuaiyun.com/qianyujinghui/article/details/133756656

(8.关键字介绍)

3.

正确答案:B、C(错选A)

客观分析:

  • 一个C语言程序中的main函数,有且仅有一个
  • main函数的名字是固定的,编译器以main函数作为程序的入口,程序是从main函数的第一行开始执行的。

主观分析:

  • 没看清题目,是多选,而且是选错误的
  • main函数概念不清楚

main函数详细介绍请看下列文章:

https://blog.youkuaiyun.com/qianyujinghui/article/details/133756656

(6.main函数)

4.

正确答案:A(错选D)

客观分析:

  • 字符A~Z的ASCII码值从65~90 ,字符a~z的ASCII码值从97~122 ,对应的⼤小写字符(a和A)的ASCII码值的差值是32
  • D答案:ASCII编码从0~127,所以D正确

主观分析:

  • 没看清题目,是选错误的
  • ASCII码值概念不清楚

ASCII表格:

ASCII 码表 - cppreference.com

5.

正确答案:C(错选A)

客观分析:

  • strlen是用来获取字符串的有效长度的,结尾标记'\0'不包含在内,strlen获取的规则非常简单:从前往后依次检测,直到遇到'\0'是就终止检测,题中代码没有"\0",所以输出是随机值。

主观分析:

  • strlen函数不了解
  •  字符串和\0

字符串和\0详细介绍请看下列文章:

C语言常见概念-优快云博客

(10.字符串和\0)

二.2023-10-10_转义字符等

易错题:

1.

正确答案:B

客观分析:

 1. 全局作用域中的num和main中的num可以同时存在,不会冲突,因为不是同一个作用域

 2. 在main函数中访问num时,采用就近原则,因此访问的是main中的num,相当于将全局作用域中的num屏蔽了

 A:错误:因为两个num不在同一个作用域中,可以通过编译

 B:正确,main中访问的是main中的num,而main函数中的num是1,因此打印1

 C:错误,应该访问main函数中的num,而不是全局作用域中的num

 D:错误,凑选择的

主观分析:

  • 考察全局变量和局部变量

关于变量详细介绍请看下列文章:

C语⾔数据类型和变量-优快云博客

(4.2变量)

2.

正确答案:D

客观分析:

  • 布尔类型是C99标准中引入的;
  • 在早期的C语言标准(如ANSI C和C89)中,没有明确定义布尔类型。通常,程序员使用整数类型(如int)来表示布尔值,其中0表示(false),非零值表示(true)。
  • 然而,在C99标准中引入了新的布尔类型(stdbool.h头文件),定义了bool类型和true/false常量。布尔类型只有两个取值:true和false,用于表示真和假。

主观分析:

  • 考察C语言布尔类型

关于C语言布尔类型详细介绍请看下列文章:

C语⾔数据类型和变量-优快云博客

(1.4布尔类型)

三.2023-10-12_算术操作符等 

错题:

1.

正确答案:B(错选C)

客观分析:

  • ++运算符:分为前置++和后置++,
  • 前置++:先加1,后使用,即先使用变量中内容,然后给结果加1
  • 后置++:先使用变量中内容,整个表达式结束时,给变量加1
  • 逗号表达式,依次从左往右计算。
    #include <stdio.h>
    int main()
    {
    	int a, b, c;
    	a = 5;
    	c = ++a;// ++a:加给a+1,结果为6,用加完之后的结果给c赋值,因此:a = 6  c = 6
    	b = ++c, c++, ++a, a++;
       // 逗号表达式的优先级,最低,这里先算b=++c, b得到的是++c后的结果,b是7
       // b=++c 和后边的构成逗号表达式,依次从左向右计算的。
       // 表达式结束时,c++和,++a,a++会给a+2,给c加1,此时c:8,a:8,b:7
    	b += a++ + c; // a先和c加,结果为16,在加上b的值7,比的结果为23,最后给a加1,a的值为9
    	printf("a = %d b = %d c = %d\n:", a, b, c); // a:9, b:23, c:8
    	return 0;
    }

主观分析:

  • 不会复杂运算,逻辑错误

关于运算法则详细介绍请看下列文章:

C语⾔数据类型和变量-优快云博客

(7. 单⽬操作符:++、--、+、-)

2.

正确答案:A(错选D)

客观分析:

  • 2个整数相除,执行的是整数除法,计算的结果也是整数
  • 除法的2个操作数只要有一个数是浮点数,执行的就是小数除法,所以a/c是按照小数除法计算的,结果就是3.5
  • a/b 是按照整数除法计算的,结果是3。

主观分析:

  • 没考虑清第二个打印的是浮点数

关于运算符详细介绍请看下列文章:

C语⾔数据类型和变量-优快云博客

(5.3 /)

3.

正确答案:B(错选A)

客观分析:

  • printf()允许限定占位符的最小宽度%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。如果超过5位,正常输出就行,5是最少输出5位。

主观分析:

  • 限制占位符最小宽度概念理解错误

关于占位符最小宽度详细介绍请看下列文章:

C语⾔数据类型和变量-优快云博客

(9.1.4.1 限定宽度)

4.

正确答案:A(错选B)

客观分析:

  • B:scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符,scanf输出字符占位符的时候,不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
  • C:scanf的占位符%s表示读取一个字符串,遇到空白字符就停止读取。
  • D:scanf需要包含stdio.h这个头文件的

主观分析:

  • 注意审题B选项说的是:处理所有占位符
  • scanf函数概念不清晰

关于占位符scanf函数概念详细介绍请看下列文章:

C语⾔数据类型和变量-优快云博客

(9.2 scanf)

四.2023-10-14_关系操作符等

错题:

1.

正确答案:D(错选A)

客观分析:

  • switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。
  •   func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。

主观分析:

  • switch语句知识不清晰

关于switch语句概念详细介绍请看下列文章:

第3讲:分⽀和循环(上)-优快云博客

(5.2 switch语句中的break)

2.

正确答案:D(错选A)

客观分析:

  • switch语句中表达式的类型只能是:整形和枚举类型
  •   D选项为浮点类型,不是整形和枚举类型

主观分析:

  • switch语句知识不清晰

关于switch语句概念详细介绍请看下列文章:

第3讲:分⽀和循环(上)-优快云博客

(5 switch语句)

3.

正确答案:D(错选B)

客观分析:

  • switch语句时多分支的选择语句,switch中表达式结果命中那个case,就执行该case子项,如果case子项后没有跟break语句,则继续往下执行。
  •   关于该题解析,请看以下注解:
     #include <stdio.h>
      int main() 
    {
      	int x = 3;
      	int y = 3;
      	switch (x % 2) 
        {  // x%2的结果为1,因此执行case1
      	case 1:
      		switch (y)   // y是3,因此会执行case3,而case3不存在,那只能执行default
      		{
      		case 0:
      			printf("first");
      		case 1:
      			printf("second");
      			break;
      		default: printf("hello"); // 打印hello,打印完之后,内部switch结束,此时外部case1结束
      		}             // 因为外部case1之后没有添加break语句,所以继续执行case2
      	case 2:             // 打印third
      		printf("third");      // 外部switch结束
      	}
      	return 0;
     }

主观分析:

  • switch语句解读不熟练

关于switch语句概念详细介绍请看下列文章:

第3讲:分⽀和循环(上)-优快云博客

(5 switch语句)

4.

正确答案:C(错选A)

客观分析:

  • 两个字符串是否相等不能使用==,应该使用strcmp函数

主观分析:

  • 关系操作符概念不清晰

关于关系操作符概念详细介绍请看下列文章:

第3讲:分⽀和循环(上)-优快云博客

(2.关系操作符)


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值