logo资料库

2017北京邮电大学《计算科学导论与程序设计》期末考试_B .doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
《计算导论与程序设计》期末考试试题(B)
一、简答题(共25分,每问5分)
二、程序填空题(共25分,每空1分)
三、程序设计题 (50分)
北京邮电大学 2017——2018 学年第 1 学期 《计算导论与程序设计》期末考试试题(B) 一、学生参加考试须带学生证或学院证明,未带者不准进入考场。学生必须按 照监考教师指定座位就坐。 二、书本、参考资料、书包等物品一律放到考场指定位置。 三、学生不得另行携带、使用稿纸,要遵守《北京邮电大学考场规则》,有考场 违纪或作弊行为者,按相应规定严肃处理。 四、学生必须将答题内容做在试题答卷上,做在草稿纸上一律无效。 五、学生的姓名、班级、学号、班内序号等信息由教材中心统一印制。 2018 年 1 月 23 日 计算导论与程序设计 考试时间 一 25 二 25 三 50 四 五 六 七 八 总分 考 试 注 意 事 项 考试 课程 题号 满分 得分 阅卷 教师 一、 简答题(共 25 分,每问 5 分) 1、 从计算工具的发展历史来看,现代“电子计算机”和帕斯卡、莱布尼兹时代的“机 械式计算器”有什么本质区别? 2、 针对 ENIAC 计算机,冯.诺依曼为什么要提出“存储程序”的思想?冯.诺依曼机 体系的特点是什么? 第 1页 /共 12页
3、 一幅位图图像可以看作是由多个小方格组合而成的矩阵,每个小方格叫做一个 “像素”,比如一个分辨率为 1024×768 的图像可看作由 1024×768 个方格组成。 假设每个像素能表示 512 种颜色,则存储一幅 1024×768 的图像至少需要多少字 节?请说明原因。 4、 高级语言所编写的源代码程序(可看成一个字符序列)在内存中也是二进制存储 的,为什么计算机不能直接执行?请解释 CPU 运行一个程序的主要步骤? 5、 什么是计算机指令?通常指令所实现的操作是非常基本和简单的,但为什么我们 可以用计算机完成玩游戏,甚至战胜世界围棋大师等复杂任务? 二、 程序填空题(共 25 分,每空 1 分) 1. 定义以下变量并假设已给其赋值“char a; int b; float c; double d;”,则表达式 a*b+c-d 的数据类型为________________________。 2. 假定 x=7,y=9,则表达式(x++)*(++y)的值为__________________。 3. 定 义 以 下 变 量 “ char string1[10], *string2="Great"; ”, 通 过 调 用 函 数 strCopy(string1,string2)将字符串常量拷贝到字符数组中,要求函数保证不能改变 string2 指向的字符串值。 void strCopy(char * s1, { s2) while( { *s1= s1++; ) ; 第 2页 /共 12页
s2++; } *s1= ; } 4. 以下函数为判断一个数 n 是否为素数。若为素数,则返回 1;否则返回 0。 && ) int isPrim(int n) { int i; int prim=1; i = 2; while ( { if (n % i = = 0) else i++; } return } ; ; 5. 以下是一个递归函数,用于求任意正整数 n 的位数。 int length (int n) { if (____________________________) return 1; return _____________________________; } 6. 定义二维数组 int a[5][4],假设 int 类型占 4 个字节,则 a[2][3]的地址为: &a[0][0] + _____________________________。 7. 以下函数实现“折半查找”。在数组 a 中查找整数 searchKey,如在 a 中找到 searchKey,则返回所在元素的下标,否则返回-1。 int binarySearch(int a[],int searchKey,int low,int high) { int middle; while (_________________________) { middle = (low + high)/2; if (searchKey == a[middle]) else if (searchKey < a[middle]) return middle; ________________; ________________; else } return -1; } 第 3页 /共 12页
8. 对于二维数组 int a[4][5],a[0]+1 是数组元素________________的地址。 9. 用 100 元买 100 只鸡,大公鸡 5 元 1 只,母鸡 3 元 1 只,小鸡 1 元 3 只。完成以 下程序,输出可能买的鸡数的所有组合。 main() { int cocks,hens,chicken; for( for( for( if ( ; ; ; ; ; ; && ) ) ) printf("cocks:%d,hens:%d,chicken:%d\n",cocks,hens,chicken); ) } 10. 以下程序用于计算到给定日期为止,当年已经过去多少天。输入为当前日期。 main() { int year, month, day; int yearDays, i; printf("Input year-month-day:\n"); scanf(_____________________________); yearDays = 0; for( { ; // 输入年月日 ) ; switch(i) { ____________________________________________________ yearDays+=31; break; ____________________________________________________ yearDays+=30; break; case 2: if (_________________________________________) // 判断闰年 yearDays+=29; else yearDays+=28; break; default: printf("invalid month!"); break; } } printf("The days are %d",yearDays + day); } 第 4页 /共 12页
三、 程序设计题 (50 分) 说明:1. 所有题目只画出对应的 N-S 图; 2. 所有题目不能使用全局变量,否则视 为 0 分处理; 3. 所有题目假定用户输入肯定正确,程序不需要对异常输入进行处理。 1. 世界杯小组赛的 32 支参赛队分为八个小组,每组四队进行比赛。每支球队都必须和 其他三支球队进行且只进行一场比赛,胜者得三分,负者不得分,打平双方各得一分。 每个小组的前两名出线。小组赛出线规则如下: a、积分高者排名靠前 b、小组中总净胜球高者排名靠前 c、小组中总进球数高者排名靠前 假设依次采用 a、b、c 三条规则后没有排名相同的队伍,请写出判断各个队伍排名 的程序。 输入:4 行,每行一个字符串和 3 个整数,字符串为国家的名字(长度不会超过 20), 3 个整数(大于等于 0 且小于 20)依次为该队的总进球数、总失球数和积分。注:总净胜球 指的是该队总的进球数减去总的失球数。 输入样例: Brazil China Germany Italy 3 10 4 3 7 0 7 6 4 9 4 4 输出:4 行,按小组赛排名从高到低每行输出一个国家的名字。 输出样例: China Germany Italy Brazil 要求: 1) 如上,每支队伍的数据包含四个属性:Country(国家名),GoalsFor(总进球数), GoalsAgainst(总失球数),Points(积分)。请将每支队伍信息抽象成一个结构体, 并通过 typedef struct team TEAM 语法格式给出该结构体完整定义。(4 分) 2) 设计三个函数 Comp, Swap, Sort。Comp 功能:顺次依据 a、b、c 三条规则比较 两支球队的成绩,并返回比较结果;Swap 功能:将两支球队的所有数据交换(两 个结构体内的所有值都要交换);Sort 功能:将若干支队伍依据规则降序排列。 要求给出三个函数的完整函数头格式,包括参数列表、返回值,并说明参数列 表中每个参数的含义,以及返回值的含义。(12 分) 3) 请分别给出三个函数 Comp, Swap, Sort 对应的算法设计 N-S 图,要求 Sort 函数 必须调用其它两个函数。(10 分) 4) 请给出 main 函数对应的算法设计 N-S 图,算法中必须调用 Sort 函数。注:输入 输出无需细化。(2 分) 第 5页 /共 12页
第 6页 /共 12页
2. 一张正方形的卫星照片可看作是由多个小方格组合而成的矩阵,每个小方格叫做一 个像素点。卫星照片中存在街区和道路,街区是由不同道路或者道路与照片边缘围成的 矩形区域,所有道路都纵横排列,每条道路均贯穿整张照片并平行于照片的边缘,照片 的最外一圈不是道路。卫星照片中每个像素点都有灰度值,如果某点的灰度值大于等于 0 且小于等于 50,则该点为道路上的点;如果某点的灰度值大于 50,则该点为街区上的点, 街区和道路所包含的像素点总数是不固定的。每个像素都有坐标(x,y),分别为行坐标和 列坐标,照片左上角的像素点坐标为(0,0)。假定卫星照片矩阵的阶数为常数 MAP_LEN, 要求编写一个程序,求出照片中各个街区的坐标。 输入:1+10 行(假定 MAP_LEN=10)。第一行为 2 个整数 s 和 t,s 代表横向道路的 条数,t 代表纵向道路的条数。后续输入 10 行,每行 10 个整数,代表 10×10 的正方型 矩阵照片,每个整数代表一个像素的灰度值(该值大于等于 0 且小于等于 10000)。 输入样例:输入一个 10 阶正方形矩阵,横向道路条数 1,纵向道路条数 2。 1 99 99 99 99 99 99 99 50 99 99 输出:假定照片左上角的像素点坐标为(0,0),“按行”依次输出各个矩形街区的左上 角坐标和右下角坐标。输出格式为多行,每行代表照片中同一行的所有街区,每个街区 坐标输出格式为“x1,y1,x2,y2”,同一行内每个街区坐标之间用制表符'\t'分隔。 2 99 99 99 99 99 99 99 50 99 99 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 99 99 99 99 99 99 99 50 99 99 99 99 99 99 99 99 99 50 99 99 99 99 99 99 99 99 99 50 99 99 99 99 99 99 99 99 99 50 99 99 50 50 50 50 50 50 50 50 50 50 99 99 99 99 99 99 99 50 99 99 输出样例:根据以上输入样例,总共有 2×3 个街区,按行输出每个街区的坐标 0, 0, 6, 1 8, 0, 9, 1 0, 3, 6, 4 8, 3, 9, 4 0, 7, 6, 9 8, 7, 9, 9 第 7页 /共 12页
要求: 1) 设计一个结构体存储一个街区的坐标,通过 typedef struct block BLOCK 语法格 式给出该结构体完整定义。(2 分) 2) 假定输入的横向道路条数为 s,纵向道路条数为 t,请给出街区总数 blockNums 的计算公式。(2 分) 3) 假定需要用一个存储结构存储“所有”街区坐标结构体 BLOCK,并要求以“动 态分配内存”的方式实现,请定义指向该动态存储结构指针的类型(1 分),并说 明动态内存分配的顺序(1 分),以及使用完毕后释放的顺序(1 分)。 4) 设计函数 getBlocks(int map[][MAP_LEN], int rowBlocks, int colBlocks,),用于求 出卫星照片上所有街区的坐标,并以“动态分配内存”的方式保留所有街区坐 标结构体。参数 map 表示卫星照片矩阵,MAP_LEN 为常数;参数 rowBlocks 为结果街区的行数,colBlocks 为结果街区的列数;函数返回值为第 3 问中指向 动态存储结构的指针。请给出函数算法设计 N-S 图。注:假设每次申请内存都 会成功,无需对内存申请不成功做处理。(11 分) 5) 设计 main 函数,要求在 main 函数中调用 getBlocks 函数。注:输入输出无需细 化。(4 分) 第 8页 /共 12页
分享到:
收藏