错题集c语言

合集下载

C语言典型易错题

C语言典型易错题

C语言典型易错题(1)以下程序段中的变量已正确定义For(i=0;i<4;i++,i++)For(k=1;k<3;k++);printf(“*”);程序段的输出结果是()A********B****C**D*解析:注意第二个for后执行语句为空,故答案为D。

(2)有以下程序#include<stdio.h>V oid f(int*p,int*q);Main(){int m=1,n=2,*r=&m;f(r,&n);printf(“%d,%d,m,n);}V oid f(int*p,int*q){p=p+1;*q=*q+1;}程序运行后的输出结果是()A1,3B2,3C1,4D1,2解析:注意C语言中函数的值传递规律,故答案为A。

(3)有以下程序#include<stdio.h>Int b=2;Int fun(int*k){b=*k+b;return(b);}Main{int a[10]={1,2,3,4,5,6,7,8},i;For(i=2;i<4;i++){b=fun(&a[i])+b;printf(“%d”,b);}Printf(“\n”);}程序运行后的输出结果是()A1012B810C1028D1016解析:b是全局变量,当b=2时,i<4符合,执行b=fun(&a[i])+b对于fun(&a[i])得b=a[2]+2=5所以b=b+b=10i++,i=3,i<4符合fun(&a[i]),得b=a[3]+10=14,b=b+b=28所以答案是C(4)若变量已正确定义,有以下程序段Int a=3,b=5,c=7;If(a>b)a=b;c=a;If(c!=a)c=b;Printf(“%d,%d,%d\n”,a,b,c);其输出结果是()A程序语段有语法错误B3,5,3C3,5,5D3,5,7解析:注意第一个If语句之后的分号,c=a是不属于If语句的,故答案为B。

c语言错题总结期末

c语言错题总结期末

c语言错题总结期末一、变量与表达式1. 以下语句的输出是什么?```c#include <stdio.h>int main(){int a = 2, b = 3;printf("a*3+5*b = %d", a*3+5*b);return 0;}```答案:a*3+5*b的值是21。

解析:根据运算符的优先级,先进行乘法运算,然后进行加法运算。

2. 下面代码的输出是什么?```c#include <stdio.h>int main(){int a = 3, b = 4, c = 5;printf("a + b - c = %d\n", a + b - c);printf("a * b / c = %d\n", a * b / c);printf("a + b * c = %d\n", a + b * c);return 0;}```答案:```a +b -c = 2a *b /c = 2a +b *c = 23```解析:根据运算符的优先级,先进行乘法运算,然后进行加法和减法运算。

二、流程控制1. 下面哪个循环语句可以用来反复执行一段代码块,直到满足某个条件时停止执行?A. ifB. switchC. whileD. for答案:C. while解析:while循环可以根据给定的条件反复执行一段代码块,直到条件不再满足时停止执行。

2. 下面的代码片段输出结果是什么?```c#include <stdio.h>int main(){int i = 0;while(i < 3){printf("%d ", i);i++;}return 0;}```答案:输出结果是0 1 2 。

解析:while循环的终止条件是i小于3,所以循环会执行3次,i的初始值为0,每次循环后i会自增1。

c语言 经典易错题

c语言 经典易错题

c语言经典易错题在学习C语言的过程中,我们经常会遇到一些经典的易错题。

这些题目看似简单,但往往会隐藏一些陷阱。

下面我将介绍一些常见的C 语言易错题,并通过详细的解析帮助大家更好地理解和掌握。

题目一:```c#include <stdio.h>int main() {int a = 5, b = 3;a = b++;printf("a=%d, b=%d\n", a, b);return 0;}```在上面的代码中,我们定义了两个变量a和b,并且使用后置递增操作符将b赋值给a。

最后通过printf函数打印出a和b的值。

请问,代码执行后a和b的值分别是多少?解析:在执行 `a = b++` 这一行代码时,先将 `b` 的值赋给 `a`,然后再将`b` 自身进行自增操作。

`b++` 的返回值是原始的 `b` 的值,在本例中即为 `3`。

所以执行完这一行代码后,`a` 的值为 `3`,`b` 的值为 `4`。

因此,最后打印出的结果是 `a=3, b=4`。

题目二:```c#include <stdio.h>int main() {int a = 5, b = 3;a = ++b;printf("a=%d, b=%d\n", a, b);return 0;}```与题目一类似,下面的这段代码中我们只是将递增操作符从后置变为前置。

请问,代码执行后a和b的值分别是多少?解析:在执行 `a = ++b` 这一行代码时,先对 `b` 进行自增操作,然后再将自增后的 `b` 的值赋给 `a`。

`++b` 的返回值就是自增后的 `b` 的值,在本例中即为 `4`。

所以执行完这一行代码后,`a` 的值为 `4`,`b` 的值也为 `4`。

因此,最后打印出的结果是 `a=4, b=4`。

题目三:```c#include <stdio.h>int main() {int a = 5, b = 3;int c = a++ + ++b;printf("a=%d, b=%d, c=%d\n", a, b, c);return 0;}```在上面的代码中,我们定义了三个变量a、b和c,并使用了后置递增和前置递增操作符。

c语言面试找错题

c语言面试找错题

c语言面试找错题C语言面试中经常会出现找错题,考察面试者在代码中找出错误的能力。

下面给出一些常见的C语言找错题,供大家练习。

题目1:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum = a + b;printf("The sum of a and b is: %d\n", sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。

答案:以上代码没有错误。

题目2:```c#include <stdio.h>int main() {int a = 10;int b = 20;printf("The sum of a and b is: %d\n", a, b);return 0;}```问题:请找出以上代码中的错误,并解释原因。

答案:以上代码的错误在于`printf`函数的使用。

`printf`函数的第一个参数是一个格式化字符串,后续参数是格式化字符串中使用的参数。

在上述代码中,格式化字符串中只有一个`%d`,但是后续提供了两个参数`a`和`b`。

正确的写法应该是`printf("The sum of a and b is: %d\n", sum);`。

题目3:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum;sum = a + b;printf(“The sum of a and b is: %d\n”, sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。

答案:以上代码的错误在于`printf`函数的格式化字符串中使用的双引号是中文引号,而不是英文引号。

C语言中使用的是英文引号,因此应该修改为`printf("The sum of a and b is: %d\n", sum);`。

c语言改错题题库及详解答案

c语言改错题题库及详解答案

c语言改错题题库及详解答案C语言是一种广泛使用的计算机编程语言,它以其高效性、灵活性和强大的功能而受到程序员的青睐。

然而,即使是经验丰富的程序员也难免会在编写C语言程序时犯一些错误。

下面是一个C语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。

题目1:错误的变量初始化```cint main() {int a;printf("%d", a); // 错误:变量a未初始化return 0;}```详解答案:在C语言中,如果一个变量在使用前没有被显式地初始化,它的值是不确定的。

为了修复这个错误,我们应该在声明变量时对其进行初始化。

```cint main() {int a = 0; // 正确的初始化printf("%d", a);return 0;}```题目2:错误的数组索引```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[5]); // 错误:数组索引越界return 0;}```详解答案:数组索引是从0开始的,所以对于一个有5个元素的数组,有效的索引范围是0到4。

访问数组的第6个元素会导致越界错误。

```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[4]); // 正确的索引return 0;}```题目3:错误的循环使用```cint main() {int i;for (i = 0; i <= 10; i++) {printf("%d ", i);} // 错误:循环条件错误return 0;}```详解答案:循环条件应该是`i < 10`,以确保循环不会无限执行。

```cint main() {int i;for (i = 0; i < 10; i++) {printf("%d ", i);}return 0;}```题目4:错误的函数调用```cint main() {int result = add(5, 3); // 错误:add函数未定义printf("%d", result);return 0;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。

c语言改错题题库及详解答案

c语言改错题题库及详解答案

c语言改错题题库及详解答案1. 题目:以下代码段中存在错误,请找出并改正。

```c#include <stdio.h>int main() {int a = 10;int b = 20;int c = a + b;printf("The sum is %d", c);return 0;}```答案:代码中缺少了字符串结束的空格。

应改为:```cprintf("The sum is %d ", c);```2. 题目:找出并改正以下代码段中的错误。

```c#include <stdio.h>int main() {int num = 100;if (num = 100)printf("Number is 100\n");return 0;}答案:代码中使用了赋值运算符 "=" 而不是比较运算符 "=="。

应改为:```cif (num == 100)```3. 题目:以下代码段中存在逻辑错误,请指出并改正。

```c#include <stdio.h>int main() {float a, b, c;scanf("%f %f", &a, &b);c = a / b;printf("The result is %f", c);return 0;}```答案:代码中没有检查除数 b 是否为 0,这会导致运行时错误。

应添加检查:```cif (b != 0) {c = a / b;printf("The result is %f", c);} else {printf("Error: Division by zero.\n");}```4. 题目:找出并改正以下代码段中的语法错误。

C语言易错题集(选择、填空)

以下各个项中,可作为C语言中合法整数的是( )。

A.10110BB.0386C.0XffaD.x2a2错解:B 错认为是十进制整形数据,开头为0,后面无意义。

整形常量:十进制 +(-)0—9八进制 +(-)O 0—7十六进制 +(-)OX 0—f或OX 0—F在输出是不会输出前导符。

下列定义变量的语句中错误的是()A.int _int;B.double int_;C.char For;D.float US$;正解:D 变量格式:数据类型名(整型、实型、字符型)+变量名变量名即格式字符属于标识符(符号常量名、函数名、数组名、文件名)由有效字符序列组成:字母、数字、下划线,且第一个字符不能是数字,另外C语言中大小写字母不等效。

设有定义:int a; float b; ,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876 <空格>543.0<回车>,则a和b的值分别是()A.87 和 6.00000B.876 和 543.0C.87 和 543.0D.76 和 543.0正解:%2d决定了a只能接受两位数字,所以a的值为87%2d%f是连在一起的,所以按照默认规定,输入的数据也是连续的,中间没有空格,否则会将空格作为输入的结束符来看待。

已知字符 'a' 的ASCII码为 97,执行下列语句的输出是____。

printf ("%d, %c", 'b', 'b'+1 ) ;A.98,bB.语法不合法C.98,99D.98,c正解:C.字符数据在内存中以ASCII码存储,因此字符数据和整型数据可以通用,可相互赋值。

有以下程序:main(){int m=0256, n=256;printf("%o %o\n", m, n);}运行程序后的输出结果是( )A.0256 0400B.0256 256C.256 400D.400 400错解:A. %O输出结果无前导符符号,若输出需要带上前导符,则应该为%#O,同理十六进制输出前导符为%#OX。

c语言易错题

当涉及到易错题时,以下是一些常见的C语言易错题及其解析:1. 下面代码的输出结果是什么?```c#include <stdio.h>int main() {int x = 5;printf("%d", x++);return 0;}```答案:该代码的输出结果是5。

这是因为`x++`是后置递增操作符,它会先使用变量的当前值,然后再将其递增。

2. 下面代码的输出结果是什么?```c#include <stdio.h>int main() {int x = 10;if (x = 5) {printf("Hello");} else {printf("World");}return 0;}```答案:该代码的输出结果是"Hello"。

这是因为在条件语句中使用了赋值操作符`=`而不是相等操作符`==`。

因此,表达式`x = 5`会将5赋值给变量x,并且由于赋值操作的结果为非零值,条件判断为真。

3. 下面代码的输出结果是什么?```c#include <stdio.h>int main() {char str[] = "Hello";printf("%c", str[5]);return 0;}```答案:该代码会导致未定义的行为。

数组下标从0开始计数,而`str`数组的长度为6(包括结尾的空字符'\0')。

因此,`str[5]`尝试访问越界的内存位置,导致未定义的行为。

这些是一些常见的C语言易错题,通过理解和注意这些概念,可以帮助避免在编写C 代码时出现常见的错误。

同时,建议在学习过程中多做练习题,加深对C语言的理解和运用。

c语言编程易错题

c语言编程易错题一、引言C语言是一种广泛使用的编程语言,广泛应用于操作系统、嵌入式系统、游戏开发等领域。

由于其语法简单、灵活,C语言成为许多初学者和进阶开发者首选的编程语言。

然而,在C语言编程过程中,由于各种原因,许多开发者容易犯错。

本文档旨在总结一些常见的C语言编程易错题,以帮助开发者避免类似的错误。

二、易错题及解决方法1. 变量命名错误变量命名是编程中非常重要的一步,正确的命名可以帮助读者更好地理解代码,并减少混淆和错误。

常见的变量命名错误包括:a. 命名不符合规范:使用非法字符、变量名过短或过长、不合适的缩写等。

b. 命名不一致:在不同代码片段中使用相同名称的变量,但在不同上下文中具有不同的含义。

c. 拼写错误:变量名中的字母、数字或符号拼写错误。

解决方法:使用有意义的变量名,遵循命名规范,确保拼写正确。

2. 数组越界在C语言中,数组的索引是从0开始的,因此越界可能导致未定义的行为。

常见的越界错误包括:a. 访问不存在的数组元素。

b. 使用局部变量的索引访问数组。

c. 在多维数组中发生越界。

解决方法:在使用数组时,确保索引在有效范围内,并进行必要的检查。

3. 类型不匹配类型不匹配可能导致程序崩溃或产生不正确的结果。

常见的类型不匹配错误包括:a. 将字符串存储在整数变量中。

b. 将浮点数与整数进行运算。

c. 传递不匹配的数据类型给函数。

解决方法:在编程时,确保数据类型的匹配,并了解各种数据类型的特性和限制。

4. 函数参数错误函数参数错误可能导致程序行为异常或产生错误结果。

常见的函数参数错误包括:a. 传递不正确的参数数量或类型给函数。

b. 在函数内部使用未初始化的参数。

c. 在函数内部修改了不应被修改的参数。

解决方法:在使用函数时,确保传递正确的参数数量和类型,并在函数内部正确使用参数。

5. 指针使用不当指针是C语言中非常重要的概念,正确使用指针可以大大提高编程效率。

常见的指针使用错误包括:a. 未初始化指针就进行操作。

c语言 经典易错题

1. **问题:**```c#include <stdio.h>int main() {int x = 5;printf("%d", x++);return 0;}```**解析:**输出为5,因为后置递增操作符`x++`会先返回`x`的值,然后再将`x`的值加1。

2. **问题:**```c#include <stdio.h>int main() {int x = 5;printf("%d", ++x);return 0;}```**解析:**输出为6,因为前置递增操作符`++x`会先将`x`的值加1,然后返回加1后的值。

3. **问题:**```c#include <stdio.h>int main() {int x = 5;printf("%d", x++);printf("%d", x);return 0;}```**解析:**输出为56,因为第一个`printf`语句中的`x++`会先返回`x`的值(5),然后再将`x`的值加1,所以第一个`printf`输出5,第二个`printf`输出加1后的值6。

4. **问题:**```c#include <stdio.h>int main() {char ch;while (ch = getchar() != '\n') {putchar(ch);}return 0;}```**解析:**此循环将一直运行,即使输入了回车键。

原因是赋值操作符`=`的优先级低于不等于操作符`!=`,所以`getchar() != '\n'`会先执行,然后将结果赋给`ch`。

应该使用括号来明确优先级:`while ((ch = getchar()) != '\n')`。

5. **问题:**```c#include <stdio.h>int main() {char str[] = "Hello";printf("%c", str[5]);return 0;}```**解析:**会输出未定义的结果,因为数组`str`的有效索引是0到4,访问`str[5]`超出了数组的边界。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

错题集相同优先级运算符,从左至右依次运算。

注意后缀运算优先级高于前缀。

因此++i++应解释为++(i++)。

而与或非的运算优先级都不一样,因此a && b || b && c解释为(a && b) || (b && c)
合理使用优先级可以极大简化表达式。

基本表达式1级
基本表达式(Primary expressions),主要是用于运算符之间,做为运算数。

标识,常量,字符串文字量,优先级提升表达式最优先执行。

优先级提升表达式是指圆括号包围的表达式,如“( expression )”
后缀表达式2极
postfix-expression [ expression ],数组下标运算。

postfix-expression ( argument-expression-list),函数调用,括号内的参数可选。

postfix-expression . identifier,成员访问,
postfix-expression -> identifier,成员访问,->号之前应为指针。

postfix-expression ++,后缀自增
postfix-expression --,后缀自减
( type-name ) { initializer-list }
( type-name ) { initializer-list , } 复合初始化,C99后新增。

例如
1 2 3 4 5 6 7 8 9 10
int* a = (int[]) { 1, 2, 3 };
//等价于
int unamed[] = {1, 2, 3}; //unamed表示一个不可见的变量名。

int* a = unamed;
单目/一元运算3级
++ unary-expression 前缀自增
-- unary-expression 前缀自减
unary-operator cast-expression 单目转型表式式,包括取地址& ,提领* ,正号+ ,负号- 位反~ 逻辑否!。

sizeof unary-expression 求类型长度,对表达式求类型长度
sizeof ( type-name ) 求类型长度
强制类型表达式4级
( type-name ) cast-expression,强制表达式成为type-name指定的类型。

乘法表达式5级
“ * ” 乘法运算符;“ / ”除法运算符;“ % ” 取余运算符。

加法运算符6级
“ + ”加法运算符;“ - ”减法运算符。

移位运算符7级
<< 左移运算符;>> 右移运算符。

关系运算符8级
<、<=、>、>=关系运算符。

相等运算符9级
“ == ”等于运算符;“ != ”不等于运算符。

位与运算符10级
“ & ”按位与运算符
位异或运算符11级
“ ∧ ”按位异或运算符(Bitwise exclusive OR operator)。

位或运算符12 级
“ | ”按位或运算符(Bitwise inclusive OR operator)。

逻辑与运算符13级
“&&”逻辑与运算符。

逻辑或运算符14 级
“ || ”逻辑或运算符。

三元条件运算符15级
? :条件运算符。

赋值运算符16 级
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=赋值运算符。

逗号运算符17级
“,”逗号运算符。

[pre]C 语言中,逗号(,)也可以是运算符,称为逗号运算符(Comma Operator)。

逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式,称为逗号表达式。

其一般形式为:
子表达式1, 子表达式2, ..., 子表达式n
例如:
a + b, c = b, c++
逗号运算符的优先级是所有运算符中级别最低的,通常配合for 循环使用。

逗号表达
式最右边的子表达式的值即为逗号表达式的值。

上例中,c++ 的值(c 自增之前的值)即为该表达式的值。

逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。

也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算。

因此,上例中,c 得到b 的值后,才进行自增运算。

相关文档
最新文档