试题

计算机二级C语言考试上机考试题及答案

时间:2024-10-29 09:04:15 维泽 试题 我要投稿
  • 相关推荐

计算机二级C语言考试上机考试题及答案

  在学习和工作中,我们都要用到试题,试题是用于考试的题目,要求按照标准回答。你知道什么样的试题才算得上好试题吗?以下是小编精心整理的计算机二级C语言考试上机考试题及答案,欢迎阅读,希望大家能够喜欢。

计算机二级C语言考试上机考试题及答案

  计算机二级C语言考试上机考试题及答案 1

  一、选择题(每小题1分,共40小题,共40分)

  1.算法的空间复杂度是指( )。

  A.算法程序的长度

  B.算法程序中=的指令条数

  C.算法程序所占的存储空间

  D.算法执行过程中所需要的存储空间

  2.下列叙述中正确的是( )。

  A.一个逻辑数据结构只能有一种存储结构

  B.逻辑结构属于线性结构,存储结构属于非线性结构

  C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

  D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

  3.简单的交换排序方法是( )。

  A.快速排序

  B.选择排序

  C.堆排序

  D.冒泡排序

  4.关于结构化程序设计原则和方法的描述错误的是( )。

  A.选用的结构只准许有一个入口和一个出口

  B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现

  C.不允许使用GOT0语句

  D.语言中若没有控制结构,应该采用前后一致的方法来模拟

  5.相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( )。

  A.可重用性差

  B.安全性差

  C.非持久性

  D.冗余性

  6.面向对象的设计方法与传统的面向过程的方法有本质不同,它的基本原理是( )。

  A.模拟现实世界中不同事物之间的联系

  B.强调模拟现实世界中的算法而不强调概念

  C.使用现实世界的概念抽象地思考问题从而自然地解决问题

  D.不强调模拟现实世界中的算法而强调概念

  7.对如下二叉树进行后序遍历的结果为( )。

  A.ABCDEF

  B.DBEAFC

  C.ABDECF

  D.DEBFCA

  8.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指( )。

  A.模块间的关系

  B.系统结构部件转换成软件的过程描述

  C.软件层次结构

  D.软件开发过程

  9.两个或两个以上模块之间关联的紧密程度称为( )。

  A.耦合度

  B.内聚度

  C.复杂度

  D.数据传输特性

  10.下列描述错误的是( )。

  A.继承分为多重继承和单继承

  B.对象之间的通信靠传递消息来实现

  C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征

  D.类是具有共同属性、共同方法的对象的集合

  11.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( )。

  A.DB包含DBS和DBMS

  B.DBMS包含DB和DBS

  C.DBS包含DB和DBMS

  D.没有任何关系

  12.下列合法的声明语句是( )。

  A.int_abc=50;

  B.double int=3+5e2.5;

  C.long do=1L:

  D.float 3_asd=3e-3;

  13.设x、Y和z是int型变量,且x=4,y=6,z=8,则下列表达式中值为0的是( )。

  A.x&&Y

  B.x<=Y

  C.x‖y+z&&y-z

  D.!((x  14.若ch为char型变量,k为int型变量(已知字符a的ASCIl码是97),则执行下列语句后输出的结果为( )。

  ch=’b’;

  k=10:

  printf("%X,%o,",ch,ch,k);

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

  A.因变量类型与格式描述符的类型不匹配,输出无定值

  B.输出项与格式描述符个数不符,输出为0值或不定值

  C.62,142,k一%d

  D.62,142,k一%l0

  15.有下列程序: 、

  fun(int X,int y){return(x+y);)

  main()

  { int a=1,b=2,c=3,sum;

  sum=fun((a++,b++,a+b),c++);

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

  }

  执行后的输出结果是( )。

  A.6

  B.7

  C.8

  D.9

  16.假定x和Y为double型,则表达式x=2,y—x+3/2的值是( )。

  A.3.500000

  B.3

  C.2.000000

  D.3.000000

  17.有如下程序:

  main()

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

  switch(x)

  {

  case 0:b++;

  case l:a++;

  case 2:a++;b++;

  )

  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

  18.下列程序的输出结果是( )。

  main()

  {int i=1,j=2,k=3;

  if(i++= =1&&(++j= =3= =‖k++= =3))

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

  )

  A.1 2 3

  B.2 3 4

  C.2 2 3

  D.2 3 3

  19.下列程序的输出结果是( )。

  #include

  main()

  { int a=0,i;

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

  { switch(i)

  { case 0:

  case 3:a+=1;

  case l:

  case 2:a+=2;

  default:a+=3;

  )

  printf("%d",i);

  )

  A.19 B.1 C.6 D.8

  20.有以下程序:

  main()

  {int X,i;

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

  {x=i;

  if(X%2=O)

  if(x%3=O)

  if(X%7=0) .

  printf("%d,i)";

  )

  )

  输出结果是( )。

  A.28

  B.27

  C.42

  D.41

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

  main()

  {int a[3][3]={{1,2},{3,4),{5,6}},i,j,s=0;

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

  for(j=0;j<=i;j++)s+=a[i][j];

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

  }

  A.18

  B.19

  C.20

  D.21

  22.有下列程序:

  main()

  { int k=5;

  while(--k) printf("%d",k=1);

  printf("/n");

  )

  执行后的输出结果是( )。

  A.1

  B.2

  C.4

  D.死循环

  23.若有定义:“int a[2][3];”,则对a数组的第i行第J列元素的正确引用为( )。

  A.*(*(a+i)+j)

  B.(a+i)[j]

  C.*(a+i+j)

  D.*(a+i)+j

  24.下列能正确进行字符串赋值的是( )。

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

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

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

  D.char*s;printf("%《",s);

  25.现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。

  struct node

  {har data;

  struct node*next;)*P,*q,*r;

  现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( )。

  A.q-:>next=r->next;p--:>next=r;rm:>next=q;

  B.q-:>next=r;q->next=r->next;r->next=q;

  C.q-:>next=r->next;r->next=q;p->next=r;

  D.q-:>next=q;p->next=r;q->next=r->next;

  26.有下列程序:

  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

  27.有下列程序:

  int funl(double a){return a*=a;} 、

  int fun2(double x,double y)

  {double a=0,b=0;

  a=funl(x);b=funl(y);return(int)(a+b);

  )

  main()

  {double w;w=fun2(1.1,2.0),……}

  程序执行后变量w中的值是( )。 、

  A.5.21 B.5 C.5.0 D.0.0

  28.有下列程序:

  main()

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

  for(i=0;i<9;i+=2)s+=*(t+i);

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

  }

  程序执行后的输出结果是( )。

  A.45

  B.20

  C.25

  D.36

  29.有下列程序:

  int fun(int n)

  {if(n= =1))return l;

  else

  return(n+fun(n-1)):

  }

  main()

  { int x;

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

  }

  执行程序时,给变量x输入l0,程序的输出结果是( )。

  A.55

  B.54

  C.65

  D.45

  30.有下列程序:

  int fun(int x[],int n)

  { static int sum=0,i;

  for(i=0;i   return sum;

  }

  main()

  {int a[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;

  s=fun(a,5)+fun(b,4);printf("%d\n",s);

  程序执行后的输出结果是( )。 、

  A.45

  B.50

  C.60

  D.55

  31.有下列程序:

  main()

  f char*P[]={"3697","2584");

  int i,j;long num=0;

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

  {j=0;

  while(p[i][j]!=’\0’)

  {if((p[i][j]-t\0’)%2)num=10*num+p[j][j]-’0’;

  j+=2;

  )

  )

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

  )

  程序执行后的输出结果是( )。

  A.35 B.37 C.39 D.3975

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

  main()

  { char st[20]="hell0\O\t\\\”;

  printf("%d%d\n",strlen(st),sizeof(st));

  }

  A.9 9

  B.5 20

  C.13 20

  D.20 20

  33.若有下的定义:"int t[3][2];",能正确表示t数组元素地址的表达式是( )。

  A.&t[3][2]

  B.t[3]

  C.t[l]

  D.t[2][2]

  34.函数fseek(pf,OL,SEEK_END)中的SEEK_END。代表的起始点是( )。

  A.文件开始

  B.文件末尾

  C.文件当前位置

  D.以上都不对

  35.下述程序的输出结果是( )。

  #include

  main()

  {int i;

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

  {if(i*i>=20)&&(i*i<=lOO))

  break;

  }

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

  )

  A.49

  B.36

  C.25

  D.64

  36.若有定义“int b[8],*p=b;”,则p+6表示( )。

  A.数组元素b[6]的值

  B.数组元素b[6]的地址

  C.数组元素b[7]的地址

  D.数组元素b[0]的值加上6

  37.设变量已正确定义,则以下能正确计算f=n!的程序是( )。

  A.f=0; for(i=1;i<=n;i++)f*=i;

  B.f=1;for(i=1;i  C.f=1;for(i=n;i>1;i++)f*=i;

  D.f=1;for(i=n;i>=2;i--)f*=i;

  38.下述程序执行的输出结果是( )。

  #include

  main()

  {char a[2][4]; ,

  strcpy(a。"are");strcpy(a[1],"you");

  a[o][3]=’&’;

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

  )

  A.are&you

  B.you

  C.are

  D.&

  39.设x=011050,则x=x&01252的值是( )。

  A.0000001000101000

  B.1111110100011001

  C.0000001011100010

  D.1100000000101000

  40.在“文件包含,预处理语句的使用形式中,当#include后面的文件名用(双引号)括时,寻找被包含文件的方式是( )。

  A.直接按系统设定的标准方式搜索目录

  B.先在源程序所在的目录搜索,如没找到,再按系统设定的标准方式搜索

  C.仅仅搜索源程序所在目录

  D.仅仅搜索当前目录

  二、基本操作题(共18分)

  请补充函数proc(),该函数的功能是计算下面公式SN的值:

  SN=1+1/3十4/5+...+2N-1/SN-1

  例如,当N=20时,SN=29.031674。

  注意:部分源程序给出如下。

  请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。

  试题程序:

  #include

  #include

  #include

  double proc(int n)

  {

  double s=1.0,sl=0.0;

  int k;

  for(【1】;k<=n;k++)

  {

  sl=S;

  【2】

  }

  return 【3】 ;

  )

  void main()

  {

  int k=0:

  double sum;

  system("CLS");

  printf("\nPlease input N=");

  scanf("%d",&k);

  sum=proc(k);

  printf("\nS=%If",sum);

  )

  三、程序改错题(共24分)

  下列给定程序中,函数proc()的功能是根据整型形参n,计算如下公式的值:

  Y=1-1/(22)+1/(33)-1/(44)+…+(-1)(n+1)/(nn)

  例如,n中的值为l0,则应输出0.817962。

  请修改程序中的错误,使它能得到正确结果。

  注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

  试题程序:

  #include

  #include

  #include

  double proc(int n)

  {

  double y=1.0;

  f|****found****

  int J=1; .

  int i;

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

  {

  j=-l*j;//****found****

  y+=1/(i*i);

  )

  return(y);

  )

  void main()

  {

  int n=10:

  system("CLS"):

  printf("\nThe result is%lf\n",proc(n));

  )

  四、程序设计题(共18分)

  编写一个函数,从传人的M个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

  注意:部分源程序给出如下。

  请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填人所编写的若干语句。

  试题程序:

  #include

  #include

  #include

  char*proc(*a)[81],int num)

  {

  )

  void main()

  {

  char ss[l0][81],*max;

  int n,i=0;

  printf("输入若干个字符串:");

  gets(ss[i]);

  puts(ss[i]);

  while(!strcmp(ss[i],"****")= =0)

  {

  i++:

  gets(ssEi]);

  puts(ss[i]);

  )

  n=i:

  max=proe(SS,n);

  printf("\nmax=%s\n",max);

  }

  【参考答案及解析】

  一、选择题

  1.D。【解析】算法的空间复杂度,是指执行这个算法所需的存储空间。算法所占用的存储空间包括算法程序所占用的空间、输入的.初始数据所占用的存储空间、算法执行过程中所需要的额外空间。

  2.D。【解析】数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式,一种数据结构可以根据需要采用不同的存储结构,用的存储结构有顺序和链式结构。用不同的存储结构,其处理的效率是不同的。

  3.D。【解析】所谓的交换排序方法是指借助数据元素之间的互相交进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序通过相邻元素的交换,逐步将线性表变成有序是一种最简单的交换排序方法。

  4.C。【解析】结构化程序设计的原则和方法之一是限制使用GOT0语句,但不是绝对不允许使用G0T0语句。其他三项为结构化程序设计的原则。

  5.D。【解析】文件系统所管理的数据文件基本上是分散、相互独立的。相对于数据库系统,以此为基础的数据处理存在3个缺点:数据冗余大、数据的不一致性、程序与数据的依赖性强。

  6.C。【解析】面向对象的设计方法的基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。它虽强调模拟现实世界中的概念而不强调算法,但是它鼓励开发者在软件开发的过程中从应用领域的概念角度去思考。

  7.D。【解析】所谓的后序遍历是指,首先遍历左子树,然后遍历右子树,最后访问根结点,并且在遍历左、右树时,仍然先遍历左子树,然后遍历右子树,最后访问根点。因此,后序遍历二叉树的过程也是一个递归过程。

  8.B。【解析】软件的过程设计是指系统结构部件转换成软件的过程描述。

  9.A。【解析】模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和耦合性两个定性度量标准。耦合性是模块间互相连接紧密程度的度量。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,以利于提高模块的独立性。

  10.C。【解析】对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。

  11.C。【解析】数据库系统由如下5个部分组成:数据库(DB)、数据库管理系统(DBMS)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。其中DB(DataBase)即数据库,是统一管理的相关数据的集合DBMS即数据库管理系统,是位于用户与操作系统之间的一层数据管理软件,为用户或应用完程序提供访问DB的方法。由以上可知,选C为正确答案。

  12.A。【解析】标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。B选项int不是表达变量类型的标识符,它不能再用做变量名和函数名。C选项d0是C语言的一个关键字。D选项标识符只能以字母或下划线开始。

  13.D。【解析】本题考查逻辑运算符的使用。当“&&”的两个运算对象都是逻辑l时,表达式返回值才是1;“‖”的两个运算对象至少有一个是逻辑1时,表达式返回值也是l,x  14.C。【解析】第l个printf函数,格式说明的个数是2,而输出项的个数是3,所以对于多余的输出项k不予输出;第2个printf函数,有两个%说明,第1个%后面的字符要原样输出。本题考查printf函数的格式。①“%x”和“%o”分别表示以十六进制和八进制无符合型输出整型数据(不带前导ox或o);②printf函数中格式说明符之前插入的任何字符都原样输出;③格式说明与输出项的个数也要相等,如果格式说明的个数少于输出项的个数,则对于多余的输出项不予输出。

  15.C。【解析】函数fun(int x,int y)的功能是返回x+Y的值。在主函数中,变量a,b,c的初始值分别为 1,2,3。因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。

  16.D。【解析】在x=2,y=x+3/2中,3/2=1,2+1=3,因此表达式的值为3,因为X,y为double型变量,故选择D选项。

  17.A。【解析】当X为1时,执行case l,a自加等于l,因为case l后没有break,接着执行case 2,此时a的值为2,b自加为1,故选择A选项。

  18.D。【解析】本题考查自增运算符“++”、逻辑与运算符“&&”和逻辑或运算符“‖”。自增运算符“++”出现在变量之前,表示先使用变量的值加1,再使用变量的值进行运算;出现在变量之后,表示先使用变量的值进行运算,再使用变量的值加l。当逻辑与运算符“&&”两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“‖”只要一个值为1,值就为l。根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为l;1与任何数都为进行或(1 1)运算,结果都为1,因此k一3的表达式i++是先运算后自加,因此运算时i为 1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。

  19.A。【解析】本题考查switch语句。当i=1时,执行case l,因为没有遇到break语句,所以依次往下运行,“a=a+2=2,a=a+3=5”;当i=2时,执行case 2,因为没有遇到break语句,所以依次往下执行,“a=a+2=7,a=a+3=10”;当i=3时,执行case 3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a=a+2=13,a=a+3=16;当i=4时,执行了default,a=a+3=l9,结束循环。

  20.C。【解析】只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择c选巩。

  21.A。【解析】循环的作用是求行下标从l到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][o]+a[2][1]+a[2][2]=3+4+5+6+0一18。

  22.A。【解析】在程序语句中,k的初始值为5,进行第l次while循环后,k自减l为4,非0,执行循环体里的printf语句,输出k,此时k的值变为l。程序执行第2次循环时,k自减l变为0,为假,退出while循环语句。所以程序的最后结果为l。

  23.A。【解析】通过地址来引用数组元素的方法有下列5种:

  (1)a[i][j];(2)*(a[i]+j);(3)*(*(a+j)+j);(4)*(a[i][j]);(5)(&a[o][0]+3*i+j)。故A正确。

  24.C。【解析】选项A、B的空间不够;字符串存储要有结束符’\0’,且要占用一个空间,printf用来输出 字符,不能输入字符串。

  25.D。【解析】由题目中线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向r的后一个结点,P指向r结点,r指向q结点即可。而在选项D中,r->next=q,这时r指向的节点为q;p->next=r,这时P指向的节点为r;q->next:r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。

  26.B。【解析】在第1次外层for循环中,首先x++得到x=1。进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。在进入执行第2次外层for循环中,首先x++得到x=5。进入到内层for循环,只有循环变量J的值为奇数时,变量X的值才自加1,所以在内层for循环执行过程中,变量X的值自加l两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。

  27.C。【解析】子函数funl(double a)的功能是返回a的平方值的整数部分。子函数fun2(double X, double y)的功能是返回X的平方值的整数部分与Y的平方值的整数部分的和。又因为题中变量W的定义为double型,函数fun(2)的定义为int型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量w的值为5.0。

  28.c。【解析】在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语句,因为C语言规定数组名做表达式相当于数组的首地址,也就是第一个元素的地址。因此,*(t+i)代表数组的第i+1个元素。所以程序运行的结果是l+3+5+7+9=25,即变量S的值等于25。

  29.A。【解析】本题在函数int fun(int n)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量X时,递归调用的过程为

  fun(10)=l0+fun(9)=10+9+fun(8)=10+9+8+fun(7)

  =10+9++8+7+fun(6)=10+9++8+7+6+fun(6)

  =10+9++8+7+6+5+fun(4)

  =10+9++8+7+6+5+4+fun(3)

  =10+9++8+7+6+5+4+3+fun(2)

  =10+9++8+7+6+5+4+3+2+fun(1)

  =10+9++8+7+6+5+4+3+2=55

  30.C。【解析】在函数int fun(int x[],int n)的定义中,变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。函数int fun(int x[],int n)的功能是求出数组x[]各个元素的和,所以在主函数中,调用函数fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。

  31.D。【解析】执行第一次for循环时,用表达式p[i][J]!=’\o’来判断字符串数组指针P是否到达字符串的结尾,如果没有到达,继续执行while中的语句。if语句表示(p[i][j]-’\o’)除2的余数不为0时,即字符串所有奇数,执行后面的语句。所以退出第1次for的循环体时,输出为397,执行第2次循环体。对字符串“2584”进行处理,输出结果为5,因而最后输出结果为3975。

  32.B。【解析】从题目中可知,’\O’、’\t’、’\\’分别为一个字符,而sizeof是求字节个数的函数,其中包括’\O’占的字节,strlen函数是求数组长度的函数;其以’\0’结束,因此strlen的值为5,sizeof的值为20。

  33.C。【解析】数组的下标是从0开始的,A中越界,行下标和列下标都不能越界;B中,虽然是个地址,但是也同样越界了;选项c中表示的是第一个的首地址;选项D表示的为其元素的值,并不是地址。

  34.B。【解析]SEEK_SET代表文件的开始,SEEK_END是代表文件末尾,SEEK_CUR代表文件当前位置。

  35.C。【解析】当if执行到第一个满足(i*i>=20)&&(i*i<=100)这个条件的i出现时,通过break语句跳出循环,执行下面的prinlf语句。

  36.B。【解析】指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中p+6指的是将指针向后移动了6个存储单元,即指向b[6],存放的是b[6]的地址。

  37.D。【解析】由n!的数字定义可知n!=n*(n-1)*(n-2)*…*1。在选项A中,由于f的初值为0,在for循环语句中,f依次乘以l,2,3,…,n,最后计算得到f=n!=0,所以选项A不正确。在选项B中,f的初值为l,在for循环语句中,f依次乘以l,2,3,…,(n-1),最后计算得到f=(n-1)!,所以选项B不正确。在选项C中,f的初值为l,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C不正确。在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n!,所以选项D正确。

  38.A。【解析]strcpy实现的功能是复制,该操作把are复制到a中,aE03 E33一’&’,且strcpy(aEl], "you")把you复制到a[l]中,故输出a为“are&you”。

  39.A。【解析】本题主要考查按位与运算,x=Oll050的二进制形式为00010010000101000,Ol252的二进制形式为0000001010101010,两者相与得0000001000101000。

  40.B。【解析】#include”文件名”,预处理程序首先在引用被包含文件的源文件所在的目录下搜索指定的文件,如没找到,再按系统指定的标准目录搜索。

  二、基本操作题程序填空题

  【1】k=2【2】s+=(2*k一1)/sl【3】s

  【解析】由题目中所给公式可知,多项武的第一项为1。变量s中存放多项式的和,其初始值为l。因此,循环从第二项开始,因此,【1】处填“k=2”;变量sl中存放各项表达武的值,由公式可知,【2】处填“s+=(2*k-1)/sl”;题目中要求将多项式的和返回到主函数当中,因此,【3】处填“s”。

  三、程序改错题

  (1)错误:int j=1;正确:double j=1.0;

  (2)错误:y+=1/(i*i); 正确:y+=j/(i*i);

  【解析】由函数proc()可知,变量j的作用是控制每一项符号的变化,并且作为运算的分子,应改为double型变量。因此,“int j=1;”应改为“double j=1.0;”。变量y中存放多项式的值,多项式中的每一项符号由变量j决定。因此,“y+=1/(i*i);”应改为“y+=j/(i*i);”。

  四、程序设计题

  char*proc(*a)[81],int M)

  {

  char*max;

  int i=0:

  max=a[O]:

  for(i=0;i  if(strlen(max)  max=a[i];

  return max; //返回最长字符串的地址

  }

  【解析】本题首先要定义一个字符指针用于保存最长的字符串,并使其初始值指向第一个字符串;再循环遍历字符串数组,通过if语句比较字符串的长度,并把最长的字符串地址赋给字符指针;最后返回最长字符串的地址。

  计算机二级C语言考试上机考试题及答案 2

  1.若有以下数组说明,则i=10;a[a[i]]元素数值是(C )。

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

  A、10

  B、9

  C、6

  D、5

  先算a[a[i]]内层的a[i],由于i=10,因此a[i]即a[10].

  a[10]对应下面数组中的元素为9. 因此a[a[i]]即为a[9]

  a[9]对应下面数组中的元素为6. 因此a[9]即为6

  2.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( B )

  A、2

  B、3

  C、4

  D、无确定值

  5 7

  D、3 6 9

  二维数组的.一维大小,即指二维数组的行数,在本题中,按行对二维数组赋值,因此内层有几个大括号,数组就有几行

  3.对二维数组的正确定义是(C )

  详见教材P149~152,二维数组的定义、初始化

  类型符 数组名 [常量表达式][常量表达式]

  二维数组可以看做是矩阵

  类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;第一个常量表达式是指数组的行数;第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变量,而且从1开始计数。

  一维数组初始化时可以省略数组长度

  二维数组初始化时可以省略行数,但不能省略列数

  选项A,B,都省略了列数

  选项D,不符合二维数组定义的一般形式,行、列常量表达式应该放在

  计算机二级C语言考试上机考试题及答案 3

  单选题

  1). 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是

  A.函数调用可以作为独立的语句存在

  B.函数调用可以作为一个函数的实参

  C.函数调用可以出现在表达式中

  D.函数调用可以作为一个函数的.形参

  正确答案:D

  2). 下列是用户自定义标识符的是

  A._w1

  B.3_xy

  C.int

  D.LINE-3

  正确答案:A

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

  A.在不同的函数中可以使用相同的名字的变量

  B.函数中的形式参数是局部变量

  C.在一个函数内定义的变量只在本函数范围内有效

  D.在一个函数内的复合语句中定义的变量在本函数范围内有效

  正确答案:D

  4). 以下描述错误的是

  A.C程序中,函数可以直接或间接的调用自己

  B.函数调用时,函数名必须与所调用的函数名字完全一致

  C.函数说明语句中的类型必须与函数返回值的类型一致

  D.实参数可以与形参个数不一致

  正确答案:D

  5). 下列说法中正确的是( )。

  A.C程序书写时,不区分大小写字母

  B.C程序书写时,一行只能写一个语句

  C. C程序书写时,一个语句可分成几行书写

  D. C程序书写时每行必须有行号

  正确答案:C

  答案解析:C语言严格区分大小写字母,如"A1"和"a1"被认为是两个不同的标识符,C程序的书写非常灵活,既可以一行多句,又可以一句多行,且每行不加行号。

  6). 已知:char a[20]= "abc",b[20]= "defghi";则执行下列语句后的输出结果为printf("%d",strlen(strcpy(a,b)));

  A.11

  B.6

  C.5

  D.以上答案都不正确

  正确答案:B

【计算机二级C语言考试上机考试题及答案】相关文章:

2016计算机二级《C语言》无纸化考试题及答案03-28

2024计算机二级C上机考试试题及答案10-23

全国计算机二级《C语言》考试题库与答案06-29

2016全国计算机二级《C语言》机考试题及答案03-11

2017计算机二级C语言上机测试题附答案03-30

2017年3月计算机二级C语言考试题及答案12-09

2016年计算机二级《C语言》备考试题自己答案03-10

2024年C语言考试题及答案09-20

2024二级c语言上机题库04-18