江苏省计算机等级考试上机材料C语言.docx
- 文档编号:12022172
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:49
- 大小:30.82KB
江苏省计算机等级考试上机材料C语言.docx
《江苏省计算机等级考试上机材料C语言.docx》由会员分享,可在线阅读,更多相关《江苏省计算机等级考试上机材料C语言.docx(49页珍藏版)》请在冰豆网上搜索。
江苏省计算机等级考试上机材料C语言
上机考试考点总结
注意事项:
上机试题改错18分+编程22分70分钟(占总成绩的40%)
一、改错题
设错类型:
语法错误,语义错误,算法错误
江苏省C语言改错题目有四个错误点。
其中两个语法错误,两个逻辑错误。
启动Turboc2.0,按F10,选中File->new,首先按照试卷上的格式将改错题目录入到turboc中,按F10,然后选中compile->compiletoobj,如果有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(intch)判断是否为数字,isalpha(charc)是否是字母。
#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()
{
inta=5;
Printf(“%d”,A);
}
2.忽略了变量的类型,进行了不合法的运算。
main()
{
floata,b;
printf(“%d”,a%b);
}
3.将字符常量与字符串常量混淆。
charc;
c=“a”;
4.忽略了“=”与“==”的区别。
if(a=3)……
if(a==3)……
5.忘记加分号。
a=1
b=1
6.多加分号。
{
z=x+y;
t=z/100;
printf(“%f”,t);
};
inta[10];
for(i=0;i<10;i++);
s+=a[i];
7.输入变量时忘记加地址运算符“&”。
inta,b;
scanf(“%d%d”,a,b);
8.输入数据的方式与要求不符。
scanf(“%d%d”,&a,&b);
输入3,4
9.输入字符的格式与要求不一致。
在用%c格式输入字符时,空格字符和转义字符都将作为有效字符输入
scanf(“%c%c%c”,&c1,&c2,&c3);输入abc
10.输入输出的数据类型与所用格式说明符不一致。
inta=3;
floatb=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.定义数组时误用变量
intn;
scanf(“%d”,&n);
inta[n];
14.在定影数组时,将定义的“元素个数”误认为是可使的最大下标值
inta[10]={1,2,3,4,5,6,7,8,9,10};
printf(“%d”,a[10]);
15.在不该加地址运算符&的未知加了地址运算符。
scanf(“%s”,&str);
模拟测试题一
一、改错题
【程序功能】
以下程序的功能是:
对获得学位的学生名单排序。
排序要求:
数组元素按照degree值以自定义序列bachelor、master、doctor的顺序排列,对于degree值相同的那些元素,按照name的值以字典序排列。
【测试数据与运行结果】
测试数据:
Amaster运行结果:
Bbachelor
BbachelorDbachelor
CdoctorAmaster
DbachelorEmaster
EmasterCdoctor
【含有错误的源程序】
#include
#include
#include
struct
{
charname[10];
chardegree[10];
}ST;
voidsort(STx[],intn,char*key[],intm)
{
inti,j,k,con1,con2;
STv;
for(i=0;i for(j=0;j { for(k=0;k if(strcmp(x[j].degree,key[k])==0) { con1=k; break; } for(k=0;k if(strcmp(x[j+1].degree,key[k])==0) { con2=k; break; } if((con1>con2||con1==con2)&&strcmp(x[j].name,x[j+1].name)>0) { v=x[j]; x[j]=x[j+1]; x[j+1]=v; } } } voidmain() { STs[5]={{"A","master"},{"B","bachelor"},{"C","doctor"},{"D","bachelor"}, {"E","master"}}; charsortkey[]={"bachelor","master","doctor"}; inti; sort(s,5,sortkey,3); for(i=0;i<5;i++) printf("\n%s%s",s[i]->name,s[i]->degree); getch(); } 【要求】 ●将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 ●改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或者编译预处理命令,但不能增加其他语句,也不能删去整条语句。 ●将改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。 二、编程题 【编程要求】 1.编写函数intfindword(char*s,char*t,charch[][20])。 函数功能: 在由若干句子组成的字符串s中搜索包含字符串t的所有单词,将这些单词存放在数组ch中,函数返回找到的单词格式。 称字符串s为“被搜索字符串”,字符串t为“搜索字符串”。 2.编写main函数。 函数功能: 声明数组s和t,用被搜索字符串和搜索字符串初始化这两个数组。 调用函数findword对给定的测试数据进行检索,并将检索到的包含字符串t的所有单词及单词的个数保存到结果文件myf2.out中。 最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 【测试数据及运行结果】 被搜索字符串: Nolivingmanallthingscan.Graspall,loseall. 搜索字符串: all 检索结果: all,Graspall,loseall.3 【要求】 ●源程序文件名必须取为myf2.c,输出结果文件名必须取为myf2.out ●数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 ●源程序文件和运行结果文件必须保存在考试盘的根目录下,供阅卷用。 ●不要复制扩展名为OBJ和EXE的文件到考试盘上。 模拟测试题二 一、改错题 【程序功能】 查找并输出同时出现的两个一维数组中的整数,每个一维数组中的元素均已按值升序排列,并且每个数组中的元素没有相同的值。 函数intcoincidence_count(inta[],intb[],intm,intn,intc[])按上述要求在a指向的数组前m个元素和b指向的数组前n个元素中查找,将找到的整数保存到c指向的数组中。 【测试数据与运行结果】 测试数据: a数组中的数据: 1,2,4,8,10,12,13,14,16,18 b数组中的数据: 3,4,7,8,9,10,12,13,16,19 运行结果: No.Array1Array2 013 124 247 388 4109 51210 61312 71413 81616 91819 【含有错误的源程序】 #include #include intcoincidence_count(inta[],intb[],intm,intn,intc[]) { intcount,ia,ib; count=ia=ib=0; while(ia if(a[ia] ia++; else(a[ia]>b[ib]) ib++; else { c[count]=a[ia]; ia++; ib++; } returncount; } voidmain() { inta[]={1,2,4,8,10,12,13,14,16,18},b[]={3,4,7,8,9,10,12,13,16,19}; intc[10],i,na,nb,n; na=sizeof(a)/sizeof(int); nb=sizeof(b)/sizeof(int); printf("\nCoincidenceCountoftwoIncreasingArrays\n"); printf("\nNo.Array1Array2"); for(i=0;i printf("\n%3f%10f%10f",i,a[i],b[i]); printf("\nThereare%dequalnumbers: ",n=coincidence_count(a,b,na,nb,c)); for(i=0;i printf("%5d",c[i]); getch(); } 【要求】 ●将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 ●改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或者编译预处理命令,但不能增加其他语句,也不能删去整条语句。 ●将改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。 二、编程题 【编程要求】 1.编写函数voidjosephu(inta[],intb[],intn,intm)实现如下模拟处理功能: a指向的数组中存储了n个人的编号(从1开始按序编号到n)。 n个人围坐成一圈,从编号为1的人开始报数(从1到m报数),凡报到m的人出列。 将每次出列的人的编号依次保存在b指向的数组中,直到最后一个人出列为止。 2.编写main函数。 用给定的测试数据调用josephu函数,将经函数处理后得到的n个依次出列的人的编号保存到结果文件myf2.out中。 最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 【测试数据及运行结果】 测试数据: n=10,m=3 运行结果: 3,6,9,2,7,1,8,5,10,4 Myexamnumberis: 0112400123(考生本人准考证号) 【要求】 ●源程序文件名必须取为myf2.c,输出结果文件名必须取为myf2.out ●数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 ●源程序文件和运行结果文件必须保存在考试盘的根目录下,供阅卷用。 ●不要复制扩展名为OBJ和EXE的文件到考试盘上。 模拟测试题三 一、改错题 【程序功能】 统计并输出子串substr在母串string中出现的次数,输出该子串每次出现在母串中的起始位置序号(序号从1开始)。 【测试数据与运行结果】 显示母串: “Thisisabook.Thatisabook.” 输入子串: “is” 运行结果: k=3 3621 【含有错误的源程序】 #include #include #defineN20 intstr_count(char*string[],char*substr[],intioc[]) { inti,j,k,t,m=0; for(i=0;string[i]! ='\0';i++) { t=0; for(j=i,k=0;substr[k]==string[k];k++,j++) if(substr[k+1]=='\0') { t=1; break; } if(t) ioc[++m]=i+1; } returnm; } main() { inti,k,ioc[N]; charstr[80]=Thisisabook.Thatisabook.,substr[N]; printf("string: %s\n",str); printf("substring: "); gets(substr); k=str_count(str,substr,ioc); printf("\nk=%d\n",k); for(i=1;i<=k;i++) printf("%4d",ioc[i-1]); getch(); } 【要求】 ●将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 ●改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或者编译预处理命令,但不能增加其他语句,也不能删去整条语句。 ●将改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。 二、编程题 【编程要求】 1.编写函数voidsqueeze(char*s1,char*s2,char*s3),其功能是: 从s1指向的字符串中删去所有在s2指向的字符串中已出现的字符,将从s1中删除的字符保存到s3指向的数组中。 2.编写main函数。 用给定的测试字符串s1和s2调用squeeze函数,将处理后的s1字符串和s3字符串保存到结果文件myf2.out中。 最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 【测试数据及运行结果】 测试数据: s1: “abbcdefgghiijkl”,s2: “bdglkw” 运行结果: s1: acefhiij,s3: bbdggkl myexamnumberis: 0112400123(本人准考证号) 【要求】 ●源程序文件名必须取为myf2.c,输出结果文件名必须取为myf2.out ●数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 ●源程序文件和运行结果文件必须保存在考试盘的根目录下,供阅卷用。 ●不要复制扩展名为OBJ和EXE的文件到考试盘上。 模拟测试题四 一、改错题 【程序功能】 函数voidyanghui(inty[][N],intx[][N],intn)生成n行杨辉三角形数据构成的矩阵,并将其存放到y指向的二维数组中,再将y数组中的矩阵顺时针旋转90度后存储到x指向的二维数组中。 主函数中分别输出n行杨辉三角形及顺时针旋转90度后的n行杨辉三角形。 【测试数据与运行结果】 n=4时应输出 1 11 121 1331 1111 321 31 1 【含有错误的源程序】 #include #include #defi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 江苏省 计算机等级考试 上机 材料 语言