江苏省计算机等级考试——上机考试注意事项
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机等级考试强化——上机考试部分
1.概述
上机考试有两部分组成:改错题和编程体
考试时间:70分钟
改错题:需要将程序录入并修改出其中的错误,一般错误数3—4
编程题:需要编写出一个程序,并得到正确的运行结果
2.常见题型和考点
改错题:
●系统函数的使用:头文件的包含。函数处CTRL+F1
●自定义函数:定义、调用、返回值。注意数据类型的一致、形实参对应关系的一
致、函数的数据类型和返回值类型的一致。定义和调用对照判断
●算法分析:算法模型的理解,重点在元素间的关系,边界情况,初始化是否正确
等。一般算法逻辑思想不会错。模型要清晰、对象不能错、边界要注意、[计算结
果]换算是否对。考试的重点和难点。
●语法规则:变量定义、输入输出、结构化的语句结构、数组和指针变量初始化。
根据编译判断,注意搜索上下数行。
●逻辑关系:通常在if、while、for语句中出现。注意逻辑和条件运算符是否正确。
编程题:
●主要涉及文件操作、函数定义、数组问题
●常见考点有:求满足条件的数、生成一组数、字符和数值的转化、对字符串进行
压缩[解压,插入,删除,合并,抽取]
●常见算法有:排序、交换两数、分解出整数的每位数字、求素数、反序、数字字
符互换[0+‟0‟]、最大公约数、进制的概念、求整数的因子、阶乘、逼近算法
3.一点非技术性技巧
◆一定要将改错题输入到文件,即使不会改
◆一定要检查文件是否存盘
◆编程题一定要做,即使只会几个语句,如#include、定义一些变量包括建立文件指
令等
◆编程题一定要写出自定义函数,即使函数的内容不会写
◆如果编程程序无法得到正确结果,可以使用C编辑器直接写出运行结果,在给出
文件名时注意扩展名是否正确,不正确在windows下用使用重命名功能来改名
◆程序书写时一定要使用缩进格式
4.改错题典型例题讲解
[改错题]
下面的程序能够从键盘上接收一个含有空格的字符串,然后按照字典顺序对所有字符排序,再删除重复出现的字符// gets 排序后面的字符向前移动
#include “stdio.h”
void main()
{
char str[100], *p, *q, *r, c;
printf(“Input a string:”);
scanf(“%s”,str); //gets(str); //输入
for(p=str; *p; p++)
{ // 选择排序法,p当前已排序的位置,q向后搜索,r选取for(q=r=p; *q; q++)
if(*r > *q) *r = *q; // 此处用来确定位置,是指针赋值r=q if(r/=p) { c=*r; *r =*p; *p = c;} //交换,排序,q和r不一致交换r!=p }
for(p=str; *p; p++)
{
for(q=p; *p = = *q; q++)
strcpy(p+1,q); //出现系统函数,看文件头,在此用CTRL+F1 #include”string.h”
}
printf(“result: %s \n”,str);
}
对于求n!,当n较大时,会产生溢出。为完成高精度阶乘运算,可以用一个整数型数组存放一个参加运算的操作数,其中每个数组元素存放十进制表示的正整数的一个数字位。下列函数fact中,kc表示进位,若当计算至m[MAX-1]时仍有进位,视为溢出,函数返回0,否则返回1
# define MAX 200
int fact(int n) // int fact(int n,int m[ ])
{
int i,j,k,kc;
m[0]=1; //使用了数组,但未定义
for(i=2; i<=n; i++)
{
kc=0;
for(j=0;n j { k = m[j]*i +kc; //计算乘,并加上进位 kc = kc/10; //注意kc的值为改变,kc = k/10 m[j] = k%10; } } if(kc!=0) return 0; else return 1; } main() { int a[MAX], i, n; printf(“Input n(n>0):”); scanf(“%c”, &n); //输入整数n, scanf(“%d”,&n); for(i=0; i printf(“%d!=”,n); //注意if语句的判定与函数返回值的关系 if(fact(n,a)) printf(“overflow \n”); //自定义函数调用,参数不匹配,观察自定义函数else // if(!fact(n,a)) { i=MAX-1; //输出 while(a[i] = = 0)i--; for(; i>=0 ;i --) printf(“%d”,a[i]); } printf(“\n”); } 下面的程序中函数divfun的功能是:对于s指向的一个含有数字字符和非数字字符的字符串(串长不超过80),将其中连续的数字字符转换为一个整数,如果连续的数字字符个数超过4个,则以4个数字字符为一组进行转换。将转换后生成的整数依次存放到整型数组a 中。函数返回放入a数组中整数的个数[可以想到函数中a为传入参数]。例如,若输入的字符串为“c123yz45! 786 * 56abc123456789”则a数组中的数值分别为:(123,45,786,56,1234,5678,9) #include void divfun(char *s, int a[ ]) // 有返回值,int divfun(char *s, int a[ ]) { char *p = s; int i = 0, k,sum; while(*p) if(isdigit(*p)) //出现系统函数,看文件头,在此用CTRL+F1 #include”ctype.h” { sum = *p –…0‟; p++; k = 1; while(isdigit(*p)) { k++; if(k< = 4 ) {sum = sum + *p –…0‟; p++;} // sum = sum*10 + *p –…0‟ else {a[i++] = sum; k=1; sum = *p –…0‟; p++; } } a[i++] = sum; } else p++; return i-1; } main() { char *str; int i, n, num[40]; //char str[80]; gets(str); n = divfun(str,num); //调用没问题 puts(str); for(i=0; i<=n; i++) printf(“%6d”, num[i]); printf(“\n”); } 5.编程题典型例题讲解 [编程题] 程序功能:还原被压缩的数据