|
请按下述要求正确填写答卷,若不按下述要求解答,将不分数
1.在答卷的指定位置填写你所在的省、自治区、直辖市、计划单列市的名称。
2.在答卷的指定位置填写准考证编号、出生年月日和姓名。
3.答卷上除填写上述内容外只能写解答。
4.本试卷的4道试题都是必答题,请全部解答。
5.解答时字迹务必清楚,字迹不清时,将不评分。
6.仿照下面例题,将解答写在答卷的对应栏内。
例题
一九九九年度举行的计算机软件专业技术资格和水平考试的日期是2000年(1)月(2)日。
因为正确的答案是4月16日,故在答卷的对应栏内写上‘4’和‘16’。
试题一
阅读以下C代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序1.1】
#include <stdio.h>
main()
{struct num{int x;int y;
}sa[] ={{2,32},{8,16},{4,48};
struct num *p =sa+1;
int x;
x =p->y /sa[0].x *++p->x;
printf(″x =%d p->x =%d\n″,x,p->x);
}
程序1.1的输出结果是(1)。
【程序1.2】
#include <stdio.h>
int p(int k,int a[])
{int m,i,c =0;
for(m =2;i <=m;i++)
for(i =2;i <=m;i++)
if (!(m %i))break;
if (i ==m)a[c++] =m;
}
return c;
}
#define MAXN 20
main()
{int i,m,s[MAXN];
m =p(13,s);
for(i =0;i <m;i++)
printf(″%4d\t″,s[i]);
printf(″\n″);
}
程序1.2的输出结果是(2);函数int p(int k,int a[])的功能是(3)。
【程序1.3】
#include <stdio.h>
void s(int a[],int n)
{int i,j,t;
for(i =0;i <n;i++){
for(t =a[i],j =i-1;j >=0&&t <a[j];j--)
a[j+1] =t;
}
}
main()
{int i,c[] ={15,3,8,9,6,2};
s(c,6);
for(i =0;i <6;i++)
printf(″%4d\t″,c[i]);
printf(″\n″);
}
程序1.3的输出结果是(4);函数s(int a[],int n)的功能是(5)。
试题二
阅读下列程序说明和C代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序2.1说明】
程序2.1求以下级数和的近似值,约定求和的精度为0.000001。
x3x5x7
s(x)=x –+-+……
3*1!5*2!7*3!
【程序2.1】
#include <stdio.h>
#include <math.h>
#define Epsilon 0.000001
main()
{int i;double s,x,t;
printf(″Enter x.\n″);scanf(″%1f″,&x);
s =0.0;t =x;i =0;
while (fabs(t)>=Epsilon){
s =(1);i++;
t =-t *x *x *(2)/((2*i +1)*i);
}
printf(″s(%f)=%f\n″,x,s);
}
【程序2.2说明】
本程序中有函数rep(char *s,char *sl,char *s2),其形参字符串sl和s2有相同的字符个数,且sl中各字符互不相同。该函数实现将已知字符串s中所有在字符串sl中也出现的字符都用字符串s2 中的对应位置的字符代替。例如:设字符串s、sl和s2分别为:
s[ ] =″ABCABC″,sl[ ] =″AC″,s2[ ] =″ZX″
则s2中的字符Z和X分别对应sl中的字符A和C,函数调用rep(s,sl,s2)将字符串s的内容变为″ZBXZBX″。
【程序2.2】
#include <stdio.h>
void rep(char *s,char *sl,char *s2)
{char *p;
for(;s;s++){/*顺序考察s中的各个字符*/
for(;s;s++;p &&(3);p++);/*找*s是否在sl中出现*/
if ((4))s =*(s2+(5));/*找到,用s2中的对应字符替代*/
}
}
main()
{char s[] =″ABCABC″;
rep(s,″AC″,″ZX″);printf(″%s\n″,s);
}
试题三
阅读下列程序说明和C,将应填入(n)处的字句写在答卷的对应栏内。
【程序3说明】
本程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。
程序一边读入整数,一边构造一个从大到小顺序链接的链表,直至不能从键盘读入整数,然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数insert(),函数insert()将还未出现在链表上的整数按从大到小的顺序插入到链表中。
为了插入方便,链表在表首有一个辅助表元。
【程序3】
#include <stdio.h>
#include <malloc.h>
typedef struct node {int val;
struct node *next;
}NODE;
void insert(NODE *list,int x)
{NODE *u,*v,*p;
u =list;v =u->next;
while ((1)&&x <v->val)/*寻找插入位置*/
{u =v;v =v->next;}
if (v ==NULL ||(2)){/*判是否要插入新表元*/
p =(NODE *)malloc(sizeof(NODE));P->val =x;/*生成新表元*/
(3)=v;(4)=p;/*插入新表元*/
}
}
main()
{int x;
NODE *head,*p;
/*首先建立只有辅助表元的空链表*/
head =(NODE *)malloc(sizeof(NODE));
(5)=NULL;
printf(″Enter integers:\n″);
while (scanf(″%d″,&x)==1)/*反复读入整数插入链表*/
insert(head,x);
for(p =head->next;p !=NULL;p=p->next)
printf(″%d\t″,p->val);
printf(″\n\n″);
}
试题四
阅读下列程序说明和C代码,将应填入(n)处的字句写在答卷的对应栏内。
【程序4说明】
本程序对给定的n(n≤100),计算并输出k!(k =1,2,…,n)的全部有效数字,因k!的值可能很大,故采用一维数组存储计算结果。设数组的每个元素存储k!的一位数字,并约定从低位到高位依次存于数组的第一个位置、第二个位置、……。例如,5!=120,在数组a中的存储形式为:
a[2] a[1] a[0]
…
1
2
0
程序中,计算k!采用对已求得的(k-1)!的结果连续累加k-1次后求出。例如,4!=24,则计算5!对原来的24再累加4次24后得到120。为了控制累加的位数,另引入整型变量c用于记录当前(k-1)!的位数。
【程序4】
#include <stdio.h>
#define MAXN 1000
int a[MAXN],b[MAXN];
void pnext(int k,int *cp)/*已知a[ ]中的(k-1)!,求出k!存于a[ ].*/
{int c =*cp,i,m,r;
for(i =0;i <c;i++)b[i] =a[i];
a[c] =0;
for(m =1;m <k;m++)/*通过累加求k!*/
for(i =0;i <c;i++){
r =(1);a[i] =r %10;(2)+=r/10;
}
/*处理最高位进位*/
r =a[c];
while (r>0){a[ (3)] =r%10;r =r/10;}
(4)=c;
}
void write(int *a,int k,int c)
{int i;
printf(″%4d!=″,k);
for(i =(5);i >=0;i--)printf(″%d″,a[i]);
printf(″\n\n″);
}
main()
{int n,c,k ;
printf(″Enter the number n(<=100):″);scanf(″%d″,&n);
a[0] =1;c =1;write(a,l,c);
for(k =2;k <=n;k++){
pnext(k,&c);write(a,k,c);getchar();
}
}
|