江苏省C语言二级模拟题.docx
编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第39页 共39页n更多企业学院: 中小企业管理全能版183套讲座+89700份资料总经理、高层管理49套讲座+16388份资料中层管理学院46套讲座+6020份资料 国学智慧、易经46套讲座人力资源学院56套讲座+27123份资料各阶段员工培训学院77套讲座+ 324份资料员工管理企业学院67套讲座+ 8720份资料工厂生产管理学院52套讲座+ 13920份资料财务管理学院53套讲座+ 17945份资料 销售经理学院56套讲座+ 14350份资料销售人员培训学院72套讲座+ 4879份资料模拟题1一、选择题(用答题卡答题,答案依次填在2130答题号内)A21以下叙述中正确的是21。AC程序中注释部分可以出现在程序中任何合适的地方B花括号“”和“”只能作为函数体的定界符C构成C程序的基本单位是函数,所有函数名都可以由用户命名D分号是C语句之间的分隔符,不是语句的一部分C22若以下选项中的变量已正确定义,则正确的赋值语句是22。Ax1=26.8%3; B1+2=x2; Cx3=0x12;Dx4=1+2=3;D23有以下程序段int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,b ;b=p5;b中的值是23。A 5 B6 C8D9D24有如下定义 struct personchar name9; int age; struct person class10= "Johu", 17, "Paul", 19, "Mary", 18, "Adam",16;根据上述定义,能输出字母M的语句是24。Aprintf(" %cn",class3.name);Bprintf("%cn",class3.name1);Cprintf("%cn",class2.name1);Dprintf("%cn",class2.name0);AB25有以下程序main(int argc, char *argv ) int n, i=0; while(argv1i!='0') n=fun( ); i+; printf("%dn", n*argc); int fun( ) static int s=0; s+=1; return s;假设程序经编译、连接后生成可执行文件exam.exe,若键入以下命令行exam 123<回车>则运行结果为 25。A6 B8 C3 D4C26当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是26。Ac=b=a; B(a=c)(b=c); C(a=c)&&(b=c);Da=c=b;CB27有以下程序段 main( ) int a=5,*b,*c; c=&b;b=&a; 程序在执行了c=&b;b=&a;语句后,表达式:*c的值是27。A变量a的地址 B变量b中的值C变量a中的值D变量b的地址AB28设有如下的变量定义:int i=8,k,a,b;unsinged long w=5;double x=1.42,y=5.2;则以下符合C语言语法的表达式是28。Aa+=a-=(b=4)*(a=3)Bx%(-3)Ca=a*3=2Dy=float(i)AC29当执行以下程序段时29。x=-1;dox=x*x;while(!x);A循环体将执行一次 B循环体将执行两次C循环体将执行无限次D系统将提示有语法错误D30fread(buf,32,2,fp)的功能是30。A从fp文件流中读出整数32,存放在buf中B从fp文件流中读出32个字节的字符,存放在buf中C从fp文件流中读出整数32和2,存放在buf中D从fp文件流中读出2块32个字节的字符,存放在buf中二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)l 基本概念题(共5分)1设有以下变量定义,并已赋确定的值char w; int x; float y; double z;则表达式:w*x+z-y所求得的数据类型为 double 。2C语言中,有符号短整型的取值范围是 -3276832767 。3若有以下定义和语句: int a4=0,1,2,3, *p; p=&a2; 则*p的值是 1 。4在C语言中,形参的缺省存储类型是 auto 。5若执行fopen函数时发生错误,则函数的返回值是 0 。l 阅读程序题(共13分)6下列程序执行后的输出结果的第一行是 a=6 ,第二行是 b5=10 。#include<stdio.h>void func(int *a, int b ) int i; for(i=0;i<=5;i+) *(b+i)+=*a+i; *a=*(b+i); main() int a, b10, i; a=0; for(i=0;i<10;i+) bi=i; func(&a, b); printf(“a=%dn”a); printf(“b5=%dn”,b5);7以下程序执行后输出结果的第一个数是 6 ,第三个数是 4 ,最后一个数是 1 。void fun(int *a, int i, int j) int t; if(i<j) t=ai; ai=aj; aj=t; fun(a, +i, -j); main() int a =1,2,3,4,5,6, i; fun(a,0,5); for(i=0;i<6;i+) printf(“%d”, ai); 8以下程序程序运行后的输出结果 1 65 1.5 6.5 。#include<string.h>main( )char str 20="Hello","Beijing",*p=str; printf("%dn",strlen(p+20);9以下程序运行后,输出结果是 1711717。#include <string.h> fun(char *w,int n) char t,*s1,*s2;s1=w;s2=w+n-1;while(s1<s2) t=*s1+; *s1=*s2-;*s2=t;main( ) char *p;p="1234567 "fun(p,strlen(p); puts(p);10以下程序的输出结果是 5,3,3,5 。void swap1(int c ) int t;t=c0; c0= c1; c1=t;void swap2(int c0,int cl) int t;t=c0; c0=cl; cl=t;main( ) int a2=3,5,b2=3,5;swapl(a); swap2(b0,b1);printf("%d, %d ,%d, %dn",a0,a1,b0,b1);11以下程序的输出结果是 6 。int fun(char *s) char *p=s; while(*p!='0') p+;return (p-s); main() int len=0; len=fun("hello!"); printf("%dn",len);12以下程序运行时输出结果第一行是 *ptr1=7,*ptr2=5 ,第二行是 a=7,b=5 。swap (int *p1, *p2)int p; p=*p1; *p1=*p2; *p2=p;main() int a=5, b=7, *ptr1, *ptr2; ptr1=&a, ptr2=&b; swap (ptr1,ptr2); printf(“*ptr1=%d,*ptr2=%dn”,*ptr1,*ptr2); printf(“a=%d,b=%dn”,a,b);13以下程序运行后输出结果的第一行是 1,4,7,10,22 ,第二行是 1,3,9,27,40 。 extern int m1, m2; void fun(int n, int *p1, int *p2) int i; *p1=1; *p2=1; for(i=1;i<=n;i+) *p1+=3;*p2*=3; m1+=*p1; m2+=*p2; int m1, m2; main() int i, k14, k24; for(i=0;i<4;i+) fun(i, &k1i,&k2i); for (i=0;i<4;i+) printf(“%d,”,k1i; printf(“%dn”,m1); for(i=0;i<4;i+) printf(“%d,”,k2i); printf(“%d”,m2);l 完善程序题(共12分)14以下程序中函数maxmin的功能为对于x中存储的一个任意的四位整数,求出(1)组成以这个整的四个数字由大到小排列后构成的最大的四位数,(2)组成以这个整数的四个数字由小到大排列后构成的最小的四位数。程序段如下:#include <stdio.h>void maxmin(int x,int *pmax,int *pmin) int num4,i,j,k,temp; *pmax=0;*pmin=0; for(i=0;i<4;i+) numI=x%10;x= x/10 ; for(i<0;i<3;i+) k=i; for(j=i+1;j<4;j+) if (numk<numj) k=j; if ( k!=i )temp=numI;numI=numk;numk=temp; for(i=0;i<4;i+) *pmax=*pmax*10+ *(num+i)或numi ;/*生成最大的四位数*/*pmin=*pmin*10+ *(num+3-i)或num3-i ;*生成最小的四位数*/ main() int n=3169,max=0,min=0; maxmin(n,&max,&min); printf(“n%d%d”,max,min);15给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。请在程序的下划线处填上正确的内容,使程序得到正确的结果。#include <stdio.h>#define M 5#define N 20int fun(char (*ss) N, int *n) int i, k=0, len=0; for(i=0; i<M; i+) len=strlen(ssi); if(i=0) *n= len ; if(len>*n) *n=len ; k=i; return(k);main() char ssMN="shanghai","guangzhou","beijing","tianjing","nanjing" int n,k,i; printf("nThe original strings are :n"); for(i=0;i<M;i+)puts(ssi); k=fun(ss,&n); printf("nThe length of longest string is : %dn",n); printf("nThe longest string is : %sn",ssk);16给定程序MODI1.C中函数fun的功能是:求出字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输入从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为:“abcdabfacdx“,t中的内容为:”ab“时,输出结果应是abfacdx,当字符串中的内容为:“abcdabfabcdx”,t中的内容为:”abd“时,则程序的输出信息:not be found!#include <conio.h>#include <stdio.h>#include <string.h>char *fun(char *s,char *t) char *p,*r,*a;a=NULL; while(*s) p=s ;r=t; while(*r) if(*r= =*p) r+ ;p+; else break; if( *r= ='0' )a=s; s+ ; return a;main( ) char s100,t100,*p; clrscr( ); printf("nPlease enter string S :"); scanf("%s",s); printf("nPlease enter substring t :"); scanf("%s",t); p=fun(s,t); if(p) printf("nThe result is : %sn",p); else printf("nNot found !n"); 17给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。#include <stdio.h>#include <conio.h>#include <stdlib.h>typedef struct aa int data; struct aa *next; NODE;fun ( NODE *h ) int max=-1; NODE *p; p=h->next; while(p) if(p->data>max ) max=p->data; p=p->next; return max;outresult(int s, FILE *pf) fprintf(pf,"nThe max in link : %dn",s);NODE *creatlink(int n, int m) NODE *h, *p, *s, *q; int i, x; h=p=(NODE *)malloc(sizeof(NODE);h->data=9999; for(i=1; i<=n; i+) s=(NODE *)malloc(sizeof(NODE); s->data=rand()%m;s->next=p->next; p->next=s;p=p->next; p->next= NULL ; return h;outlink(NODE *h, FILE *pf) NODE *p; p=h->next; fprintf(pf,"nTHE LIST :nn HEAD"); while(p) fprintf(pf,"->%d ",p->data);p=p->next; fprintf(pf,"n"); main( ) NODE *head; int m; clrscr(); head=creatlink(12,100); outlink(head,stdout); m=fun(head); printf("nTHE RESULT :n"); outresult(m, stdout); 模拟题2 一、选择题(用答题卡答题,答案依次填在2130答题号内)21若调用一个函数,且此函数中没有return语句,则正确的说法是21。A该函数没有返回值 B返回若干个系统默认值C能返回一个用户所希望的函数值 D返回一个不确定的值22设有以下宏定义:#define W 5#define L W+2则执行赋值语句p=L*2;(p为int型变量)后,p的值为22。A6 B7 C8 D923若有以下定义和语句#include <stdio.h> int a=4,b=3,*p,*q,*w; p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是23。A*q=0; Bw=p; C*p=a; D*p=*w;24若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是24。Anum%2=1B!(num%2=0)C!(num%2)Dnum%225若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是 25。int t33, *pt3, k;for (k=0;k<3;k+) ptk=&tk0;At20Bt22Ctl2Dt2l26以下只有在使用时才为该类型变量分配内存的存储类说明是26。Aauto和static Bauto和registerCregister和static Dextern和register27设有如下定义struct ss char name10; int age;char sex;std3,*p=std;下面各输入语句中错误的是27。Ascanf("%d",&(*p).age); Bscanf("%s",&std.name);Cscanf("%c",&std0.sex); Dscanf("%c",&(p->sex);28设有如下的变量定义:int i=8,k,a,b;unsinged long w=5;double x=1.42,y=5.2;则以下符合C语言语法的表达式是28。Aa+=a-=(b=4)*(a=3)Bx%(-3)Ca=a*3=2Dy=float(i)29能正确表示a和b同时为正或同时为负的逻辑表达式是29。A(a>=0b>=0)&&(a<0b <0)B(a>=0&&b>=0)&&(a<0&&b <0)C(a+b>0)&&(a+b<=0) Da*b>030若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为 30。A0 B1C-1 D一个非0值二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)l 基本概念题(共5分)1在C语言中大部分执行语句都含有关键字,除这些语句外不含关键字的非空操作语句是 表达式语句 。2若有说明:int x 3 = 1,3,5,7,9,11,13;则x数组的行数为 3 。3有以下程序 main( ) char *s ="one","two","three",*p; p=s1; printf("%c,%sn",*(p+1),s0); 执行后输出结果是 w,one 。4C程序中,文件可以用 ASCII码 和二进制两种代码形式存放。 5若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 x= =0|x= =1l 阅读程序题(共13分)6下面程序的输出结果是 54 。fun(int b ,int n) static int i,r=0; for(i=0;i<=n;i+) r+=bi; return r;main( ) int x,a =2,3,4,5,6,7,8,9; x=fun(a,3); x+=fun(a+3,3); printf("%dn",x);7下列程序的执行结果是 -12 。#include <ctype.h>long fun(char s ) long n;int sn; for(;*s= = ' 's+);/*去掉字符串前空格*/ sn=(*s= ='-')? -1:1; if(*s= ='+'|*s='-') s+; for(n=0;*s>='0'&&*s<='9');s+) n=10*n+(*s-'0'); return sn*n; main( ) printf("%ld",fun("-12x3y4");8以下程序执行后输出的第一个数是 3 ,第二个数是 5 。main( ) int x=5,n=3,s,j; for(j=0;j<2;j+) s=fun(x,n); printf("%d ",s); fun(int a,int b) static int n=0,i=2; i=n+1; n=i+a-b; return(n);9以下程序执行后输出的第一个数是 3456 ,第二个数是 12 。main()struct bytint x;char y;unionint a2;long k;char b2;struct byt d;r,*s=&r; s->k=0x123456; printf("%x,%xn",s->d.x,s->d.y); 10以下程序运行时输出的第一个数是 1 ,第二个数是 2 ,第三个数是 3 。main() static int a33, 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) aij+=3; else aij+; break; case 1: aij+=2; break; case 2: aij+=3; printf(“%d,%d,%d”,a11, a12, a20);11以下程序执行后,输出结果是 5,4,3,2,1。void f (int a ,int i,int j) int t;if (i<j) t=ai; ai= aj; aj=t;f(a,i+1,j-1);main( ) int i,aa5=1,2,3,4,5;f (aa,0,4);for(i=0;i<5;i+) printf("%d,",aai);printf("n");12有以下程序,main( )int a; char c=10;float f=100.0; double x;a=f/=c*=(x=6.5);printf(" %d %d %3.1f %3.1fn",a,c,f,x);程序运行后的输出结果是 1 65 1.5 6.5。 13以下程序运行后,输出结果的第一个数为 1 ,最后一个数为 5 。#include<stdio.h>fun(char *w, int n) char t, *s1, *s2; s1=w; s2=w+n-1; while(s1<s2) t=*s1+; *s1=*s2-; *s2=t; main() char *p; p=”12345”; fun(s,strlen(p); puts(p); l 完善程序题(共12分)14函数fun的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p小于n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。#include <stdio.h>#define N 80void fun(int *w,int p,int n) int i,j;int aN;for(i=0;i<=p;i+) ai=wi;for(i=p+1,j=0;i<n;i+,j+) wj=wi; ;for(i=0;i<=p;i+) wn-p-1+i=ai; ; main( ) int aN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; int i,p,n=15; printf("The original data:n"); for(i=0;i<n;i+)printf("%3d",ai); printf("nEnter p:");scanf("%d",&p); fun(a,p,n); printf("nThe data after moving:n"); for(i=0;i<n;i+)printf("%3d",ai); 15函数fun的功能是:将M行N列的矩阵中的数据,按行的顺序依次放在一维数组中,一维数组中的元素的个数存放在形参n所指的存储单元中。例如:矩阵中的数据为,则一维数组中各元素的值分别是11、12、13、14、21、22、23、24、31、32、33、34。void fun(int (*s)10,int *b,int *n,int mm,int nn) int i,j; for(i=0;i<mm;s+,i+) for(j=0;j<nn;j+) *(b+i*nn+j)= (*s)j; ; *n=mm*nn; ;main( ) int w1010=11,12,13,14,21,22,23,24,31,32,33,34,i,j; int a100=0,n=0; printf("The matrix:n") ; for(i=0;i<3;i+) for(j=0;j<4;j+) printf("%3d",wij) ; printf("n") ; fun(w,a,&n,3,4); printf("The A array:n") ; for(i=0;i<n;i+) printf("%3d",ai);printf("nn") ; 16函数fun的功能是:将带头结点单向链按data域由大到小排序(排序时不考虑头结点),主函数用随机函数为各结点data域赋值,头结点data域赋值为0。#include <stdio.h>#include <conio.h>struct aa int data;struct aa *next;void fun(struct aa *p) int temp;struct aa *lst; for(p=p->next;p->next!=NULL;p=p->next) for(lst=p->next;lst!=NULL;lst=lst->next) if(lst->data>p->data) temp=lst->data; ;lst->data=p->data;p->data=temp; main( ) int i,n,m=100; struct aa *h=NULL,*s=NULL,*p=NULL; clrscr( ); s=(struct aa *)malloc(sizeof(struct aa); h=s;h->data=0;h->next=NULL; printf("please input n:");scanf("%d",&n); for(i=1;i<=n;i+) p=(struct aa *)malloc(sizeof(struct aa); p->data=rand()%m; p->next=NULL; ;printf("%d ",p->data); s->next=p; ; s=s->next; fun(h); printf("n"); for(h=h->next;h!=NULL;h=h->next) printf("%d ",h->data); 17函数fun的功能是:求任意两个正整数的最小公倍数和最大公约数,最小公倍数放在指针变量bei所指的变量中,最大公约数放在指针变量yue所指的变量中。void fun(int m,int n,int *bei,int *yue) int s=1,i; if(m>n)s=m; m=n; n=s; for(i=2,s=1;i<m;i+) if( (m%i=0) && (n%i=0) ) m=m/i; n=n/i; s=s*i; i=1; *yue=s; *bei=s*m*n; ; main( ) int a,b,beishu,yueshu; clrscr( ); printf("please input a,b:");scanf("%d,%d",&a,&b); fun(a,b,&beishu,&yueshu); printf("a,b beishu:%dn",beishu); printf("a,b yueshu:%dn",yueshu); 18以下程序的功能是:从键盘上输入一串字符,放入一字符数组中,然后按照逆序输出该字符串,补足所缺语句。main( ) char str80,*ptr; int i; for(i=0;i80;i+) stri=getchar( ); if(stri='n') break; stri= '0' ;ptr=&stri或ptr=str+i ; do putchar(*-ptr);while(ptr!=str) ;模拟题3一、选择题(用答题卡答题,答案依次填在2130答题号内)21以下符合C语言语法的实型常量是21。A1.2E0.5 B3.14159E C.5E-3 DE1522设有定义:float a=2,b=4,h=3 ; 以下C语言表达式中与代数式(a+