二级C语言考前密卷(八)

文章来源:网络 作者:星云整理 更新时间:2005-11-9 20:20:07 点击数

  

 (45)在说明语句:int *f();中,标识符f代表的是______。
  A)一个用于指向整型数据的指针变量
  B)一个用于指向一维数组的行指针
  C)一个用于指向函数的指针变量
  D)一个返回值为指针型的函数名
  答案:D
  评析:一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。Int*f()表示f是一个函数,它带回一个指针值,这个指针是指向一个整型数据的。
  
  (46)下面函数中,可以把整数以二进制形式存放到文件中的函数是______。
  A)fprintf函数  B)fread函数   C)fwrite函数   D)fputc函数
  答案:C
  评析:ANSI c标准提出设置两个函数(fread和fwrite),用来读写一个数据块。它们的一般调用形式为:
  fread(buffer,size,count,fp);
  fwrite(buffer,size,count,fp);
  其中:buffer是一个指针;size是要读写的字节数;count是要进行读写多少个size字节的数据项;
  fb是指文件型指针。如果文件以二进制形式打开,用fread和fwrite函数就可以读写任何类型的信息。
  
  (47)不合法的main函数命令行参数表示形式是______。
  A)main(int a,char*c[])       B)main(int arc,char **arv)
  C)main(int argc,char *argv)    D)main(int argv,char *arge[])
  答案:C
  评析:本题主要考查了对main函数参数的了解,main函数可以有两个形参,一般形式是:main(int argc,char*argv[]),也就是说,它的第一个形参是一个整型变量,第二个形参是一个指针数组,其元素指向字符型数据。
  
  (48)以下程序的输出结果是______.
  int x=3;
  main()
  {int i;
  for(i=l;i<x;i++)incre();
  }
  incre()
  { static int x=l;
  X*=x+l:
  printf("%Di",x);
  }
  A)3 3     B)2 2       C)2 6       D)2 5
  答案:C
  评析:incre()中定义一个静态局部变量x,它的作用范围仅限于本函数中,而不会影响main()函数中的x值。
  
  (49)有以下结构体说明和变量的定义,且如图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是________。
  
  struct node
  { char data;
  struct node *next;
  }a,b,*p=&a,*q=&b;
  A)a.next=q; B)p.next=&b;    C)p->next=&b;   D)(*p).next=q;
  答案:B
  评析:由于p是一个指向struct node型的指针变量,要访问该指针变量指向的结构体成员,必须使用->运算符或"(*p).成员"的形式,故选项B是错误的。
  
  (50)若有以下定义:
  struct link
  { int data;
  struct link*next;
  }a,b,c,*p,*q;
  且变量a和b之间已有如图所示的链表结构:
  
  指针p指向变量a,q指向变量c。则能够把c插入到a和b之间并形成新的链表的语句组是______。
  A)a.next=c;c.next=b;       B)p.next=q;q.next=p.next;
  C)p->next=&c;q->next=p->next;   D)(*p).next=q;(*q).next=&b;
  答案:D
  评析:本题考的是指针的运用。即先将元素a的指针指向q指针所指向的元素即c,然后将c的指针指向b元素,采取的是直接取元素地址的方式。
  
  二、填空题(每空2分,共40分)
  
  请将每一个空的正确答案写在答题卡的【1】至【20】序号的横线上,答在试卷上不得分。
  
  (1)算法的基本特征是可行性、确定性、 【1】  和拥有足够的情报。
  答案:【1】有穷性
  评析:算法是指解题方案的准确而完整的描述。它有4个基本特征,分别是可行性、确定性、有穷性和拥有足够的情报。
  
  (2)顺序存储方法是把逻辑上相邻的结点存储在物理位置  【2】  的存储单元中。
  答案:【2】相邻
  评析:常用的存储表示方法有4种,顺序存储、链式存储、索引存储、散列存储。其中,顺序存储方法是把逻辑上相邻的结点存储在物理位置也相邻的存储单元中。
  
  (3)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向  【3】  的设计方法。
  答案:【3】数据结构
  评析:结构化分析方法主要包括:面向数据流的结构化分析方法(SA-Structured analysis),面向数据结构的Jackson方法(JSD-Jackson system development method)和面向数据结构的结构化数据系统开发方法(DSSD-Data structured system development method)。
  
  (4)数据库设计分为以下6个设计阶段:需求分析阶段、 【4】  、逻辑设计阶段、物理  设计阶段、实施阶段、运行和维护阶段。
  答案:【4】概念设计阶段或数据库概念设计阶段
  评析:数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。
  
  (5)数据库保护分为:安全性控制、 【5】  、并发性控制和数据的恢复。
  答案:【5】完全性控制
  评析:考查考生对数据库基本知识的了解。
  安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发性控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;数据的恢复:当数据库被破坏或数据不正确时,使数据库能恢复到正确的状态。
  
  (6)设有int x=ll;,则表达式(x++ *1/3)的值为 【6】  。
  答案:【6】3
  评析:白增自减运算符的作用是使变量的值增1或减1,如:
  ++i,--i (在使用i之前,先使i的值加(减)1)
  i++,i-- (在使用i之后,使i的值加(减)1)
  所以表达式(x++*1/3)的值即11/3的值:3。
  
  (7)若从键盘输入58,则以下程序的输出结果是 【7】  。
  main()
  { int a;
  Scanf("%d",&a);
  If(a>50)printf("%d",a);
  If(a>40)printf("%d",a);
  if(a>30)printf("%d",a);
  }
  答案:【7】585858
  评析:本题首先为a输入一个值58,然后执行三个判断语句,在每一个判断中,如果满足判断条件的话,就输出a,因为三次判断,条件都满足,所以三次输出a。
  
  (8)下列程序运行的结果是 【8】  。
  #include<stdio.h>
  main()
  {
  int x=l,i=l:
  fOr(;x<50;i++)
  {if(x>=10)break;
  if(x%2!=1)
  {x+=3;continue;}
  x-=1;
  }
  printf("x=%d,i=%d\n",x,i);
  }
  答案:【8】x=11,i=11
  评析:本题程序段通过for循环语句实现当x的值为奇数时,x自减1:当x为偶数时自加3的功能。程序共执行了11次循环,当x=11时退出循环。
  
  (9)以下程序的输出结果是 【9】  。
  main()
  fint a=177;
  printf("%o\n",a);
  }
  答案:【9】261
  评析:本题考点是printf函数的格式字符。"%0"表示以八进制整数形式输出。
  
  (10)以下程序的输出结果是【10】   。
  main()
  {int a:O;
  a+=(a=8);
  printf("%d\n",a);
  }
  答案:【10】16
  评析:本题主要考的是运算符的优先级。
  A+=(a=8)可以写成a:=a+(a=8)的形式,括号的优先级高于"+",而"+"的优先级又高于"=",所以先执行括号内的运算,将a赋值为8,然后再执行+运算。
  
  (11)以下定义的结构体类型拟包含两个成员,其中成员变量info用来存放整型数据;成  员变量link是指向自身结构的指针。请将定义补充完整。
  struct node
  {int info;
  【11】  link;
  };
  答案:【11】struct node*
  评析:本题考的是如何定义一个指向结构体变量的指针。
  一个结构体变量指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。
  
  (12)以下程序的输出结果是 【12】  。
  main()
  {int s,i;
  for(s=O,i=O;i<3;i++,s+=i);
  printf("%d\n",s);
  }
  答案:【12】6
  评析:在逗号表达式内按自左至右顺序求解,因此本题共执行三次循环,具体情形如下:
  第一次当i=O时,执行i++,s+=i,则i=l,s=l:
  第二次当i=l时,执行i++,s+=i,则i=2,s=3;
  第三次当i=2时,执行i++,s+=i,则i=3,s=6。
  当i=3后退出循环。
  
  (13)以下程序的输出结果是  【13】   。
  main()
  {char *p="abcdefgh",*r;
  1ong *q;
  q=(1ong*)p;
  q++;
  r=(char*)q;
  printf("%s\n",r);
  }
  答案:【13】efgh
  评析:指针变量p,r指向字符型数据,而指针变量q指向长整型数据。首先通过类型转换将指针p的值赋给q,然后执行q自加,因为q是定义为指向长整型数据的变量,而长整型数据一般占4个字节的空间,所以实际上,q的值增加了4,当再将q的值经过强行类型转换赋给r的时候,实际上这时候r是指向了字符e,所以最后打印字符串时,得到的结果是"efgh"。
  
  (14)以下程序的输出结果是  【14】   。
  main()
  {int x=0;
  sub(&x,8,1);
  printf("%d\n",x);
  }
  sub(int *a,int n,int k、
  {if(k<=n) sub(a,n/2,2*k);
  *a+:k:
  }
  答案:【14】7
  评析:本题是一个递归调用。
  主函数中调用sub函数流程如下:
  sub(*x,8,1)-sub(*x,4,2)-sub(*x,2,4)-x=x+k=4
  ︱        ︱
  x=x+k=7     x=x+k=6
  
  (15)以下程序可以将从键盘输入的十进制数(1ong型)以二到十六进制数的形式输出,请填空。
  #include<stdio.h>
  main()
  {char b[16]={'O','l','2','3','4','5','6','7','8',
  '9','A','B',C','D','E','F'};
  int c[64],d,i=0,base;
  long n:
  print("Enter a number:\n");scanlf["%1d',&n);
  print("Enter new base:\n");scanf("%ld",&base);
  do
  {
  C[i]=  【15】
  i++;n=n/base;
  }while [n!=0);
  pdntf("'Transmite new base:\n");
  f0"--i;i>=O;--i)
  { d=c[I];
  printf("%c",b  【16】  ;
  }
  }
  答案:【15】n%base
  【16】[d]
  评析:进制转换的除余取整法。在循环中,是先对数n整除以base取余作为转换后的base进制数的第i位存放到数组元素c[i】中,然后对n整除以base的商作同样的操作,直到商为O为止,故第一空为n%base。
  由于存入到数组c中的各个元素为对应数制在十进制上表示的各位的权值,在输出时必须将其转换成对应的字符输出,而在数组b中对应存放了各个数对应的字符,故第二空应填[d]。
  
  (16)设有如下宏定义
  #define MYSWAP(z,x,y) {z=x;x=f;y=z;}
  以下程序段通过宏调用实现变量a,b内容的交换,请填空。
  float a=5,b=16,c;
  MYSWAPI(  【17】   ,a,b);
  答案:【17】c
  评析:本题最重要的是理解宏MYSWAP(z,x,y)的作用:通过z实现x,y的内容交换。所以MYSWAP(c,a,b)可以通过c实现a,b内容的交换。
  
  (17)以下程序用来统计文件字符的个数,请填空。
  #include "stdio.h"
  main ()
  {FILE *fp;long num=0;
  if((fp=fopen("fname.dat","r"))==NULl)
  {printf("Open error\n");,exit,(O);}
  while(  【18】  )
  {num++;}
  Printf["num=%ld\n",num];
  Fclose(fp);
  )
  答案:【18】fgetc(fp)!=EOF或!feof(fp)
  评析:本程序考的是龟etc函数。
  此函数的功能是从指针变量印所指向的文件中读入一个字符,如果执行龟etc函数时遇到文件结束符,则函数返回文件结束符EOF。
  
  (18)以下程序用来输出结构体变量ex所占存储单元的字节数,请填空

 struct st
  {char *name;double score;};
  main()
  { struct st ex;
  print("ex size:%d\n",sizeof( 【19】  ));
  }
  答案:【19】ex
  评析:sizeof函数计算已知类型所占的字节数。sizeof(ex)即计算结构体变量ex在内存中所占的字节数。
  
  (19)以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。
  #define  N  3
  #define  M  3
  select(int a[N][M],int *n)
  {int i,j,row=O,colum=O;
  for(i=0;i<N;i++)
  for(j=0;j<M;j++)
  if(a[i][j]>a[row][colum]){row=i;colum=j;}
  *n=row;
  retum( 【20】   );
  }
  main()
  {int a[N][M]={9,11,23,6,l,15,9,17,20),max,n;
  max=select(a,&n);
  printf("max=%d,line=%d\n",max,n);
  }
  答案:【20】a[row][colum]
  评析:本题通过判断语句,将较大值的行下标赋给row,列下标赋给colum,循环结束后,a[row][colum]中是数组元素的最大值,所以应该把它的行下标赋给*n,将a[row][colum]的值返回。

 

上一页  [1] [2] [3] 

Gonet8.Com

文章评论

查看完整内容

最新文章