江苏省计算机变态二级.docx
《江苏省计算机变态二级.docx》由会员分享,可在线阅读,更多相关《江苏省计算机变态二级.docx(12页珍藏版)》请在冰豆网上搜索。
![江苏省计算机变态二级.docx](https://file1.bdocx.com/fileroot1/2022-12/1/ef79955c-0d64-4355-981b-c273b19c19c2/ef79955c-0d64-4355-981b-c273b19c19c21.gif)
江苏省计算机变态二级
2010春 第二部分C语言程序设计
一、选择题(用答题卡答题,答案依次填在21~30答题号内,共l0分)
21.C语言规定,在一个源程序中main函数的位置 _____(21)_____ 。
A.必须在最开始 B.必须在最后
C.必须在预处理命令的后面 D.可以在其他函数之前或之后
22.以下选项中,______(22)______ 是C语言关键字
A.printf B.include C.fun D.default
23.已知有声明"int a=3,b=4,c;",则执行语句"c=1/2*(a+b);"后,c的值为__(23)___ 。
A.0 B.3 C.3.5 D.4
24.设指针变量占2个字节的内存空间,若有声明"char *p="123";int c;",则执行语句"c=sizeof(p);"后,c的值为__(24)___
A.1 B.2 C.3 D.4
25.已知有声明"int a=3,b=4;",下列表达式中合法的是 (25)
A.a+b=7 B.a=|b| C.a=b=0 D.(a++)++
26.已知有声明"char s[20]="Hello";",在程序运行过程中,若要想使数组s中的内容修改为"Good",则以下语句中能够实现此功能的是 (26) 。
A.s="Good"; B.s[20l="Good";
C.strcat(s,"Good"); D.strcpy(s,"Good");
27.已知有声明"int a[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16)};",若需要引用值为12的数组元素,则下列选项中错误的是( 27 ) 。
A.*(a+2)+3 B.*(*(a+2)+3) C.*(a[2]+3) D.a[2][3]
28.已知有声明"int n;float x,y;",则执行语句"y=n=x=3.89;"后,y的值为 ( 28 ) 。
A.3 B.3.0 C.3.89 D.4.0
29.已知有声明"int a=12,b=15,c;",则执行表达式"c=(a||(b-=a))"后,变量b和c的值分别为( 29 )
A.3,1 B.15,12 C.15,1 D.3,12
30.下列叙述中,正确的是 _____(30)______ 。
A.C语言中的文件是流式文件,因此只能顺序存取文件中的数据。
B.调用fopen函数时若用"r"或"r+"模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。
C.当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据
D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖
二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分)
● 基本概念
1. 数学式 所对应的c语言表达式为pow(x, __
(1)__)。
2. 已知有声明"char ch='g';",则表达式ch=ch-'a'+'A'的值为字符
(2) 的编码。
3. 在C语言系统中,如果一个变量能正确存储的数据范围为整数-32768~32767,则该变量在内存中占_____(3)_____个字节。
'
4. 已知有声明"int a[3][2]={{1,2),{3,4},{5,6}},*p=a[0];",则执行语句"printf("%d\n",*(p+4));"后的输出结果为__(4)___ 。
5. 已知有声明和语句"int a;scanf("a=%d",&a);",欲从键盘上输入数据使a中的值为3,则正确的输入应是 _____(5)_____ 。
• 阅读程序
6. 以下程序运行时输出到屏幕的结果为 (6) 。
#include
#define MAX(A,B) A>B?
2*A:
2*B
void main()
{int a=1,b=2,c=3,d=4,t;
t=MAX(a+b,c+d);
printf("%d\n",t);
}
7.以下程序运行时输出到屏幕的结果是 (7) 。
#include
void main()
{int a=1,b=2;
a+=b;
b=a-b;
a-=b;
printf("%d,%d\n",a,b);
}
8.以下程序运行时输出到屏幕的结果是 (8) 。
#include
void swap(int a,int b)
{int t;
if(a>b)t=a,a=b,b=t;
}
void main()
{int x=13,y=11,z=12;
if(x>y)swap(x,y);
if(x>z)swap(x,z);
if(y>z)swap(y,z);
printf("%d\t%d\t%d\n",x,y,z);
}
9•以下程序运行时输出到屏幕的结果第一行是 (9) ,第二行是 (10) ,第三行是(11) 。
#include
int g(int x,int y)
{ return x+y;
}
int f(int x,int y)
{
{static int x=2;
if(y>2)
{ x=x*x;
y=x;
}
else y=x+1;
}
return x+y;
}
void main()
{int a=3;
printf("%d\n",g(a,2));
printf("%d\n",f(a,3));
printf("%d\n",f(a,2));
}
10.以下程序运行时输出到屏幕的结果是 (12) 。
#include
void fun(int m,int n)
{if(m>=n)
printf("%d",m);
else
fun(m+1,n);
printf("%d",m);
}
void main()
{ fun(1,2); }
11.以下程序运行时输出到屏幕的结果第二行是 (13) ,第四行是 (14) 。
#include
#define N 6
void main()
{int i,j,a[N+1][N+1];
for(i=1;i<=N;i++)
{a=1;a[1]=1;}
for(i=3;i<=N;i++)
for(j=2;j
a[j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<=N;i++)
{ for(j=1;j<=i;j++)
printf("M",a[j]);
printf("\n");
}
}
12.以下程序运行时输出到屏幕的结果第一行是 (15) ,第二行是 (16) 。
#include
void fun(char *p1,char *p2);
void main()
{int i; char a[]="54321";
puts(a+2);
fun(a,a+4);
puts(a);
}
void fun(char *p1,char *p2)
{char t;
while(p1
{t=*p1;*p1=*p2;*p2=t;
p1+=2,p2-=2;
}
}
13.以下程序运行时输出至到屏幕的结果第一行是(17) ,第二行是(18) 。
#include
typedef struct{int x,y;}direction;
int visible(direction s,direction A,direction B,direction C)
{direction p1,p2;
int d;
p1.x=B.x-A.x;
p1.y=B.y-A.y;
p2.x=C.x-A.x;
p2.y=C.y-A.y;
d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;
printf("M\n",d);
return d>0;
}
void main()
{char *ss[]={"invisible","visible"};
direction s={1,1},T={1,1},A={0,0},B={2,1};
puts(ss[visible(s,T,A,B)]);
}
• 完善程序
14.以下程序的功能是:
统计一个字符串中数字字符"0"到"9"各自出现的次数,统计结果保存在数组
count中。
例如,如果字符串为"lenterschar4543123564879ffgh",则统计结果为:
1:
2 2:
1 3:
2 4:
3
5:
2 6:
1 7:
1 8:
1 9:
1。
试完善程序以达到要求的功能。
#include
void fun(char *t,int count[])
{ char *p=t;
while( _____(19)_____ )
{ if(*p>='0' && *p<='9')
count[_____(20)_____]++;
p++;
}
}
void main()
{char s[80]="1enterschar4543123564879ffgh";int count[10]={0},i;
fun(s,count);
for(i=0;i<10;i++)
if(count) printf("%d:
%d ",i,count);
}
15.下列程序的功能是对a数组a[0]~a[n-1]中存储的n个整数从小到大排序。
排序算法是:
第一趟通
过比较将n个整数中的最小值放在a[0]中,最大值放在a[n-1]中;第二趟通过比较将n个整数中的
次小值放在a[1]中,次大值放在a[n-2]中;......,依次类推,直到待排序序列为递增序列。
试完喜
程序以达到要求的功能。
#include
#define N 7
void sort(int a[],int n)
{int i,j,min,max,t;
for(i=0;i<___(21)___;i++)
{ ______(22)______
for(j=i+l;j
if(a[j]
else if(a[j]>a[max])max=j;
if(min!
=i)
{t=a[min];a[min]=a;a=t;}
if(max!
=n-i-1)
if(max==i)
{t=a[min];a[min]=a[n-i-1];a[n-i-1]=t;}
else
{t=a[max];a[max]=a[n-i-1];a[n-i-1]=t;}
}
}
void main()
{int a[N]={8,4,9,3,2,1,5},i;
sort(a,N);
printf("sorted:
\n");
for(i=0;i
printf("\n");
}
16.下列程序中函数find_replace的功能是:
在s1指向的字符串中查找s2指向的字符串,并用s3指向
的字符串替换在s1中找到的所有s2字符串。
若sl字符串中没有出现s2字符串,则不做替换并使
函数返回0,否则函数返回1。
试完善程序以达到要求的功能。
#include
#include
int find_replace(char s1[],char s2[],char s3[])
{ int i,j,k,t=0; char temp[80];
if(s1[0]=='\0'||s2[0]=='\0')return t;
for(i=0;s1!
='\0';i++)
{ k=0; j=i;
while(s1[j]==s2[k]&&s2[k]!
='\0')
{ j++;
___(23)_________
}
if(s2[k]=='\0')
{ strcpy(temp,&s1[j]);
___________(24)________;
i=i+strlen(s3);
_______(25)_________;
t=1;
}
}
return t;
}
void main()
{char line[80]="This is a test program and a test data.";
char substr1[10]="test",substr2[10]="actual";
int k;
k=find_replace(line,substr1,substr2);
if(______(26)_______)
puts(line);
else
printf("not found\n");
}
17.设hl和h2分别为两个单链表的头指针,链表中结点的数据结构为:
typedef struct node
{int data;
struct node *next;
}NODE; .
sea_del函数的功能是:
删除hl指向的链表中首次出现的与h2指向的链表中数据完全匹配的
若干个连续结点,函数返回hl指向链表的头指针。
例如,初态下,hl指向链表和h2指向链表如下图所示:
试完善函数sea_del以达到要求的功能。
NODE *sea_del(NODE *h1,NODE *h2)
{NODE *p,*ph,*q,*s;
ph=NULL;p=q=h1; s=h2;
if(h1==NULL||__(22)__) return h1;
while(p!
=NULL&&s!
=NULL)
{while(q->data==s->data&&q&&s)
{ q=q->next;
s= __(28)__;
}
if(s!
=NULL) /*失配时,h1起始结点后移,h2从首结点开始*/
{ ph=p;
p=q=p->next;
s=__(29)__;
}
else 、
if(ph==NULL) h1=q;
else ph->next=q;
}
__(30)__
}
改错题:
[程序功能]
输入两个正确日期且年份在1900-9999范围内,计算
并输出两个日期之间间隔的天数,例如:
2008-8-1
和2009-8-1之间间隔的天数为365
提示:
能被4整除并且不能被100整除的年份是闰年,能
被400整除的年份也是闰年,其他年份则是平年
[测试数据与运行结果]
显示:
first date:
输入:
1980-2-1
显示:
second date:
2009-8-1
输出:
10774 days
[含有错误的源程序]
#include
#define leap(int y) ((y)%4==0 && (y)%100!
=0||(y)%400==0)
struct d
{int y,m,d;};
int days(struct d d1,struct d d2)
{int mon[2][13]=
{{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int i; long td=0;
for(i=d1.y;i td=leap(i)?
366:
365;
for(i=1;i td-=mon[leap(d1.y)];
td-=d1.d-1;
for(i=1;i td+=mon[leap(d2.y)];
td+=d2.d-1;
return td;
}
void main()
{struct d d1,d2;
long td;
printf("first date:
");
scanf("%d-%d-%d",d1.y,d1.m,d1.d);
printf("second date:
");
scanf("%d-%d-%d",d2.y,d2.m,d2.d);
td=days(d1,d2);
printf("%ld",td);
}