江苏省计算机等级考试上机材料(C语言) 下载本文

上机考试考点总结

注意事项:上机试题 改错18分+编程22分 70分钟(占总成绩的40%)

一、改错题

设错类型: 语法错误,语义错误,算法错误

江苏省C语言改错题目有四个错误点。其中两个语法错误,两个逻辑错误。启动Turboc2.0,按F10,选中File->new,首先按照试卷上的格式将改错题目录入到turbo c中,按F10,然后选中compile->compile to obj,如果有Error那么说明有错误,要看错误点是自己输入错误还是本身试题语法的问题。另外不要把时间浪费到改错题目中,如果改几处语法错误后。要转移到编程题目中,首先写出c编程题目中的大框架。

c语言改错题目一定要理解题意,把题目中给的参数直接带到程序中去试验一下,题目中给的参数一定要带到函数中,去看每个for或while循环的含义。

二、编程题

题目类型:以实用性为主

我们学习的根本是要操纵计算机,让他给我们做事情。计算机就是一台机器,我们必须按照他理解的方式操纵他。我们实际上学习的就是一个C语言用户手册。在上机中,编写的程序要具有通用性。编写好框架后首先要保存下来。要多读好程序 用计算机解决一个具体问题:首先要从具体问题抽象出一个数学模型,然后设计一个解此数学模型的算法,最后编写程序、进行测试、调整直到最终解答。寻找数学模型的实质是分析问题,从中提取操作的对象,并找出这些对象之间含有的关系,然后用数学的语言加以描述。

从熟悉基本语法到熟练操作需要有一个时间过程。第一步熟悉常用的语法与函数。第二步做典型题目来强化与理解。

c语言编程题目首先要搭大的框架,要不断调试。

通过题目看本质 (1)程序可读性:主要是为了人的阅读与交流,其次才是计算机的执行,可读性好有助于人对算法的理解,晦涩难懂的程序易于隐藏较多错误难以调试和修改。上机操作改错题目要严格按照题目格式输入,编程题目要首先把main()函数写出来,然后想出一个解决问题的算法。千万别写垃圾代码,要象写诗一样优美。

(2)程序是调试出来的:程序不是写出来,是调试出来的,一个程序编写好后,要经过若干次的调试、修改从能从代码变成可用的程序,那种想一次编写就运行结果正确的,还没有人做得到。 (3)常用标准库函数:

#include 作用:包含所有的输入输出函数,如:printf,putchar,scanf,fprint等函数,一定要熟练掌握printf、scanf函数与显示格式,上机必考。 #include 作用:用getch()函数实现从键盘上读入一个字符,目的是使程序执行完后显示窗口不会立即关闭,可以查看浏览结果。clrscr()用于清除屏幕显示。

#include 作用:包含字符串处理函数,例如:strcmp(),strcpy(),strlen(char *str),strcat()。

#include 作用:包括检查类型函数。例如:isdigit(int ch)判断是否为数字,isalpha(char c)是否是字母。

#include 作用:包含对数值处理的函数,例如;sqrt()求平方根,pow(x,y)求x^y。 在turboc2.0操作,在键盘上有一个特殊的insert键,如果按了这个键后会出现按enter不换行,按空格键会删除其他字符的情况。

改错题常见错误:

(1)宏定义出错:#define

(2)传递函数中数组出错 (常见错误) (3)主函数中缺少函数声明

(4)对字符型二维数组赋值用strcpy,而不是用= (常见错误) (5)for或do循环结束条件问题 (6)定义二维数组出错

本资料对上机考试中编程部分题目划分为6大类,对每种类型的题目进行了分析。 1. 对一维数组(排序)和字符串(指针)操作

该类型的题目在以往的机试中占有比例较大,约40%,考生应该对该知识点

做全面的复习和掌握,一维数组可以分成数值型和字符型,其中数值型数组的数据类型为整型和实型,字符串数组的数据类型为字符型,我们通常会把字符型数组叫做字符串,但是应该注意字符型数组与字符串之间是存在区别的,也就是‘\\0’结束标识符问题。 在复习该部分时,考生应该注意掌握以下两个问题: (1) 对一维数组的操作

对一维数组操作时,不可避免的要访问相关的数组元素,在C语言中访问数组元素一般采用单层循环的方法进行遍历,假设数组长度为n,数组下标是在0到(n-1)之间的,考生应该牢固掌握在一维数组中求最大值、最小值、移动元素、查找特定值(通过具体数值或通过下标)、存储数组元素等的方法。其中一个非常重要的操作一定要重视:两种排序算法,冒泡排序额和选择排序,具体的过程和实现代码要求考生必须掌握。 (2) 对字符串的操作(指针)

该类问题是每次考试的重点和难点,特别是将字符串同指针结合起来以后,难度就更大了。考生在解决此类问题时应特别注意字符串的结束标志‘\\0’,它不仅用来作为字符串的结束标志,而且对字符串进行操作时,它也是循环的结束标志。考生在复习该部分的时候应该注意这样几个基本问题:大小写字母的转换、奇偶数判别、添加或删除指定的字符和字符的移动。此外,考生应该牢固掌握指针的特性及字符串操作函数的使用和实现方法,曾出现过考题要求考生自己编程完成字符串操作函数,特别是字符串连接函数和求子串函数,应当引起足够重视。另外对于指针应该清楚指针的建立、遍历、添加或删除一个结点的操作代码。

2. 数值计算

该类型的题目在历年的机试中占20%,考查的机率也非常高。该类题目一般给定一个数列计算公式,然后要求考生编写一个函数实现求数列的前n

项的值、累加和或积,在解决该类问题时,首先重要的找到给定数列的变化规律,然后其变化规律来编写一个单层或者双层的循环来求相应的值。在编写程序的过程中,往往还会用到一些数学函数,如sqrt()、fabs()、pow()等,考生应该牢固掌握math.h中一些常用的数学函数的用法和使用方法。另外还应注意数据类型之间的区别,特别是float和int类型,不同的数据类型产生的运算结果是不一样的。

3. 对结构体的操作

这部分对非计算机专业的学生来说是个难点,但以往的机试中,有17%的题目是属于该类型。考生在复习这部分的时候,首先应该注意结构体成员的两种不同的引用方法:结构体变量和指向结构体的指针,也就是结构体成员运算符‘.’和指向运算符‘->’,在编程的过程中,往往会涉及到结构体数组,其实这类数组除了数据类型是结构体外,其他的特性和普通数组是一样的,结构体除了定义、赋值和初始化以外,其他的操作和普通变量也是一样的,包括在结构体数组(记录)中进行查找、删除、求最大最小值等操作,我们应该用对待普通变量的方法来解决结构体的问题,这样的话,难度就大幅度的降低。

4. 对二维数组的操作

该类问题在历年的机试中占16%,考生应该对二维数组的元素遍历方法、存储方式、矩阵转换等问题做重点掌握。在C语言中,访问二维数组的数族元素一般采用双层循环的方法实现,因为二维数组具有两个下标:行下标和列下标;二维数组可以按行或者按列转化成一维数组进行存储;对二维数组进行行列转换的时候,要将行下标和列下标进行互换。考生还应该掌握上三角矩阵、下三角矩阵的特性,在考试中,矩阵的表达形式经常考到二维数组的坐标转换。

5. 数制转换

该部分在以往的机试中占11%,包括两类问题:一是整数合并,而是类型转换,例如对一个数的各位进行一系列的变化。在复习该部分时,考生应该注意C语言中int、long、float、double类型数据所占的存储空间大小和精度,注意%(模)运算和/(整除)运算的特点,特别应该灵活的使用模运算与除法运算求数据相应位数上的数值,掌握强制类型转换的方法以及按规定的位数保留小数的方法。

6. 素数

该部分在历年机试中占6%,考生应该牢固掌握素数的基本概念和判断素数的方法,特别要求考生注意整数1不是素数,所以在判断素数时应该从2开始,到(n-1)结束,能够除尽的不是素数,不能除尽的是素数。判断素数是C语言中的一个基本算法,不仅会在程序填空和程序改错中也会有所涉及,应该重点复习。

上机改错题常见错误

1. 书写标识符时,忽略了大小写字母的区别。 main() {

int a=5;

Printf(“%d”,A); }

2. 忽略了变量的类型,进行了不合法的运算。 main() {

float a,b;

printf(“%d”,a%b); }

3. 将字符常量与字符串常量混淆。 char c; c=“a”;

4. 忽略了“=”与“==”的区别。 if(a=3)…… if(a==3)…… 5. 忘记加分号。 a=1 b=1

6. 多加分号。 {

z=x+y; t=z/100;

printf(“%f”,t); };

int a[10];

for(i=0;i<10;i++); s+=a[i];

7. 输入变量时忘记加地址运算符“&”。 int a,b;

scanf(“%d%d”,a,b);

8. 输入数据的方式与要求不符。 scanf(“%d%d”,&a,&b); 输入3,4

9. 输入字符的格式与要求不一致。

在用%c格式输入字符时,空格字符和转义字符都将作为有效字符输入 scanf(“%c%c%c”,&c1,&c2,&c3); 输入a b c 10.输入输出的数据类型与所用格式说明符不一致。 int a=3; float b=4.5;

printf(“%f%d”,a,b);

11.输入数据时,企图规定精度。 scanf(“%7.2”,&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(“errer\\n”); }

13.定义数组时误用变量 int n;

scanf(“%d”,&n); int a[n];

14.在定影数组时,将定义的“元素个数”误认为是可使的最大下标值 int a[10]={1,2,3,4,5,6,7,8,9,10}; printf(“%d”,a[10]);

15.在不该加地址运算符&的未知加了地址运算符。 scanf(“%s”,&str);