计算机等级考试二级C语言上机改错题考点总结
改错题的错误主要分为以下几类:
  1ifwhile语句
  若错误行是if或者while语句,则要注意以下点:
  1)首先判断是否正确书写ifwhile关键字;
  2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号;
  3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符;
  4)if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =);
  5) if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号;
  2for语句
  若错误行是for语句,则要注意以下几点:
  1)首先判断for有没有书写正确;
  2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。
  记住是分号(;),不是逗号(,)!
  3) 再者,分析for中的三个表达式,是否符合题意;
  第一个表达式表示起始条件,
  第二个表达式表示终止条件,
  第三个表达式表示循环变量的变化。
  3 return语句
  若错误行为return语句,则要注意以下几点:
  1)首先看是不是正确书写return关键字;
  2)然后看是不是缺少分号,若是则加上分号即可;
  3)再者判断return后的变量或表达式是否正确;
  这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。
  4 赋值语句
  若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。
  5 定义语句
  若错误行是定义语句,则要注意:
  1)首先分析变量类型名是否写对;
  2)然后分析给变量赋初值是否正确;
  3)若以上均不是,则看是不是少定义了某个变量或少了花括号;
 6 表达式错误问题:
  若错误行中有整数1除以某个表达式或变量时,必须把整数1改为1.0;若变量或表达式是整型时,则只能进行强制类型转换。
  7 字符串类问题
  若错误行中有字符串结束符,则特别要要注意结束符有没有写错。但是要区分清楚字符‘o’和数字’0’
  8 指针类问题
  若错误行中有指针变量,并且该变量名之前没有指针运算符,则一般都是加上指针运算符;
  9 函数首部类问题:
  若错误行是函数首部,则要注意:
  1)首先看该行最后有没有分号,若有则删掉分号;若中间有分号则要改为逗号;
  2)形参和实参类型不一致问题
  若实参是个地址或数组名或指针变量名,则对应的形参肯定是指针或数组;
  若实参是二维数组名,则对应的形参应该是指针数组或是二维数组;
  若后面用到某形参的时候有指针运算符,则该形参比为指针类型;
  若形参是二维数组或指向M 个元素的指针变量,则该二维的长度必须与main中对于数组的第二维的长度相同。
  3)函数类型不一致问题
  若函数中没有return语句,则函数类型为void;
  若函数中有return语句,则函数的类型必须与rerun后的变量类型一致;
  记住,调用函数的类型与main中的该函数的类型一致!
  10. 语法错误问题:
  1)语句缺少分号。若错误号中语句没有以分号结束则加上分号;
  2)变量名不一致。C语言是区分大小写的,若错误行中有大写字母一般都改为小写字母;
  11. 逻辑错误问题:
  这种题型主要是表达式错误,占的题量比较多而且我们没有统一的做题方法,需要我们具体问题具体分析。
  12. 书写错误问题:
  特别注意我们的注释部分,注释是以/*开始,以*/结尾,不能有多余的,有也只能在/**/里面。注意,比如/***注释部分*****/*/”是错误的!
1.填空题
  请补充函数fun(),该函数的功能是判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
  试题程序:
  #include <stdio.h>
  #include <conio.h>
  char *fun(int n)
  {
  int g,s,b;
  g=n%10;
  s=n/10%10;
  b=1;
  if((g+b)==s)
计算机二级c语言选择题库  return2;
  else
  return3;
  }
  main()
  {
  int num=0;
  clrscr();
  printf("******Input data *******\n");
  scanf("%d",&num);
  printf("\n\n\n");
  printf("****** The result *******\n");
  printf("\n\n\n%s",fun(num));
  }
  答案及评析:1n/100%10 2″yes!″ 3″no!″
  【解析】填空1:由程序可以知道,变量g保存了整数的个位数,变量s保存了整数的十位数,所以变量b应该保存整数的百位数。将整数除以100再对10取余,则得到这个整数的百位数。填空2:当个位数字和百位数字之和等于十位数字时,则返回″yes!″。填空3:当个位数字和百位数字之和不等于十位数字时,则返回″no!″
2. 改错题
  下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。
  请改正程序中的错误,使它能得到正确结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
  试题程序:
  #include<stdio.h>
  #define N 20
  void fun(int a[],int n)
  {
  int i,j,t,p;
  /**********************found***********************/
  for(j=0;j<n-1;j++) ;
  {
  p=j;
  for(i=j;i<n;i++)
  if(a[i]>a[p])
  p=i;
  t=a[p];
  a[p]=a[j];
  /**********************found***********************/
  a[p]=t;
  }
  }
  main()
  {
  int a[N]={11,32,-5,2,14},i,m=5;
  printf("排序前的数据:");
  for(i=0;i<m;i++)
  printf("%d ",a[i]);
  printf("\n");
  fun(a,m);
  printf("排序后的顺序:");
  for(i=0;i<m;i++)
  printf("%d ",a[i]);
  printf("\n");
  }
  答案及评析:1)错误:for(j=0;j<n-1;j++) ;正确:for(j=0;j<n-1;j++) 2)错误:a[p]=t;正确:a[j]=t;
  【解析】错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。
  错误2:将两数进行交换的常用语句,借助第三个变量。
 3. 编程题
  下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a 数组中的值为
  a=0 1 2 7 9
  1 11 21 5 5
  2 21 6 11 1
  9 7 9 10 2
  5 4 1 4 1
  则返回主程序后s的值应为310
  注意:部分源程序给出如下。
  请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
  试题程序:
  #include <stdio.h>
  #include<conio.h>
  #include<stdlib.h>
  #define N 5

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。