【计算机类职业资格】程序员-C语言程序设计(二)及答案解析.doc
《【计算机类职业资格】程序员-C语言程序设计(二)及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】程序员-C语言程序设计(二)及答案解析.doc(12页珍藏版)》请在麦多课文档分享上搜索。
1、程序员-C 语言程序设计(二)及答案解析(总分:99.99,做题时间:90 分钟)一、试题一(总题数:1,分数:20.00)阅读以下说明、C 程序代码和问题 1 至问题 3,将解答写在对应栏内。说明 1设在某 C 系统中为每个字符型数据分配 1 个字节,为每个整型(int)数据分配 4 个字节,为每个指针分配4 个字节,sizeof(x)用于计算为 X 分配的字节数。C 代码#include stdio.h#include string.hint main()int arr5=(10,20,30);char raystr=“JustAtest/n“;char *ptr=mystr;printf
2、(“%d%d%d/n“,sizeof(int),sizeof(unsigned int),sizeof(art);printf(“%d%d/n“,sizeof(char),Sizeof(mystr);printf(“%d%d%d/n“,sizeof(ptr),siZeof(*ptr),strlen(ptr);return 0;(分数:20.01)(1).请写出以上 C 代码的运行结果。说明 2const 是 C 语言的一个关键字,可以用来定义“只读”型变量。(分数:6.67)_(2).(1)请定义一个“只读”型的整型常量 size,并将其值初始化为 10;(2)请定义一个指向整型变量 a 的指
3、针 ptr,使得 ptr 的值不能修改,而 ptr 所指向的目标变量的值可以修改(即可以通过 ptr 间接修改整型变量 a 的值)。注:无需给出整型变量 a 的定义。(分数:6.67)_(3).某 C 程序文件中定义的函数 f 如下所示,请简要说明其中 static 的作用,以及形参表“const int arr”中 const 的作用。StatiC int f(const int art)/*函数体内的语句省略*/(分数:6.67)_二、试题二(总题数:1,分数:20.00)阅读以下说明和 C 函数,填补 C 函数中的空缺。说明函数 numberOfwords(char message)的功
4、能是计算存储在 message 字符数组中的一段英文语句中的单词数目,输出每个单词(单词长度超过 20 时仅输出其前 20 个字母),并计算每个英文字母出现的次数(即频数),字母计数时不区分大小写。假设英文语句中的单词合乎规范(此处不考虑单词的正确性),单词不缩写或省略,即不会出现类似 dont形式的词,单词之后都为空格或标点符号。函数中判定单词的规则是:(1)一个英文字母串是单词;(2)一个数字串是单词;(3)表示名词所有格的撇号()与对应的单词看作是一个单词。除上述规则外,其他情况概不考虑。例如,句子“The 1990s witnessed many changes in peoples
5、concepts of conservation”中有 10个单词,输出如下:The1990switnessedmanychangesinpeoplesconceptsofconservation函数 numberOfwords 中用到的部分标淮库函数如下所述。函数原型 说明int islower(int ch);若 ch 表示一个小写英文字母,则返回一个非 0 整数,否则返回 0int isupper(int ch):若 ch 表示一个大写英文字母,则返回一个非 0 整数,否则返回 0int isalnum(int ch);若 ch 表示一个英文字母或数字字符,则返回一个非 0 整数,否则返
6、回 0int isabha(int ch);若 ch 表示一个英文字母,则返回一个非 0 整数,否则返回 0int isdigit(int ch);若 ch 表示一个数字字符,则返回一个非 0 整数,否则返回 0C 函数int numberOfwords(char message)char wordbuffer21,i=0; /*i 用作 wordbuffer 的下标*/_pstr;int ps26=(0); /*ps0用于表示字母A或a的频数*/*ps1用于表示字母B或b的频数,依此类推*/int wordcount er=0;Pstr=message;while (*pstr)if(_(*
7、pstr)/*调用函数判断是否为一个单词的开头字符*/i=0;do/*将一个单词的字符逐个存入 wordbuffer,并对字母计数*/wordbufferi+=*pstr;if(isalpha(*pstr)if_(*pstr)ps*pstr-a+;else ps*pstr-A+;_; /*pstr 指向下一字符*/while(i20(isalnum(*pstr)*pstr=/“);if(i=20) /*处理超长单词(含名词所有格形式)*/while(isalnum(*pstr)*pstr=“)pstr+;_=/0;/*设置暂存在 wordbuffer 中的单词结尾*/wordcounter+;
8、 /*单词计数*/puts(wordbuffer); /*输出单词*/_; /*pstr 指向下一字符*/return wordcounter;(分数:19.98)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_三、试题三(总题数:1,分数:20.00)阅读以下说明和 C 函数,填充函数中的空缺。说明如果矩阵 A 中的元素 Ai,j满足条件:Ai,j是第 i 行中值最小的元素,且又是第 j 列中值最大的元素,则称之为该矩阵的一个马鞍点。一个矩阵可能存在多个马鞍点,也可能不存在马鞍点。下面的函数求解并输出一个矩阵中的所有马鞍点,最后返回该矩阵中马鞍点的个数。C
9、 函数Int findSaddle(int aN,int M),/*a 表示 M 行 N 列矩阵,N 是宏定义符号常量*/int row,coiumn,i,k;int minElem;int count=0;/*count 用于记录矩阵中马鞍点的个数*/for(row=0;row_;row+) /*minElem 用于表示第 row 行的最小元素值,其初值设为该行第 0 列的元素值*/_;for(culumn=1;column_;column+)if(minElemarowcolumn) minElem=arowcoiumn;for(k=0;kN;k+)if(arowk=minelem)/对第
10、 row 行的每个最小元素,判断其是否为所在列的最大元素*/for(i=0;iM;i+)if(_minElem)break;if(i=_)printf(“(%d,%d):%d/n“,row,k,minElem);/*输出马鞍点*/count+;/*if*/*if*/*for*/return count,)/*findSaddle*/(分数:20.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_四、试题四(总题数:1,分数:20.00)阅读以下说明和 C 函数,填充函数中的空缺。说明函数 Insert _key(*root,key)的功能是将键值 key 插入到*ro
11、ot 指向根结点的二叉查找树中(二叉查找树为空时*root 为空指针)。若给定的二叉查找树中已经包含键值为 key 的结点,则不进行插入操作并返回0;否则申请新结点、存入 key 的值并将新结点 DHA 树中,返回 1。提示:二叉查找树又称为二叉排序树,它或者是一棵空树,或者是具有如下性质的二叉树:若它的左子树非空,则其左子树上所有结点的键值均小于根结点的键值;若它的右子树非空,则其右子树上所有结点的键值均大于根结点的键值;左、右子树本身就是二叉查找树。设二叉查找树采用二叉链表存储结构,链表结点类型定义如下:typedef struct BiTnodeint key _value; /*结点的
12、键值,为非负整数*/struct BiTnode *left,*right; /*结点的左、右子树指针*/BiTnode,*BSTree;C 函数int Insert _key(BSTree *root,int key)BiTnode *father=NULL,*p=*root,*s;while(_key!=p-key _value)(/*查找键值为 key 的结点*/father=p;if(keyp-key _value)p=_; /*进入左子树*/else p=_; /进入右子树*/if(p) return 0; /*二叉查找树中已存在键值为 key 的结点,无需再插入*/s=(BiTno
13、de *)malloc(_);/*根据结点类型生成新结点*/if(!s)rettlrn -1;s-key _value=key; s-left=NULL; s-right=NULL;if(!father)_; /*新结点作为二叉查找树的根结点*/else /*新结点插入二叉查找树的适当位置*/if(keyfather-key _value)father-left=s;else father-right=s;return 1;(分数:20.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_五、试题五(总题数:1,分数:20.00)阅读以下说明和 C 函数,填充函数中的空
14、缺。说明已知两个整数数组 A 和 B 中分别存放了长度为 m 和 n 的两个非递减有序序列,函数Adjustment(A,B,m,n)的功能是合并两个非递减序列,并将序列的前 m 个整数存入 A 中,其余元素依序存入 B 中。例如:合并前 合并后数组 A 的内容 1,9,28 1,4,7数组 B 的内容 4,7,12,29,379,12,28,29,37合并过程如下:从数组 A 的第一个元素开始处理。用数组 B 的最小元素 B0与数组 A 的当前元素比较,若 A 的元素较小,则继续考查 A 的下一个元素;否则,先将 A 的最大元素暂存入 temp,然后移动 A 中的元素挪出空闲单元并将 B0插
15、入数组 A,最后将暂存在 temp 中的数据插入数组 B 的适当位置(保持 B 的有序性)。如此重复,直到 A 中所有元素都不大于 B 中所有元素为止。C 函数void Adjustment(int A,intB,int m,int n)/*数组 A 有 m 个元素,数组 B 有 n 个元素*/int k,temp;for(i=0;im;i+)if(Ai=B0) continue,temp=_;/*将 A 中的最大元素备份至 temp*/*从后往前依次考查 A 的元素,移动 A 的元素并将来自 B 的最小元素插入 A 中*/for(k=m-1;_;k-)Ak=Ak-1;Ai=_;/*将备份在七
16、 emp 的数据插入数组 B 的适当位置*/for(k=1;_kn;k+)Bk-1=Bk;Bk-1=_;(分数:20.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_程序员-C 语言程序设计(二)答案解析(总分:99.99,做题时间:90 分钟)一、试题一(总题数:1,分数:20.00)阅读以下说明、C 程序代码和问题 1 至问题 3,将解答写在对应栏内。说明 1设在某 C 系统中为每个字符型数据分配 1 个字节,为每个整型(int)数据分配 4 个字节,为每个指针分配4 个字节,sizeof(x)用于计算为 X 分配的字节数。C 代码#include stdio.
17、h#include string.hint main()int arr5=(10,20,30);char raystr=“JustAtest/n“;char *ptr=mystr;printf(“%d%d%d/n“,sizeof(int),sizeof(unsigned int),sizeof(art);printf(“%d%d/n“,sizeof(char),Sizeof(mystr);printf(“%d%d%d/n“,sizeof(ptr),siZeof(*ptr),strlen(ptr);return 0;(分数:20.01)(1).请写出以上 C 代码的运行结果。说明 2const
18、是 C 语言的一个关键字,可以用来定义“只读”型变量。(分数:6.67)_正确答案:(4 4 201 1 14 1 10)解析:(2).(1)请定义一个“只读”型的整型常量 size,并将其值初始化为 10;(2)请定义一个指向整型变量 a 的指针 ptr,使得 ptr 的值不能修改,而 ptr 所指向的目标变量的值可以修改(即可以通过 ptr 间接修改整型变量 a 的值)。注:无需给出整型变量 a 的定义。(分数:6.67)_正确答案:(1)const int size=10;或 int const size=10;(2)int* const ptr=a;)解析:(3).某 C 程序文件中定
19、义的函数 f 如下所示,请简要说明其中 static 的作用,以及形参表“const int arr”中 const 的作用。StatiC int f(const int art)/*函数体内的语句省略*/(分数:6.67)_正确答案:(static 的作用:说明 f 是内部函数(局部函数),只能在本文件中调用它。const 的作用:在函数 f 中不能修改数组元素的值,若修改,编译时会报错。)解析:本题考查考生对 C 语言中常用关键字的掌握和应用情况。第一题考查 sizeof 运算符,用于计算数据空间的字节数。在第一个输出语句 printf(“%d%d%d/n“,sizeof(int),siz
20、eof(unsigned int),sizeof(arr)中,由于 int型数据占 4 个字节,因此 sizeof(int)和 sizeof(unsigned int)的值都是 4。art 是整型数组,共有 5 个元素,因此 sizeof(arr)的值为 4*5=20。在第二个输出语句 printf(“%d%d/n“,sizeof(char),sizeof(mystr)中,由于 char 型数据占 1 个字节,因此 sizeof(char)的值是 1。mystr 是一个字符数组,由于其包含 10 个字符,加上字符串结束标志,共11 个字符。因此,其 sizeof 的操作结果为 11。在第三个输
21、出语句 printf(“%d%d%d/n“,sizeof(ptr),sizeof(*ptr),strlen(ptr)中,ptr 为一个指针,所有指针变量的 sizeof 操作结果均为 4,因此,sizeof(ptr)的值为 4。*ptr 的值为字符J因此sizeof(*ptr)的值为 1。strlen()函数用于计算字符数组中的字符数,以/0作为结束判断条件,不计算/0。因此,strlen(ptr)的值为 10。第二题考查 const 的用法。(1)const 加在 int x 的前面,用来定义一个不可被改变的整型常量 x,这个 x 必须在声明时赋值。因此,定义一个“只读”型的整型常量 siz
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 程序员 语言程序设计 答案 解析 DOC
