c语言易错知识点总结[工作范文]

合集下载

C语言易错点考点(完整版)

C语言易错点考点(完整版)

总体上必须清楚的:1)程序结构是三种:顺序结构,循环结构(三个循环结构),选择结构(if和switch)2)用C语言编写的程序称为C语言源程序,源程序文件的后缀名为“.c”;源程序经编译后生成后缀名为“.obj”的目标文件;再把目标文件与各种库函数连接起来,生成“.exe”的可执行文件。

3)main函数,又称主函数,每个C程序有且只有一个main函数;无论main函数在整个程序中的位置如何,程序总是从main函数开始执行、也从main函数结束。

读程序时应从main 函数开始,然后从上往下读(碰到循环做循环,碰到选择做选择)。

4)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.5)bit是位是指为0或者1。

byte是指字节,一个字节=八个位.6)一定要记住二进制如何划成十进制。

概念常考到的:1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。

C语言编译的程序称为源程序,它以ASCⅡ数值存放在文本文件中。

2、每个C语言程序中main函数是有且只有一个。

3、在函数定义中不可以再定义函数、即不允许函数嵌套定义。

4、算法可以没有输入,必须要有输出。

5、break可用于循环结构和switch语句。

6、逗号运算符的级别最低。

7、任意合法的表达式一定有一个数值与它对应。

第一章1)C程序中对字母的大小写是敏感的,如A与a是不同的标识符。

注释:是对程序的说明,目的是提高程序的可读性,可出现在程序中任意合适的地方,注释从“/*”开始到最近一个“*/”结束,其间任何内容都不会被计算机执行,不允许嵌套注释。

3)合法的用户标识符考查:合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了。

关键字不可以作为用户标识符号。

main define scanf printf都不是关键字。

迷惑你的地方If 是可以做为用户标识符。

因为If中的第一个字母大写了,所以不是关键字。

c语言的知识点,难点

c语言的知识点,难点

C语言的知识点和难点总结C语言是一种基础编程语言,广泛应用于系统软件、嵌入式系统、游戏开发等领域。

在学习C语言的过程中,我们会遇到一些知识点和难点。

下面,我们将对C语言的知识点和难点进行总结。

一、知识点:1.数据类型:C语言支持多种数据类型,包括整型、浮点型、字符型等。

这些数据类型的使用是C语言编程的基础,需要熟练掌握。

2.运算符:C语言提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等。

理解并正确使用这些运算符是编写高效代码的关键。

3.控制结构:C语言中的控制结构包括条件语句(如if-else)、循环语句(如for、while)等。

掌握这些控制结构是实现程序逻辑的关键。

4.函数:函数是C语言的基本模块,用于实现特定的功能。

了解如何定义函数、调用函数以及传递参数是十分重要的。

5.指针:指针是C语言的特色之一,它允许我们直接访问内存地址。

理解指针的概念和用法对于深入学习C语言至关重要。

6.结构体与联合:结构体和联合是C语言中处理复杂数据结构的重要工具。

通过它们,我们可以组合不同类型的数据并进行操作。

二、难点:1.指针操作:由于指针直接涉及内存地址,因此对初学者来说可能较难理解。

掌握指针的基本概念、声明、初始化和使用是C语言学习的难点之一。

2.内存管理:在C语言中,程序员需要直接管理内存。

如何正确地分配和释放内存是避免内存泄漏和段错误的关键,也是学习C语言的难点。

3.深度递归:深度递归可能导致栈溢出或性能问题,因此在实际应用中需要谨慎处理。

理解递归原理并在合适的场景下应用是C语言学习的一个难点。

4.多线程编程:多线程编程涉及线程的创建、同步和通信等复杂概念,对于初学者来说可能较难掌握。

理解多线程的原理和应用是多线程编程的难点之一。

C语言程序设计中的常见错误和解决

C语言程序设计中的常见错误和解决

C语言程序设计中的常见错误和解决在C语言程序设计中,很多初学者经常会遇到一些常见的错误。

这些错误可能是语法错误、逻辑错误或者是其他一些常见问题导致的。

本文将介绍一些经常出现的C语言程序设计错误,并提供相应的解决方法,帮助读者更好地理解和掌握C语言编程。

一、语法错误1. 括号未匹配括号未匹配是C语言中常见的语法错误之一。

在编写代码时,经常会使用到括号,如if语句、for循环等。

如果不小心忘记关闭某个括号,就会导致括号未匹配的错误。

解决方法:仔细检查代码中的括号是否匹配,并确保每个左括号都有相应的右括号。

2. 分号丢失分号丢失是C语言中另一个常见的语法错误。

在C语言中,分号用于分隔语句,如果遗漏了分号,编译器就无法识别出语句的结束。

解决方法:检查每一行语句的末尾,确保每个语句都以分号结尾。

3. 变量未声明在使用变量之前,必须先声明该变量。

如果没有先声明变量就直接使用,编译器将无法识别该变量,从而报错。

解决方法:在使用变量之前,先进行变量声明。

二、逻辑错误1. 循环控制条件错误在编写循环语句时,控制条件的错误是常见的逻辑错误。

如果循环的控制条件错误,循环可能无法正常结束或者根本无法执行。

解决方法:仔细检查循环的控制条件,确保条件符合预期,并在循环体内更新循环变量。

2. 数组越界访问在C语言中,数组的索引从0开始,通过索引访问数组元素时,如果索引超出了数组的范围,就会导致数组越界访问的错误。

解决方法:确保数组索引在正确的范围内,避免越界访问。

如果需要遍历数组,可以使用循环来控制数组的访问范围。

三、其他常见问题及解决方法1. 变量类型不匹配在赋值操作或者表达式计算时,如果不同类型的变量之间进行操作,则会导致变量类型不匹配的错误。

解决方法:确保操作的变量类型相同或者进行强制类型转换,以保证变量类型的匹配。

2. 内存泄漏在C语言中,手动分配内存的操作是常见的。

如果分配了内存空间,但在使用完毕后未及时释放,就会导致内存泄漏。

大一C语言易错点总结和模拟试题带答案

大一C语言易错点总结和模拟试题带答案

易错点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);}对于复合语句来说,最后一个语句中最后的分号不能忽略不写******************************** ******************************** ************************6.多加分号.对于一个复合语句,如:{z=x+y; t=z/100;printf("%f",t);};复合语句的花括号后不应再加分号,否则将会画蛇添足.又如:if (a%3==0);I++;本是如果3整除a,则I加1.但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1.再如:for (I=0;I<5;I++);{scanf("%d",&x);printf("%d",x);}本意是先后输入5个数,每输入一个数后再将它输出.由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它.****************************************************************************************7.输入变量时忘记加地址运算符"&".int a,b;scanf("%d%d",a,b);这是不合法的.Scanf函数的作用是:按照a,b在内存的地址将a,b的值存进去."&a"指a在内存中的地址.******************************** ******************************** ************************8.输入数据的方式与要求不符.①scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab.②scanf("%d,%d",&a,&b);C规定:如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符.下面输入是合法的:3,4此时不用逗号而用空格或其它字符是不对的.3 43:4又如:scanf("a=%d,b=%d",&a,&b); 输入应如以下形式:a=3,b=4****************************************************************************************9.输入字符的格式与要求不一致.在用"%c"格式输入字符时,"空格字符"和"转义字符"都作为有效字符输入.scanf("%c%c%c",&c1,&c2,&c3);如输入a b c字符"a"送给c1,字符" "送给c2,字符"b"送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔.****************************************************************************************10.输入输出的数据类型与所用格式说明符不一致.例如,a已定义为整型,b定义为实型a=3;b=4.5;printf("%f%d\n",a,b);编译时不给出出错信息,但运行结果将与原意不符.这种错误尤其需要注意.****************************************************************************************11.输入数据时,企图规定精度.scanf("%7.2f",&a);这样做是不合法的,输入数据时不能规定精度.****************************************************************************************12.switch语句中漏写break语句.例如:根据考试成绩的等级打印出百分制数段.switch(grade){ case 'A':printf("85~100\n"); case 'B':printf("70~84\n");case 'C':printf("60~69\n");case 'D':printf("<60\n"); default:printf("error\n");由于漏写了break语句,case只起标号的作用,而不起判断作用.因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二,三,四,五个printf函数语句.正确写法应在每个分支后再加上"break;".例如case 'C':printf("60~69\n");break; ****************************************************************************************13.忽视了while和do-while语句在细节上的区别.(1)main(){int a=0,I;scanf("%d",&I); while(I<=10){a=a+I;I++;}printf("%d",a);}(2)main(){int a=0,I;scanf("%d",&I);do{a=a+I;I++;}while(I<=10);printf("%d",a);}可以看到,当输入I的值小于或等于10时,二者得到的结果相同.而当I>10时,二者结果就不同了.因为while循环是先判断后执行,而do-while循环是先执行后判断.对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体.******************************** ******************************************************** 14.定义数组时误用变量. int n; scanf("%d",&n); int a[n]; 数组名后用方括号括起来的是常量表达式,可以包括常量和符号常 量.即C 不允许对数组的大小作动态定义. **************************************************************************************** 15.在定义数组时,将定义的"元素个数"误认为是可使的最大下 标值. main() {static int a[10]={1,2,3,4,5,6,7,8,9,10}; printf("%d",a[10]); } C 语言规定:定义时用a[10],表示a 数组有10个元素.其下标值由0 开始,所以数组元素a[10]是不存在的. **************************************************************************************** 16.初始化数组时,未使用静态存储. int a[3]={0,1,2}; 这样初始化数组是不对的.C 语言规定只有静态存储(static)数组 和外部存储 (exterm)数组才能初始化.应改为: static int a[3]={0,1,2}; **************************************************************************************** 17.在不应加地址运算符&的位置加了地址运算符. scanf("%s",&str); C 语言编译系统对数组名的处理是:数组名代表该数组的起始地址 ,且scanf 函数中的输入项是字符数组名,不必要再加地址符&.应 改为:scanf("%s",str); **************************************************************************************** 18.同时定义了形参和函数中的局部变量. int max(x,y) int x,y,z; {z=x>y?x:y; return(z); } 形参应该在函数体外定义,而局部变量应该在函数体内定义.应改 为: int max(x,y)int x,y;{int z;z=x>y?x:y;return(z);}试题一一、单项选择题(共30分,每题1分)1. 下列不正确的转义字符是A.\\B.\‘ C.074 D.\02. 不是C语言提供的合法关键字是A.switchB.cherC.caseD.default3.正确的标识符是()A.?a B.a=2 C.a.3 D.a_34.下列字符中属于键盘符号的是A.\ B.\n C.\t D.\b.下列数据中属于“字符串常量”的A.ABC B.“ABC” C.‘ABC’ D.‘A’6.char型常量在内存中存放的是A.ASCII码B.BCD码C.内码值D.十进制代码值7.设a为5,执行下列语句后,b 的值不为2的是()A.b=a/2B.b=6-(——a) C.b=a%2 D.b=a>3?2:28.在以下一组运算符中,优先级最高的运算符是()A.<= B.= C.% D.& &9.设整型变量i的值为3,则计算表达式i——i后表达式的值是()A.0B.1C. 2D.表达式出错10.设整型变量a,b,c均为2,表达式a+++b+++c++的结果是()A.6B.9C.8D.表达式出错11.若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是()A.1B.2C.2.0D.2.512.设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d的结果是()A.4B.3C.2D.113.设a为整型变量,不能正确表达数学关系:10<a<15的C语言表达式是()A.10<a<15B.a==11 || a= =12 || a= =13 || a= =14C.a>10&&a<15D.!(a<=10)&&!(a>=15)14.若有以下定义:char a、 intb 、 floatc 、 double d,则表达式a*b+d-c值的类型为()A.floatB.intC.charD.double15.表达式“10!=9”的值是()A.trueB.非零值 C.0 D.116.循环语句 for (x=0,y=0;(y!=123)|| (x<4);x++);的循环执行()A.无限次B.不确定次 C.4次 D.3次17.在C语言中,下列说法中正确的是()A. 不能使用“do while”的循环B.“do while”的循环必须使用break语句退出循环C.“do while”的循环中,当条件为非0时将结束循环D.“do while”的循环中,当条件为0时将结束循环。

C语言编程中常见的五种错误及对应解决方案

C语言编程中常见的五种错误及对应解决方案

C语⾔编程中常见的五种错误及对应解决⽅案⽬录1. 未初始化的变量2. 数组越界3. 字符串溢出4. 重复释放内存5. 使⽤⽆效的⽂件指针前⾔:C 语⾔有时名声不太好,因为它不像近期的编程语⾔(⽐如 Rust)那样具有内存安全性。

但是通过额外的代码,⼀些最常见和严重的 C 语⾔错误是可以避免的。

即使是最好的程序员也⽆法完全避免错误。

这些错误可能会引⼊安全漏洞、导致程序崩溃或产⽣意外操作,具体影响要取决于程序的运⾏逻辑。

下⽂讲解了可能影响应⽤程序的五个错误以及避免它们的⽅法:1. 未初始化的变量程序启动时,系统会为其分配⼀块内存以供存储数据。

这意味着程序启动时,变量将获得内存中的⼀个随机值。

有些编程环境会在程序启动时特意将内存“清零”,因此每个变量都得以有初始的零值。

程序中的变量都以零值作为初始值,听上去是很不错的。

但是在 C 编程规范中,系统并不会初始化变量。

看⼀下这个使⽤了若⼲变量和两个数组的⽰例程序:#include <stdio.h>#include <stdlib.h>intmain(){int i, j, k;int numbers[5];int *array;puts("These variables are not initialized:");printf(" i = %d\n", i);printf(" j = %d\n", j);printf(" k = %d\n", k);puts("This array is not initialized:");for (i = 0; i < 5; i++) {printf(" numbers[%d] = %d\n", i, numbers[i]);}puts("malloc an array ...");array = malloc(sizeof(int) * 5);if (array) {puts("This malloc'ed array is not initialized:");for (i = 0; i < 5; i++) {printf(" array[%d] = %d\n", i, array[i]);}free(array);}/* done */puts("Ok");return 0;}这个程序不会初始化变量,所以变量以系统内存中的随机值作为初始值。

c语言重点知识点总结

c语言重点知识点总结

c语言重点知识点总结c语言重点知识点总结上学的时候,说起知识点,应该没有人不熟悉吧?知识点是指某个模块知识的重点、核心内容、关键部分。

还在苦恼没有知识点总结吗?下面是小编帮大家整理的c语言重点知识点总结,欢迎大家分享。

c语言重点知识点总结篇1◆知识点1:交换两个变量值的方法1)采用第三方变量(最容易想到的方法)2)采用加减法进行值得交换(面试时常用**)代码如下:b = a - b;a = a - b;b = a + b;3)采用按位异或的位方式代码如下:a = a^b;b = a^b;a = a^b;◆知识点2:取语言重点知识点总结余运算%的结果与被除的符号相同,结果为两个正数取余后前面加符号◆知识点3:sizeof的使用sizeof是一种运算符不要想当然理解为函数sizeof使用时可以不加()sizeof可以加变量、常量、数据类型跟数据类型是必须加()◆知识点4:static和 extern区别是能否进行跨文件访问①函数②变量1、对函数的作用:外部函数:定义的函数能被本文件和其他文件访问内部函数:定义的函数只能被本文件访问默认情况下,所有函数都是外部函数(相当于带关键字extern),所以可以省略extern作用:完整的定义和引用一个外部函数都加extern引用时也是默认是外部函数所以也省略externstatic作用:定义一个内部函数使用:static返回类型函数名(参数列表)不能被其他文件调用一个项目中,本文件的外部函数名不能和其他文件的外部函数同名(error)本文件中的内部函数(static)可以和其他文件的函数名同名的2、对变量的作用:全局变量分为两种:外部变量:定义的变量可以被其他文件访问①默认情况下所有的全局变量都是外部变量②不同文件中的同名外部变量都代表同一个③定义一个外部变量不加extern,声明才加extern同样的声明是没有错误的内部变量:定义的变量不能被其他文件访问不同文件的同名内部变量互不影响◆知识点5:数组的几种初始化方式如下:int a[3] = {10, 9, 6};int a[3] = {10,9};int a[] = {11, 7, 6};int a[4] = {[1]=11,[0] = 7};(知道有此种初始化方式即可)◆知识点6:数组的内存分析和注意点存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)【注:对于以后学习重要】数组名的作用,查看元素地址注意数组不要越界◆知识点7:字符串知识点"123”其实是由’1’、’2’、’3’、’’组成字符串的输出”%s”,’’是不会输出的◆知识点8 :字符串处理函数:strlen()计算的是字符数,不是字数计算的字符不包括’’,一个汉字相当于3个字符例子:"哈haha" 字符数为7从某个地址开始的数字符个数,知道遇到’’为止指针部分在C语言中占据重要地位,所以重点学习与整理了指针的知识:◆知识点9:指针定义的格式变量类型 *变量名如:Int *p◆知识点10:指针作用能够根据一个地址值,访问对应的.存储空间例:Int *p;Int a = 90;P = &a;*p = 10;//把10赋值给p所指的存储空间◆知识点11:指针使用注意Int *p只能指向int类型的数据指针变量只能存储地址指针变量未经初始化不要拿来间接访问其他存储空间◆知识点12:指针与数组遍历数组int ages[5] = {10, 4, 9, 44, 99};for(int i = 0; i<5; i++){printf("%d ", ages[i]);}使用指针遍历数组:int *p;// 指针变量P指向了数组的首地址p = &ages[0];// 使用指针遍历数组for(int i = 0; i<5; I++){printf("ages[%d] = %d ", i, *(p + i));}注:指针+ 1取决于指针的类型注:数组的访问方式数组名[下标]指针变量名[下标]*(p + i)◆知识点12:指针与字符串定义字符串的两种方式:1、利用数组Char name[] = “Andyzhao”特点:字符串里的字符可以修改适用场合:字符串内容需要经常修改2、利用指针Char *name = “itcast”特点:字符串是一个常量,字符串里面的字符不能修改使用场合:字符串的内容不需要修改,而这个字符串经常使用◆知识点13:预处理指令(三种):宏定义条件编译文件包含1、宏定义的配对使用和带参数的宏:#define#undef带参数的宏:#define sum(v1,v2) ((v1) + (v2))//括号是必须的例如:#define pingfang(a) a*a#define pingfang(a) (a*a)调用时pingfang(10)/pingfang(2)//不正确pingfang(5+5)//不正确带参数的宏效率比函数高2、条件编译(一般是判断宏的值)#if 条件#elif 条件#else#endif(非常重要)不然后面的代码全部无效3、文件包含:<>表示系统自带的文件,""表示自定义文件不允许循环包含,比如ah包含bh,bh又包含ah◆知识点14:typedef 只是给类型起了个别名并不是定义新类型struct Student{int age;char *name;};typedef struct Student Student;等价于typedef struct Student{int age;char *name;}Student;也等价于typedef struct {int age;char *name;}Student;类似的给枚举类型起名typedef enum Sex{Man,Women}Sex;下面这种情况的写法比较特殊//下面是函数指针类型的自定义数据类型,返回值类型和参数类型要匹配#includetypedef int (*TypeFuncPointer)(int, int);int add(int a, intb){return a + b;}int minus(int a, intb){return a - b;}int main(){TypeFuncPointer p = add;//使用自定义类型TypeFuncPointer p2 = minus;//使用自定义类型printf("add = %d ",p(1, 2));printf("minus = %d ",p2(1, 2)); return 0;}下面是定义结构体的指针类型typedef struct Student{int age;char *name;}*PtrStu;//使用方式Student stu ={18, "zhangsan"}; PtrStu p = &stu;宏定义也是可以为类型起名的#define Integer int相当于typedef int Integer注意和typedef的区别例如:typedef char * String#define String2char *。

C语言编译、运行时常见错误

C语言编译、运行时常见错误

Turbo C编译、连接和运行时的常见错误&C语言编程风格一、编译时的常见错误1. 数据类型错误。

此类错误是初学者编程时的常见现象, 下面是一些要引起注意的错误:(1) 所有变量和常量必须要加以说明。

(2) 变量只能赋给相同类型的数据。

(3) 对scanf()语句, 用户可能输入错误类型的数据项, 这将导致运行时出错, 并报出错信息。

为避免这样的错误出现, 你就提示用户输入正确类型的数据。

(4) 在执行算术运算时要注意:a. 根据语法规则书写双精度数字。

要写0.5, 而不是写.5; 要写1.0,而不是1。

尽管C语言会自动地把整型转换成双精度型, 但书写双精度型是个好习惯。

让C语言为你做强行转换这是一种效率不高的程序设计风格。

这有可能导致转换产生错误。

b. 不要用0除。

这是一个灾难性的错误, 它会导致程序失败, 不管C语言的什么版本, 都是如此, 执行除法运算要特别小心。

c. 确保所有的双精度数(包括那些程序输入用的双精度数) 是在实数范围之内。

d. 所有整数必须在整数允许的范围内。

这适用于所有计算结果, 包括中间结果。

2. 将函数后面的";"忘掉。

此时错误提示色棒将停在该语句下的一行, 并显示:Statement missing ; in function <函数名>3. 给宏指令如#include, #define等语句尾加了";"号。

4. "{"和"}"、"("和")"、"/*"和"*/"不匹配。

引时色棒将位于错误所在的行, 并提示出有关丢掉括号的信息。

5. 没有用#include指令说明头文件, 错误信息提示有关该函数所使用的参数未定义。

6. 使用了Turbo C保留关键字作为标识符, 此时将提示定义了太多数据类型。

c语言易错题总结

c语言易错题总结

C语言易错题总结
1. **变量未初始化**:在使用变量之前,一定要先进行初始化,否则其值是随机的,可能会导致程序出现错误的结果。

2. **数组越界**:C语言中数组的下标是从0开始的,因此,一个长度为n的数组的有效下标范围是[0, n-1]。

如果试图访问超出这个范围的下标,就会导致数组越界错误。

3. **类型转换错误**:在C语言中,需要进行显式类型转换。

如果不进行显式转换,可能会导致数据丢失或者结果不符合预期。

4. **逻辑错误**:这类错误比较隐蔽,通常是由于代码中的逻辑错误导致的。

例如,条件判断错误、循环控制错误等。

5. **指针错误**:指针是C语言中的一大难点,也是常见的错误来源。

常见的指针错误包括指针未初始化、野指针、指针越界等。

6. **内存泄漏**:在C语言中,需要手动管理内存。

如果在使用完内存后没有及时释放,就会导致内存泄漏。

7. **函数返回值未检查**:在调用函数时,一定要检查函数的返回值,以确定函数是否执行成功。

如果忽略了返回值检查,可能会导致程序出现错误。

8. **文件操作错误**:在进行文件操作时,如果文件不存在或者无法打开,就会导致文件操作错误。

在进行文件操作时,一定要先检查文件是否存在并且可读。

9. **语法错误**:这类错误是最常见的,通常是由于拼写错误、缺少分号、括号不匹配等原因导致的。

以上就是C语言中常见的一些易错题类型,为了避免这些错误,需要仔细检查代码,并养成良好的编程习惯。

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

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语言独特的一种运算符,其中“&”表示对两个操作数按二进制位进行“与”运算,规则是:0&0=0,0&1=0,1 &0=0,1 &1=1。

如6&5=4,其中6 变为00000110,5变为00000101,按位“与”运算的结果为100即4。

误把赋值=当恒等==例如:if(a==O)误写成if(a=O)。

上述写法将导致条件始终为假,进入不了if语句条件为真的分支。

编程的时候要仔细,要遵守c语言的语法规则。

条件语句(if)和循环条件语句后误加分号例如:if(x>y);x=y;这样相当于满足条件执行空语句。

下面的x=y语句将被无条件执行。

一般情况下if条件后不需要加分号。

例如:for(i=1;imax){max=a[i]; m=i;}printf( “ %d%” ,max,m);}程序看似一点毛病都没有,上机调试也都通过,但是结果却不对。

原因就在下标变量m没有赋初值,系统随机赋了初值,导致结果错误。

给m赋初值0就可以了。

初值赋了,但是赋的位置不对例如:求100以内的完数s=0;for(i=1;i 篇二:C语言知识点总结【完美版】C语言最重要的知识点总体上必须清楚的:1) 程序结构是三种:顺序结构、选择结构(分支结构)、循环结构2)读程序都要从main入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。

3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.4)bit是位是指为0或者1。

byte 是指字节,一个字节=第五节:整数与实数1)C语言只有八、十、十六进制,没有二进制。

但是运行时候,所有的进制都要转换成二进制来进行处理。

(考过两次)a、C语言中的八进制规定要以0开头。

(数码取值0-7)018的数值是非法的,八进制是没有8的,逢8进1。

b、C语言中的十六进制规定要以0x(X)开头。

(数码取值0-9,a-f,A-F)C.十进制没前缀,数码取值0-92)小数的合法写法:C语言小数点两边有一个是零的话,可以八个位.概念常考到的:1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。

C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

误的,一定不能出现分号3、每个C语言程序中main函数是有且只有一个。

4、在函数中不可以再定义函数。

5、算法:可以没有输入,但是一定要有输出。

6、break 可用于循环结构和switch语句。

7、逗号运算符的级别最低,赋值的级别倒数第二。

第一章C语言的基础知识第一节、对C语言的基础认识1、C语言编写的程序称为源程序,又称为编译单位。

2、C 语言书写格式是自由的,每行可以写多个语句,可以写多行。

3、一个C语言程序有且只有一个main函数,是程序运行的起点。

第二节、2、每个C语言程序写完后,都是先编译,后链接,最后运行。

(.c---.obj---.exe )这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。

(常考!)(程序xx-程序编译-程序连接-程序运行)第三节、标识符1、标识符(必考内容):合法的要求是由字母,数字,下划线组成。

有其它元素就错了。

并且第一个必须为字母或则是下划线。

第一个为数字就错了2、标识符分为关键字(保留字)、预定义标识符、用户定义标识符。

关键字:不可以作为用户标识符号main define scanf printf 都不是关键字。

迷惑你的地方If是可以做为用户标识符。

因为If中的第一个字母大写了,所以不是关键字。

(关键字都是小写)预定义标识符:背诵define scanf printfinclude。

记住预定义标识符可以做为用户标识符。

用户标识符:基本上每年都考,详细请见书上习题。

第四节:进制的转换十进制转换成二进制、八进制、十六进制。

二进制、八进制、十六进制转换成十进制。

不用写。

小数点必须有在C语言中可写成1.在C语言中可以写成.1。

3 )实型数据的合法形式:a、就是合法的,且数据是x 10-1。

b、考试口诀:e前e后必有数,e后必为整数。

请结合书上的例子。

4)整型一般是4个字节,字符型是1个字节,双精度一般是8个字节:long int x; 表示x是长整型。

unsigned int x; 表示x是无符号整型。

第六、七节:算术表达式和赋值表达式核心:表达式一定有数值!算术表达式:+,-, ,/, %考试一定要注意:“ /”两边都是整型的话,结果就是一个整型。

3/2的结果就是1.“/”如果有一边是小数,那么结果就是小数。

3/的结果就是“ %'符号请一定要注意是余数,考试最容易算成了除号。

)%符号两边要求是整数。

不是整数就错了。

[注意!!!]2、赋值表达式:表达式数值是最左边的数值,a=b=5; 该表达式为5,常量不可以赋值。

1、int x=y=10: 错啦,定义时,不可以连续赋值。

2、int x,y;x=y=10;对滴,定义完成后,可以连续赋值。

3、赋值的左边只能是一个变量。

4、int x=;对滴,x就是7 5、float y=7 ;对滴,x就是3、复合的赋值表达式:int a=2 ;a*=2+3 ;运行完成后,a的值是12。

一定要注意,首先要在2+3的上面打上括号。

变成(2+3)再运算。

4、自加表达式:自加、自减表达式:假设a=5,++a (是为6),a++ (为算术表达式:+,-, ,/, %5);运行的机理:++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6。

再放到变量a中。

进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6 了。

考试口诀:++在前先加后用,++在后先用后加。

5、逗号表达式:优先级别最低。

表达式的数值逗号最右边的那个表达式的数写,并且x是小写。

3、字符型和整数是近亲:两个具有很大的相似之处char a = 65 ;printf(“ %C , a); 得到的输出结果:a printf(“ %d , a);得到的输出结果:65值。

(2,3,4)的表达式的数值就是4。

z=(2,3, 4)(整个是赋值表达式)这个时候z的值为4。

(有点难度哦!)z= 2,3, 4 (整个是逗号表达式)这个时候z的值为2。

补充:1、空语句不可以随意执行,会导致逻辑错误。

2、注释是最近几年考试的重点,注释不是C语言,不占运行时间,没有分号。

不可以嵌套! 3、强制类型转换: 一定是(int )a不是int (a),注意类型上一定有括号的。

注意(int )(a+b)和(int )a+b的区别。

前是把a+b转型,后是把a转型再加b。

4、三种取整丢小数的情况:1、int a = ;2、(int)a ;3、1/2 ; 3/2 ; 第八节、字符1)字符数据的合法形式::'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。

'0' 的ASCII数值表示为48, 'a' 的ASCII数值是97, 'A'的ASCII数值是65。

一般考试表示单个字符错误的形式:'65' "1" 字符是可以进行算术运算的,记住:’0'-0=48 大写字母和小写字母转换的方法:'A'+32='a' 相互之间一般是相差32 o2)转义字符:转义字符分为一般转义字符、八进制转义字符、十六进制转义字符。

一般转义字符:背诵\0、\n、’、”、。

八进制转义字符:‘ \141 '是合法的,前导的0是不能写的。

十六进制转义字符:’\x6d '才是合法的,前导的0不能printf (“% , x);llprintf (“%#X' , x); 0x11 6、int x=12 , y=34; 注意这种题型char z= ‘ a';第九章、位运算1)位运算的考查:会有一到二题考试题目。

总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。

例1: char a = 6, b;b = a>右移一位表示除以2。

第二章第一节:数据输出(一)(二)1、使用printf 和scanf函数时,要在最前面加上#include “”2、printf 可以只有一个参数,也可以有两个参数。

相关文档
最新文档