当前位置:首页 » 编程软件 » 简述编译器的查错与改错的作用

简述编译器的查错与改错的作用

发布时间: 2024-10-22 17:30:09

c语言考试技巧

一.特点和注意事项 1、填空题
(1)上机填空题一般包含2个(或3个)空。 (2)要填空的位置用___、___、___表示。
(3)考生在考试时应删除标识___、___、___后填入相应的符号。
特别要注意的是:只能在要填空的位置上进行修改,不要添行、删除、合并或分解,不要改动程序行的顺序,更不要自己另编程序。 2.改错题
(1)上机改错题中有2个(或3个)错误需要修改。
(2)试题中用“/******found******/”来提示在下一行(或下面第二行)有错。 (3)错误的性质基本分为语法错误和逻辑错误,也有些试题要求把语句添加在下划线处。
(4)特别要注意的是:只能在出错的行上进行修 二.做题技巧
以下是对上机考试改错题的做题方法和总结,改错题的错误主要分为以下几类:
一般情况,错误主要分为语法错误和逻辑错误。
先检查语法错误,编译程序后发现没有错误及警告,说明没有语法错误,只有逻辑错误核猜前;逻辑错误必须根据程序的功能及预期结果来考查。
因此,对于程序改错题,应先编译查找其中的语法错误,通过编译器的提示容易找到错误的地方及原因,然后再寻找逻辑错误。修改了语法错误后再次编译,直到修改完所有的语法错误。而查找逻辑错误时,需要运行程序根据结果来检查。
1、if或while语句
若错误行是if或者while语句,则要注意以下点: 1)首先判断是否正确书写if或while关键字;
2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号; 3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符; 4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(==);
若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号; 2、for语句
若错误行是for语句,则要注意以下几点: 1)首先判断for有没有书写正确;
2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。 3、记住是分号(;),不是逗号(,)!
再者,分析for中的三个表达式,是否符合题意; 第一个表达式表示起始条件, 第二个表达式表示终止条件,
第三个表达式表示循环变量的变化。 4、return语句
若错误行为return语句,则要注意以下几点: 1)首先看是不是正确书写return关键字;
2)然后看是不是缺少分号,若是则加上分号即可;

3)再者判断return后的变量或表达式是否正确;
这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。 5、赋值语句
若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。 6、定义语句
若错误行是定义语句,则要注意: 1)首先分析变量类型是否符合;
2)然后分析赋初值是否正确,求和初值赋0,求积初值赋1;
3)若以上均不是,则看是不是少定义了某个变量或少了花括号; 7、关键字拼写错误。如:main-mian(错误) printf - pirntf (错误)
Return- return(错误) while- While (错误)
8、表达式错误问题
表达式错误占的份量最多,兆纤并且没有统一的改法,我们只能通过题目要求来分析并修改),
1)若错误行中有整数1除以某个表达式或变量时,必须把整数1改为1.0;若变量或表达式是整型时,则只能进行强制类型转换。
2)变量必须先赋值,后改清才参与运算,没有赋值就不能参与运算;例如,long k;k*=num%10;
3)运算符书写错误,例如,把/写成\(num\=10);,==写成=。 4)丢失括号() 9、字符串类问题
1)若错误行中有字符串结束符,则特别要要注意结束符有没有写错(‘\0’不要写成"\0”)。
2)新组建的字符串一定要加结束标识符(‘\0’); 3)要区分清楚字符‘o’和数字‘0’。
4)字符串复制、比较必须使用用字符串处理函数(strcpy或strcmp)实现,不能用赋值语句或关系运算符。 10、指针类问题
若错误行中有指针变量,并且该变量名之前没有指针运算符,则般都是加上指针运算符;即注意p和*p的区别; 11、函数首部类问题:
若错误行是函数首部,则要注意:
1)首先看该行最后有没有分号,若有则删掉分号;若中间有分号则要改为逗号;
2)形参和实参类型不一致问题
① 若实参是个地址或数组名或指针变量名,则对应的形参肯定是指针或数组;
②若实参是二维数组名,则对应的形参应该是指针数组或是二维数组; ③若后面用到形参时有指针运算符,则该形参应为指针类型;
④若形参是二维数组或指向M 个元素的指针变量,则该二维的长度必须与main中对于数组的第二维的长度相同。 3)函数类型不一致问题
①若函数中没有return语句,则函数类型为void;

②若函数中有ret urn语句,则函数的类型必须与rerun后的变量类型一致;
记住,调用函数的类型与main中的该函数的类型一致! 12、语法错误问题:
1)语句缺少分号。若错误号中语句没有以分号结束则加上分号;
2)变量名不一致。C语言是区分大小写的,若错误行中有大写字母一般都改为小写字母;
3)若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。 13、逻辑错误问题:
这种题型主要是表达式错误,占的题量比较多而且没有统一的做题方法,需要我们具体问题具体分析。对于逻辑错误,可按下列步骤查找:
①先读试题,看清题目的功能要求。
②通读程序,看懂程序中算法的实现方法。 ③细看程序,发现常见错误点。 14、书写错误问题:
特别注意我们的注释部分,注释是以/*开始,以*/结尾,不能有多余的,有也只能在/*和*/里面。注意,比如“/***注释部分*****/*/”是错误的!
二、编程时容易犯的错误
1.书写标识符时,忽略了大小写的区别
C语言认为大些字母和小写字母时两个不同的字符,如在编译程序过程中,系统会把a和认为时两个不同的变量名。习惯上,符号常量名用大写表示,变量名用小写表示,以增加程序的可能性。
2.忽略了变量的类型,进行了不合法的运算
3.忽略了“=”与“= =”的区别;C语言中,“=”是赋值运算符,“= =”是关系运算符
4.忘记加分号
考生应特别注意这种情况,分号是C语言中不可缺少的一部分,语句末尾必须有分号,但有时候千万不能加;
5.输入变量时忘记加地址运算符“&”,而在不应加“&”的位置加了地址运算符
(1)忘记加“&”的情况。
如int a,b; scanf(“%d%d”,a,b);
此时,无法正确给a和b读入数据。scanf函数的作用是:按照a、b在内存中所分配的地址将a、b的值存进去。“&a”指a在内存中的地址,因此正确的书写格式为scanf(“%d%d”,&a,&b);。
(2)多加“&”的情况。如int str[ ]; scanf(“%s”,&str);
C语言编译程序对数组名的处理是:数组名代表数组的起始地址,scanf函数中的输入项是字符数组名,因此不必再加地址符&,应该去掉。
6.输入数据的方式余要求格式(通配符)不符。例如:scanf(“%d,%d”,&a,&b);
C规定:如果在“格式控制”字符串中,除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:3,4

此时不用逗号而用空格或其他字符是不对的,如:3 4(中间为空格)3:4(中间为冒号);
三、相关概念
(1)素数:定义是除了能被1和自身整除外,不存在其他任何能整除该数的自然数。因此,在判断一个数是否为素数时,只要有除了1和本身能整除它,还有一个数能整除它,就判定此数不是素数。
(2)判断一个年份是否为闰年:如果年份能被4 整除但是不能被100整除,或者能被400整除,这两种情况满足之一都是闰年。
(3)利用选择法进行从小到大的排序。选择法的思路为:把第一个元素与其后面的元素比较,如果比后面的大,则交换,比较完所有的元素后,第一个位置的元素是最小的元素;在把第二个元素与其后面的元素进行比较,结果是除了第一个元素外,第二个元素是最小的元素;以此类推。
(4)数的按位分离算法是:对10取模求个位上的数字,整除10后再对10取模求十位上的数字,整除100后再对10取模求百位上的数字。
(5)最大公约数的算法是:(1)若n>m,则用n除以m求余数r;(2)若r=0,则m为最大公约数,若r≠0,则将r赋值于m,m赋值于n,继续用n除以m求余数r;(3)直到r=0,m为最大公约数。根据算法判断每一条语句是否正确。 (6)求最小公倍数的算法:等于两个数的乘积除以它们的最大公约数。 (7)矩阵时以行为外循环,列为内循环,可以同时计算周边元素的和。

㈡ 如何对待c语言编程中的错误

这时很正常的问题.打代码没有bug才不正常.但是编译时的错误还是比较容易避免的,常见的可以通过以下几种方法解决

  1. 语法错误:比如说变量名打错,少一个分号,括号之类的错误,经过你不断的打代码,这样的错误慢慢就会减少了.

  2. 编译出错时,一半的方法是将问题从上到下一个一个解决.因为第一个错误可能引发后面的很多错误.因此你每次只需要留意第一个错误.很多情况下,第一个错误解决了,后面的错误自然迎刃而解.

  3. 编译出错时,编译器通常会提示出错的行号.寻找错误一半从出错的行号往上找,不需要往下找,看看编译错误的原因是什么,遇到不懂的单词可以查查,以后就明白了.因为错误就那么几个,错来错去还是那几个.

  4. 建议写程序的时候,不要等全部代码打完之后再一次性编译.可以分模块,分函数写.写完一个之后,尝试着编译,看看有没有问题,即使有问题,寻找起来也相对会方便一点.不必大海捞针.


至于运行时的bug,这需要随着你的代码量的提高而减少(相对).解决bug的常用方法是debug(调试),具体调试的方法因为不同的开发环境而不同.你可以根据你的开发环境查阅相应的debug文档.

㈢ vs中debug和release版本的区别

vs中的程序有debug和release两个版本。

1、版本不同

Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。

而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。

2、运行效果不同

debug程序通常比release程序要慢,尤其是处理视频方便release要比debug快很多。

3、算法不同

debug跟release在初始化变量时所做的操作是不同的,debug是将每个字节位都赋成0xcc, 而release的赋值近似于随机。

(3)简述编译器的查错与改错的作用扩展阅读:

二者的编译选项。

Debug 版本:

/Od 关闭优化开关

/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)

/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译

/GZ 可以帮助捕获内存错误

/Gm 打开最小化重链接开关,减少链接时间

Release 版本:

/MD /ML 或 /MT 使用发布版本的运行时刻函数库

/O1 或 /O2 优化开关,使程序 最小或最快

/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)

/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改

可以理解Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。

㈣ keil编译器运行为什么检测不到错误

答:这种情况是你的程序还有别的错误,
当你把别的错误改掉后,再编译你的vid 就会提示错误。
这种情况keil 经常有的。

热点内容
巧影商店服务器怎么样 发布:2024-11-23 22:06:15 浏览:778
云服务器网oppo 发布:2024-11-23 22:06:11 浏览:817
love281解压密码 发布:2024-11-23 22:00:39 浏览:162
通过服务器搭建多个网站 发布:2024-11-23 21:57:57 浏览:248
溆浦云服务器 发布:2024-11-23 21:53:43 浏览:237
缤智先锋版配置有哪些 发布:2024-11-23 21:28:04 浏览:886
4b存储器多少钱 发布:2024-11-23 21:23:49 浏览:137
逆水寒服务器经验少怎么回事 发布:2024-11-23 21:22:44 浏览:438
菜鸟教程源码 发布:2024-11-23 21:21:13 浏览:702
安卓手机怎么录屏能带声音 发布:2024-11-23 21:20:19 浏览:817