欢迎您访问安徽自考网!网站为考生提供安徽自考信息服务,供学习交流使用,非政府官方网站,官方信息以安徽省教育招生考试院(https://www.ahzsks.cn/)为准 登录  网站导航

安徽自考网

自考热线:13696505113

2023年安徽自考《C语言程序设计》试题及答案

编辑整理:  安徽自考网 发表时间:  2023-11-20  点击数:

阅读程序题

  导读:学会阅读程序对于初学者来说很重要,一方面可以巩固所学的语法知识,另一方面通过阅读别人写好的程序来打开自己的思路,就所谓见多识广。读者通过阅读理解程序,从给出的四个备选参考答案中,选择程序的正确输出。如果选择有误,就要认真分析原因,是概念方面的错误还是对程序逻辑理解不对,从而加深对语法规则的理解,提高程序设计能力。程序设计语言是开发程序的一个工具,学习语言的目的是为了编写程序来解决实际问题,所以特别提倡通过实际上机来检验备选答案,增强动手能力。习题基本上是按照教材的章节来安排的,读者可以根据学习的进度选择部分习题。

  【2.1】以下程序的输出结果是 。

  main( )

  {

  float a;

  a=1/100000000;

  printf("%g",a);

  }

  A) 0.00000e+00 B) 0.0 C) 1.00000e-07 D) 0

  【2.2】下面程序的输出结果是____。

  #include

  main( )

  {

  int x=10;

  {

  int x=20;

  printf ("%d,", x);

  }

  printf("%d\n", x);

  }

  A) 10,20 B) 20,10 C) 10,10 D) 20,20

  【2.3】以下程序的输出结果是____。

  main()

  {

  unsigned int n;

  int i=-521;

  n=i;

  printf("n=%u\n",n);

  }

  A) n=-521 B) n=521 C) n=65015 D) n=102170103

  【2.4】以下程序的输出结果是 。

  main( )

  {

  int x=10, y=10;

  printf("%d %d\n", x――, ――y);

  }

  A) 10 10 B) 9 9 C) 9 10 D) 10 9

  【2.5】以下程序的输出结果是____。

  main()

  {

  int n=1;

  printf("%d %d %d\n",n,n++,n--);

  }

  A) 1 1 1 B) 1 0 1 C) 1 1 0 D) 1 2 1

  【2.6】以下程序的输出结果是____。

  main()

  { int x=0x02ff,y=0x0ff00;

  printf("%d\n",(x&y)>>4|0x005f);

  }

  A) 127 B) 255 C) 128 D) 1

  【2.7】以下程序的输出结果是____。

  main()

  {

  int a=1;

  char c='a';

  float f=2.0;

  printf("%d\n",(!(a==0),f!=0&&c=='A'));

  }

  A) 0 B) 1

  【2.8】下面程序的输出结果是____。

  main()

  { int a=1,i=a+1;

  do

  { a++ ;

  }while( !~i++ > 3);

  printf("%d\n",a);

  }

  A) 1 B) 2 C) 3 D) 4

  【2.9】下面程序的输出结果是____。

  main()

  { int a=111;

  a=a^00;

  printf("%d,%o\n",a,a);

  }

  A) 111,157 B) 0,0 C) 20,24 D) 7,7

  【2.10】下面程序的输出结果是____。

  main()

  { char s[12]= "a book";

  printf("%.4s",s);

  }

  A) a book! B) a book!<四个空格》

  C) a bo D) 格式描述错误,输出不确定

  【2.11】下面程序的输出结果是____。

  main()

  { int a,b;

  scanf("%2d%3d",&a,&b);

  printf("a=%d b=%d\n",a,b);

  }

  A) a=12 b=34 B) a=123 b=45 C) a=12 b=345 D) 语句右错误

  【2.12】以下程序段的输出结果是 。 int a=10,b=50,c=30;

  if(a>b)

  a=b;

  b=c;

  c=a;

  printf("a=%d b=%d c=%d\n",a,b,c);

  A) a=10 b=50 c=10 B) a=10 b=30 c=10

  C) a=50 b=30 c=10 D) a=50 b=30 c=50

  【2.13】以下程序的输出结果是 。 main()

  { int a=0,b=1,c=0,d=20;

  if(a) d=d-10;

  else if(!b)

  if(!c) d=15;

  else d=25;

  printf("d=%d\n",d);

  }

  A) d=10 B) d=15 C) d=20 D) d=25

  【2.14】下面程序的输出结果为 。

  main()

  { int a=1,b=0;

  switch(a)

  { case 1: switch (b)

  { case 0: printf("**0**"); break;

  case 1: printf("**1**"); break;

  }

  case 2: printf("**2**"); break;

  }

  }

  A) **0** B) **0****2** C) **0****1****2** D) 有语法错误

  【2.15】以下程序的输出结果是 。 main()

  { char *s="12134211";

  int v1=0,v2=0,v3=0,v4=0,k;

  for(k=0;s[k];k++)

  switch(s[k])

  { case '1': v1++;

  case '3': v3++;

  case '2': v2++;

  default: v4++;

  }

  printf("v1=%d, v2=%d, v3=%d, v4=%d\n",v1,v2,v3,v4);

  }

  A) v1=4,v2=2,v3=1,v4=1 B) v1=4,v2=9,v3=3,v4=1

  C) v1=5,v2=8,v3=6,v4=1 D) v1=4,v2=7,v3=5,v4=8

  【2.16】下面程序的输出是 。

  main()

  { int x=1,y=0,a=0,b=0;

  switch(x)

  { case 1: switch(y)

  { case 0: a++;break;

  case 1: b++;break;

  }

  case 2: a++;b++;break;

  }

  printf("a=%d,b=%d\n",a,b);

  }

  A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2

  【2.17】下面程序的输出是____。

  main()

  { int num=0;

  while(num<=2)

  { num++;

  printf("%d\n",num);

  }

  }

  A) 1 B) 1 C) 1 D) 1

  2 2 2

  3 3

  4

  【2.18】下面程序的输出结果是____。

  main()

  { int a=1,b=0;

  do

  { switch(a)

  { case 1: b=1;break;

  case 2: b=2;break;

  default : b=0;

  }

  b=a+b;

  }while(!b);

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

  }

  A) 1,2 B) 2,1 C) 1,1 D) 2,2

  【2.19】从键盘上输入"446755"时,下面程序的输出是____。

  #include

  main()

  { int c;

  while((c=getchar())!='\n')

  switch(c -'2')

  { case 0:

  case 1: putchar(c+4);

  case 2: putchar(c+4);break;

  case 3: putchar(c+3);

  default: putchar(c+2);break;

  }

  printf("\n");

  }

  A) 888988 B) 668966 C) 88898787 D) 66898787

  【2.20】下面程序的输出结果是____。

  main()

  { int k=0;

  char c='A';

  do

  { switch(c++)

  { case 'A': k++;break;

  case 'B': k--;

  case 'C': k+=2;break;

  case 'D': k=k%2;contiue;

  case 'E': k=k+10;break;

  default: k=k/3;

  }

  k++;

  }while(c<'C') ;

  printf("k=%d\n",k);

  }

  A) k=1 B) k=2 C) k=3 D) k=4

  【2.21】下面程序的输出结果是____。

  main()

  { int x,i;

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

  { x=i;

  if(++x%2==0)

  if(++x%3==0)

  if(++x%7==0)

  printf("%d ",x);

  }

  }

  A) 39 81 B) 42 84 C) 26 68 D) 28 70

  【2.22】下面程序的输出结果是____。

  #include

  main( )

  { int i,k,a[10],p[3];

  k=5;

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

  a[i]=i;

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

  p[i]=a[i*(i+1)];

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

  k+=p[i]*2;

  printf("%d\n",k);

  }

  A) 20 B) 21 C) 22 D) 23

  【2.23】假定从键盘上输入"3.6,2.4<回车>",下面程序的输出是____。

  #include

  main()

  { float x,y,z;

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

  z=x/y;

  while(1)

  { if(fabs(z)>1.0)

  { x=y;

  y=z;

  z=x/y;

  }

  else break;

  }

  printf("%f\n",y);

  }

  A) 1.500000 B) 1.600000 C) 2.000000 D) 2.400000

  【2.24】下面程序的输出结果是____。

  main()

  { int i,j,x=0;

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

  { x++;

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

  { if(j%2)

  continue;

  x++;

  }

  x++;

  }

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

  }

  A) x=4 B) x=8 C) x=6 D) x=12

  【2.25】下面程序的输出结果是____。

  main()

  { int i,j,k=10;

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

  { k++;

  { int k=0;

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

  { if(j%2) continue;

  k++;

  }

  }

  k++;

  }

  printf("k=%d\n",k);

  }

  A) k=4 B) k=8 C) k=14 D) k=18

  【2.26】下面程序的输出结果是____。

  #include

  main( )

  { int n[3][3], i, j;

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

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

  n[i][j]=i+j;

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

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

  n[i+1][j+1]+=n[i][j];

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

  }

  A) 14 B) 0 C) 6 D) 不确定

  【2.27】下面程序的输出结果是____。

  #include

  main( )

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

  int i,j,n;

  n=9;

  i=n/5;

  j=n-i*5-1;

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

  }

  A) 6 B) -3 C) 2 D) 不确定

  【2.28】下面程序的输出结果是____。

  int m[3][3]={ {1}, {2}, {3} };

  int n[3][3]={ 1, 2, 3 };

  main( )

  { printf("%d\n", m[1][0]+n[0][0] ); /* ① */

  printf("%d\n", m[0][1]+n[1][0] ); /* ② */

  }

  ① A) 0 B) 1 C) 2 D) 3

  【2.29】下面程序的输出结果是____。

  #include

  main( )

  { char s1[50]={"some string *"},s2[]={"test"};

  printf("%s\n", strcat(s1,s2));

  }

  A) some string * B) test

  C) some stritest D) some string *test

  /**********************************************************************************/

  【2.30】下面程序的输出结果是____。

  #include

  f(char *s)

  { char *p=s;

  while(*p!='\0')

  p++;

  return(p-s);

  }

  main()

  { printf("%d\n",f("ABCDEF"));

  }

  A) 3 B) 6 C) 8 D) 0

【2.31】下面程序的输出结果是____。

  #include

  #include

  main( )

  { char str[100] ="How do you do";

  strcpy( str + strlen(str)/2, "es she");

  printf("%s\n", str);

  }

  A) How do you do B) es she C) How are you D) How does she

  【2.32】下面程序的输出结果是____。

  #include

  func(int a,int b)

  { int c;

  c=a+b;

  return(c);

  }

  main()

  { int x=6,y=7,z=8,r;

  r=func((x--,y++,x+y),z--);

  printf("%d\n",r);

  }

  A) 11 B) 20 C) 21 D) 31

  【2.33】下面程序的输出结果是____。

  #include

  void fun(int *s)

  { static int j=0;

  do

  { s[j]+=s[j+1];

  }while(++j<2);

  }

  main()

  { int k,a[10]={1,2,3,4,5};

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

  fun(a);

  for(k=0;k<5;k++)

  printf("%d",a[k]);

  }

  A) 35756 B) 23445 C) 35745 D) 12345

  【2.34】下面程序的输出结果是____。

  #include

  int k=1;

  main( )

  { int i=4;

  fun(i);

  printf ("\n%d,%d",i,k); /* ① */

  }

  fun(int m)

  { m+=k;k+=m;

  { char k='B';

  printf("\n%d",k-'A'); /* ② */

  }

  printf("\n%d,%d",m,k); /* ③ */

  }

  ① A) 4,1 B) 5,6 C) 4,6 D) A,B,C参考答案都不对

  ② A) 1 B) -59 C) -64 D) A,B,C参考答案都不对

  ③ A) 5,66 B) 1,66 C) 5,6 D) A,B,C参考答案都不对

  【2.35】下面程序的输出结果是____。

  #include

  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=f1+f2;

  }

  }

  main()

  { int x;

  fun(6, &x);

  printf("%d\n", x);

  }

  A) 6 B) 7 C) 8 D) 9

  【2.36】下面程序的输出结果是____。

  int w=3;

  main()

  { int w=10;

  printf("%d\n",fun(5)*w);

  }

  fun(int k)

  { if(k==0) return(w);

  return(fun(k-1)*k);

  }

  A) 360 B) 3600 C) 1080 D) 1200

  【2.37】下面程序的输出结果是____。

  #include

  funa(int a)

  { int b=0;

  static int c=3;

  a=c++,b++;

  return(a);

  }

  main()

  { int a=2,i,k;

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

  k=funa(a++);

  printf("%d\n",k);

  }

  A) 3 B) 0 C) 5 D) 4

  【2.38】下面程序的输出结果是____。

  #include

  void num()

  { extern int x,y;

  int a=15,b=10;

  x=a-b;

  y=a+b;

  }

  int x,y;

  main()

  { int a=7,b=5;

  x=a-b;

  y=a+b;

  num();

  printf("%d,%d\n",x,y);

  }

  A) 12,2 B) 5,25 C) 1,12 D) 输出不确定

  【2.39】下面程序的输出结果是____。

  main()

  { int a=2,i;

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

  printf("%4d",f(a));

  }

  f(int a)

  { int b=0;

  static int c=3;

  b++;

  c++;

  return(a+b+c);

  }

  A) 7 7 7 B) 7 10 13 C) 7 9 11 D) 7 8 9

  【2.40】下面程序的输出结果是____。

  #include

  try( )

  { static int x=3;

  x++;

  return(x);

  }

  main( )

  { int i, x;

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

  x=try( );

  printf("%d\n", x);

  }

  A) 3 B) 4 C) 5 D) 6

  【2.41】下面程序的输出结果是____。

  #include

  main( )

  { int x=1;

  void f1( ), f2( );

  f1( );

  f2(x);

  printf("%d\n", x);

  }

  void f1(void)

  { int x=3;

  printf("%d ", x);

  }

  void f2( x )

  int x;

  { printf("%d ", ++x);

  }

  A) 1 1 1 B) 2 2 2 C) 3 3 3 D) 3 2 1

  【2.42】下面程序的输出结果是____。

  #include

  #define SUB(X,Y) (X)*Y

  main()

  { int a=3,b=4;

  printf("%d\n",SUB(a++,b++));

  }

  A) 12 B) 15 C) 16 D) 20

  【2.43】下面程序的输出结果是____。

  main()

  { int a[]={1,2,3,4,5,6};

  int *p;

  p=a;

  printf("%d ",*p);

  printf("%d ",*(++p));

  printf("%d ",*++p);

  printf("%d ",*(p--));

  p+=3;

  printf("%d %d ",*p,*(a+3));

  }

  A) 1 2 3 3 5 4 B) 1 2 3 4 5 6 C) 1 2 2 3 4 5 D) 1 2 3 4 4 5

  【2.44】下面程序的输出结果是____。

  main()

  { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

  int *p=a;

  p+=6;

  printf("%d ",*p); /* ① */

  printf("%d ",*(*(a+6))); /* ② */

  printf("%d ",*(a[1]+=2)); /* ③ */

  printf("%d",*(&a[0][0]+6));/* ④ */

  }

  A) 7 7 7 7 B) ②句语法错误 C) ③句语法错误 D) ④句语法错误

  【2.45】下面程序的输出结果是____。

  #define FMT "%X\n"

  #include

  main( )

  { static int a[ ][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };

  printf( FMT, a[2][2]); /* ① */

  printf( FMT, *(*(a+1)+1) ); /* ② */

  }

  ① A) 9 B) 11 C) A D) B

  ② A) 6 B) 7 C) 8 D) 前面三个参考答案均是错误的

  【2.46】下面程序的输出结果是____。

  #include

  main ( )

  { int a[]={1, 2, 3, 4, 5} ;

  int x, y, *p;

  p=&a[0];

  x=*(p+2);

  y=*(p+4);

  printf("%d,%d,%d\n", *p, x, y);

  }

  A) 1,3,5 B) 1,2,3 C) 1,2,4 D) 1,4,5

  【2.47】下面程序的输出结果是____。

  void ive(x,n)

  int x[],n;

  { int t,*p;

  p=x+n-1;

  while(x<p)< p="" style="padding: 0px; margin: 0px;">

  { t=*x;

  *x++=*p;

  *p--=t;

  }

  return;

  }

  main()

  { int i,a[]={1,2,3,4,5,6,7,8,9,0};

  ive(a,10);

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

  printf("%d ",a[i]);

  printf("\n");

  }

  A) 1 2 3 4 5 6 7 8 9 0 B) 0 9 8 7 6 5 4 3 2 1

  C) 1 3 5 7 9 2 4 6 8 0 D) 0 8 6 4 2 9 7 5 3 1

  【2.48】下面程序的输出结果是____。

  #include "string.h"

  fun(char *w,int n)

  { char t,*s1,*s2;

  s1=w;s2=w+n-1;

  while(s1<s2)< p="" style="padding: 0px; margin: 0px;">

  { t=*s1++;

  *s1=*s2--;

  *s2=t;

  }

  }

  main()

  { static char *p="1234567";

  fun(p,strlen(p));

  printf("%s",p);

  }

  A) 7654321 B) 1717171 C) 7171717 D) 1711717

  【2.49】下面程序的输出结果是____。

  #include

  char *p = "abcdefghijklmnopq" ;

  main( )

  { int i=0;

  while( *p++!='e' );

  printf("%c\n", *p);

  }

  A) c B) d C) e D) f

  【2.50】下面程序的输出结果是____。

  #include

  f(int x, int y)

  { return (y-x);

  }

  main( )

  { int a=5, b=6, c;

  int f(), (*g)()=f;

  printf("%d\n", (*g)(a,b) );

  }

  A) 1 B) 2 C) 3 D) 前面三个参考答案均是错误的

【2.51】下面程序的输出结果是____。

  #include

  main( )

  { int a=1,*p,**pp;

  pp=&p;

  p=&a;

  a++;

  printf ("%d,%d,%d\n", a,*p, **pp);

  }

  A) 2,1,1 B) 2,1,2 C) 2,2,2 D) 程序有错误

  【2.52】下面程序的输出结果是____。

  main()

  { char *alpha[7]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX","YZ"};

  char **p;

  int i;

  p=alpha;

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

  printf("%c",*(p[i]));

  printf("\n");

  }

  A) AEIM B) BFJN C) ABCD D) DHLP

  【2.53】下面程序的输出结果是____。

  #include

  char *pp[2][3]={ "abc", "defgh", "ijkl", "mnopqr", "stuvw", "xyz"};

  main ( )

  { printf("%c\n",***(pp+1)); /* ① */

  printf("%c\n",**pp[0]); /* ② */

  printf("%c\n",(*(*(pp+1)+1))[4]); /* ③ */

  printf("%c\n",*(pp[1][2]+2)); /* ④ */

  printf("%s\n",**(pp+1)); /* ⑤ */

  }

  ① A) a B) d C) i D) m

  ② A) a B) d C) i D) m

  ③ A) h B) l C) q D) w

  ④ A) k B) o C) u D) z

  ⑤ A) ijkl B) mnopqr C) stuvw D) xyz

  【2.54】下面程序的输出结果是____。

  #include "stdio.h"

  struct str1

  { char c[5];

  char *s;

  };

  main( )

  { struct str1 s1[2]={ {"ABCD""EFGH"},{"IJK","LMN"} };

  struct str2

  { struct str1 sr;

  int d;

  }s2={"OPQ","RST",32767};

  struct str1 *p[2];

  p[0]=&s1[0];

  p[1]=&s1[1];

  printf("%s",++p[1]->s); /* ① */

  printf("%c",s2.sr.c[2]); /* ② */

  }

  ① A) LMN B) MN C) N D) IJK

  ② A) O B) P C) Q D) R

  【2.55】以下程序的输出结果是____。

  struct st

  { int x,*y;

  }*p;

  int s[]={10,20,30,40};

  struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};

  main()

  { p=a;

  printf("%d\n",++(*(++p)->y));

  }

  A) 10 B) 11 C) 20 D) 21

  【2.56】以下程序的输出结果是____。

  #include

  main()

  { union EXAMPLE

  { struct

  { int x,y;

  }in;

  int a,b;

  }e;

  e.a=1;e.b=2;

  e.in.x=e.a*e.b;

  e.in.y=e.a+e.b;

  printf("%d,%d\n",e.in.x,e.in.y);

  }

  A) 2,3 B) 4,4 C) 4,8 D) 8,8

  【2.57】下面程序的输出结果是____。

  #include

  main()

  { union

  { int i[2];

  long k;

  char c[4];

  }r,*s=&r;

  s->i[0]=0x39;

  s->i[1]=0x38;

  printf("%c\n",s->c[0]);

  }

  A) 39 B) 9 C) 38 D) 8

  【2.58】下面程序的输出是 。

  main ( )

  { printf("%d\n", EOF);

  }

  A) -1 B) 0 C) 1 D) 程序是错误的

  【阅读程序题参考答案】

  【2.1】参考答案:D

  注释:程序中除法运算的两个操作数均是整型,运算结果也是整型。

  【2.2】参考答案:B

  注释:C语言允许在程序块(分程序)中说明变量。

  【2.3】参考答案:C

  注释:变量i中的负号传送给变量n后,因n是无符号数,已不作为负号处理。

  【2.4】参考答案:D

  注释:对变量x的――操作是后缀形式,变量x的减1操作要在执行完 printf函数之后才进行,所以变量x的值在输出的时候仍然保持原值10。

  【2.5】参考答案:B

  注释:C语言在执行printf()时,对函数中的表达式表列的处理顺序是从后向前,即先处理n- -,再处理n++,最后处理n,而且每一个表达式作为一个处理单元,也就是说在不同的表达式中自增自减运算是单独考虑的。

  【2.6】参考答案:A

  注释:变量x和变量y做按位与,结果为0x0200,右移4位为0x0020,再与0x005f做按位或,最后结果为0x007f。

  【2.7】参考答案:A

  注释:逗号表达式的结果是用逗号分开的最后一个表达式的值,此题由于 c=='A'的值是0,所以逗号表达式的值为0。

  【2.8】参考答案: B

  【2.9】参考答案: A

  【2.10】参考答案: C

  注释:在输出格式描述"%m.ns"中,m是输出总长度,n是实际字符的个数,这里m没有给出,则输出总长度就是实际输出字符的个数。

  【2.11】参考答案: C

  【2.12】参考答案:B

  【2.13】参考答案:C

  【2.14】参考答案:B

  【2.15】参考答案:D

  【2.16】参考答案:A

  【2.17】参考答案: C

  【2.18】参考答案:A

  【2.19】参考答案: C

  注释:在switch语句中,case本身仅起到语句标号的作用,不会改变语句的流程,执行break语句才能退出当前的switch语句。

  【2.20】参考答案: D

  注释:siwtch语句的表达式中,变量c是后缀的增一运算,第一次执行do-while循环时,执行case 'A'后面的语句。

  【2.21】参考答案: D

  【2.22】参考答案: B

  【2.23】参考答案: B

  注释:fabs()是浮点数绝对值函数。

  【2.24】参考答案: A

  【2.25】参考答案: C

  注释:C语言允许在程序块(分程序)内说明变量,如果在程序块内说明的变量和程序块外的变量同名,在块外说明的变量在块内是不可见的。可将此题和【2.11】进行比较,加深理解。

  【2.26】参考答案: C

  【2.27】参考答案: B

  【2.28】参考答案: ① D ② A

  【2.29】参考答案:D

  【2.30】参考答案: B

  注释:输出结果为字符串长度。

  【2.31】参考答案: D

  注释:字符串拷贝函数strcpy()要求的两个参数都是字符串首地址。本题中第二个参数是字符串常量,接受这个字符串的第一个参量不是直接给出字符数组名,而是进行了地址运算后的结果。由于str字符串的长度是13,除2取整后是6,第一个参数给出的地址是字符数组str的首地址加6,也就是原来字符串中第二个空格的位置,把"es she"从该处放入,字符串str变为"How does she"。

  【2.32】参考答案: C

  注释:main函数调用func函数时,第一个实参使用的是逗号表达式的值,也就是x+y的结果。由于对变量x、y、z进行的是后缀运算,所以函数func的参数值是13和8。

  【2.33】参考答案: C

  【2.34】参考答案: ① C ② A ③ C

  【2.35】参考答案: C

  【2.36】参考答案: B

  注释:函数fun进行了递归调用,实际进行的运算是5×4×3×2×1×3×10。主函数内说明的局部变量w屏蔽了外部变量w,所以在主函数中外部变量w是不可见的,在调用printf函数时表达式"fun(5)*w"中w的值是10。

  【2.37】参考答案: D

  注释:main函数三次调用了函数funa,在funa函数中的静态变量c仅在第一次调用时进行了初始化,再次调用时不再对静态变量赋初值。

  【2.38】参考答案: B

  注释:main函数和num函数中都说明了变量a和b,由于它们是内部变量,所以它们分别在说明它们的函数内有效。外部变量x和y在函数num之后被说明,而在num函数中又要引用它们,所以在num函数中用关键字"extern"说明变量x和y是一个外部变量,也就是通知计算机这两个变量在fun函数以外被说明,此处不是定义两个int型变量。

  【2.39】参考答案: D

  注释:函数f中的变量c是静态变量,仅在第一次调用函数f时它被初始化为3,第二次调用函数f时c的值是4,第三次调用函数f时c的值是5。

  【2.40】参考答案: D

  【2.41】参考答案: D

  注释:程序中有三个"x"分别在三个不同的函数中,这三个"x"都是自动变量,所以三个"x"分别局部于三不同的函数,在三个函数中对"x"的操作互不影响。

  【2.42】参考答案: A

  【2.43】参考答案: A

  注释:*(++p)和*++p都是指针变量值前加1,第一次指向a[1],第二次指向a[2];a+3是a[3]的地址。

  【2.44】参考答案: C

  注释:②句没有语法错误,但是a+6指向数组之外,因为a是a[0]的地址,a+1是a[1]的地址,a+2是a[2]的地址,显然数组a没有a[6]分量。③句错误,因为a[1]是地址常量,它是a[1][0]的地址,对于地址常量是不可以进行赋值运算的。

  【2.45】参考答案: ① D ② A

  注释:如果FMT定义为"%x\n",则输出的16进制数据用小写字母表示。

  【2.46】参考答案: A

  注释:语句"p=&a[0]"表示将数组a中元素a[0]的地址赋给指针变量p,则p就是指向数组首元素a[0]的指针变量,"&a[0]"是取数组首元素的地址。对于指向数组首址的指针,p+i(或a+i)是数组元素a[i]的地址,*(p+i)(或*(a+i))就是a[i]的值。

  【2.47】参考答案: B

  【2.48】参考答案: D

  【2.49】参考答案: D

  【2.50】参考答案: A

  注释:变量g是指向函数的指针,(*g)(a,b)是调用指针g所指向的函数。

  【2.51】参考答案: C

  注释:p是指针,pp是指向指针的指针。

  【2.52】参考答案: A

  注释:对于指向数组的指针变量可以做下标运算,p[i]和alpha[i]都是指向字符串的首地址,*p[i]取出字符串的第一个字符。

  【2.53】参考答案: ① D ② A ③ D ④ D ⑤ B

  注释:pp是一个二维指针数组,pp+1指向数组的第二维,*(pp+1)是第二维的起始地址,**(pp+1)是第二维第一个元素的地址,***(pp+1)是第二维第一个元素的内容,所以,①的参考答案应选D。*(pp+1)+1是第二维第二个元素的地址,*(*(pp+1)+1)是第二维第二个元素,(*(*(pp+1)+1))[4]则是第二维第二个元素所指字符串下标为4的元素,即是字符w,故③应当选D。

  【2.54】参考答案: ① B ② C

  【2.55】参考答案:D

  【2.56】参考答案:C

  注释:联合体成员的取值是最后一次给成员赋的值。

  【2.57】参考答案: B

  注释:整型数组i和字符数组c共用存储空间,给i赋值也等于给c赋值,所以s->c[0]=0x39,所以输出9。

  【2.58】参考答案:A

  注释:基本概念。EOF是由C语言在头文件stdio.h中定义的,用户可以直接使用。





安徽自考网课程中心

安徽自考网声明:

1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。

2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:952056566@qq.com

安徽自考便捷服务

  • 微信交流群
  • 微信公众号

  • 视频课程
  • 真题下载
概率论与数理统计

概率论与数理统计

马克思主义基本原理概论

马原概论

中国近现代史纲要

中国近现代史纲要

思想道德修养与法律基础

思修03706

内科护理学(一)

内科护理学(一)

文学概论(一)

文学概论(一)