C语言

C语言试题及答案

时间:2023-03-29 03:09:43 C语言 我要投稿

C语言试题及答案

  讷讷寡言者未必愚,喋喋利口者未必智。以下是小编为大家搜索整理C语言试题及答案,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!

C语言试题及答案

  一、选择题((1)-(40)每小题1分,(41)-(50)每小题2分,共60分)

  下列各题 A) 、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。

  (1) 一个完整的计算机系统包括

  A.主机、键盘与显示器

  B.计算机与外部设备

  C.硬件系统与软件系统

  D.系统软件与应用软件

  (2) 十六进制数1000转换成十进制数是

  A.4096

  B.1024

  C.2048

  D.8192

  (3) 十进制数269转换成十六进制数是

  A.10E

  B.10D

  C.10C

  D.10B

  (4) 如果用八位二进制补码表示带符号的定点整数,则能表示的十进制数的范围是

  A.-127到+127

  B.-128到+128

  C.-127到+128

  D.-128到+127

  (5) 下列设备中,既可作为输入设备又可作为输出设备的是

  A.鼠标器

  B.打印机

  C.键盘

  D.磁盘驱动器

  (6) 下列各叙述中,正确的是

  A.正数十进制原码的补码是原码本身

  B.所有的十进制小数都能准确地转换为有限位二进制小数

  C.汉字的计算机内码就是国标码

  D.存储器具有记忆能力,其中的信息任何时候都不会丢失

  (7) 在下列操作中,能导致DOS系统重新启动但不进行系统自检的是

  A.加电开机

  B.按+

  C.按++

  D.按RESET按钮

  (8) 如果给定一个带有通配符的文件名F*.?,则在下列各文件中,它能代表的文件名是

  A.FA.EXE

  B.F.C

  C.EF.C

  D.FABC.COM

  (9) DOS系统启动后,下列文件中常驻内存的是

  A.*.COM

  B.FORMAT.COM

  C.AUTOEXEC.BAT

  D.COMMAND.COM

  (10) 设A盘的目录结构为(画方框的为目录)

  如果当前盘为C盘,A盘的当前目录为\D2,则下列对A盘上文件QR.C的指定中,合法的是

  A.\D2\D4\QR.C

  B.D4\QR.C

  C.A:D4\QR.C

  D.A:D2\D4\QR.C(11) 为了要将A盘当前目录(不是根目录)中所有扩展名为.C的文件同名复制到A痰哪柯糪USER中,正确的命令是

  A.COPY A:*.C USER\*.C

  B.COPY A:*.C A:\USER

  C.COPY A:*.C A:USER\

  D.COPY A:*.C A:USER\*.C

  (12) 为了在屏幕上一次显示当前盘当前目录下的所有扩展名为.TXT的文件内容,下列命令中正确的是

  A.TYPE *.TXT

  B.TYPE *.TXT CON

  C.COPY *.TXT>CON

  D.COPY *.TXT CON

  (13) 设当前盘为A盘,为了将当前盘当前目录下的文件AB1.TXT连接在C盘根目录下的文件XYZ.TXT的后面,正确的命令是

  A.COPY C:\XYZ.TXT+AB1.TXT

  B.COPY AB1.TXT>>C:\XYZ.TXT

  C.TYPE AB1.TXT>C:\XYZ.TXT

  D.COPY AB1.TXT+C:\XYZ.TXT>C:\XYZ.TXT

  (14) 设A盘为启动盘,其目录结构为(画方框的为目录)

  其中文件AUTOEXEC.BAT的内容为

  MD \XYZ

  CD \DOS\USER

  则由A盘启动成功后,A盘的当前目录是

  A.\DOS\USER

  B.\XYZ

  C.\

  D.\DOS

  (15) 下列DOS命令中为内部命令的是

  A.COMP

  B.PATH

  C.PRINT

  D.FORMAT

  (16) 设当前盘为C盘,所用的所有软盘已格式化且容量相同,则下列DOS命令中错误的是

  A.DISKCOPY A: C:

  B.DISKCOPY A: A:

  C.COPY A:*.*

  D.COPY A:*.* C:

  (17) 下列DOS命令中,有错误的是

  A.TYPE AAB.FOR>PRN

  B.TYPE ?AB.FOR

  C.COPY *.C PRN

  D.COPY CON PRN

  (18) 设当前盘为C盘,在当前目录下有全部的DOS系统文件与批处理命令文件AB.BAT,且该批处理命令文件的内容为

  FORMAT A:/4

  MD \XYZ

  CD \XYZ

  RD \XYZ

  MD \XYZ

  如果在1.2软盘驱动器A中插入一张360K容量的软盘片,执行批自理命令文件AB.BAT后,结果A盘的目录结构是

  A.根目录

  B.根目录----子目录XYZ----子目录XYZ

  C.根目录 ─┬─ 子目录XYZ

  └─ 子目录XYZ

  D.根目录----子目录XYZ

  (19) 下列带有通配符的文件名,能代表文件ABC.FOR的是

  A.*BC.?

  B.A?.*

  C.?BC.*

  D.?.?

  (20) 设当前盘为C盘,且C盘上含有子目录\DOS,A盘为只有根目录的启动盘(根目录下只有三个DOS系统文件与扩展名为. C的文件)。下列命令组中的两个命令从效果上可以认为等价的是

  A.DEL \DOS与RD \DOS

  B.FORMAT A:与DEL A:*.*

  C.FORMAT A: /S与DEL A:*.?

  D.COPY A:F1 F2与REN A:F1 F2

  (21) 设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是

  A.’a’&&’b’

  B.a<=b

  C.a||b+c&&b-c

  D.!((a  (22) 请读程序片段:

  int i=65536; printf("%d\n",i);

  上面程序片段的输出结果是

  A.65536

  B.0

  C.有语法错误,无输出结果

  D.-1

  (23) 设ch是char型变量,其值为A,且有下面的表达式:

  ch=(ch>=’A’&&ch<=’Z’)?(ch+32):ch

  上面表达式的值是

  A.A

  B.a

  C.Z

  D.z

  (24) 若x和y都是int型变量,x=100,y=200,且有下面的程序片段:

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

  上面程序片段的输出结果是

  A.200

  B.100

  C.100 200

  D.输出格式符不够,输出不确定的值

  (25) 下面各语句行中,能正确进行赋字符串操作的语句行是

  A.char st[4][5]={"ABCDE"};

  B.char s[5]={’A’,’B’,’C’,’D’,’E’};

  C.char *s; s="ABCDE";

  D.char *s; scanf("%s",s);

  (26) 若k是int型变量,且有下面的程序片段:

  k=-3

  if(k<=0) printf("####")

  else printf("&&&&");

  上面程序片段的输出结果是

  A.####

  B.&&&&

  C.####&&&&

  D.有语法错误,无输出结果

  (27) 若x是int型变量,且有下面的程序片段:

  for(x=3; x<6; x++) printf((x%2)?("**%d"):("##%d\n"),x);

  上面程序片段的输出结果是

  A.**3

  B.##3

  C.##3

  D.**3##4

  ##4 **4 **4##5 **5

  **5 ##5

  (28) 请读程序:

  #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

  (29) 请读程序:

  #include

  main()

  { int a; float b, c;

  scanf("-?O",&a,&b,&

  C.;

  printf("\na=%d, b=%f, c=%f\n", a, b,

  C.;

  }

  若运行时从键盘上输入9876543210(表示回车),则上面程序的输出结果是

  A.a=98, b=765, c=4321

  B.a=10, b=432, c=8765

  C.a=98, b=765.000000, c=4321.000000

  D.a=98, b=765.0, c=4321.0

  (30) 请读程序:

  #include

  main()

  { int n[2], i, j, k;

  for(i=0;i<2;i++) n[i]=0;

  k=2

  for(i=0;i  for(j=0;j  printf("%d\n",n[k]);

  }

  上面程序的输出结果是

  A.不确定的值

  B.3

  C.2

  D.1

  (31) 请读程序片段:

  char str[]="ABCD", *p=str;

  printf("%d\n",*(p+4));

  上面程序的输出结果是

  A.68

  B.0

  C.字符"D"的地址

  D.不确定的值

  (32) 请读程序片段:

  #include

  main()

  { int a, b;

  for(a=1;b=1;a<=100;a++)

  { if(b>=20) break;

  if(b%3==1)

  {b+=3;

  continue;

  }

  b-=5;

  }

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

  }

  上面程序的输出结果是

  A.7

  B.8

  C.9

  D.10

  (33) 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:

  int *p;

  p=__________ malloc( sizeof(int));

  则应填入

  A.int

  B.inst *

  C.(*int)

  D.(int *)

  (34) 请读程序片段(字符串内没有空格):

  printf("%d\n",strlen("ATS\n012\1\\"));

  上面程序片段的输出结果是

  A.11

  B.10

  C.9

  D.8

  (35) 请读程序:

  #include

  #include

  main()

  { char*s1="AbCdEf", *s2="aB";

  s1++; s2++;

  printf("%d\n",strcmp(s1,s2));

  }

  上面程序的输出结果是

  A.正数

  B.负数

  C.零

  D.不确定的值

  (36) 请读程序:

  #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

  (37) 请读程序:

  #include

  int a[]={2,4,6,8};

  main()

  { int i;

  int *p=a;

  for(i=0;i<4;i++) a[i]=*p++;

  printf("%d\n",a[2]);

  }

  上面程序的输出结果是

  A.6

  B.8

  C.4

  D.2

  (38) 请读程序:

  #include

  char fun(char *

  C.

  { if( *c<=’Z’ && *c>=’A’) *c-=’A’-’a’;

  return *c;

  }

  main()

  { char s[81], *p=s;

  gets(s);

  while(*p)

  {*p=fun(p); putchar(*p); p++;}

  putchar(’\n’);

  }

  若运行时从键盘上输入OPEN THE DOOR(表示回车),则上面程序的输出结果是

  A.oPEN tHE door

  B.open the door

  C.OPEN THE DOOR

  D.Open The Door

  (39) 请读程序:

  #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.34756

  B.23445

  C.35743

  D.12345

  (40) 请读程序:

  #include

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

  main()

  { int a=3, b=4;

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

  }

  上面程序的输出结果是

  A.12

  B.15

  C.16

  D.20(41) 请读程序:

  #include

  main()

  { int mun=0;

  while(num<=2)

  { num++; printf("%d\n",num);}

  }

  上面程序的输出结果是

  A.1

  B.1

  C.1

  D.1

  2 2 2

  3 3

  4

  (42) 请读程序:

  #include

  main()

  { float x,y;

  scan("%f",&x);

  if(x<0.0) y=0.0

  else if((x<5.0)&&(x!=2.0))

  y=1.0/(x+2.0);

  else if (x<10.0) y=1.0/x;

  else y=10.0;

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

  }

  若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是

  A.0.000000

  B.0.250000

  C.0.500000

  D.1.000000

  (43) 请读程序:

  #include

  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

  (44) 若有下面的程序片段:

  int a[12]={0}, *p[3], **pp, i;

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

  p[i]=&a[i*4];

  pp=p;

  则对数组元素的错误引用是

  A.pp[0][1]

  B.a[10]

  C.p[3][1]

  D.*(*(p+2)+2)

  (45) 请读程序:

  #include

  #include

  main()

  { float x,y,z;

  scan("%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);

  }

  若运行时从键盘上输入3.6 2.4(表示回车),则输出的结果是

  A.1.500000

  B.1.600000

  C.2.000000

  D.2.400000

  (46) 请读程序:

  #include

  f(in b[], int n)

  { int i, r;

  r=1;

  for(i=0; i<=n; i++) r=r*b[i];

  return r;

  }

  main()

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

  x=f(a, 3);

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

  }

  上面程序的输出结果是

  A.720

  B.120

  C.24

  D.6

  (47) 请读程序:

  #include

  #include

  void fun( char *s)

  { char a[10];

  strcpy( a, "STRING");

  s=a;

  }

  main()

  { char *p;

  fun(p);

  x=f(a, 3);

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

  }

  上面程序的输出结果是(└┘表示空格)

  A.STRING└┘└┘└┘└┘

  B.STRING

  C.STRING└┘└┘└┘

  D.不确定的值

  (48) 若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是

  A.s->next=NULL; p=p->next; p->next=s;

  B.p=p->next; s->next=p->next; p->next=s;

  C.p=p->next; s->next=p; p->next=s;

  D.p=(*p).next; (*s).next=(*p).next; (*p).next=s;

  (49) 请读程序:

  #include

  void fun(float *pl, float *p2, float *s)

  { s=( float * )calloc( 1, sizeof(float));

  *s=*p1+ *(p2++);

  }

  main()

  { float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;

  fun(a, b, s)

  printf("%f\n",*s);

  }

  上面程序的输出结果是

  A.11.100000

  B.12.100000

  C.21.100000

  D.1.100000

  (50) 请读程序:

  #include

  #include

  void fun( char *w, int m)

  { char s, *p1, *p2;

  p1=w; p2=w+m-1;

  while (p1  { s=*p1++; *p1=*p2--; *p2=s;}

  }

  main()

  { char a[]="ABCDEFG";

  fun( a, strlen(a));

  puts(a);

  }

  上面程序的输出结果是

  A.GFEDCBA

  B.AGADAGA

  C.AGAAGAG

  D.GAGGAGA

  二、填空题(每空2分,共40分)

  请将每空的正确答案写在答题卡上【1】-【20】序号后的横线上,答在试卷上不得分。

  (1) DOS命令分为内部命令与外部命令,XCOPY命令是 【1】 命令

  (2) 为了列出当前盘当前目录中所有第三个字符为C的文件名的有关信息,应该用命令 【2】 。

  (3) 设当前盘为A盘,当前目录为\X\Y,A盘上的一个文件QR.C在当前目录下的子目录W中。现已将A盘的当前目录改为\D\XY,当前盘改为C盘,如需指定A盘上该文件应写成 【3】 。

  (4) 用十六进制给存储器中的字节地址进行编号,其地址编号是从0000到FFFF,则该存储器的容量是【4】KB。

  (5) 设有两个八位二进制数00010101与01000111相加,其结果的十进制表示为 【5】 。

  (6) 数学式子 写成C语言表达式是 【6】 。

  (7) 下面程序的输出结果是 【7】 。

  #include

  main()

  { static char b[]="Goodbye";

  char *chp=&b[7];

  while( --chp >=&b[0]) putchar( *chp);

  putchar(’\n’);

  }

  (8) 下面程序的输出结果是 【8】 。

  #include

  void as( int x, int y, int *cp, int *dp)

  { *cp=x+y;

  *dp=x-y;

  }

  main()

  { int a=4, b=3, c, d;

  as( a, b, &c, &d);

  printf( ’%d %d\n", c, d);

  }

  (9) 请读程序:

  #include

  main( int argc, char *argv[])

  { int i;

  printf( ’%d\n", argc);

  for( i=0; i<=argc+1; i++) printf( "%s ", argv[i]);

  printf("\n");

  }

  若上面的程序编译、连接后生成可执行文件ABC.EXE,则输入以下命令行

  abc file1 file2(表示回车)

  程序执行后的输出结果是 【9】 。

  (10) 条件“20  (11) 设二进制数a是00101101,若想通过异或运算a^b使a的高4位取反,低4位不变,则二进制数b应是 【11】 。

  (12) 若有以下说明和定义语句,则变量w在内存中所占的字节数是 【12】 。

  union aa

  { float x, y;

  char c[6];

  };

  struct st { union aa v; float w[5]; double ave; } w;

  (13) 下面程序的输出结果是 【13】 。

  #include

  #define N 5

  fun( char *s, char a, int n)

  { int j;

  *s=a; j=n;

  while( e  return j;

  }

  main()

  { char s[N+1];

  int k, p;

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

  s[k]=’A’+k+1;

  printf( "%d\n", fun(s, ’E’, N));

  }(14) 下面程序的输出结果是 【14】 。

  #include

  void fun( char *a1, char *a2, int n)

  { int k;

  for( k=0; k  a2[k]=( a1[k]-’A’-3+26)&+’A’;

  a2[n]=’\0’;

  }

  main()

  { char s1[5]="ABCD", s2[5];

  fun( s1, s2, 4);

  puts( s2);

  }

  (15) 下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。

  findmax( int s[], int t)

  { int k, p;

  for( p=0, k=p; p  if( s[p]>s[k]) 【15】 。

  return k;

  }

  (16) 下面程序的输出结果是 【16】 。

  #include

  fun( int x)

  { int p;

  if( x==0||x==1) return(3);

  p=x-fun( x-2);

  return p;

  }

  main()

  { printf( "%d\n", fun(9));}

  (17) 下面程序的输出结果是 【17】 。

  #include

  funa( int a, int b)

  { return a+b;}

  funb( int a, int b)

  { return a-b;}

  sub( int (*t)(), int x, int y)

  { return((*t)( x,y));}

  main()

  { int x, (*p)();

  p=funa;

  x=sub(p,9,3);

  x+=sub(funb, 8, 3);

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

  }

  (18) 下面程序的输出结果是 【18】 。

  #include

  main()

  { char *p[]={ "BOOL", "OPK", "H", "SP"};

  int i;

  for(i=3; i>=0; i--,i--) printf( "%c", *p[i]);

  printf("\n");

  }

  (19) 为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是向结点的指针域),请填空。

  data next

  struct link { char data; 【19】 } node;

  (20) 下面的程序用来统计文件中字符的个数,请填空。

  #include

  main()

  { FILE *fp;

  long num=0;

  if(( fp=fopen("fname.dat","r"))==NULL)

  { printf( "Can’t open file! \n"); exit(0);}

  while 【20】

  { fgetc(fp); num++;}

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

  fclose(fp);

  }

  参考答案

  一`选择题((1)~(40)题每题1分,(41)~(50)题每题2分,共60分)

  (1)C (2)A (3)B (4)D (5)D (6)A (7)C (8)B (9)D (10)C

  (11)B (12)D (13)A (14)C (15)B (16)A (17)B (18)A (19)C (20)C

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

  (31)B (32)B (33)D (34)C (35)A (36)C (37)A (38)B (39)C (40)A

  (41)C (42)C (43)A (44)C (45)B (46)B (47)D (48)C (49)D (50)C

  二` 填空题(每空2分,共40分)

  (第(2)`(3)空允许小写或大小写混合使用,其它空均须与答案一样)

  (1) 外部

  (2) DIR ?? C*.*

  (3) A:\X\Y\W\QR.C

  (4) 64

  (5) 92

  (6) pow(sin(x),2) * (a+b)/(a-b) 或 sit(x) * sit(x) * (a+b)/(a-b)

  (7) eybdooG

  (8) 7 1

  (9) 3 abc.exe file1 file2 (注:两个答案,每个1分)

  (10) ((20   (11) 11110000

  (12) 34

  (13) 3

  (14) XYZA

  (15) k=p

  (16) 7

  (17) 17

  (18) SO

  (19) struct link *next

  (20) (!feof(fp))或(feof(fp)==0)

【C语言试题及答案】相关文章:

C语言测试试题及答案08-02

C语言试题训练10-20

C语言模拟试题练习12-09

卫生C类完形填空试题及答案参考06-19

2023计算机二级C语言测试题及答案04-26

计算机二级C++模拟试题及答案02-06

驾照模拟考试c1考试试题(带答案)07-19

全国计算机二级《C++》上机试题及答案03-28

2023下半年全国计算机二级C语言考前模拟试题及答案07-10

怎样学习c++c语言编程04-28