200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 三级C语言上机考试试题与题解 全国计算机等级三级C语言上机试题逐题解析

三级C语言上机考试试题与题解 全国计算机等级三级C语言上机试题逐题解析

时间:2018-06-20 20:56:40

相关推荐

三级C语言上机考试试题与题解 全国计算机等级三级C语言上机试题逐题解析

三级网络技术和三级数据库技术的C语言上机试题难度较大,题型多样,因此颇难掌握,今将这些试题分类解析,希望能帮大家顺利通过上机考试。

三级的上机题可以分为十几个类型,每类中的题目数量不一,多则十几道题,少则三四道题,但是每类题都差不多,每类中只要掌握一道题,再理清做题的思路,那就相当于全掌握了。

好了,今天现看几个题目比较多得类型。

第一类:关于f(p)=p*11 mod 256字符变换的题型,一般这类题的题目说明如下

函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS10.DAT中。

替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值[U][I]),如果原字符的ASCII值是偶数或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代[/I][/U]。

void encryptChar()

{

int i,j;

unsigned char fp;

for(i=0;i

for(j=0;xx[i][j]!='\0';j++)

{

fp=xx[i][j]*11 % 256 ;

if(!(xx[i][j]%2==0||fp<=32))

xx[i][j]=fp;

}

}

题解:这类题比较简单,每道题的不同之处在于,要替换的字符的条件不一样,但条件中总会说“如果该字符符合什么条件,字符就不变,否则就替换。”解决这个问题最省事的办法就是把不变的条件写好,前面加上逻辑非,如 (!(xx[i][j]%2==0||fp<=32)) 。

另一个要注意的问题是把改变后的字符要临时存放在一个变量中,这个变量,如本题中的fp,必须是unsigned char 类型或int类型的变量,若写成char类型的会出错,因为从公式 fp=xx[i][j]*11 % 256 ;中可以看出fp的取值范围应在0~255之间,而char类型的变量范围仅在-128~+127之间。

在本题中用两重循环遍历字符串数组,外层循环遍历行,maxline中存放的是xx数组中存放字符串的真实的行数;外层循环遍历每行的每个字符,因为在xx中每行是一个字符串,而每个字符串都有一个‘\0'做结束标致,所以内层循环的表达式2用xx[i][j]!='\0'来控制循环。

第3题:

函数readDat()的功能是实现从文件IN.DAT中读取一篇英文文章

存入到字符串数组xx中;请编写函数StrOR(),该函数的功能是:以

行为单位把字符串中的所有小写字母o左边的字符串内容移到该字符

串的右边存放,然后并把小写字母o删除,余下的字符串内容移到已

处理字符串的左边存放.最后把已处理的字符串仍按行重新存入字符

串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT.DAT

中。

例如:原文:You can create an index on any field.

You have the correct record.

结果:n any field. Yu can create an index

rd. yu have the crrect rec

原始数据文件存放的格式是:每行的宽度均小于80个字符,含标

点符号和空格。

注意:部份源程序已在程序PROG1.C中给出。

请勿改动主函数main()、读函数readDat()和写函数writeDat()

的内容。

解题:本题如果用标准算法实难解释清楚,这里完全用字符串处理函数来做,涉及到的函数有:

(1) char *strchr(char *s,char ch);——从S所指向的字符串中找到打一个ch代表的字符,返回该字符的指针,若找不到返回空指针NULL。

(2)void memset(char *s ,char ch,unsigned count);——将S所指向的数组的前count个字符全部赋于ch所代表的字符,如果ch为‘\0’,count为字符数组的长度,则代表清空数组。

(3)void memcpy(char *s1,char *s2,unsigned count);——将S2字符串的前count个字符拷贝到S1所代表的字符串中。

关于strcpy()和strcat()两个函数就不用说了吧!

好,程序的源码如下:

void Str0R(void)

{

int i; /*用来遍历行 */

char *p,t[100];/*p用来指向字符'o',t用来临时存放待处理的字符串中'o'前面的串*/

for(i=0;i

{

p=strchr(xx[i],'o'); /* 找找看,有没有字符'o',有的话让p指向它,若没有返回NULL*/

while(p!=NULL)/*根据以上的P值是否为空,判断是否有'o'字符,有的话做下面处理*/

{

memset(t,'\0',100); /* 清空数组t*/

memcpy(t,xx[i],p-xx[i]); /*将'o'前面的字符形成一个串拷贝到t中,临时存放 */

strcpy(xx[i],p+1); /* 删除'o'连同'o'前面的字符串*/

strcat(xx[i],t); /*将原'o'前面的字符串连接到处理后的字符串的末尾,到次已经处理玩

了一个字符'o' */

p=strchr(xx[i],'o'); /* 寻找下一个字符'o'*/

}

}

}

再看一道类型题,本题共出现十道题,题目说明很相似,只是排序的条件不同,所以这种题代码非常规则,我们全部用冒泡法排序,只改以下排序的条件即可。我们把这类题称为“按金额、代码排序的题”。

全国计算机等级三级C语言上机试题逐题解析.doc

下载Word文档到电脑,方便收藏和打印[全文共2184字]

编辑推荐:

下载Word文档

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。