一、 简答题(共25分,每问5分)
1、从计算工具的发展历史来看,现代“电子计算机”和帕斯卡、莱布尼兹时代的“机械式计算器”有什么本质区别?
2、针对ENIAC计算机,冯.诺依曼为什么要提出“存储程序”的思想?冯.诺依曼机体系的特点是什么?
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++;
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])
return middle;
else if (searchKey < a[middle])
________________;
else
________________;
}
return -1;
}
8、对于二维数组int a[4][5],a[0]+1
是数组元素________________的地址。
9、用100元买100只鸡,大公鸡5元1只,母鸡3元1只,小鸡1元3只。完成以下程序,输出可能买的鸡数的所有组合。
int main()
{
int cocks, hens, chicken;
for(__________;__________;__________)
for(__________;__________;__________)
for(__________;__________;__________)
if (____________________&&____________________)
printf("cocks:%d, hens:%d, chicken:%d\n",cocks, hens, chicken);
return 0;
}
10、以下程序用于计算到给定日期为止,当年已经过去多少天。输入为当前日期。
int 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);
return 0;
}
三、 程序设计题 (50分)
说明:1. 所有题目只画出对应的N-S图; 2. 所有题目不能使用全局变量,否则视为0分处理; 3. 所有题目假定用户输入肯定正确,程序不需要对异常输入进行处理。
1、世界杯小组赛的32支参赛队分为八个小组,每组四队进行比赛。每支球队都必须和其他三支球队进行且只进行一场比赛,胜者得三分,负者不得分,打平双方各得一分。每个小组的前两名出线。小组赛出线规则如下:
a、积分高者排名靠前
b、小组中总净胜球高者排名靠前
c、小组中总进球数高者排名靠前
假设依次采用a、b、c三条规则后没有排名相同的队伍,请写出判断各个队伍排名的程序。
输入:4行,每行一个字符串和3个整数,字符串为国家的名字(长度不会超过20),3个整数(大于等于0且小于20)依次为该队的总进球数、总失球数和积分。注:总净胜球指的是该队总的进球数减去总的失球数。
输入样例:
Brazil 3 7 4
China 10 0 9
Germany 4 7 4
Italy 3 6 4
输出:4行,按小组赛排名从高到低每行输出一个国家的名字。
输出样例:
China
Germany
Italy
Brazil
要求:
- 如上,每支队伍的数据包含四个属性:
Country
(国家名),GoalsFor
(总进球数),GoalsAgainst
(总失球数),Points
(积分)。请将每支队伍信息抽象成一个结构体,并通过typedef struct team TEAM
语法格式给出该结构体完整定义。(4分) - 设计三个函数
Comp, Swap, Sort
。Comp
功能:顺次依据a、b、c三条规则比较两支球队的成绩,并返回比较结果;Swap
功能:将两支球队的所有数据交换(两个结构体内的所有值都要交换);Sort
功能:将若干支队伍依据规则降序排列。要求给出三个函数的完整函数头格式,包括参数列表、返回值,并说明参数列表中每个参数的含义,以及返回值的含义。(12分) - 请分别给出三个函数
Comp, Swap, Sort
对应的算法设计N-S图,要求Sort
函数必须调用其它两个函数。(10分) - 请给出
main
函数对应的算法设计N-S图,算法中必须调用Sort
函数。注:输入输出无需细化。(2分)