[计算机类试卷]2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc
《[计算机类试卷]2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc(13页珍藏版)》请在麦多课文档分享上搜索。
1、2012年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺 (1) (5),将解答填入答题纸的对应栏内。 【说明】 已知数组 Al: n中各个元素的值都是非零整数,其中有些元素的值是相同的 (重复 )。为删除其中重复的值,可先通过以下流程图找出所有的重复值,并对所有重复值赋 0标记之。该流程图采用了双重循环。 处理思路:如果数组 A某个元素的值在前面曾出现过,则该元素赋标记值 0。例如,假设数组 A的各元素之值依次为 2, 5, 5, 1, 2, 5, 3,则经过该流 程图处理后,各元素之值依次为 2, 5, 0, 1, 0,
2、0, 3。 【流程图】 2 阅读以下说明、 C程序代码和问题 1至问题 3,将解答写在答题纸的对应栏内。 【说明】 设在某 C系统中为每个字符型数据分配 1个字节,为每个整型 (int)数据分配 4个字节,为每个指针分配 4个字节, sizeof(x)用于计算为 x分配的字节数。 【 C代码】 #include #include int main() int arr5=10, 20, 30; char mystr=”JustAtest n”; char * ptr= mystr; printf(” d d d n”, sizeof(int), sizeof(unsigned int), siz
3、eof(arr); printf(” d d n”, sizeof(char), sizeof(mystr); printf(” d d d n”, sizeof(ptr), sizeof(*ptr), strlen(ptr); return 0: 【问题 1】 请写出以上 C代码的运行结果。 【说明】 const是 C语言的一个关键字,可以用来定义 “只读 ”型变量。 【问题 2】 (1)请定义一个 “只读 ”型的整型常量 size,并将其值初始化为 10; (2)请定义一个指向整型变量 a的指针 ptr,使得 ptr的值不能修改,而 ptr所指向的目标变量的值可以修改 (即可以通过 ptr
4、间接修改整型变量 a的值 )。 注:无须给出整型变量 a的定义。 【问题 3】 某 c程序文件中定义的函数 f如下所示,请简要说明其中 static的作用,以及形参表 “const int arr”中 const的作用。 static int f(const int arr) *函数体内的语句省略 * 3 阅读以下说明和 C函数,填补 C函数中的空缺 (1) (6),将解答写在答题纸的对应栏内。 【说明】 函数 numberOfwords(char message)的功能是计算存储在message字符数组中的一 段英文语句中的单词数目,输出每个单词 (单词长度超过20时仅输出其前 20个字母
5、),并计算每个英文字母出现的次数 (即频数 ),字母计数时不区分大小写。 假设英文语句中的单词合乎规范 (此处不考虑单词的正确性 ),单词不缩写或省略,即不会出现类似 dont形式的词,单词之后都为空格或标点符号。 函数中判定单词的规则是: (1)一个英文字母串是单词; (2)一个数字串是单词; (3)表示名词所有格的撇号 ()与对应的单词看作是一个单词。 除上述规则外,其他情况概不考虑。 例如,句子 “The 1990s witnessed many changes in peoples concepts of conservation”中有 10个单词,输出如下: The 1990s wi
6、tnessed many changes in peoples concepts of conservation 函数 numberOfwords中用到的部分标准库函数如下所述。 【 C函数】 int numberOfwords(char message) char wordbuffer21, i=0; *i用作wordbuffer的下标 * (1) pstr; int PS26=0; *ps0用于表示字母 A或 a的频数 * *ps1用于表示字母 B或 b的频数,依此类推 * int wordcounter=0; pstr=message; while(*pstr) if( (2) (*ps
7、tr) *调用函数判断是否为一个单词的开头字符 * i=0: do *将一个单词的字符逐个存入 wordbuffer,并对字母计数 * wordbufferi+=*pstr; if(isalpha(*pstr) if (3) ( *pstr)ps*pstr-a+; else ps *pstr- A+; (4) ; *pstr指向下一字符 * while(i20&(isalnum(*pstr)|*pstr=” ”); if(i=20) *处理超长单词 (含名词所有格形式 )* while(isalnum(*pstr)|*pstr=” ”)pstr+; (5) = 0; *设置暂存在wordbuf
8、fer中的单词结尾 * wordcounter+; *单词计数 * puts(wor。 dbuffer); *输出单词 * (6) ; *pstr指向下一字符 * return wordcounter: 4 阅读以下说明和 C函数,填补 C函数中的空缺 (1) (5),将解答写在答题纸的对应栏内。 【说明】 函数 SetDiff(LA, LB)的功能是将 LA与 LB中的共有元素从LA中删除,使得 LA中仅保留与 LB不同的元素,而 LB不变, LA和 LB为含头结点的单链表的头指针。 例如,单链表 LA、 LB的示例如下图中的 (a)、 (b)所示,删除与 LB共有的元素后的 LA如下图 中
9、的 (c)所示。 链表的结点类型定义如下: typedef struct Node int data: struct Node*next: Node, *LinkList; 函数SetDiff(LinkList LA, LinkList LB)的处理思路如下: (1)从 LA的第一个元素结点开始,令 LA的第一个元素为当前元素; (2)在 LB中进行顺序查找,查找与 LA的当前元素相同者,方法是:令 LA的当前元素先与 LB的第一个元素进行比较,若相等,则结束在 LB中的查找过程,否则继续与 LB的下一个元素比较,重复以 上过程,直到 LB中的某一个元素与 LA的当前元素相等 (表明查找成功
10、),或者到达 LB的表尾 (表明查找失败 )为止; (3)结束在 LB表的一次查找后,若在 LB中发现了与LA的当前元素相同者,则删除 LA的当前元素,否则,保留 LA的当前元素; (4)取 LA的下一个元素为当前元素,重复步骤 (2)、 (3),直到 LA的表尾。 【 C函数】 void SetDJ ff(LinkLJ st LA, LinkLi st LB) LinkList pre, pa, pb; *pa用于指向单链表 LA的当前元素结点, pre指向 pa所指元素的 前驱 * *pb用于指向单链表 LB的元素结点 * (1) ; *开始时令 pa指向 LA的第一个元素 * pre:
11、LA; while(pa) pb=LB-next; *在 LB中查找与 LA的当前元素相同者,直到找到或者到达表尾 * while( (2) ) if(pa-data= =pb-data) break; (3) ; if(!pb) *若在 LB中没有找到与 LA中当前元素相同者,则继续考查 LA的后续元素 * pre=pa; pa=pa-next; else *若在 LB中找到与 LA的当前元素相同者,则删除 LA的当前元素 * pre-next= (4) ; free(pa); pa= (5) ; 5 阅读以下说明和 C+代码,填补 C+代码中的空缺 (1) (6),将解答写在答题纸的对应栏
12、内。 【说明】 已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放 (每年按 52周计算 );另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。 下面是实现该工资系统的 C+代码,其中 定义了四个类:工资系统类 PayRoll、员工类 Employee、正式工类 Salaried和计时工类 Hourly, Salaried和 Hourly是Employee的子类。 【 C+代码】 头文件和域名空间略 const int EMPLOYEE_NUM=5; class Employee protected: int e
13、mpCode: 员工号 string name: 员工姓名 double salary: 周发放工资 public: Employee(const int empCode, const string&name) this-empCode=empCode: this-name=name; virtual Employee() virtual void pay()=0; double getSalary() return this-salary; ; class Salaried (1) private: double payRate; 年薪 public: Salaried(const int
14、empCode, const string&name double payRate) : Employee(empCode, name) this-payRate=payRate: void pay() this-salary= (2) ; 计算正式员工的周发放工资数 cout this-name ”: ” this-salary endl; ; class Hourly (3) private: double payRate; 小时工资数 int hours; 周工作小时数 public: Hourly(const int empCode, const string &name, int h
15、ours, double payRate) : Employee(empCode, name) this-payRate=payRate; this-hours=hours, void pay() this-salary= (4) ; 计算计时工的周发放工资数 cout this-named ”: ” this-salary endl: ; class PayRoll public: void pay(Employee*e) for(int i=0; i EMPLOYEE_NUM; i+) ei-pay(); ; int main() PayRoll*payRoll=new PayRoll:
16、(5) employeesEMPLOYEE_NUM= new Salaried(1001, ”Zhang San”, 58000 00), 此处省略对其他职工对象的生成 new Hourly(1005, ”L1”, 12, 50 00), ; payroll-pay( (6) ): double total=0 0; for(int i=0; i EMPLOYEE_NUM; i+) total+=employeesil-getSalary(); 统计周发放工资总额 cout ”总发放额 =” total endl; delete payroll; return 0; 6 阅读以下说明和 Jav
17、a代码, 填补 Java代码中的空缺 (1) (6),将解答写在答题纸的对应栏内。 【说明】 已知某公司按周给员工发放工资,其工资系统需记录每名员工的员工号、姓名、工资等信息。其中一些员工是正式的,按年薪分周发放 (每年按 52周计算 );另一些员工是计时工,以小时工资为基准,按每周工作小时数核算发放。 下面是实现该工资系统的 Java代码,其中定义了四个类:工资系统类 PayRoll、员工类 Employee、正式工类 Salaried和计时工类 Hourly, Salaried和 Hourly是Employee的 子类。 Java代码】 abstract class Employee pr
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2012 上半年 软件 水平 考试 初级 程序员 下午 应用技术 答案 解析 DOC
