江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
江苏计算机二级C语言练习模拟试题

第二部分 :c程序设计

21.执行"int k=11;k=1/3*k++;",k的值是__(21)____

A.0  B.3  C.4  D.12

22.以下常量中正确的是____(22)____

A.'abc'  B.'\x123'   C.3.145E-1.2   D."a"

23.设有"int a;",以下不能正确表达数学关系10<a<15的表达式是__(23)___

A.10<a<15   B.a==11||a==12||a==13||a==14

C.a>10 && a<15   D.!(a<=10) &&!(a>=15)

24.若有"int a[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);",则值为9的表达式是(24)

A.p+=3,*p++      B.p+=4, *(p++)

C.p+=4,*++p      D.p+=4,++*p;

25.以下关于if语句的错误描述是(25)

A.条件表达式可以是任意的表达式

B.条件表达式只能是关系表达式或逻辑表达式

C.条件表达式的括号不可以省略

D.else配对的if语句是其之前最近的未配对的if语句

26.设有如下函数定义,则返回的函数值是(26)

    main()

    {int x,*y;y=fun(&x);...}

    int *fun(int *a)

    {int *t;*a=99;t=a;return t;}

A.无确切的值   B.形参a的地址    C.主函数中变量x的地址  D.fun函数中变量t的地址

27.以下程序段的输出结果是___(27)___

  int a=0,b=4,k=2;k=a+1>0||(++a<0)&&(!(b--<=0));

  printf("%d,%d,%d",k,a,b);

A.1  1  3   B.1  1  4  C.1  0  3  D.1  0  4

28.设有基类型相同的两个指针变量,则不能对他们进行____(28)___运算

A.+  B.-  C.++  D.--

29.语句(29)能正确完成赋字符串的功能

A.char s[4];s[0]="string"  B.char *s;gets(s);

C.char *s[]="string"       D.char *s;strcpy(s,"string");

30.以下叙述中不正确的是(30)

A.一个变量的作用域完全取决于变量说明语句的位置

B.外部变量可以在函数以外的任何位置定义

C.内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用

D.static说明一个外部变量是为了限制其他编译单位的引用

二:填空题

1.若有"int a=5;a+=a-=-a*a;",则a的值是___(1)___

2.以下程序的输出结果是___(2)____

 enum week{SUN=7,MON=1,WED,TUS,THS,FRI,SAT};

 main()

 {printf("%d",hour(FRI,SUN));}

 hour(int x,int y)

 {if(y>x) return 24*(y-x);

  else  return -1;

 }

3.以下程序的输出结果是(3)

 main()

 {extern int x;

  printf("%d",x+=2);fun1(2);

 }

 int x=1;

 fun1(int x)

 {printf("%d",x++);fun2(2);}

 fun2(void)

 {printf("%d",x);

  int x=5;printf("%d",x);

 }

4.若有宏定义

#define N 2

#define Y(n) ((N+1)*n)

则执行语句"z=2*(N+Y(N+2));",z的值是(4)

5.【程序】

main()

{int s,p[9]={1,2,3,4,5,6,7,8,9};

 printf("\n%d",add(p,5);

}

 

add(int *p,int n)

{if(n==1)  return *p;

 else return *p+add(p+1,n-1);

}

程序输出结果是(5)

6.[程序]

char *fun(char *s)

{int i,j;

 for(i=j=0;s[i]!='\0';i++)

   if(s[i]!='c') s[j++]=s[i];

 s[j]='\0';return s;

}

main()

{printf("%s",fun("chance"));

}

7.[程序]

int *swap(int *a,int *b)

{int *p;

 p=a;a=b;b=p;

 return a;

}

main()

{int x=3,y=4,z=5;

 swap(swap(&x,&y),&z);

 printf("%d,%d,%d",x,y,z);

}

程序输出结果是____(7)____

8.【程序】

  fun(int n, int *s)

  { int f1,f2;

    if(n==1||n==2) *s=1;

    else

     {fun(n-1,&f1);fun(n-2,&f2);

      *s=2*f1+f2+1;printf("\n%d,%d",f1,f2);

     }

  }

  main()

  {int x;

   fun(4,&x);printf("\n x=%d",x);

  }

 程序运行时输出的第一行是(8),第二行是(9),最后一行是(10)

9.[程序]

 main()

 {int i,p[3][3]={1,2,3,4,5,6,7,8,9},*p1[3],(*p2)[3];

  for(i=0;i<3;i++) p1[i]=p[i];

  p2=p;

  for(i=1;i<3;i++)

    printf("\n%d,%d",*(*(p1+i)+1)+1,*(*++p2+1)+1);

 }

10.[程序]

main()

{int i,j,a[3][3]={1,1},*p1,*p2,*p3;

 p1=a[0];p2=a[0]+1;p3=a[0]+2;

 for(i=2;i<9;i++)

   func(p1++,p2++,p3++);

 for(i=0;i<3;i++)

   for(j=0;j<3;j++)

   {printf("%d,",a[i][j];printf("\n");}

}

func(int *q1,int *q2,int *q3)

{*q3=*q1+*q2;}

程序运行时输出的第一行是(13),第二行是(14),第三行是(15)

11.函数g的功能是计算级数的值,当通项 的绝对值小于eps时计算停止

【程序】

 #include <math.h>

 float g(float x, float eps);

 main()

 {float x,eps;

  scanf("%f%f",&x,&eps);

  printf("\n%f,%f",x,g(x,eps));

 }

 float g(float x,float eps)

 {int n=1;float s,t;

  s=1;t=1;

  do

  {t=t*(   16   );

   s=s+(n*n+1)*t;

   ( 17 )

  }while( (    18  )>eps);

  return s;

 }

12.函数delete功能是:在字符串str中删除所有出现的子串str1

[程序]

char *delstr(char *str,char *str1)

{char *p,*p1,*q1;int i;

 if(*str=='\0'||*str=='\0') return str;

 p=str;

 while(*p!='\0')

 {p1=p,q1=str1;

  while(*p1==*q1&&*q1!='\0')( 19  )

  if(p!=p1&&*q1=='\0')

  {for(i=0;*q1!='\0';i++,p1++)  ( 20 )=*p1;

   ( 21 )='\0';

  }

  p++;

 }

 ( 22 );

}

13.设结点的数据结构定义如下:

   typedef struct p{

       int x,y;

       struct p *next;

   }PNODE;

  函数padd功能是:papb分别指向的两个已经存在的链表,生成一个pc指向

 的新链表,并返回该新链表第一个结点的地址.两个已存在的链表均是按结点的y

值升序排列的有序表,新生成链表的结点仍按y的值升序排列,新链表的生成规则是:

当在papb链表中发现y值相同的结点时,则在pc链表中增加一个新结点,新结点的x

取值为pa,pb指向的链表中对应的两个结点的x值之和,新结点的y取值为papb链表对应

结点的y

【程序】

PNODE *padd(PNODE *pa,PNODE *pb)

{PNODE *pcr,*pt,*pc;

 pc=NULL;

 while( 23 )

 {if(pa->y==pb->y)

  {pt=(  24  )malloc(sizeof(PNODE));

   pt->x=pa->x+pb->x; pt->y=pa->y;pt->next=NULL;

   if(pc==NULL)  pc=pcr=pt;

   else

   {pcr->next=pt;(  25  );} 

   pa=pa->next;pb=pb->next;

  }

  else if(  26  ) pb=pb->next;

  else pa=pa->next;

 }

 return pc;

}

14.函数replace的功能是:ffp指向的二进制数据文件中查找第一个出现的整型oldv

的值,并用整型newv的值替换,如果找到并替换则函数返回1,否则返回0

#include <stdio.h>

main()

{int st1[10]={10,11,12,13,14,15,16,17,18,19},st2[10];

 FILE *fp;int i;

 fp=fopen("stud.dat","wb");

 fwrite(st1,sizeof(int),10,fp);

 fclose(fp);

 fp=fopen("stud.dat","rb+");

 replace(fp,14,99)?printf("found  and replaced");printf("not found");

 (   27   )

 fread(st2,sizeof(int),10,fp);

 fclose(fp);

 for(i=0;i<10;i++) printf("%d",st2[i]);

}

 

replace(FILE *ffp, int oldv, int newv)

{int x,i,t=0;

 rewind(ffp);

 while(  28  )

 {fread(&x,sizeof(int),1,ffp);

  if(x==oldv)

  {t=1;

   fseek(ffp,( 29 ),SEEK_CUR);

   fwrite(&newv,sizeof(int),1,ffp);

   ( 30 );

  }

 }

  return t;

}

 

21.A 22.D 23.A 24.B 25.B 26.C 27.D 28.A 29.C 30.C

(1)60 (2)48 (3) 3235 (4)20 (5)15 (6)hane (7)3,4,5 (8)1,1

(9)4,1 (10)x=10 (11)6,6 (12)9,9 (13)1,1,2 (14)3,5,8 (15)13,21,34

(16)x/(2*n)  (17)n++ (18)fabs(t) (19)p1++,q1++ (20)*(p+i()

(21)*(p+i) (22)return str (23)pa && pb (24)PNODE *

(25)pcr=pt (26)pa->y>pb->y  (27)rewind(fp) (28)!feof(ffp)

(29)-1L*sizeof(int)  (30)break