C语言题库--判断题【错误篇】

温馨提示:以下题目都是错误答案,不要记混了,黄色部分为知识点讲解,如若有误,欢迎各位大佬在评论区指正,谢谢

  1. 执行表达式(int)i后,i的类型一定变为整型.
    执行表达式(int)i后,i的类型仍然是原来的类型,只不过在这个表达式中将其强制转换为整型。如果原来的类型是浮点型或其他类型,转换成整型后可能会丢失精度或信息。但是在某些情况下,我们需要将变量的类型强制转换成另一种类型,以满足某些运算或函数调用的要求。
  1. 在一个C程序中,main函数必须出现在所有函数之前.
    在C语言中,main()函数是程序的入口点,它是程序执行的起始位置。根据C语言的标准规范,main()函数可以放置在代码文件的任何地方,但是在大多数情况下,我们将其放置在文件的开头或结尾。
    通常,将main()函数放在文件的开头是最常见的做法。这样做的好处是,当我们打开源代码文件时,能够清楚地知道程序从哪里开始执行。另外,将main()函数放在开头还有助于程序的可读性和维护性。
    当然,根据需要和代码结构,您也可以将main()函数放置在文件的其他位置。但请注意,如果将main()函数放置在其他位置,可能需要在函数之前进行函数原型的声明,以确保编译器能够正确识别和调用该函数。
  1. 在C语言中,为句构成的循环, while后一对圆括号中表达式的值应该是1.
    在C语言中,while循环后的圆括号中的表达式的值应该是非零的值(可以是任何非零值),而不是固定的1。只要表达式的值为非零,while循环就会一直执行。当表达式的值为0时,循环会终止。
    因此,在while循环中,圆括号中的表达式可以是任何能够产生非零结果的表达式,而不仅限于1。这样可以根据需要来设计循环条件,使程序能够按照特定的逻辑进行循环执行
  1. 在C语言中,调用函数必须在一条独立的语句中完成.
    在C语言中,调用函数可以在一条独立的语句中完成,也可以在其他表达式中完成。在大多数情况下,函数调用通常是作为一条独立的语句来执行的
  1. 在C程序中,每行中只能写一条语句 .
    在 C 程序中,每行可以写多条语句,只要每个语句以分号 ; 结尾。这样的语句称为多重语句或者语句块。
  1. 在C程序中,赋值运算符的优先级最低.
    在C语言中,逗号运算符的优先级是最低的。逗号运算符的主要作用是用于连接表达式,并且它会从左到右依次计算每个表达式,并返回最右边表达式的结果。
    这意味着,当逗号运算符出现在多个表达式之间时,它会首先计算左边的表达式,然后再计算右边的表达式。整个表达式的值将是右边表达式的值。
    在C语言中,赋值运算符的优先级是较低的,但并不一定是最低的。实际上,C语言中的运算符优先级是由运算符的性质决定的。
    赋值运算符(=)的优先级相对较低,这意味着在一个表达式中,其他大多数运算符(如算术运算符、关系运算符、逻辑运算符等)会被优先计算,然后再进行赋值操作。
    以下是一些常见运算符的优先级示例(从高到低):
    圆括号 ()
    一元运算符(例如 ++, --, !, -)
    乘法和除法运算符(*,/,%)
    加法和减法运算符(+,-)
    关系运算符(<,>,<=,>=)
    相等性运算符(==,!=)
    逻辑与运算符(&&)
    逻辑或运算符(||)
    赋值运算符(=)
    请注意,这里只列举了一些常见的运算符,并没有列出所有的运算符。在实际编程中,如果有多个运算符同时出现在一个表达式中,可以使用圆括号来明确指定运算的顺序,以避免产生歧义。
  1. 语句 printf(“%f%%”,1.0/3);输出为 0.333333.
    语句 printf(“%f%%”, 1.0/3) 的输出应该为 0.333333%。
  1. 与 if(E) 语句中的(E)等价的表达式是 (E == 0).
    与 if (E) 等价的表达式是 (E != 0) 而不是 (E == 0)。当 E 的值不为零时,(E != 0) 的结果为真,与 if (E) 的行为相同。
  1. 用户定义的函数也可调用main函数.
    用户定义的函数不可调用main函数.
  1. 以下各数均是合法的八进制数:256、03A2、-0127.
    以下各数均不是合法的八进制数:256、03A2、-0127.
    256(无前缀0) 03A2(包含了非八进制数码) -0127(出现了负号)
    256: 八进制数的每一位必须在0到7的范围内,因此 256 不是合法的八进制数,它是一个十进制数。
    03A2: 八进制数中只能包含数字 0 到 7,而 A 是一个十六进制的数位,不符合八进制的规则。
    -0127: 八进制数没有负号的表示方式,因此负号使得该数不是合法的八进制数。
  1. 已知ch是字符型变量,则ch=" \ ";是正确的赋值语句.
    在C语言中,如果你想将一个反斜杠字符 \ 存储在字符型变量中,你需要使用转义字符 \ 来表示。因此,正确的赋值语句应该是 ch=‘\’;。
  1. 一个变量可以同时被定义为多种类型.
    一个变量不能同时被定义为多种类型
  1. 一个include 命令可以指定多个被包含的文件.
    在C和C++编程语言中,一个 #include 命令只能指定一个被包含的文件。每个 #include 命令只能包含一个文件,并且文件名必须位于引号或尖括号中。
  1. 数组定义 int a[10]; 占内存10个字节.
    定义数组 int a[10]; 将会占用 40 个字节的内存空间。
  1. 数组定义 int a(10);是正确的.
    int a[10];
  1. 若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是错误的.
    给定宏定义 #define S(a,b) t=a;a=b;b=t; 是正确的。在这个宏定义中,变量 t 并不需要事先进行定义,因为宏展开后的代码会直接将 t 视为局部变量。
    宏定义中的 t 只是一个占位符,它将在宏展开时被替换为实际的参数。所以,在使用这个宏时,你需要确保传入的参数可以正确赋值给 a 和 b。
  1. 若i =3,则printf(“%d”,-i++);输出的值为 -4.
    正确的输出结果为-3,而不是-4。
    根据C语言的运算符优先级规则,一元减号运算符 - 的优先级高于后缀自增运算符 ++。因此,在表达式 printf(“%d”, -i++); 中,-i 会先被计算,然后再进行 i++ 的自增操作。
    首先,初始时 i 的值为 3。而 -i 表示对 i 进行取反操作,所以结果为 -3。然后,i++ 进行自增操作,将 i 的值增加 1,即 i 变为 4。
    因此,最终 printf 函数输出的值为 -3。这是因为在 printf 函数中使用了 %d 格式化字符串,表示输出一个有符号的十进制整数。
    需要注意的是,i++ 是一个后缀自增运算符,它会在表达式计算完毕后再进行自增。如果是前缀自增运算符 ++i,那么它会在表达式计算之前就进行自增,输出的结果将不同。

    需要注意的是,一元减号运算符 - 表示对其后的操作数进行取反(负号)操作,而不是减法操作。因此,-i 表示将变量 i 的值取反,而不是将其减去一个数。
  1. 若a是实型变量,在执行了a=5;后,a将变为整型变量.
    在C语言中,变量的类型由其声明时的类型确定,并且一旦确定类型后,在后续的操作中不会自动发生类型转换而改变变量的类型。所以,如果变量 a 是一个实型(浮点型)变量,在执行 a = 5; 后,它仍然是一个实型(浮点型)变量。
  1. 若a和b的类型相同,在执行了a=b;后,b中的值将丢失.
    若a和b的类型相同,在执行了a=b;后,b中的值没丢失.
  1. 任何结构体类型的变量都可以互相赋值.
    在 C 语言中,结构体类型的变量只有在具有相同结构定义的情况下才能互相赋值。也就是说,只有当两个结构体变量的类型完全相同(包括结构体成员名称、顺序和类型)时,它们才可以通过赋值操作符 = 进行互相赋值。
  1. 枚举类型的数据与字符串在使用上相同.
    枚举类型的数据和字符串在使用上有一些不同。
    枚举类型是一种用户自定义的数据类型,它可以由程序员定义一些常用的标识符或名称,并且给这些名称分配一个整数值。枚举类型的值只能从预定义的列表中选择,并且通常用于表达程序中的状态、选项或状态转换等概念。
  1. 结构体类型只有一种.
    结构体类型有多种。
    在 C 语言中,结构体类型是一种用户自定义的数据类型,它可以由程序员定义一组不同类型的成员变量,以表示一个复杂的数据结构或对象。每个结构体类型可以具有不同的成员变量和成员变量类型。
  1. 将函数fun的入口地址赋给指针变量p的语句是p=fun();
    语句 p = fun(); 是错误的,因为它将函数 fun() 的返回值赋给了指针变量 p,而不是将函数 fun() 的入口地址赋给指针变量 p。
    在 C 语言中,函数名本身代表函数的入口地址。要将函数的入口地址赋给指针变量,应该使用函数名(不带括号)作为右值,而不是调用函数并将其返回值赋给指针变量。
    正确的写法是 p = fun;,去掉括号即可。这样,指针变量 p 就被赋值为函数 fun() 的入口地址。
  1. 函数的定义和函数的调用均可以嵌套.
    函数的定义不可以嵌套
  1. 函数strlen(“ASDFG\n”)的值是7.
    这个值是6.
    \n是C语言字符表达的转义字符形式,代表换行。即,\n是一个字符,而不是\和n两个字符。
    字符串"ASDFG\n"在最后有一个隐藏的\0.
    strlen求字符串的长度,即从起始到\0的字符个数,不包括\0.
    所以,这个字符串包含的字符为A S D F G \n一共6个,于是strlen的结果就是6.
  1. 定义结构体的保留字是struc.
    struct
  1. 调用scanf()函数进行字符数组输入时,空格和换行符都可以作为字符串的一部分而能读入.
    除了%c外,scanf对其他格式符(如%d)的输入是以空白符为结束判断标志的,
  1. 当输入数值数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值.
    可以强制类型转换
  1. 程序中的变量代表内存中的一个存储单元,它的值不可以随时修改.
    在大多数编程语言中,变量的值是可以随时修改的。变量是用来存储数据的,其值可以根据程序的需要进行修改。例如,在C、C++、Java、Python等语言中,你可以声明一个变量并给它赋值,然后在程序的后续部分中改变这个变量的值。

100.参加位运算的数据可以是任何类型的数据.
位运算是一种对二进制数据进行操作的运算方式,它将操作数的每个比特(bit)作为独立的单元进行处理。因此,位运算的操作数必须是整数类型(如整型、字符型等),而不能是浮点数或其他非整数类型。
原因如下:
位运算是基于二进制的操作,它对操作数的每个比特进行逐位操作。浮点数不是以固定的比特位表示,而是遵循浮点数的格式(如IEEE 754标准),其中包含了符号位、指数位和尾数位,不适合进行位运算。
位运算通常用于对数据的位级别操作,例如位与(AND)、位或(OR)、位异或(XOR)等。这些操作对于整数类型有着明确定义的结果,但对于其他类型(如浮点数、结构体等)的位级别操作并没有明确定义,也无法得到有意义的结果。
位运算的操作数通常是整数类型,因为整数类型在内存中以固定大小的二进制形式存储,适合进行比特级别的操作。另外,整数类型的位运算在硬件层面上也有高效的支持。
综上所述,位运算的操作数必须是整数类型数据,因为它们以固定的比特位存储,并且可以进行明确定义的位级别操作。其他类型的数据(如浮点数、结构体等)没有固定的二进制表示,并且位运算对它们没有明确定义。

101.static char str[]=“China”;没有定义数组元素个数.
static char str[]=“China”;有定义数组元素个数.

102.sqrt(m)是求m平方的函数.
sqrt(m)是求m开平方的函数.

103.inta[]={3.1,5.8,6.7,-3.6},i;for(i=0;i<4;i++)printf(“%d”,a[i]);能输出数组元素a[2]的值.
这段代码中存在几个问题,导致不能正确输出数组元素 a[2] 的值。
数据类型不匹配:数组 a 被定义为 int 类型,但初始化列表中的元素是浮点数。这会导致编译错误。
初始化列表格式错误:初始化列表应该使用逗号分隔的元素列表,而不是用小数点。
打印格式错误:printf 函数中使用了 %d 格式说明符,这用于打印整数。要打印浮点数,应该使用 %f。

104.int k=8567;printf(“|%-6d|\n”,k);的输出为|008567|.
这段代码的目的是打印整数k,并确保它至少占据6个字符的宽度。如果k的长度少于6位,那么它应该在左侧用0填充。
但是,这段代码实际上不会如您所描述的那样输出|008567|。
问题在于%-6d中的-符号。-符号表示左对齐,而不是右对齐。这意味着数字会向左对齐,而不是向右对齐。因此,数字8567会向左对齐,并在其右侧填充空格,直到总宽度为6个字符。所以输出应该是| 8567 |(注意空格)。
如果希望数字右对齐并在左侧填充0,应该使用%6d而不是%-6d。这样,数字8567会向右对齐,并在其左侧填充0,直到总宽度为6个字符。输出应该是|008567|。

105.int i=3,j=5; if(i>j) ; j++; else i++;是正确的.
这段代码中的问题是存在一个多余的分号。在 if(i>j); j++; 这一部分,分号是多余的,它会导致 if 语句没有执行任何操作。

106.int a[2][3];按照它在内存的排列次序,a数组的所有元素是a[0][0]、a[1][0]、a[0][1]、a[1][1]、a[0][2]、a[1][2].
在C语言中,二维数组的内存布局并不是按照你给出的顺序排列的。二维数组在内存中是按照行优先的顺序存储的。
对于一个二维数组 int a[2][3],它的元素在内存中的排列次序应该是:a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2]

107.int a[10]={0,1,2,3,4,5,6,7,8,9},p=a;则p+5相当于a[5].
在 C 语言中,数组名 a 表示数组的首个元素的地址,即 a 等价于 &a[0]。而指针 p 指向了数组 a 的首个元素。
当使用指针 p 进行加法运算时,其结果是根据指针所指向类型的大小进行计算的。对于指针 p+5,它会将指针 p 向后移动 5 个存储单元的大小。
因为 p 是一个 int
类型的指针,每个 int 类型的元素大小通常为 4 字节(取决于具体的编译器和平台)。所以 p+5 会将指针 p 后移 20 个字节。
而 a[5] 则是访问数组 a 中索引为 5 的元素,即 a[5] 等价于 *(a + 5)。这里的 5 表示索引偏移,而不是字节偏移。
因此,虽然 p+5 和 a[5] 都表示了数组 a 中索引为 5 的元素,但它们并不完全相等,因为 p+5 实际上是一个地址的偏移,而 a[5] 是直接访问数组的元素。

108.if语句后面的控制表达式只能使用关系表达式或逻辑表达式.
在 C 语言中,if 语句后面的控制表达式可以使用任意表达式,并不仅限于关系表达式或逻辑表达式。
在 if 语句中,控制表达式的值会被转换为布尔类型(0表示假,非零表示真)。因此,任何可以被转换为布尔类型的表达式都可以用作控制表达式。

因此,当 strcmp(temp, str) > 0 条件为真时,说明字符串 temp 大于字符串 str。

110.if (j=0) i+ +; else i- -; i的值为11.
在条件语句 if 中使用了赋值运算符 = 而不是相等运算符 == 。这会导致 j 被赋值为 0,而不是判断 j 是否等于 0。

111.for(m=22;m<1000;m++) if(m%3==0&&m%7!=0)break;是当m能被3整除或m不能被7整除时,结束本次循环进入下次循环.
循环体不是当 m 能被 3 整除或者 m 不能被 7 整除时就会结束进入下一次循环。实际上,循环体会在满足条件 m % 3 == 0 && m % 7 != 0 时结束,而不是在满足上述两个条件中的任意一个时结束。

112.for(i=0,k=-1;k=1;k++,i++)printf(“*\n”); 循环体一次也不执行.
循环体会执行,会导致无限循环。这是因为在循环条件中使用了赋值运算符 =,而不是相等运算符 。

113.C语言中字符型、整型、实型都能用八进制表示.
在C语言中,八进制表示法只适用于整型数据类型(int、short、long等),而不包括字符型(char)和实型(float、double等)。因此,在C语言中,只有整型可以使用八进制表示法。

114.C语言中的文件类型只有文本文件一种.
115.C语言中的文件类型只有二进制文件一种.
实际上,C语言中的文件可以分为两种主要类型:文本文件和二进制文件。
文本文件(Text File):文本文件是由可打印字符组成的文件,例如ASCII或Unicode字符。它们通常包含文本数据,如纯文本文件、代码文件等。在C语言中,通过使用标准库函数(如fopen()、fprintf()、fscanf()等)以文本模式(“r”、“w”、"a"等)打开文件时,可以将文件视为文本文件。
二进制文件(Binary File):二进制文件是由字节组成的文件,其中可以包含任意类型的数据,包括非文本数据。二进制文件可以存储图像、音频、视频、压缩文件等各种非文本格式的数据。在C语言中,通过使用标准库函数(如fopen()、fwrite()、fread()等)以二进制模式(“rb”、“wb”、"ab"等)打开文件时,可以将文件视为二进制文件。

116.C语言的if语句嵌套时,if与else的匹配关系是每个else与if的匹配是任意的.
在C语言中,if语句和else语句是成对出现的,else语句必须与最近的一个没有匹配的if语句配对。也就是说,if语句和它后面紧跟的第一个else语句构成一个完整的if-else语句块。

117.C程序中有调用关系的所有函数必须放在同一个源程序文件中.
对于调用关系的所有函数,并不需要将它们放在同一个源程序文件中。通过正确的函数原型或包含相关的头文件,即可在不同的源程序文件中调用和定义函数。这种方式可以提高代码的模块化和可读性。

118.continue语句不只用于循环语句中.
continue 语句是用于循环语句中的,而不是其他类型的语句。它用于跳过当前迭代中剩余的代码,并开始下一次迭代。
continue 语句被设计用于循环结构,比如 for、while 或 do…while 循环。当遇到 continue 语句时,程序将会立即跳转到循环体的条件判断部分或迭代表达式处,然后开始下一次循环迭代。
在其他类型的语句中使用 continue 是错误的,因为这些语句没有迭代机制来支持 continue 的作用。如果在非循环语句中使用 continue,编译器将会报错。
因此,continue 语句只能在循环语句中使用,不能用于其他类型的语句。

119.char a[10]=“abcdefg”; printf(“%6s\n”,a);只输出前六个字符.
printf(“%.6s\n”,a);才是只输出前六个字符.(注意有一个小数点在%后面)

120.char *s;*s=‘H’;是正确的.
这段代码 char *s; *s=‘H’; 是错误的,因为在给指针变量 s 赋值之前,它没有被初始化。指针变量需要先分配内存或者指向已经存在的内存地址,然后才能进行操作。

121.#include “stdio.h” 是每个程序中必须写的
于C程序来说,#include “stdio.h” 并不是每个程序中必须写的。这是因为 #include “stdio.h” 是用来引入标准输入输出库(stdio.h)的头文件,它包含了一些用于输入和输出的函数(如 printf 和 scanf)。但在一些特殊情况下,您可能不需要使用这些输入输出函数,或者使用其他的头文件。

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值