下面小编为大家带来计算机等级考试四级上机编程修养(上)(共含10篇),希望大家喜欢!同时,但愿您也能像本文投稿人“神神化化”一样,积极向本站投稿分享好文章。
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?
我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对
于速度快,只要编得多也就熟能生巧了。
我认为好的程序员应该有以下几方面的素质:
1、有专研精神,勤学善问、举一反三。
2、积极向上的态度,有创造性思维。
3、与人积极交流沟通的能力,有团队精神。
4、谦虚谨慎,戒骄戒燥。
5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。
这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如
果我要了解一个作者,我会看他所写的小说,如果我要了解一个画家,我会看他所画的图
画,如果我要了解一个工人,我会看他所做出来的产品,同样,如果我要了解一个程序员
,我想首先我最想看的就是他的程序代码,程序代码可以看出一个程序员的素质和修养,
程序就像一个作品,有素质有修养的程序员的作品必然是一图精美的图画,一首美妙的歌
曲,一本赏心悦目的小说。
我看过许多程序,没有注释,没有缩进,胡乱命名的变量名,等等,等等,我把这种人统
称为没有修养的程序,这种程序员,是在做创造性的工作吗?不,完全就是在搞破坏,他
们与其说是在编程,还不如说是在对源程序进行“加密”,这种程序员,见一个就应该开
除一个,因为他编的程序所创造的价值,远远小于需要在上面进行维护的价值。
程序员应该有程序员的修养,那怕再累,再没时 间,也要对自己的程序负责。我宁可要那
种动作慢,技术一般,但有良好的写程序风格的程序员,也不要那种技术强、动作快的“
搞破坏”的程序员。有句话叫“字如其人”,我想从程序上也能看出一个程序员的优劣。
因为,程序是程序员的作品,作品的好坏直截关系到程序员的声誉和素质。而“修养”好
的程序员一定能做出好的程序和软件。
有个成语叫“独具匠心”,意思是做什么都要做得很专业,很用心,如果你要做一个“匠
”,也就是造诣高深的人,那么,从一件很简单的作品上就能看出你有没有“匠”的特性
,我觉得做一个程序员不难,但要做一个“程序匠”就不简单了。编程序芗虻ィ喑?nbsp;
有质量的程序就难了。
我在这里不讨论过深的技术,我只想在一些容易让人忽略的东西上说一说,虽然这些东西
可能很细微,但如果你不注意这些细微之处的话,那么他将会极大的影响你的整个软件质
量,以及整个软件程的实施,所谓“千里之堤,毁于蚁穴”。
“细微之处见真功”,真正能体现一个程序的功底恰恰在这些细微之处。
这就是程序员的——编程修养。我总结了在用c/c 语言(主要是c语言)进行程序写作上
的三十二个“修养”,通过这些,你可以写出质量高的程序,同时也会让看你程序的人渍
渍称道,那些看过你程序的人一定会说:“这个人的编程修养不错”。
01、版权和版本
02、缩进、空格、换行、空行、对齐
03、程序注释
04、函数的[in][out]参数
05、对系统调用的返回进行判断
06、if 语句对出错的处理
07、头文件中的#ifndef
08、在堆上分配内存
09、变量的初始化
10、h和c文件的使用
11、出错信息的处理
12、常用函数和循环语句中的被计算量
13、函数名和变量名的命名
14、函数的传值和传指针
15、修改别人程序的修养
16、把相同或近乎相同的代码形成函数和宏
17、表达式中的括号
18、函数参数中的const
19、函数的参数个数
20、函数的返回类型,不要省略
21、goto语句的使用
22、宏的使用
23、static的使用
24、函数中的代码尺寸
25、typedef的使用
26、为常量声明宏
27、不要为宏定义加分号
28、||和&&的语句执行顺序
29、尽量用for而不是while做循环
30、请sizeof类型而不是变量
31、不要忽略warning
32、书写debug版和release版的程序
21、goto语究 使劲
22、宏的使用
23、static的使用
24、函数中的代码尺寸
25、typedef的使用
26、为常量声明宏
27、不要为宏定义加分号
28、||和&&的语句执行顺序
29、尽量用for而不是while做循环
30、请sizeof类型而不是变量
31、不要忽略warning
32、书写debug版和release版的程序
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对
于速度快,只要编得多也就熟能生巧了。
我认为好的程序员应该有以下几方面的素质:
1、有专研精神,勤学善问、举一反三。
2、积极向上的态度,有创造性思维。
3、与人积极交流沟通的能力,有团队精神。
4、谦虚谨慎,戒骄戒燥。
5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。
这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如
果我要了解一个作者,我会看他所写的小说,如果我要了解一个画家,我会看他所画的图
画,如果我要了解一个工人,我会看他所做出来的产品,同样,如果我要了解一个程序员
,我想首先我最想看的就是他的程序代码,程序代码可以看出一个程序员的素质和修养,
程序就像一个作品,有素质有修养的程序员的作品必然是一图精美的图画,一首美妙的歌
曲,一本赏心悦目的小说。
我看过许多程序,没有注释,没有缩进,胡乱命名的变量名,等等,等等,我把这种人统
称为没有修养的程序,这种程序员,是在做创造性的工作吗?不,完全就是在搞破坏,他
们与其说是在编程,还不如说是在对源程序进行“加密”,这种程序员,见一个就应该开
除一个,因为他编的程序所创造的价值,远远小于需要在上面进行维护的价值。
程序员应该有程序员的修养,那怕再累,再没时 间,也要对自己的程序负责。我宁可要那
种动作慢,技术一般,但有良好的写程序风格的程序员,也不要那种技术强、动作快的“
搞破坏”的程序员。有句话叫“字如其人”,我想从程序上也能看出一个程序员的优劣。
因为,程序是程序员的作品,作品的好坏直截关系到程序员的声誉和素质。而“修养”好
的程序员一定能做出好的程序和软件。
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快? 我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。
我认为好的程序员应该有以下几方面的素质:
1、有专研精神,勤学善问、举一反三。
2、积极向上的态度,有创造性思维。
3、与人积极交流沟通的能力,有团队精神。
4、谦虚谨慎,戒骄戒燥。
5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。
这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如 果我要了解一个作者,我会看他所写的小说,如果我要了解一个画家,我会看他所画的图画,如果我要了解一个工人,我会看他所做出来的产品,同样,如果我要了解一个程序员,我想首先我最想看的就是他的程序代码,程序代码可以看出一个程序员的素质和修养,程序就像一个作品,有素质有修养的程序员的作品必然是一图精美的图画,一首美妙的歌曲,一本赏心悦目的小说。
我看过许多程序,没有注释,没有缩进,胡乱命名的变量名,等等,等等,我把这种人统称为没有修养的程序,这种程序员,是在做创造性的工作吗?不,完全就是在搞破坏,他们与其说是在编程,还不如说是在对源程序进行“加密”,这种程序员,见一个就应该开除一个,因为他编的程序所创造的价值,远远小于需要在上面进行维护的价值。
程序员应该有程序员的修养,那怕再累,再没时间,也要对自己的程序负责。我宁可要那种动作慢,技术一般,但有良好的写程序风格的程序员,也不要那种技术强、动作快的“ 搞破坏”的程序员。有句话叫“字如其人”,我想从程序上也能看出一个程序员的优劣。因为,程序是程序员的作品,作品的好坏直截关系到程序员的声誉和素质。而“修养”好的程序员一定能做出好的程序和软件。 于 265考试网
有个成语叫“独具匠心”,意思是做什么都要做得很专业,很用心,如果你要做一个“匠 ”,也就是造诣高深的人,那么,从一件很简单的作品上就能看出你有没有“匠”的特性 ,我觉得做一个程序员不难,但要做一个“程序匠”就不简单了。编程序有质量的程序就难了。
我在这里不讨论过深的技术,我只想在一些容易让人忽略的东西上说一说,虽然这些东西可能很细微,但如果你不注意这些细微之处的话,那么他将会极大的影响你的整个软件质量,以及整个软件程的实施,所谓“千里之堤,毁于蚁穴”。
“细微之处见真功”,真正能体现一个程序的功底恰恰在这些细微之处。
这就是程序员的――编程修养。我总结了在用C/C++语言(主要是C语言)进行程序写作上的三十二个“修养”,通过这些,你可以写出质量高的程序,同时也会让看你程序的人渍渍称道,那些看过你程序的人一定会说:“这个人的编程修养不错”。
1、版权和版本
———————
好的程序员会给自己的每个函数,每个文件,都注上版权和版本。
对于c/c 的文件,文件头应该有类似这样的注释:
/************************************************************************
*
* 文件名:network.c
*
* 文件描述:网络通讯函数集
*
* 创建人: hao chen, 2月3日
*
* 版本号:1.0
*
* 修改记录:
*
*
************************************************************************/
而对于函数来说,应该也有类似于这样的注释:
/*================================================================
*
* 函 数 名:xxx
*
* 参 数:
*
* type name [in] : descripts
*
* 功能描述:
*
* ..............
*
* 返 回 值:成功true,失败false
*
* 抛出异常:
*
* 作 者:chenhao /4/2
*
*
================================================================*/
这样的描述可以让人对一个函数,一个文件有一个总体的认识,对代码的易读性和易维护
性有很大的好处。这是好的作品产生的开始。
2、缩进、空格、换行、空行、对齐
————————————————
i) 缩进应该是每个程序都会做的,只要学程序过程序就应该知道这个,但是我仍然看过不
缩进的程序,或是乱缩进的程序,如果你的公司还有写程序不缩进的程序员,请毫不犹豫
的开除他吧,并以破坏源码罪起诉他,还要他赔偿读过他程序的人的精神损失费。缩进,
这是不成文规矩,我再重提一下吧,一个缩进一般是一个tab键或是4个空格。(最好用tab
键)
ii) 空格。空格能给程序代来什么损失吗?没有,有效的利用空格可以让你的程序读进来
更加赏心悦目。而不一堆表达式挤在一起。看看下面的代码:
ha=(ha*128 *key )%tabptr->size;
ha = ( ha * 128 *key ) % tabptr->size;
有空格和没有空格的感觉不一样吧。一般来说,语句中要在各个操作符间加空格,函
数调用时,要以各个参数间加空格。如下面这种加空格的和不加的:
if ((hproc=openprocess(process_all_access,false,pid))==null){
}
if ( ( hproc = openprocess(process_all_access, false, pid) ) == null ){
}
iii) 换行。不要把语句都写在一行上,这样很不好。如:
for(i=0;i
我拷,这种即无空格,又无换行的程序在写什么啊?加上空格和换行吧。
for ( i=0; i if ( ( a[i] < ’0’ || a[i] >’9’ ) && ( a[i] < ’a’ || a[i] >’z’ ) ) { break; } } 好多了吧?有时候,函数参数多的时候,最好也换行,如: createprocess( null, cmdbuf, null, null, binhh, dwcrtflags, envbuf, null, &sistartinfo, &prinfo ); 条件语句也应该在必要时换行: if ( ch >= ’0’ || ch <= ’9’ || ch >= ’a’ || ch <= ’z’ || ch >= ’a’ || ch <= ’z’ ) iv) 空行。不要不加空行,空行可以区分不同的程序块,程序块间,最好加上空行。如: handle hprocess; process_t procinfo; /* open the process handle */ if((hprocess = openprocess(process_all_access, false, pid)) == null) { return lse_misc_sys; } memset(&procinfo, 0, sizeof(procinfo)); procinfo.idproc = pid; procinfo.hdproc = hprocess; procinfo.misc |= msc***a_proc; return(0); v) 对齐。用tab键对齐你的一些变量的声明或注释,一样会让你的程序好看一些。如: typedef struct _pt_man_t_ { int numproc; /* number of processes */ int maxproc; /* max number of processes */ int maxproc; /* max number of processes */ int numevnt; /* number of events */ int maxevnt; /* max number of events */ handle* phndevnt; /* array of events */ dword timeout; /* time out interval */ handle hpipe; /* namedpipe */ tchar usr[maxusr];/* user name of the process */ int nummsg; /* number of message */ int msg[maxmsg];/* space for intro process communicate */ } pt_man_t; 怎么样?感觉不错吧。 这里主要讲述了如果写出让人赏心悦目的代码,好看的代码会让人的心情愉快,读起代码 也就不累,工整、整洁的程序代码,通常更让人欢迎,也更让人称道。现在的硬盘空间这 么大,不要让你的代码挤在一起,这样它们会抱怨你虐待它们的。好了,用“缩进、空格 、换行、空行、对齐”装饰你的代码吧,让他们从没有秩序的土匪中变成一排排整齐有秩 序的正规部队吧。 3、程序注释 —————— 养成写程序注释的习惯,这是每个程序员所必须要做的工作。我看过那种几千行,却居然 没有一行注释的程序。这就如同在公路上驾车却没有路标一样。用不了多久,连自己都不 知道自己的意图了,还要花上几倍的时 间才看明白,这种浪费别人和自己的时 间的人,是 最为可耻的人。 是的,你也许会说,你会写注释,真的吗?注释的书写也能看出一个程序员的功底。一般 来说你需要至少写这些地方的注释:文件的注释、函数的注释、变量的注释、算法的注释 、功能块的程序注释。主要就是记录你这段程序是干什么的?你的意图是什么?你这个变 量是用来做什么的?等等。 不要以为注释好写,有一些算法是很难说或写出来的,只能意会,我承认有这种情况的时 候,但你也要写出来,正好可以训练一下自己的表达能力。而表达能力正是那种闷头搞技 术的技术人员最缺的,你有再高的技术,如果你表达能力不行,你的技术将不能得到充分 的发挥。因为,这是一个团队的时代。 好了,说几个注释的技术细节: i) 对于行注释(“//”)比块注释(“/* */”)要好的说法,我并不是很同意。因为一 些老版本的c编译器并不支持行注释,所以为了你的程序的移植性,请你还是尽量使用块注 释。 ii) 你也许会为块注释的不能嵌套而不爽,那么你可以用预编译来完成这个功能。使用“# if 0”和“#endif”括起来的代码,将不被编译,而且还可以嵌套。 4、函数的[in][out]参数 ——————————— 我经常看到这样的程序: funcname(char* str) { int len = strlen(str); ..... } char* getusername(struct user* puser) { return puser->name; } 不!请不要这样做。 你应该先判断一下传进来的那个指针是不是为空。如果传进来的指针为空的话,那么,你 的一个大的系统就会因为这一个小的函数而崩溃。一种更好的技术是使用断言(assert) ,这里我就不多说这些技术细节了。当然,如果是在c 中,引用要比指针好得多,但你也 需要对各个参数进行检查。 写有参数的函数时,首要工作,就是要对传进来的所有参数进行合法性检查。而对于传出 的参数也应该进行检查,这个动作当然应该在函数的外部,也就是说,调用完一个函数后 ,应该对其传出的值进行检查。 当然,检查会浪费一点时 间,但为了整个系统不至于出现“非法操作”或是“core dump” 的系统级的错误,多花这点时 间还是很值得的。 5、对系统调用的返回进行判断 —————————————— 继续上一条,对于一些系统调用,比如打开文件,我经常看到,许多程序员对fopen返回的 指针不做任何判断,就直接使用了。然后发现文件的内容怎么也读出不,或是怎么也写不 进去。还是判断一下吧: fp = fopen(“log.txt”, “a”); if ( fp == null ){ printf(“error: open file error\n”); return false; } 其它还有许多啦,比如:socket返回的socket号,malloc返回的内存。请对这些系统调用 返回的东西进行判断。
———————
好的程序员会给自己的每个函数,每个文件,都注上版权和版本。
对于c/c 的文件,文件头应该有类似这样的注释:
/************************************************************************
*
* 文件名:network.c
*
* 文件描述:网络通讯函数集
*
* 创建人: hao chen, 202月3日
*
* 版本号:1.0
*
* 修改记录:
*
*
************************************************************************/
而对于函数来说,应该也有类似于这样的注释:
/*================================================================
*
* 函 数 名:xxx
*
* 参 数:
*
* type name [in] : descripts
*
* 功能描述:
*
* ..............
*
* 返 回 值:成功true,失败false
*
* 抛出异常:
*
* 作 者:chenhao 2003/4/2
*
*
================================================================*/
6、if 语句对出错的处理
―――――――――――
先看一段程序代码吧。
if ( ch >= ’0’ && ch <= ’9’ ){
/* 正常处理代码 */
}else{
/* 输出错误信息 */
printf(“error ......n”);
return ( FALSE );
}
这种结构很不好,特别是如果“正常处理代码”很长时,对于这种情况,最好不要用else。先判断错误,如:
if ( ch < ’0’ || ch >’9’ ){
/* 输出错误信息 */
printf(“error ......n”);
return ( FALSE );
}
/* 正常处理代码 */
......
这样的结构,不是很清楚吗?突出了错误的条件,让别人在使用你的函数的时候,第一眼就能看到不合法的条件,于是就会更下意识的避免。
7、头文件中的#ifndef
――――――――――
千万不要忽略了头件的中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。
还是把头文件的内容都放在#ifndef和#endif中吧。不管你的头文件会不会被多个文件引用管你的头文件会不会被多个文件引用,你都要加上这个。一般格式是这样的:
#ifndef <标识>
#define <标识>
......
......
#endif
<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:
stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
(BTW:预编译有多很有用的功能。你会用预编译吗?)
(BTW:预编译有多很有用的功能。你会用预编译吗?)
机试一:
考试时间:9月23日 15:30
抽到题目:已知数据文件IN.DAT中存有200个两位数且相邻的两个数之间均不相等,并已调用函数readDat把这些数存入数组b中,请考生编制一个函数jsVal(),实现的功能是对经常上下波动的数据可采用只记录峰值的数据压缩方法,即每次将采样到的当前值和前一次值比较,如数据变化方向改变(原递增现递减或原递减现递增),说明已过峰值,这时就将当前值记录下来,接着将结果依次存入数据b中(从0开始存放),注意数组b中的第一个数据a[0]原样存入b[0]单元中。最后调用输出函数writeDat()把结果c输出到文件OUT.DAT中。
例如:原数据: 35,69,87,73,62,54,60,70,......
压缩后: 35,73,60,......
注意:部分源程序存在文件PROG1.C文件中。
程序中已定义:a[200]、b[200]。
请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat的内容。
补充函数:
void jsVal()
{ int i;
b[0]=a[0];cnt=1;
for(i=1;i
if((a>a[i-1]&&a>a[i+1])||(a}
机试二:
考试时间:9月23日 15:00 (供大家参考一下,祝大家上机成功!)
已知在文件IN.DAT中存有N个实数(N<200), 函数ReadDat( )是读取这N个实数并存入数组xx中。请编制函数CalValue( ), 其功能要求: 1.求出这N个实数的平均值aver; 2.分别求出这N个实数中大于平均值aver的实数的整数部分值之和sumint以及该实数的小数部分值之和sumdec, 最后调用函数WriteDat()把所求的结果输出到文件OUT2.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
void CalValue(void)
{
int i ;
long val ;
for(i = 0 ; i < N ; i++)
aver += xx ;
aver /= (double) N ;
for(i = 0 ; i < N ; i++) {
if(xx >aver) {
val = (long) xx ;
sumint += val ;
sumdec += (xx - val) ;
}
}
}
一.熟悉考试场地及环境,尤其要熟悉考场的硬件情况和所使用的相关软件的情况。
1、对考场的情况应充分熟悉,以免临场影响情绪(个别考生甚至出现手足无措的情况)。例如,考场使用的计算机你是否熟悉?如何开机,如何进入考试系统都是应该熟练掌握的。
2、键盘的手感如何?如果键盘的手感不好,应想办法增加练习机会,尽可能使不舒适感减少。否则考试时不仅影响速度,更影响情绪。
3、对考试系统所使用的汉字系统UCDOS你是否熟悉,如果不熟悉,应练习并熟悉之。你所习惯使用的汉字输入法是否加载了?如果没有加载,应与考场工作人员或负责人联系,由他们告诉加载方法。个别输入法可能还需考试工作人员加装相应软件,因此一定要在考试前准备好。
4、你所考的语言考场是使用的什么版本,如何调用,也应考前就弄清楚并熟悉之。这方面考FoxBASE和QBASIC语言的一般问题不大,因为这两种语言考试系统的要求比较统一,各考场比较一致。而FORTRAN、C、Pascal语言随版本的高低有较大的区别。一般讲,低版本没有帮助系统(FORTRAN)或帮助系统过于简单,而高版本有较全面的帮助系统。因此,用惯了高版本的考生在使用低版本软件时,往往因为无法求助而困惑;而用惯了低版本软件的考生又往往不熟悉高版本软件的使用界面。如果考场所使用的软件是你所不熟悉的,一定要想办法迅速熟悉起来。
二.学会并习惯使用帮助系统
QBASIC、turbo C 2.0、FoxBASE+2.1、vb、vf都有较全面的帮助系统。熟练掌握之,可以减少记忆量,解决解题中的疑难问题。
三.上机做题时应注意的事项
上机考试的评分是以机评为主,人工复查为辅的。机评当然不存在公正性的问题,但却存在呆板的问题,有时还可能因为出题者考虑不周出现错评的情况。考生做题时不充分考虑到这些情况,也可能吃亏。下面以二级考试为主,按DOS题、程序修改题和编程题三部分分别讲一下应重点注意的问题。
1.DOS命令部分由于条件限制,不可能考很多内容。
2.对编程题只要在时间上留足。做题时不急不燥、认真审题,应该讲是问题不大的。当然,平常如能多做练习,有条件的多做实战演习,就更容易顺利通过了。我们考点有些考生在我这里做过很多的上机练习,实际考试时有不少人在半个小时内全部做完,最快的考生十多分钟即离开了机房(可不是不会做,而是全做对了)。
几种语言中,QB的编程题相对较为简单,多数时候相当于填空;Fortran语言思路也较简单,但要求熟悉常用算法(其他语言在算法上都有提示),如果不知道算法,想破脑袋也做不出来。这两种语言没有什么可说的。
Pascal和C难度接近,出题的方法与形式也接近。考生要注意的是在浏览整个程序时按子程序分别对待,如果想把程序的每一行都完全理解,完全是浪费时间。重点注意指定要编制的子程序中需使用和设置的变量,把它们的来龙去脉搞清楚就行了。至于输入输出子程序,则只要知道文件名、输入输出变量的情况就可以了。然后即可集中精力于编制子程序。注意在程序的编译、连接过程中可能有错误提示似乎指向不允许考生改动之处,这时千万不要被迷惑。只要把你的子程序编正确了,程序一定可以正确运行。
FoxBASE的编程题难度相差极大,如果运气不好,抽到一道难的,可能好半天还不能看清题意(运气好,抽到简单的题,三两下就可搞定)。这时千万不可轻言放弃,即使你完全编不出程序也不要紧,把题中要求的数据库结构正确建立起来也能够得不少于10分(多数时候可得20分之多)。
3.怀疑题目有错要及时反映
最后要特别说明一点,等级考试由于多方面的原因,出题时可能有错误。虽然这个错误在整体上占的比例是很小的,但具体到考生个人,影响就太大了。
4考试结束不要急于离开
为了切实保护考生利益,在每场考试结束后会立即评分(机评),并将得分为零分的考生名单予以公布。除非监考人员确定是考生完全不会做或故意得零分,多数考点会给得零分考生一次重考的机会。因此考试完毕(尤其是提前时间较多的考生),一定要耐心等待评分结果公布再离开。
第一条:审题要仔细!
正式考试的时候会遇到很多面熟的题目,这些题目有的似乎和平常资料中看到的一样,然而,千万不要见到面熟的题目而沾沾自喜,因为有很多的“陷阱”会使你审题的时候就出错!
我们看一道所有人都做过的的 “数字题目” 。
考试中心命题组第23题:
已知在文件in.dat中存有N个实数,(N<200),函数readdat是读取这N个实数并存入数组xx中。
请编制函数CalValue(),其功能要求:
1、求出这N个实数的整数部分平均值aver;
2、分别求出这N个实数中其整数部分值小于平均值ever的数的整数部分值之和sumint与小数部分之和sumdec
最后调用函数WriteDat()把所求的结果输出到文件OUT8.dat中。
这一题看起来很眼熟,然而你仔细看!
1、aver是整数部分的平均值!不是普通的哦!
2、整数部分值小于平均值ever的数的整数部分值之和sumint与小数部分之和sumdec!
原来这么复杂!稍不留心就错了,结果就想当然的0分
考试中心命题组第4题
函数ReadDat()实现从文件ENG.IN中读取一篇英文文章存入到字符
串数组xx中;请编制函数ComWord()分别计算出10个不区分大小写
的英文单词的首字母(b,c,f,s,n,r,u,e,o,p)的频数并依次存入
整型数组yy[0]至yy[9]中,最后调用函数WriteDat( )把结果yy
输出到文件PS1.OUT中。
这题也很眼熟,然而你仔细看!
英文单词的首字母,不是平常的字母的个数,是作为单词的首字母的个数啊。
上面两道题目并没有在其他资料上见过,考试的时候也不一定会出,这里仅仅是给大家提个醒儿,正式考试一定要仔细审题,严格按照题目的要求去做,不要受以前做过的题目的影响。
第二条:一定要考虑除零、溢出、类型转换、精度等细节问题!
虽然我们在平时学C语言的时候老师都提醒过,可是真正到了编程序的时候,却没有几个人会考虑。这些细节问题似乎并不直接影响题目的输出结果,然而,因为溢出和类型转换错误而造成考试得不到满分的可是大有人在啊! 我们看下面一道最害人的题目!,很多朋友考了这道题目都没有过。
下面来看看你为什么是0分!
考试中心命题组64题:
请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,
仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS8.DAT中。
替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),
如果原字符小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。
这道题目所有的人都做过,但几乎就没有人做对,包括南开无忧在内!
原因就在于这一句!
:int f; f=(xx[i][k]*11)%6;
char *pf; *pf=*pf*11%6;
表面看来,好象两个都对,
请你在TC下运行一下下面的代码,看一下结果你就知道了是怎么回事了:
main()
{
char nk='E',*nkp,wuyou='E';
int wy;
nkp=&nk;
*nkp=*nkp*11%6;
wy=wuyou*11%6;
printf(“%c %c %c %c ”,nk,*nkp,wuyou,wy);
printf(“%d %d %d %d ”,nk,*nkp,wuyou,wy);
}
看到结果了么?是不是很吃惊啊?
-9 -9 69 247
大家看到了,南开的结果是负数,连原来的变量nk都变成了负数,这显然错了。
聪明一点,知道int比char大,定义了个int,对了。
错误原因就是在TC2.0中char型变量只有一个字节,根本容纳不下'E'*11,
所以产生了溢出,上次考这道题目没过的同学是不是有所启发呢?
这里给出考试中心命题组的答案:
void encryptChar(){
int i,k,ch;
for(i=0;i for(k=0;k ch=xx[i][k];
ch=(ch*11)%6;
if(!(ch<=32||ch>=130))xx[i][k]=ch;
}
}
似乎一个例子不能说明什么,那就把上面的数字题目的答案给大家看看:
考试中心命题组23题答案:
int i;
long val;
float dec;
for(i=0;i val=(long)xx[i];
aver+=xx[i]-val;
}
aver/=(double)N;
for(i=0;i val=(long)xx[i];
dec=xx[i]-val;
if(dec>aver){
sumint+=val;
sumdec+=(xx[i]-val);
}
}
看到了吧,首先,val的定义,不是我们习惯的int,而是能容纳更大数的 long ,
这样在求和的时候就不会溢出,无忧和南开的答案没有吧
再看,算aver平均值的细节,不是我们平常习惯的aver/=N,更不是无忧的1.0* sum/N,
而是aver/=(double)N,所以大家在考试的时候要时刻注意你的变量类型,特别是在一些求平均值的题目中,千万要注意,用sum/n的时候,sum的类型一定不要用整形。
第三条:不要使用快捷键!
很多人在使用TC的时候习惯于用F9,CTRL+F9或者其他的热键,首先F9只是编译了,并没有运行程序,考试一定要运行一下你的程序才会有输出文件,否则一定是0分。热键在考试的时候是很危险的,因为UCDOS的热键和TC的冲突,CTRL+F9变成了全角半角转换,如果不小心按了,会导致你的程序有中文字符,编译的时候出错,而且很难查找排除错误! 所以建议大家在考试的时候使用ALT+红色字母 来调出菜单进行编译调试等步骤,建议步骤为:
写完代码后用ALT+F,S存盘,然后ALT+C,M编译,然后ALT+R,R运行,这样就万无一失了。
第四条:不要加载任何输入法
上机考试用的DOS环境内存十分有限,如果你加载了任何一个输入法,都有可能造成编译程序的时候出现out of memory 内存不足的情况,到那时就麻烦了。
程序只要写的对就可以,不要画蛇添足的加注释,没有人看的!
第五条:不要提前交卷!
考场一般使用NOVELL网络,有的时候存在网络状况不好而连接失败等问题。这时,如果你已经提前交卷的话就不太好了。另外也可以防止别人有意无意的改动你的程序。
第六条:考试时候的一些技巧
1、进入TC以后如果想查看题干要求,不用退出TC,直接用F12就可以显示出来。
2、用F12显示题目之后可以通过CTRL+BACKSPACE把题目定在屏幕上。
3、编译运行之后,可以通过type out.dat或edit out.dat或tc out.dat查看输出文件。
(千万不要改动!不然影响考试结果。如果不小心改动,再重新编译运行一次你的程序就可以了)
4、如果考试的时候不小心改动了代码的主函数或其他部分,可以进入考生目录下的warn隐藏目录,
把里边的备份文件复制到考生目录。步骤:
在考生目录下输入cd warn
输入copy *.c ..输入cd ..
就可以了
5、如果调试的时候不小心死循环了,可以通过CTRL+C或CTRL+BREAK来终止,如果连按多次都没反应,不要慌,立即找监考老师说明情况,可以重新启动机器继续答原题,你的程序还在,时间也是继续刚才的。所以这也提醒大家,运行程序之前一定要先存盘。
[计算机等级考试上机注意事项]
(2)“考试界面”窗口
“考试界面”窗口的功能有两个,如图1-5所示。
①显示题干部分,如单击“程序设计题”按钮就会显示“程序设计题”的题干部分,再单击其他按钮会显示其他题目的题干。注意:这里不能直接做题。
②窗口的左上角有一个“答题”菜单,单击此菜单会弹出下级菜单,从中启动软件考试答题(注意:图1-5中“当前题解析”按钮,在真实考试中是没有的,模拟软件加上是为了方便读者学习)。
4.考生文件夹
考生文件夹是放置题目提供的源程序、考生存放答题结果的惟一位置。考生做完题目后必须将结果放在考生文件夹中,否则结果必然是零分。考生文件夹的命名是系统默认的,一般为准考证号的前四位和后四位。单机版路径为“C:\WEXAM\准考证号前四位+后四位”;而网络版的路径为“K:\用户目录文件夹\准考证号前四位+后四位”。
5.考试意外
考试中如果遇到计算机死机、系统故障等问题,此时不要离开自己的座位,应立即举手向监考老师报告,由监考老师来处理问题,然后为考生重新抽题。如果处理问题的时间过长,最好提醒监考老师这其中耽误的时间,最好能要求重新抽题
考试、重新计时。
6.交卷
考试时间一到,考试系统会自动终止,考生将无法继续考试,之前的操作会被视作交卷;若提前交卷,则需使用“考生信息条”中的“交卷”按钮,如图1-6所示。
全国计算机等级考试三级数据库技术的上机考试满分100分,考试时间60分钟。
三级数据库技术上机考试共有1大题,即程序设计题。
1.考场情况
实际考试一般在某大中专院校的机房进行,当我们来到考场的时候,工作人员已经在各台计算机上安装了考试必备的各类软件。考试所用的所有计算机连成局域网,考试结束后,由统一的服务器负责收分、统计。
一般情况下,考生所报名的地方就是考试的考场。在参加正式考试前,一般该考场都会提供免费练习的时间,注意不要错过,一是可以提前熟悉考场环境,二是可以提前熟悉考试系统。
参加上机考试最好提前到达考场,在候考房间等待,一般情况会有监考老师安排排号。由于机房机器有限,一般是一批考生结束考试后另一批考生再进入。
2.登录
当考生进入指定的机位后,根据监考老师的指令开机(有的计算机已经开机),单击桌面上或“开始”菜单中的考试系统图标进入考试系统。
第一步要做的是在考试系统中登录,输入准考证号,确认身份进入考试系统。具体操作步骤如下:
步骤1:启动考试程序。从“开始”菜单或桌面上选择“全国计算机等级考试系统”的图标,启动“考试程序”,出现登录界面,如图1-1所示。
步骤2:身份验证。单击“开始登录”按钮,出现“身份验证”窗口,如图l.2所示。
步骤3:考生输入自己的准考证号,并对系统弹出的自己的姓名、身份证号等信息进行复核。如不正确,单击“否”重新输入;如正确,单击“是”进入下一环节,如图1-3所示。3.考试界面及答题
(1)考试信息条
考生登录成功后,阅读完考试题型介绍的内容,单击“开始考试”按钮就会进入“考试界面”窗口。
在整个考试过程中,“考试界面”窗口的上方始终会显示一个“考试信息条”,如图1-4所示。“考试信息条”显示着考生的个人信息、考试剩余时间。“考试信息条”还有两个按钮:
●“隐藏窗口”按钮:用于显示或隐藏“考试窗口”,单击一下就变成了“显示窗口”按钮,此时考试窗口会隐藏起来。
●“交卷”按钮:单击此按钮表示退出系统、交卷。除非你真的需要交卷,否则不要轻易动此按钮,一旦交卷就无法继续做题(一般情况下,交卷工作由监考老师完成)。
一.熟悉考试场地及环境,尤其要熟悉考场的硬件情况和所使用的相关软件的情况。
对考场的情况应充分熟悉,以免临场影响情绪(个别考生甚至出现手足无措的情况)。例如,考场使用的计算机你是否熟悉?如何开机,如何进入考试系统都是应该熟练掌握的。
键盘的手感如何?如果键盘的手感不好,应想办法增加练习机会,尽可能使不舒适感减少。否则考试时不仅影响速度,更影响情绪。
对考试系统所使用的汉字系统UCDOS你是否熟悉,如果不熟悉,应练习并熟悉之。你所习惯使用的汉字输入法是否加载了?如果没有加载,应与考场工作人员或负责人联系,由他们告诉加载方法。个别输入法可能还需考试工作人员加装相应软件,因此一定要在考试前准备好。
你所考的语言考场是使用的什么版本,如何调用,也应考前就弄清楚并熟悉之。这方面考FoxBASE和QBASIC语言的一般问题不大,因为这两种语言考试系统的要求比较统一,各考场比较一致。而FORTRAN、C、Pascal语言随版本的高低有较大的区别。一般讲,低版本没有帮助系统(FORTRAN)或帮助系统过于简单,而高版本有较全面的帮助系统。因此,用惯了高版本的考生在使用低版本软件时,往往因为无法求助而困惑;而用惯了低版本软件的考生又往往不熟悉高版本软件的使用界面。如果考场所使用的软件是你所不熟悉的,一定要想办法迅速熟悉起来。
补充:不要错过参加模拟考试的机会
考点在正式考试前,会给考生提供一次模拟上机的机会,并且一般会有指导老师回答考生的疑问。模拟上机除考题只有一套,并且可以提问外,其他与正式考试完全一样。有些考生本来就准备不足,模拟上机又不到,结果实际考试时完全找不着北。模拟考试时重点不应放在把题做出来,而是放在熟悉考试环境,相应软件的使用方法,考试系统的使用技巧等方面。并应多向指导教师请教技巧。这些在正式考试时是没有机会的。
二.学会并习惯使用帮助系统
QBASIC、turbo C 2.0、FoxBASE+2.1、vb、vf都有较全面的帮助系统。熟练掌握之,可以减少记忆量,解决解题中的疑难问题。
比如,1998年下半年和2001年下半年的二级C语言的编程题都有这样一题:
请编写一个函数 fun ( char *s ),函数的功能是把 s 串中的内容逆置。
例如:s 串中原有的字符串为:abcdefg,则调用该函数后,
s 串中的内容为:gfedcba。
注意: 部分源程序存在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun
的花括号中填入你编写的若干语句。
……
fun ( char *s )
{
}
……
如果你对字符串的逆置函数有点印象,就可通过帮助系统很快找到它。这样,这个程序只需添加一条语句 strrev(s) 就完成了,比自己编这个函数简单多了。当然,如果考场使用的是turbo C 2.0,那你就只好自己努力记忆了。
顺便提一下,学会熟练使用帮助系统不仅对考试有好处,对实际使用各种软件都大有益处。现在的新软件层出不穷,而且功能复杂,使用时必须依靠强大的帮助功能才能迅速掌握并充分发挥其功能,不会使用帮助系统而要用好任意一款较大的软件几乎是不可想象的。
三.上机做题时应注意的事项
上机考试的评分是以机评为主,人工复查为辅的。机评当然不存在公正性的问题,但却存在呆板的问题,有时还可能因为出题者考虑不周出现错评的情况。考生做题时不充分考虑到这些情况,也可能吃亏。下面以二级考试为主,按DOS题、程序修改题和编程题三部分分别讲一下应重点注意的问题。
1.DOS命令部分由于条件限制,不可能考很多内容。根据历次考试经验,不外乎如下几条:
COPY (实际使用最多,也是最复杂的命令之一)
MD (=MKDIR) 和 RD (=RMDIR)
DEL (=ERASE)
REN (=RENAME)
ATTRIB (实际极少使用的命令之一)
2000年以后的考试中增加了一条常用命令 DIR (由于该命令没有任何信息保存到磁盘上,因此考试时要求与一不常用的重定向命令 >一起使用。重定向命令 >, < , >>与管道命令 | 均属不常用的高级 DOS 命令。)
估计以后的考试也可能略有变化,即逐渐增加使用命令的条数。由于该内容变化小,考生应当练习到纯熟的境地,在考试时用尽可能少的时间来做这部分内容,以使其他内容有更多的时间。六题能做出五题即可,有一题一时想不起,可以暂时先不做,做完其他题后如有时间可再回头做。这部分的时间不超过十分钟较好。
2.做程序修改题要特别注意严格按要求做。
程序行的错误标志为“***found***”。有的题目明确指出错误紧跟在“***found***”下面的一行,而有的没有明确指出来。应重点注意“***found***”下面的第一条语句(有时候一条语句可以占几行)。同时应注意有时候几条语句(类似于文学中的排比句)错误雷同,是作为一个错误来处理的。
改正错误语句时一定注意不可增减程序行。因为评分时机器死板地检查第X个“***found***”下面第N行(第X个错误语句应在的行)是否修改得和若干标准答案中的一个相同,相同则给分,否则不给分。行数不对,无论程序怎样正确,评分时一定算作错误来处理。
程序修改题中还应注意考虑原程序作者的思路,所作改动应尽量小。因为出题者给出的答案数是有限的,考生的答案如果出了出题者所给的范围,正确也被当作错误来处理了。
例(1999年上半年二级BASIC):
'* 给定程序MODI1.BAS其功能是: 从键盘上每次输入两个100以下
'* 的正数分别赋给Y和Z(如不符合此条件的, 则重新输入),累加到累
'* 加器X中,直到X的值超过500为止。请找出程序中的错误,将程序调
'* 试出所需结果。
'* 注意: 不得增行或删行, 也不得更改程序的结构!
X = 0
DO
DO
t = 0
INPUT “Y,Z=”; Y, Z
IF 0 < Y AND Y < 100 AND 0 < Z AND Z < 100 THEN
t = 2
ELSE
PRINT “Out of Range! Input again”
END IF
'**********found**********
LOOP WHILE t 1
X = X + Y + Z
'**********found**********
'WHILE X 500
PRINT “X=”; X
END
这里共有两个错误:第一个为条件错,第二个语句和条件均有错。因此第一个错误可只改动条件为 t2 或 t=0,整个语句为
loop while t2 或者 loop while t=0
第二个错误可改为
LOOP WHILE X <= 500
总之,这里的思路就是用 DO ... LOOP WHILE <条件>语句。
如果使用 do ... loop until <条件>,程序可以同样成立。比如第一个错误改为
loop until t=2
运行结果完全相同。
但是由于改动较多,超出了出题者当时的考虑范围,自动评分系统会认为您“修改错误!”扣掉您应得的15分!!!
做程序程序题部分的时间以不超过20分钟为好。
3.大部分考生最为头痛的恐怕要算编程题了,上机通不过的考生多半是栽在编程题上面的。由于编程题占40分之多,且评分时只看结果不管过程,所以大部分人不是得满40分就是得0分,而如果编程题得0分,上机通过的可能性就很小了。
对编程题只要在时间上留足,做题时不急不燥、认真审题,应该讲是问题不大的。当然,平常如能多做练习,有条件的多做实战演习,就更容易顺利通过了。我们考点有些考生在我这里做过很多的上机练习,实际考试时有不少人在半个小时内全部做完,最快的考生十多分钟即离开了机房(可不是不会做,而是全做对了)。
几种语言中,QB的编程题相对较为简单,多数时候相当于填空;Fortran语言思路也较简单,但要求熟悉常用算法(其他语言在算法上都有提示),如果不知道算法,想破脑袋也做不出来。这两种语言没有什么可说的。
Pascal和C难度接近,出题的方法与形式也接近。考生要注意的是在浏览整个程序时按子程序分别对待,如果想把程序的每一行都完全理解,完全是浪费时间。重点注意指定要编制的子程序中需使用和设置的变量,把它们的来龙去脉搞清楚就行了。至于输入输出子程序,则只要知道文件名、输入输出变量的情况就可以了。然后即可集中精力于编制子程序。注意在程序的编译、连接过程中可能有错误提示似乎指向不允许考生改动之处,这时千万不要被迷惑。只要把你的子程序编正确了,程序一定可以正确运行。
FoxBASE的编程题难度相差极大,如果运气不好,抽到一道难的,可能好半天还不能看清题意(运气好,抽到简单的题,三两下就可搞定)。这时千万不可轻言放弃,即使你完全编不出程序也不要紧,把题中要求的数据库结构正确建立起来也能够得不少于10分(多数时候可得20分之多)。考FoxBASE没有把握的考生不投一下这个机,就太划不来了。
补充:
4.怀疑题目有错要及时反映
最后要特别说明一点,等级考试由于多方面的原因,出题时可能有错误。虽然这个错误在整体上占的比例是很小的,但具体到考生个人,影响就太大了。下半年的四级题中,有一题因错把一个“最大”字写成了“最小”,导致相当多抽到此题的考生上机不过。因此如果怀疑题目有错,特别是编程题,一定要及时向监考人员反映。得到监考人员认可后,可考虑申请参加下一场考试(重新抽题,将不是该套题目)。
5.考试结束不要急于离开
为了切实保护考生利益,在每场考试结束后会立即评分(机评),并将得分为零分的考生名单予以公布。除非监考人员确定是考生完全不会做或故意得零分,多数考点会给得零分考生一次重考的机会。因此考试完毕(尤其是提前时间较多的考生),一定要耐心等待评分结果公布再离开。
1.计算机等级考试如何做到轻松上机
2.计算机等级考试上机考试经验总结
3.计算机等级考试三级上机考试流程
4.全国计算机等级考试四级上机编程修养(下)
5.全国计算机等级考试一级WPSOFFICE上机全真试题
6.2007年计算机等级考试一级上机Word题[14]
7.2007年计算机等级考试一级上机Word题[15]
8.2007年计算机等级考试一级上机Word题[2]
9.2007年计算机等级考试一级上机Word题[4]
10.2007年计算机等级考试一级上机Word题[7]