二级C语言上机改错题技巧总结Word文档格式.docx
《二级C语言上机改错题技巧总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《二级C语言上机改错题技巧总结Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
2)类似题目:
12、35题
(3)double核心字出错
上机题库P86第23题
/**********found**********/
doublefun(doublea,dounlex0)
36、51
(4)while核心字出错
上机题库P77第2题
wihle(q>
p)
(5)return核心字出错
上机题库P101第54题
Return(Value);
86
2.格式出错
(1)C语言中语句、基本构造、函数等均有相应规范格式,程序中将这些格式书写错误,将导致编译器无法辨认程序,因而导致出错;
(2)语句末尾少分号
1)分号是语句结束标志,每个语句都必要以分号结尾
2)举例:
上机题库P77第2题第一种出错点
q=p+i
3)类似题目:
28题第一空、29题第1空、34题第2空、37题第2空、48题第2空,49第1空,59第2空、70、79、97
(3)for构造格式出错
1)for构造格式:
for(表达式1;
表达式2;
表达式3){循环体语句},for构造体中表达式必要以分号隔开,改错题中经常浮现将for构造中分号错写为逗号状况;
上机题库P77第3题第2个出错点
for(i=100,i<
=m,i+=100)
6题第一空、14题第二空、53第1空、73、86第1空
(4)if构造格式出错
1)if构造格式:
if(表达式),if背面必要加上小括号
P93第37第1个出错点
ifn==0
59题第1空
(5)数组格式出错
1)一维数组定义形式:
类型名数组名[常量表达式],谨记[]是数组独有特性
P89第28题第2个出错点
t(k)=b(j);
3)举例2:
P97第1个出错点(二维数组不能省略列下标)
intfun(intn,intxx[][])
4)类似题目:
95题第1空
(6)函数格式出错
1)记住函数名背面一定是花括号,不能是方括号,方括号只有在数组下标中用到
P86第22题第1出错点
n=strlen[aa];
3)scanf(输入控制,输入数据列表),scanf函数中输入数据列表规定为变量地址
4)举例2:
P95第41题第2出错点
/*********found**********/
scanf("
%d"
a[i][j]);
5)类似题目:
第80题第1空
(7)命令行格式错误
1)#include“stdio.h”,include和define前面都必要有#
P84第17题第1出错点
include(stdio.a)
3.使用了未定义变量:
变量必要先定义后执行
(1)0(零)和o(字母欧)区别
1)区别:
零像鸡蛋,字母欧像乒乓球
上机题库P85第19题第一种出错点
a2=k/1o;
19题第一空、23题第二空、43题第二空、51题第二空、77、98、
(2)P(大)和p(小)区别
普通在定义时候p为小写,但是在使用时候变为大写P,做题时候一定要细心
上机题库P91第33题第一出错点
fun(int*a,intn,intx)
{intp=0,i;
a[n]=x;
while(x!
=a[p])
p=p+1;
if(P==n)return-1;
33题第一空、82
(3)普通变量大小写区别
1)定义时候和使用时候变量大小写不一致,违背了变量必要“先定义后执行”原则
18题第2空
intfun(float*s,intn,float*aver)
{floatave,t=0.0;
intcount=0,k,i;
for(k=0;
k<
n;
k++)
/**************found**************/
t=s[k];
ave=t/n;
for(i=0;
i<
i++)
if(s[i]<
ave)count++;
*aver=Ave;
/*分析:
定义时候floatave,t=0.0;
ave为小写,但是此时使用时候却是Ave大写,因而出错*/
returncount;
}
18题第2空、22题第2空、38题第1空、54题第2空
三、改错题之逻辑错误
1.运算符号出错:
(1)C语言中除号是“/”不是“\”
(2)赋值号(=)和等号(==)混淆
1)记住在if语句中浮现赋值号(=)普通是讲它改为等号(==)。
14题第一空和29题第二空都是这样错误、87、91、94
2.表达式取值范畴出错:
(1)当遇到计算表达式累加或是累减时,一定用到循环来完毕相应操作。
(2)例如:
改错题第七题中规定计算t=1-1/2*2-1/3*3-….-1/m*m这个表达式,在这个题目中第一空有这样for语句:
for(i=2;
m;
i++)y-=1/(i*i);
从题目中不难发现i是一种变量,它取值范畴从整数2开始到m-1结束,最后计算成果为y=1-1/2*2-1/3*3-….-1/(m-1)*(m-1)和题目规定不符,因而将i<
m改为i<
=m。
(3)做这样题目看两点:
一看题目中表达式,二看for语句中变量取值范畴。
(4)类似题目:
31题第二空、52第2空、81、88、
3.C语言中除法运算:
(1)这个考点同样考查表达式有关知识。
刚才咱们将了表达式范畴,当前咱们考虑y-=1/(i*i);
与否对的?
赋值号左边问题不大,咱们看看右边1/(i*i),其中i是整数,那么i*i也是整数,在C语言中1除以比它大数时值为零。
这样和题目规定就不相符。
(3)记住:
1/2值为零,只有1.0/2或是1.0/2.0值为0.5。
39题第一空也同样是这种错误、57、76
4.找最大值和排序问题:
(1)遇到这种题目在改错题中最容易考查是不不大于(>
)、不大于(<
)等符号变化,当你查找出错地方没有语法错误,也没有使用了未定义变量时,记住这个口诀:
将不不大于改为不大于,将不大于改为不不大于!
(2)类似题目:
11题第二空、12题第一空和13题第二空、4题第二空、58
5.函数返回值及其参数:
重点
intfun(intx,inty)main()
{{
if(x>
y)returnx;
inta,b,c;
elsereturny;
scanf(“%d%d”,&
a,&
b);
}c=fun(a,b);
printf(“最大值为:
%d”,c);
(1)函数返回类型:
1)在上面例子中fun函数返回值是int,如果将int改为double,很明显是错误。
从两个地方来看,一方面returnx;
中x类型必要和fun函数中返回值相似,x是整型。
另一方面c=fun(a,b);
中fun函数将一种返回值赋值给了变量C,阐明函数返回值一定是整型。
2)记住:
函数调用、函数返回值和ruturn中数据类型必要一致!
1.1、3.1、16.1、19.2、34.1、36.1、40.1、48.1、71都死这样错误,(注1.1表达第一题第一空)。
78、89、90、
(2)return背面表达式及其类型:
19.2、30.2、39.2
(3)函数传递参数:
intfun(int*x,int*y)main()
if(*x>
*y)return*x;
inta,b,c;
elsereturn*y;
}c=fun(&
printf(“最大值为:
1)一定注意:
传递是值还是地址。
比较上面两个例子人们很容易区别传递是值还是地址,第一种例子调用函数时候传递是值,因而在fun函数形参中x和y仅仅是普通变量,而第二个例子中调用函数时候传递是地址,因而在fun函数形参中x和y就是两个指针变量。
5.1、13.1、17.2、20.1、25.2、52.1、56、84、85、100
(4)指针使用:
intfun(int*x,int*y)
{
}
1)在此例中fun函数形参是x和y,它们类型是整型指针,那么在fun函数函数体中使用到x和y值时一定要区别:
x>
y比较是x和y所存变量地址大小,*x>
*y才是比较值大小。
2)如果存在*x=x+y;
类似状况一定是错误,必要要将赋值号左右两边类型变为一致。
5.2、5.3、20.2、24.2、35.1、44.1、72、75、一定特别注意!
6.数组:
(1)数组下标初始值:
数组下标从零开始,到长度减一结束。
1)考试技巧:
当出错行在定义某些时,先检查该定义语句有无语法错误,再看定义语句中变量有无赋初始值,最后看变量赋初始值有无对的。
2)定义初始值有窍门,遇到累加时,用来存储累加和变量普通赋值为零,遇到求阶乘时,用来存储阶乘值变量普通赋值为一。
3)8.1中变量k赋值为1,但是数组下标只能从0开始,因而将1改为0就行了。
(2)普通变量初始值:
1)依照上面技巧,咱们同样可以将它延伸到普通变量中。
41.1中需要将变量值进行初始化,题目中有这样规定:
“输出主对角线元素之和”,既然这样咱们很必定初始值应当为零,接着咱们看看是给哪个变量赋值?
看printf(“sum=%d”,sum);
输出是sum值,阐明sum就是咱们要补充在横线上变量。
2)10.1也可以用同样办法来分析。
(3)数组和字符串长度减一:
1)当使用数组中元素时,最大值只能到数组长度减一。
字符串以’\0’作为字符串结束标志,因而取值最大也只能到字符串长度减一。
25.2中输出printf(“%d”,aa[i]);
分析程序懂得i在此时就是数组长度,咱们要输出数组中元素,最大就只能到aa[i-1],因而改为printf(“%d”,aa[i-1]);
就行了。
2)4.1和38.2中考查是字符串长度减一问题。
(4)数组下标往后走:
1)当题目规定将一种数组中元素直接赋值或是以某种方式复制到另一种数组中时,接受数据数组中下标要自增。
9.1中s[j]=s[i];
将s[i]中值复制给s[j],联系上下函数段发现i是一种变量被for语句控制,从0开始直到遇到’\0’结束。
i始终在加但是j没有变化,因而改为s[j++]=s[i];
即可。
2)类似题目有:
25.2、26.2、32.1、50.2。
7.特例:
(1)某些题目解答很特殊,需要依照上下文中内容来解答题目:
例如10.1,在此题目中,定义了变量t=0;
依照下面程序中循环,s=0.0,一方面加是变量t值,即s值是从0.0开始,s得到值是:
s=0.0+0.0+1.0/3+……,观测表达式值,这个少加了第一项1.0值,因此变量t初值不能是0.0,只能是1.0,或者是1;
(2)21.2中这个题目中,表达式值是从2/1+3/2+5/3……即表达式规律是从第一项开始,后来每一项分子是前一项分子和分母和,分母为前一项分子。
因此该题目第二个空中内容应当是:
c=a;
a+=b;
b+=c;
这一条语句中a代表变量分子,b代表是变量分母,执行第一种表达式值,把a值赋值给变量c,第二个表达式是把分子和分母和相加复制给变量a,第三个表达式是把本来a值和变量b值相加之后得到值赋值给变量b,则变量b得到值也为分子分母和,不满足题意,而分母应当为本来分子值。
第三表达式值应当改为:
b=c;
(3)类似题目有:
33.2、40.2、43.1、47.1、50.1
8.素数11.1、29、83
(1)判断一种数与否是素数办法诸多,是只用掌握一种即可,一方面掌握判断一种素数办法;
(2)素数定义:
1)是自然数
2)只能被1和自身整除,2到自身减一之间数不能整除该数。
(3)判断m与否为素数格式:
for(i=2;
if(m%i==0)
break;
if(m==i)表白m是素数;
(4)素数只能被1和m,那么用2到m-1之间数除m,如果有一种数能整除m,阐明m不是一种素数,就不用再判断背面数值了,用一条break语句提前结束函数;
如果始终都不能整除,则阐明m是一种素数。
那么用循环语句表达2到m-1之间数语句为:
i++),如果在这个范畴内数值有一种数值能整除m,阐明m不是一种素数,则可以提前结束循环,break;
那么结束之后这个循环中变量I值不大于m,如果m是一种素数时候,则始终都不执行break语句;
则循环语句结束时候是在i==m时候退出循环。
结束循环后来,进行i和m比较,如果i不大于m,则表白m不是一种素数;
如果i等于m,则表白m是一种素数。
(5)求素数题目只要把格式给带进去就可以了。
11.1这个题目中只用改为“==”。
29题也是同样解答办法。
9.链表15、27
(1)链表题目分为带头结点和不带头结点链表;
(2)带头结点链表:
带头结点链表第一种空改为:
p=h->
next;
第二个空改为:
p=p->
.
(3)不带头结点链表:
不带头结点链表第一种空改为:
p=h;