江苏省计算机等级考试——上机考试注意事项

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.编程题典型例题讲解

[编程题]

程序功能:还原被压缩的数据

相关文档
最新文档