C语言易错点归纳
c语言易错题pdf

C语言中有一些常见的易错题,例如:
-数组越界:数组的索引是从0开始的,一个长度为`n`的数组的索引范围应该是0到`n-1`。
如果尝试访问超出这个范围的索引,就会导致未定义的行为。
-忘记初始化变量:如果一个变量在使用之前没有被初始化,它的值将是未定义的。
这可能会导致难以预测的结果。
-忘记声明变量:在C语言中,变量必须在使用之前声明。
如果在函数内部使用了一个变量,但没有声明,就会导致编译错误。
-错误的逻辑比较:逻辑比较运算符是`&&`(和)、`||`(或)和`!`(非)。
如果使用错误的比较运算符,如`<`或`>`,就会导致错误的结果。
-忘记释放内存:通过`malloc`、`calloc`或`realloc`等函数分配的内存必须在使用完毕后通过`free`函数释放,否则可能会导致内存泄漏。
这些是C语言中常见的一些易错题类型,希望对你有所帮助。
C语言常见改错

1:常见格式 int→%d,long→%ld,float→%f,double→%lf 2:所需输出结果与已定义类型不同,可以利用强制转 换符。如定义 sum 为 int,但要输出实数 float,可以(float) sum 。见例一 四、固定语句格式错误 1:for( ; ; ); 2:while( ); 3:switch(){ };(for,while,switch 后面无分号) 见例五 4:do{ }while( );(do{ }while 结构后面有分号)
if(isSuShu(i)==0) /*(4)条件表达错,应改为(isSuShu(i)==1)或(isSuShu(i))*/ {
count=0; /*(5)本句应改为:count++;或 count+=1;*/
printf("%d\t",i);
if(count%K==0)
printf("\n");
case 6: b[2]++; break;
case 7: b[3]++; break;
case 8: b[4]++; break;
case 9: b[5]++;
/*(4)行末应加:break; */
default: b[5]++;
}
}
}
printf("The result is: \n");
for (i=1; i<6; i++) printf("%d0 number is: \n ", i+4,b[i]);
c语言易错知识点总结[工作范文]
![c语言易错知识点总结[工作范文]](https://img.taocdn.com/s3/m/98c625e6336c1eb91b375d5f.png)
c语言易错知识点总结篇一:c语言易错知识C语言教学中学生容易出错的知识点解析0引言C语言是一种很灵活的语言,在程序调试过程中常常会遇到一些难解决的问题,一般语法错误计算机能检测出来,而逻辑错误计算机则检测不出来。
这给教师的教学带来比较多的麻烦,也大大削减了学生学习的自信心。
本文结合笔者多年教学经验,把学生容易出错的知识点进行总结,以供C 语言教学参考。
1教学实例以下实例均在Turbo C环境下调试运行。
递增(减)运算符的表达式例如:i=3,a=(++i)+(++i)+(++i);大多数学生都知道i++和++i的最终结果都是使i的值加1,但i++和++i作为表达式的用途是不一样的,++i是“先加后用”,i++是“先用后加”。
上面的题目是“++”运算符最典型的应用,其中a的结果是18,而不是有些书上分析的4+5+6=15。
因为在这里要考虑运算符的优先级,很显然“ ++” 的优先级高于“ +”。
若是“ i=3,a=(++i)+(++i)+(++i)”则a结果是9,而两者最终的i值都将自增3即为6。
“一” 运算符和“ ++”运算符使用方式一样,不再赘述。
输入语句中缺取址符&例如:scanf( “ %d ,x);这一语句错在x前缺取址符,导致输入的数值没有赋给变量x,所以结果出错。
再如:char a[10];scanf( “%S,&a); 有学生想,输入语句的输入变量前一定要加取址符,所以这个语句里加了取址符,肯定不会出错。
而结果却又恰恰错了,这是为什么呢?因为a在这里既表示数组名字,又表示数组首地址,它本身已经代表了地址,所以就不用再加取址符了。
解决此类问题的办法就是在使用输入语句的时候要仔细观察,什么时候该加取地址符号,什么时候不该加,一定要搞清楚。
逻辑运算符&&和位运算符&相混淆例如:if(x&y)xx人员此判别条件的本意是将x和y的“与” (&&)运算结果作为条件。
C语言常见错误分析

C语言常见错误分析C语言是一门非常强大和灵活的编程语言。
然而,由于人为的错误或者语法错误,程序在编译或者运行的过程中常常会出现错误。
下面是常见的C语言错误以及它们的分析。
1.语法错误:语法错误是最常见的错误类型,也是最容易修复的错误。
它们包括缺少分号、括号不匹配、使用未定义的变量等。
这些错误通常会导致编译器的语法错误提示。
2.类型错误:类型错误是由于变量类型不匹配或者操作符错误而引起的。
例如,使用一个整数变量来存储浮点数值,或者将一个指针赋值给一个非指针类型的变量。
这些错误可能导致错误的计算结果或者报错。
3.逻辑错误:逻辑错误是程序的逻辑结构有误,导致程序无法正确执行。
这种错误通常不能通过编译器检测出来,而需要开发人员通过调试来找到并修复。
例如,程序的循环条件错误导致无限循环,或者条件判断错误导致程序走入错误的分支。
4.数组越界错误:数组越界错误是指访问数组时超出了数组的有效范围。
这种错误通常导致程序崩溃或者产生不可预测的结果。
例如,访问数组元素时使用了一个超过数组长度的下标。
为了避免这种错误,开发人员应该始终确保数组下标在有效范围内。
5.空指针错误:空指针错误是指使用了一个未初始化或者已经释放的指针。
这种错误通常导致程序崩溃或者产生不可预测的结果。
为了避免空指针错误,开发人员应该在使用指针之前初始化,并且在使用完毕后及时释放。
6.内存泄漏:内存泄漏是指程序在分配内存之后没有释放,导致系统中的可用内存越来越少。
如果内存泄漏严重,最终可能会导致程序崩溃或者系统变慢。
为了避免内存泄漏,开发人员应该始终确保在不再需要内存时及时释放。
7.死循环:死循环是指程序中的循环条件永远为真,导致程序陷入无限循环。
这种情况可能导致程序无法继续执行后续代码或者崩溃。
为了避免死循环,开发人员应该在循环中始终更新循环条件。
8.未处理的异常:异常是程序运行过程中可能发生的错误,它可能导致程序崩溃或者产生不可预测的结果。
为了避免未处理的异常,开发人员应该使用异常处理机制来捕获和处理异常。
C语言易错

C语言【考点6】标识符合法的用户标识符考查:合法的要求是由字母,数字,下划线组成。
有其它元素就错了。
并且第一个必须为字母或则是下划线。
第一个为数字就错了。
【考点7】实型数据实型数据的合法形式:小数形式和指数形式。
掌握判定指数形式合法性。
2.333e-1 就是合法的,且数据是2.333×10-1。
考试口诀:e 前e 后必有数,e 后必为整数。
【考点9】整型数据整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节:考试时候一般会说,在16 位编译系统,或者是32 位系统。
碰到这种情况,不要去管,一样做题。
掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节就可以了。
【考点10】转义字符转义字符的考查:在程序中int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x 必须存在。
在程序中int a = 06d, 是一个八进制的形式。
在转义字符中,’\x6d’才是合法的,0 不能写,并且x 是小写。
‘\141’是合法的,0 是不能写的。
‘\108’是非法的,因为不可以出现8。
【考点11】算术运算算术运算符一共有+、—、*、/、%这五个。
%符号两边要求是整数。
不是整数就错了。
三种取整丢小数的情况:不是四舍五入是舍掉小数部分。
1、int a =1.6;2、(int)a;3、1/2;3/2;【考点12】强制类型转换将一个运算对象转换成指定类型,格式为(类型名)表达式一定是(int)a 不是int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b 的区别。
前是把a+b 转型,后是把a 转型再加b。
【考点14】逗号运算逗号表达式:优先级别最低;表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
【考点5】switch语句a) 一定要注意有break 和没有break 的差别,书上(53,54 页)的两个例子,没有break 时候,只要有一个case 匹配了,剩下的都要执行,有break 则是直接跳出了switch 语句。
C语言中最容易犯的几个错误的参考

C语言中最容易犯的几个错误的参考C语言中最容易犯的几个错误的参考1.书写标识符时,忽略了大小写字母的区别。
main(){int a=5;printf(%d,A);}编译程序把a和A认为是两个不同的变量名,而显示出错信息。
C 认为大写字母和小写字母是两个不同的字符。
习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main(){float a,b;printf(%d,a%b);}%是求余运算,得到a/b的整余数。
整型变量a 和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;c=a;在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。
C 规定以“\\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:'a'和'\\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。
如在BASIC程序中可以写if (a=3) then …但C语言中,“=”是赋值运算符,“==”是关系运算符。
如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。
由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。
改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;t=z/100;printf(%f,t);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
c语言易错知识点总结[工作范文]
![c语言易错知识点总结[工作范文]](https://img.taocdn.com/s3/m/98c625e6336c1eb91b375d5f.png)
c语言易错知识点总结篇一:c语言易错知识C语言教学中学生容易出错的知识点解析0引言C语言是一种很灵活的语言,在程序调试过程中常常会遇到一些难解决的问题,一般语法错误计算机能检测出来,而逻辑错误计算机则检测不出来。
这给教师的教学带来比较多的麻烦,也大大削减了学生学习的自信心。
本文结合笔者多年教学经验,把学生容易出错的知识点进行总结,以供C 语言教学参考。
1教学实例以下实例均在Turbo C环境下调试运行。
递增(减)运算符的表达式例如:i=3,a=(++i)+(++i)+(++i);大多数学生都知道i++和++i的最终结果都是使i的值加1,但i++和++i作为表达式的用途是不一样的,++i是“先加后用”,i++是“先用后加”。
上面的题目是“++”运算符最典型的应用,其中a的结果是18,而不是有些书上分析的4+5+6=15。
因为在这里要考虑运算符的优先级,很显然“ ++” 的优先级高于“ +”。
若是“ i=3,a=(++i)+(++i)+(++i)”则a结果是9,而两者最终的i值都将自增3即为6。
“一” 运算符和“ ++”运算符使用方式一样,不再赘述。
输入语句中缺取址符&例如:scanf( “ %d ,x);这一语句错在x前缺取址符,导致输入的数值没有赋给变量x,所以结果出错。
再如:char a[10];scanf( “%S,&a); 有学生想,输入语句的输入变量前一定要加取址符,所以这个语句里加了取址符,肯定不会出错。
而结果却又恰恰错了,这是为什么呢?因为a在这里既表示数组名字,又表示数组首地址,它本身已经代表了地址,所以就不用再加取址符了。
解决此类问题的办法就是在使用输入语句的时候要仔细观察,什么时候该加取地址符号,什么时候不该加,一定要搞清楚。
逻辑运算符&&和位运算符&相混淆例如:if(x&y)xx人员此判别条件的本意是将x和y的“与” (&&)运算结果作为条件。
单片机C语言易错知识点

单片机C语言易错知识点
1. !和~ 不一样
! 是逻辑非符号,~ 是位取反符号。
对IO口某个管脚赋值时不要错用!,如
2.<<和>>的优先级低于+、-
比如要实现c=x*2+1,没有加括号会出错
3.移位要防止溢出
其实用移位代替乘除法是个不错的方法,笔者很喜欢拿到一段代码后用移位代替乘除法来进行优化。
不过有时候却会出现问题,比如溢出问题。
当很明显可能溢出的话我们是会注意的,比如
但是有时候这个问题是不明显的,比如当移位出现在数组索引或函数参数时,有段用液晶显示字符的代码如下
我们可以用左移运算来代替乘法进行优化,如
这本是一个好方法,但是事实上上面的代码是错的。
当执行c<<4时,因为没有明显的赋值过程,我们可能认为没问题,而事实上c的高位已经丢失了,所以得到错误的结果。
一个可行的做法是先进行强制转换,如
4.无符号数和有符号数混合运算都会被强制转换为无符号数运算
当一个有符号数和一个无符号数进行算术运算时,系统会自动将有符号数强制转换为无符号数再进行运算(即使你使用有符号数强制类型转换),如下面两种写法的运输结果是一样的
5.局部变量要初始化
局部变量没有初始化的话,因为单片机每次为他分配的是同一个内存区域,当你在函数中是这么使用局部变量时,就可能出问题:
如果第一次调用fun时,a传递的值为0,那么flag = 0x01;执行
if(flag&0x01)后面的代码。
以后再调用fun时,即使a不为0,但flag依然使用之前的内存区域,所以其值一直为0x01,一直执行的是if后面的代码,而不是else后面的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言易错点归纳:
•
c环境下变量使用前没有集中定义!
•
不要在双引号之外使用汉字符号!
•
变量使用前没有初始化,导致结果为不定值!
•
字符型常量要用单引号括起来!
•
字符串常量要用双引号括起来!
•
两整数相除结果取整影响程序结果!
•
%模运算两边只能是整形或字符型!
•
将浮点数进行精确比较!如if(f==0)导致程序意外!
•
scanf(“%f,”var);变量名前忘加&!
•
scanf(“%6.2f,”&var);指定浮点数的输入精度!
•
scanf(“%...”,变量列表);prinf(“%...”,变量列表);语句中输入输
出类型与列表中变量类型不匹配!
•
‘=’与‘==’使用意义混淆!
•
使用错误的逻辑表达式!如企图用if(a>b>c)表达if(a>b&&b>c)
•
对逻辑表达式求值时没有注意“最少计算步骤原则”!
•
没有注意运算符的优先次序!如if(x=z==y)理解为if((x=z)==y)
•
没有注意函数实参为多个表达式时,求值顺序是从右至左!如
printf(“…”,i,i++);
•
多条语句作为结构性语句的语句组时,没有用花括号{}括起来!导致程序
结构混乱!
•
左右大括号{}或if…else不匹配!
•
使用库函数时没有包含相应的头文件!如使用sin,cos,sqrt,fabs,pow
等函数时,不要忘写#include
数时,不要忘写#include
•
do{…}while(…)语句后面忘加分号!
•
while(…);for();后面加分号导致循环体为空语句!
•
for(初始表达式,条件表达式,循环变量表达式)中用逗号作为分隔符!
•
数值型数据相互赋值时应注意数据丢失及符号改变!
•
switch(表达式)中表达式只能是整形或字符型表达式!不能是float或
double型!
•
switch(…){case:常量或常量表达式:…}语句关键字case之后只能
是常量或常量表达式!
•
switch_case:_break_default:结构语句:首先是找入口、没有case…匹
配值就以default作为入口,从入口处往下执行各语句(包括下面其他
case:之后语句),遇到break可跳出该层switch结构!
•
for(初始;条件表达式;循环变量表达){…if(…)continue}如果
continue被执行将会跳到循环变量表达式而不是跳到条件表达式!while
和do_whlie跳到条件表达式!
•
printf(“%%,\\”);才可打印出%和\
•
%u,%o,%x无符号位;%d考虑符号位!
•
八进制、十六进制常量分别以0、0x开头!
•
?:表达式中的操作对象可以是不同的类型,且其值取较高的类型!
•
if_else_if…和switch_case_break常用来实现多分支选其一结构!
•
熟练使用交换语句!