C语言复习易错点总结.doc

C语言复习易错点总结.doc

ID:60719272

大小:33.00 KB

页数:6页

时间:2020-12-10

C语言复习易错点总结.doc_第1页
C语言复习易错点总结.doc_第2页
C语言复习易错点总结.doc_第3页
C语言复习易错点总结.doc_第4页
C语言复习易错点总结.doc_第5页
资源描述:

《C语言复习易错点总结.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1.1递增(减)运算符的表达式例如: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。“—

2、”运算符和“++”运算符使用方式一样,不再赘述。1.2输入语句中缺取址符&例如:scanf(“%d”,x);这一语句错在x前缺取址符,导致输入的数值没有赋给变量x,所以结果出错。再如:chara[10];scanf(“%s”,&a);有学生想,输入语句的输入变量前一定要加取址符,所以这个语句里加了取址符,肯定不会出错。而结果却又恰恰错了,这是为什么呢?因为a在这里既表示数组名字,又表示数组首地址,它本身已经代表了地址,所以就不用再加取址符了。解决此类问题的办法就是在使用输入语句的时候要仔细观察,

3、什么时候该加取地址符号,什么时候不该加,一定要搞清楚。1.3逻辑运算符&&和位运算符&相混淆例如:if(x&y)编辑人员此判别条件的本意是将x和y的“与”(&&)运算结果作为条件。程序运行时,并不出错,但是结果却不对。原因是误用按位“与”运算符‘&’替代了“与”运算符‘&&’,这种错误初学者很容易犯,但是又十分隐秘,在某些特殊情况下甚至可以得出正确的结果,所以更具有迷惑性。位运算符是C语言独特的一种运算符,其中“&”表示对两个操作数按二进制位进行“与”运算,规则是:0&0=0,0&1=0,1&0

4、=0,1&1=1。如6&5=4,其中6变为,5变为,按位“与”运算的结果为100即4。1.4误把赋值=当恒等==例如:if(a==0)误写成if(a=0)。上述写法将导致条件始终为假,进入不了if语句条件为真的分支。编程的时候要仔细,要遵守c语言的语法规则。1.5条件语句(if)和循环条件语句后误加分号例如:if(x>y);x=y;这样相当于满足条件执行空语句。下面的x=y语句将被无条件执行。一般情况下if()条件后不需要加分号。例如:for(i=1;i<10;i++);{````}上述for语

5、句相当于满足条件执行空语句,真正的循环语句则没有被执行。一般情况下for()循环条件后不需要加分号。这两个都是初学者容易犯的错误,又很难察觉出来。1.6循环语句中改变了循环变量的值例如:求水仙花数main(){inti,a,b,c;for(i=100;i<1000;i++){a=i%10;i=i/10;b=i%10;i=i/10;c=i%10;/*i的值被改变*/if(a*a*a+b*b*b+c*c*c==i)printf(“%d”,i);}}此程序看起来思路非常正确,可是高度的时候就是死循环,

6、运行不出结果。为什么呢?仔细观察可知,在循环语句里,循环变量i每次进入循环后都被改变了,导致了i永远都满足循环条件,所以就死循环了。为了避免此类错误,在编程时应尽量避免在循环语句中改变循环变量。1.7作为输出结果的变量没有赋初值例如:求数组中的最大值能最大值的下标main(){inta[10]={8,2,3,4,5,6,3,7},max=a[10],m,i;for(i=0;i<10;i++)if(a[i]>max){max=a[i];m=i;}printf(“%d%d”,max,m);}程序看似

7、一点毛病都没有,上机调试也都通过,但是结果却不对。原因就在下标变量m没有赋初值,系统随机赋了初值,导致结果错误。给m赋初值0就可以了。1.8初值赋了,但是赋的位置不对例如:求100以内的完数s=0;for(i=1;i<=100;i++){for(j=1;j<=i/2;j++)if(i%j==0)s+=j;if(s==i)printf(“%d”,i);}是不是这样每一次循环s都变了?程序运行的结果预期是6和28,可是实际上却没有任何结果。原因就是s=0这个语句放错了位置,应该放在外层循环里面,也就

8、是每判断一个数都应该从0开始累加。再如:求1!+2!+……+100!main(){inti,j,s=0,t=1;for(i=1;i<=100;i++){for(j=1;j<=i;j++)t=t*j;s+=t;}printf(“%d”,s);}t=1应该放在第三行此程序看似正确,可是运行结果却不对,原因也是在t=1这个赋值语句,它的位置应该在外层循环的里面,而不是在外面。这种错误,对于初学者来讲,很容易犯,却又发现不了,在程序调试的时候会浪费很多时间,又会影响编程的自信心。1.9数组和整型或者实型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。