试卷详情
-
计算机水平考试初级程序员2008年上半年下午真题
-
[简答题]【说明】
计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*(120-37)”的后缀表达式形式为“46 512037-*+”。
计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇,到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5120 37-*+”的计算过程如下。
a.依次将46、5、120、37压入栈中;
b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中:
c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;
d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;
e.表达式结束,则计算过程完成。
函数computing(char expr[],int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“/”)。
函数computing中所用栈的基本操作的函数原型说明如下。
· void InitStack(STACK *s):初始化栈。
· void Push(STACK,s,int e):将一个整数压栈,栈中元素数目增1。
· void Pop(STACK *s):栈顶元素出栈,栈中元素数目减1。
· int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。
· int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。
【C函数】
int computing (char expr[],int *result)
{
STACK s; int tnum,a,b; char *ptr;
InitStack(&s);
ptr=expr;pstr /*字符指针指向后缀表达式串的第一个字符*/
while(*ptr!=’/0’) {
if(*ptr==’ ’) { /*当前字符是空格*/
-
[简答题]【说明】
下面的程序按照以下规则输出给定名词的复数形式。
a.若名词以“y”结尾,则删除y并添加“ies”;
b.若名词以“s”、“ch”或“sh”结尾,则添加“es”;
c.其他所有情况,直接添加“s”。
【C程序】
#include <stdio.h>
#include <string.h>
char*plural(char *word)
{
int n;
char *pstr;
n=strlen(word); /*求给定单词的长度*/
pstr=(char*)malloc(n+3);/*申请给定单词的复数形式存储空间*/
if (!pstr||n<2)
return NULL;
strcpy(pstr,word); /*复制给定单词*/
if ( (1) )
{
pstr[n-1]=’i’;pstr[n] =’e’;pstr[n+1]=’s’; (2) ;
}
else
if(pstr[n-1]==’s’| |pstr[n-1]==’h’&&( (3) ))
{
pstr[n]=’e’;pstr[n+1]=’s’;pstr[n+2]=’/0’;
}
else
{ pstr[n]=’s’;pstr[n+1]=’/0’;)
(4) ;
}
main( )
{ int i; char *ps;
char wc[9][10]=
{"chair","dairy","boss","circus","fly","dog","church","clue","dish");
for(i = 0;i<9; i++) {
ps= (5) ;
printf("%s: %s/n",wc[i],ps); /*输出单词及其复数形式*/
free(ps); /*释放空间*/
}
system("pause");
}
-
[简答题]【说明】
下面的程序用DoleRob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。
a.在第一行的正中插入1。
b.新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。
c.若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。
例如,3阶魔方阵如下所示:
8 1 6
3 5 7
4 9 2
【C程序】
#include<stdio.h>
#include<stdlib.h>
#define SIZE 50
main( )
{ int row, col, n,value;
int a[SIZE+1][SIZE+1]; /*不使用下标为0的元素*/
printf("请输入要输出魔方阵的阶数n(奇数,<%d):n=",SIZE);
scanf("%d",&n);
if (!(n % 2)||n < 1 || (1) ) {
printf("输入数据有误!/n"); exit(0);
}
row=1; col = (n+1)/2; value=1;
while(value< = (2) ) {
a[row][col] = value;
/*计算下一位置*/
if(value%n !=0){
row--; (3) ;
if(row<1) row=n;
if(col>n) (4) ;
}
else row++;
value = (5) ;
}
printf("/n%d阶魔方阵如下所示:/n/n",n);
for(row = 1;row <= n; row++){
for(col = 1; col <=n; col++)
printf("%5d"