江苏省二级C语言考试模拟试题1(注:只有C部分,没有公共基础部分)-、选择题[请用答题卡答题,答案依次填在(21)-(30)答题号内] 21.已知有声明语句int x=8,则下列表达式中,值为2的是(21). A.x+=x-=x B.x%=x-2 C.x>8?x=0:x++ D.x/=x+x 22.以下关于函数的叙述中正确的是(22)
A.在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值 B.在函数体中至少必须有一个return语句 C.在函数体中可以定义另一个函数 D.在函数体中可以调用函数自身
23.若有声明语句\则以下对数组元素赋值的操作中,不会出现越界访问 的是(23)
A.a[-1]=0 B.a[10]=0 C.b[3][O]=0 D.b[0][3]=0
24.数组和链表都可以用于存储一组彼此有关联的数据,以下说法中不正确的是(24) A.数组占用一块连续的存储区域,链表可能占用若干块不连续的存储空间 B.数组和链表所占用的存储区域均不能在程序运行期间动态地分配 c.数组中的数据可以随机存取或顺序存取,链表中的数据只能顺序存取 D.数组的长度是固定的,链表的长度是不固定的 25.设有定义和声明语句: typedef struct dtype {int a;
struct dtype *b; }node;
static node x[3]={5,&x[1],7,&x[2],9,'\\0'},*prt=&x[0]; 下列选项中,表达式值不为5的是(25) A.x[1].b->a-2 B.ptr->b->a-2 C.(ptr+1)->a-2 D.ptr->a
26.在以下程序中,需要在main函数之后定义-个函数,以下选项中(26)可以用做该函数 的名字
#define p 3.14 int y; main() {int a=1; 函数名(a);
... /*若干执行语句*/ }
int 函数名(int x) {return x*x;}
A.main B.y C.p D.print
27.若有声明语句\以下语句中有语法错误的是 (27) A.(*pc)++; B.ch+=-'a'+'A'; C.toupper(ch)=ch; D.ch++;
28.已知有语句\如果需要将变量x的值以文 本形式保存到一个磁盘文件out.dat中,则以下函数调用形式中正确的是(28) A.fprintf(\
C.fprintf(\
29.已知有声明语句\以下语句中(29)不能正确输出a数 组全部元素的值
A.for(p=a,i=0;i<5;i++)printf(\ B.for(p=a;p main() {static int a[3][3],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) { switch(abs(i-j)) {case 0: if(i==0 || i==2)a[j]+=3;
else a[j]++;break; case 1:a[j]+=2;break;
case 2:a[j]+=3; } } printf(\ } 10.以下程序运行时输出第一行是(13) ,第二行是(14) #include return s; } main() {char ss1[]=\ y=convert(ss1,ss2);printf(\ } 11.以下程序运行时输出 ( 15 ) long func(long x) {if(x<100) return x; else return func(x/100)*10+x; } main() {printf(\ ●完善程序题(共15分) 12.函数loop(s,m,n,str)的功能是:对字符串str中,从下标为s的字符开始的所有间隔为m 的字符进行循环左移,即:str[s]<--str[s+m],str[s+m]<--str[s+2m],..,str[s+(k-1)m] -str[s+km],str[s+km]<--str[s](k为整数,下标s+km不越界),共做n次 例如,调用loop(1,2,1,str)前后str中数据的变化情况如下: str中初始数据:A B C D E F G H I J K 移位后str数据:A D C F E H G J I B K #include void loop(int s,int m,int n,char *str); main() {char buf[81]; strcpy(buf,\ loop(1,2,2,buf);puts(buf); } void loop(int s,int m,int n,char*str) { char c;int k;int i,len; len=strlen(str); for(i=O;i {str[k]=str[k+m];k=(18);} (19) =c; } } 13.以下程序验证一个猜想:任意一个十进制正整数与其反序数相加后得到一个新的正整数, 重复该步骤最终可得到一个回文数(所谓反序数,是指按原数从右向左读所得到的数,例 如,123的反序数是321所谓回文数,是指一个数从左向右读的值与从右向左读的值相 等例如,12321、234432都是回文数) #include printf(\ scanf(\ while((20)) {printf(\ n=n+invert(n);c++; while((21)) {n=n+invert(n);c++;} printf(\ } long invert(long x) /*生成并返回x的反序数*/ {long s; for(s=0;x>0; ( 22 ) ) s=s*10+x; return s; } 14.已知某链表中结点的数据结构定义如下: struct node {int x; struct node *next; }; 函数find_del的功能是:在参数head指向的链表中查找并删除x值最大的结点,如有多 个相同的x值最大的结点,删除第一个结点,保存该结点的地址到pm指向的指针变量中, 函数返回链表首结点的指针 struct node *find_del(struct node *head,struct node **pm) {struct node *p1,*p2,*pmax,*pre; if(head==NULL)return NULL; pmax=( 23 );p2=p1=pmax; while(p1) {if(p1->x>( 24 )) {pre=p2;pmax=p1;} p2=p1:p1=p1->next; } if(pmax==head)head=pmax->next; else ( 25 ) =pmax->next; ( 26 )=pmax; return head; } 15.以下程序对一组点坐标(x,y)按升序进行排序,要求:先按x的值排序,若x的值相同,则 按y的值排序,排序算法为选择法 #include void point_sort( (27) *x,int n) {POINT t; int i,j,k; for(i=0;i for(j=( 29 );j