首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > C语言 > 模拟试题 > 正文

05年9月等级考试二级C语言考前密卷(六)


     (28)以下程序的输出结果是_______。
  fun(int x,inty,int z)
  {z=x*x+y*y;}
  main()
  {
  int a=3l:
  fun(5,2,a);
  printf("%d",a);
  }
  A)0  B)29  C)3l  D)无定值
  答案:C
  评析:本题中,a的值并没有改变,因为传递到函数中的是变量值。
  
  (29)下列程序段的输出结果是__________。
  void fun(、int *x,int *y)
  {primf("%d%d",*x,*y);*x=3;*y=4;}
  main()
  {
  int x=l,y=2;
  fun(&y,&x);
  printf("%d%d",x,y);
  }
  A)2 1 4 3  B)1 2 l 2  C)l 2 3 4  D)2 1 l 2
  答案:A
  评析:本题中函数传递的是变量的地址,如果形参在函数中发生改变,相对应的实参也就有了改变。
  
  (30)对于下面的程序
  #include<stdio.h>
  #include<string.h>
  char*scmp(char*s1,char*s2)
  {
  if(strcmp(sl,s2)<0)retum(s1);
  else return(s2);
  }
  main()
  {
  int i;char string[20],str[3][20];
  for(I=0;i<3;i++)gets(str[i]);
  strcpy(string,scmp(str[0],str[1]));
  strcpy(string,scmp(string,str[2]));
  printf("%s\n",string);
  }
  若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为________。
  A)abcd  B)abba  C)abc  D)abca
  答案:B
  评析:本题自定义函数semp()的作用是比较字符串s1和s2的大小,如果sl<s2,函数返回s1的值,否则返回s2的值。若运行时依次输入abed、abba和abe三个字符串,执行strcpy(string,scmp(str[O],str[1]));后,string的值为abba,再执行strepy(string,scmp(string,str[2]));,由于scmp(string,str[2])返回string的值
  abba,再拷贝到字符串数组string中,所以本题输出abba。
  
  (31)下列程序的输出结果是__________。
  main()
  {
  char a[10]={9,8,7,6,5,4,3,2,1,O},*p=a+5;
  print"%d*--p);
  }
  A)非法  B)a[4]的地址  C)5  D)3
  答案:C
  评析:本题中char*p=a+5;即相当于p=&a[5],而--p,是先要减1,则printf语句要输出的值就是a[4]。
  
  (32)对下面的程序进行编译与连接生成可执行文件c.exe,并在DOS命令提示符下输入:
  c I said"I love China"!
  程序代码如下:
  main(、int argc,char*argv[])
  {
  printf("%d",argC);
  }
  其输出结果为________。
  A)4  B)5  C)6  D)7
  答案:B
  评析:带参数的main()函数常用形式为:main(int argc,ehar*argv[])
  其中,参数的个数由C程序运行时自动计算出来。字符型指针数组argv的第一个元素存放命令名,其后各个元素依次存放命令行中各个参数的首地址;整型变量arge用来记录命令行中的参数个数,文件名也作为一个参数,对于命令行中双引号内的字符串,即使有空格分开,也只算是一个参数,同时双引号本身不算参数的内容,因此本题argc的值等于5
  
  (33)下列程序的运行结果是________。
  void fun(int *a,int *b)
  {
  int *k:
  k=a;a-b;b=k;
  }
  main()
  {
  int a=3,b=6,*x=&a,*y=&b;
  fun(x,y);
  printf["%d%d.f,a,b);
  }
  A)6 3  B)3 6  C)编译出错  D)0 0
  答案:B
  评析:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。
  
  (34)若有定义:int*p[3];,则以下叙述中正确的是________。
  A)定义了一个基类型为int的指针变量p,该变量有三个指针
  B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
  C)定义了一个名为+p的整型数组,该数组含有三个int类型元素
  D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
  答案:B
  评析:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p的三个元素都是指针变量,且每个元素都是基类型为int的指针。
  
  (35)有以下程序:
  void swapl(int *a,int *b)
  {int *c=a;
  a=b,b=c;
  }
  void swap2(int *a,int *b)
  {
  int c=*a:
  *a=*b,*b=c;
  }
  main()
  (int a=lO,b=15;
  swapl(&a,&b);
  printf("%d,%d,",a,b);
  a=lO,b=15;
  swap2(&a,&b);
  printf("%d,%dt.,a,b);
  }
  其输出结果为_________。
  A)15,10,10,15  B)15,10,15,10  C)10,15,10,15  D)10,15,15,10
  答案:D
  评析:C语言规定,实参变量对形参变量的数据传递是"值传递",只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swapl()函数中,虽然改变了形参指针的值,但实参指针的值并没有改变,所以执行第一个printf后应输出10,15,;swap2()函数实现了交换两个变量a和b的值,因此执行第二个printf后输出交换后的值15,10,所以本题答案为D。
  
  (36)当调用函数时,实参是一个数组名,则向函数传送的是__________。
  A)数组的长度       B)数组的首地址
  C)数组每一个元素的地址  D)数组每个元素中的值
  答案:B
  评析:当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址,函数中的形参可定义成以下三种形式:
  ①形参定义成数组;
  ②形参定义成可变长数组;
  ③形参定义为指针变量。
  
  (37)下面的程序输出结果是________。
  #define r16
  #ifr==16
  void p(int a)
  {
  printf("%x",a);
  }
  #else
  voidp(int a)
  {
  printf("%d",a);
  }
  #endif
  main()
  {
  p(32);
  }
  A)32  B)20  C)编译时错误 D)运行时错误
  答案:B
  评析:"#define r16"的作用是指定用标识符r来代替16,因此程序编译时只编译#if部分,故程序运行时,打印输出十六进制的32,即20。
  
  (38)设有以下声明语句
  struct ex
  {  intx;floaty;char z;}example;
  则下面的叙述中不正确的是_________。
  A)struct是结构体类型的关键字  B)example是结构体类型名
  C)x,y,z都是结构体成员名    D)struct ex是结构体类型
  答案:B
  评析:example是结构体变量名。
  
  (39)以下只有在使用时才为该类型变量分配内存的存储类说明是_________。
  A)auto和stmic      B)auto和register
  C)register和static   D)extem和register
  答案:B
  评析:extem、register、static、auto分别是定义外部变量、寄存器变量、静态变量、自动变量,其中,自动变量和寄存器变量属于动态存储,调用时临时分配单元;而静态变量和外部变量属于静态存储,在整个程序运行时都存在。
  
  (40)下面程序运行后的输出结果是__________。
  fut(int**s,int p[2][3])
  {
  **s=p[l][1];
  }
  main()
  {
  int a[2][3]={1,3,5,7,9,1l},*p;
  p=(int*)malloc(sizeof(int));
  fut(&p,a);
  printf("%d\n",*p);
  }
  A)l  B)7  C)9  D)ll
  答案:C
  评析:本题a[2][3]定义为一个具有两行三列的元素的数组,malloc()函数的作用是开辟了一个长度为sizeof(int)的内存区,p为指向整型数据的指针变量,程序调用fur()函数,将第一行第一列对应的元素值赋给一s,由于数组中第一行第一列对应的元素为9,所以本题输出值9。
  
  (41)以下程序的输出结果是_________。
  main()
  {
  inti,k,a[10],p[3];
  k=5;
  for(I=O;i<10;i++)a[i]=i;
  for(i=0;i<3;i++)p[i]=a[I*(i+1)];
  fbr(i=O;i<3;i++)k+=p[I]*2;
  printf("%d\n",k);
  }
  A)20  B)2l  C)22  D)23
  答案:B
  评析:按照程序的流程走一遍,可以得到,p[O]=0,p[1]=2,p[3]=6;执行三次k+=p[i]*2,相当于k=5+0*2+2*2+6*2=21
  
  (42)当执行下面的程序时,其输出结果为__________。
  union st
  {
  int a:
  charb:
  }
  main()
  {
  union st s:
  char*p=(char*)&s;
  s.a=Ox3132;
  s.b=Ox33;
  printf("%c",*p);
  }
  A)l  B)2  C)3  D)不确定
  答案:C
  评析:共用体类型结构的特点是使几个不同的变量共占同一段内存,但在每一瞬时只能存放其中一种,而不是同时存放几种,共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。因此本题起作用的是成员b的值,所以程序打印输出3。
  
  (43)当执行下面的程序时,如果输入ABc,则输出结果是________。
  #include"stdio.h"
  #include"string.H"
  main()
  { char ss[10]="12345";
  gets(ss);strcat(ss,"6789");
  printf("%s\n",ss);
  }
  A)ABC6789  B)ABC67  C)12345ABC6  D)ABC456789
  答案:A
  评析:strcat(str1,str2)合并字符串函数的作用是把str2所指字符串的内容连接到strl字符串的后面,自动删去strl原来串中的'\0'。为了进行这项操作,要求strl所指的字符串后面有足够的空间来容纳'str2所指字符串中的内容。函数值为strl所指第一个字符的地址。
  
  (44)main(im argo,char*argv[])
  {
  while(--argc>0)printf("%s",argv[argc]);
  printf("\n");
  }
  假定以上程序经编译和连接后生成可执行文件PROG.ExE,如果在此可执行文件所
  在目录的Dos提示符下键入:PROG ABcDEFGHIJKL↙,则输出结果为_________。
  A)ABCDEFG     B)IJHL
  C)ABCDEFGHIJKL   D)lJKLABCDEFGH
  答案:C
  评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。Arge中存放命令行中命令字和参数的总和的个数,argv用来存放命令行中命令字和所有参数的字符串的,并规定argv[0]存放命令字字符串,argv[1]用来存放第一个参数的字符串,argv[2]用来存放第2个参数的字符串,依次类推。
  题中argc的值是2,执行完--argc后为1,输出argv[1],此数组存在第一个参数的字符串ABCDEFGHIJKL。
  
  (45)设char型变量x中的值为10100lll,则表达式(2+x)"(~3)的值为_________。
  A)10101001  B)10101000  C)lll11101  D)0101010l
  答案:D
  评析:异或运算符(n)的运算规则是:参加运算的两个相应位同号,则结果为0(假):异号则为-1(真)。
  取反运算符(~)的运算规则是:对一个二进制数按位取反,即将0变为l,l变为O。本题(~3)是对3(二进制形式为00000011)按位取反即11111100。
  表达式(2+x)n(~3)的值就等价于(00000010+10100111)^11111100,结果为01010101。
  
  (46)以下程序的输出结果是________。
  long fun(int n)
  {  long s;
  if(n==1‖n==2)s=2;
  else s=n-fun(n-1);
  return S:
  }
  main()
  {primf("%ld\n",fun(3));}
  A)l  B)2  C)3  D)4
  答案:A
  评析:这是一个递归函数。递归的结束条件是,n=l或者n=2。按照程序顺序,即可得出本题结果为l。
  
  (47)以下程序试图把从终端输入的字符输出到名为abe.txt的文件中,直到从终端读入字 符串撑号时结束输入和输出操作,但程序有错
  #include<stdio.h>
  main()
  {
  FILE*fout:
  char ch:
  fout=fopen('abc.txt','w');
  ch=fgetc(stdin);
  while(chI_'))')
  {
  fputc(ch,fout);
  ch=fgetc(stdin);
  }
  fclose(fout);
  }
  出错的原因是_________。
  A)函数fopen调用形式错误  B)输入文件没有关闭
  C)函数龟etc调用形式错误  D)文件指针stdin没有定义
  答案:A
  评析:本题考查的是文件的打开函数fopen(),其调用方式通常为:FLIE*fp;fp=fopen(文件名,使用文件方式);,如:fp=fopen("abc.txt","w");表示要打开名字为abc.txt的文件,使用文件方式写入。fopen函数带回指向abc.txt文件的指针并赋给fp,即审指向文件abc.txt。
  
  (48)以下程序的输出结果是_______。
  #define SQR(X) X*X
  main()
  {  int a=16,k=2,m=l;
  a/=SQR(k+m)/SQR(k+m);
  printf("%d\n",a);
  }
  A)16  B)2  C)9  D)l
  答案:B
  评析:c语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。在做这题时,也不妨将运用置换法。得到:a/=k+m*k+m/k+m*k+m=16/7=2。注:a为整型,所以在做除法时,自动取整。
  
  (49)假定建立了以下链表结构,指针p、q分别指向如图所示的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是________。
  ↓p          ↓q
  8
  4
  3
  head→      →…→        →       →……
  datanext
  A)free(q);p->next=q->next;
  B)(*p).next=(*q).next;free(q);
  C)q=(*q).next;(*p).next=q;free(q);
  D)q=q->next;p->next=q;p=p->next;free(p);
  答案:B
  评析:选项A的错误在于,先已经把q结点给释放,无法再进行余下语句了:选项c和D的错误在于因为有了q=(*q).next做了赋值,则free(q)释放了原来q后面的一个结点。
  
  (50)以下程序的输出结果是__________。
  main()
  {  int x=05;char z='a';
  printf("%d\n",(x&1)&&(z<'z'));)
  A)0  B)1  C)2  D)3
  答案:B
  评析:"&"是位运算符表示按位与运算,"&&"是逻辑运算符当其两边的表达式都为真时返回真值。关系表达式()&1)&&(z<'z'),(x&1)为真,(Z<'Z')也为真,两者相与,自然也为真,以整型输出,则输出1。
  
  二、填空题(每空2分,共40分)
  
  请将每一个空的正确答案写在答题卡的【1】至【20】序号的横线上,答在试卷上不得分。
  
  (1)栈的基本运算有三种:入栈、退栈和 【1】 。
  答案:【1】读栈顶元素
  评析:栈的基本运算有三种:入栈、退栈和读栈项元素。
  入栈运算是指在栈项位置插入一个新元素。这个运算有两个基本操作:首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。
  退栈运算是指取出栈顶元素并赋给一个指定的变量。这个运算有两个基本操作:首先将栈顶元素(栈项指针指向的元素)赋给一个指定的变量,然后将栈项指针退一(即top减1)。
  读栈顶元素是指将栈顶元素赋给一个指定的变量。这个运算不删除栈顶元素,只是将它的值赋给一个变量。
  
  (2)在面向对象方法中,信息隐蔽是通过对象的 【2】 性来实现的。
  答案:【2】封装
  评析:软件工程的基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
  信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。
  
  (3)数据流的类型有 【3】 和事务型。
  答案:【3】变换型
  评析:典型的数据流类型有两种:变换型和事务型。
  变换型:是指信息沿输入通路进入系统,同时由外部形式变换为内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
  事务型:在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。
  
  (4)数据库系统中实现各种数据管理功能的核心软件称为 【4】 。
  答案:【4】数据库管理系统或DBMS
  评析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。数据库管理系统是数据库系统的核心。
  
  (5)关系模型的数据操纵即是建立在关系上的数据操纵,一般有 【5】  、增加、删除  和修改四种操作。
  答案:【5】查询
  评析:关系模型的数据操纵即是建立在关系上的数据操纵,一般有查询、增加、删除和修改四种操作。
  数据查询:用户可以查询关系数据库中的数据,它包括一个关系内的查询以及多个关系间的查询。
  数据删除的基本单位是一个关系内的元组,它的功能是将指定关系内的指定元组删除。
  数据插入仅对一个关系而言,在指定关系中插入一个或多个元组。
  数据修改是在一个关系中修改指定的元组和属性。
  
  (6)下列程序的输出结果是 【6】 。
  main()
  {
  int a=l,b=2;
  a=a+b;b=a-b;a=a-b;
  printf("%d,%d\n",a,b);
  }
  答案:【6】2,1
  评析:本题中,执行a=a+b时,a=l,b=2,a=l+2=3;b=a-b时,a=3,b=2,b=3-2=1;a=a-b时,a=3,b=l,a=3.1=2;因此,本题的输出是2,1.
  
  (7)下列程序的输出结果是16.00,请填空;,
  main()
  {
  int a=9,b=2:
  float x= 【7】 ,y=1.1,z;
  z=a/2+b*x/y+l/2;
  printf("%5.2tin",z);
  }
  答案:【7】6.6
  评析:本题,已知结果z=16.00,即16.0=a/2+b*x/y+l/2,分别把a、b代入,得到16.0=9/2+2"x/1.1+1/2。
  因为a=9,a是整型,所以9/2的值在没有进行类型转换时,等于4,1/2同理,等于0。代入求一元一次方程,很容易就可以得出x=6.6。
  
  (8)用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,  请填空。
  st=(chhr*) 【8】 ;
  答案:181 malloc(11)
  评析:malloc函数的格式是:void*(或char*)malloc(size),size表示应分配的存储区。此题要分配11字节的单元,把11代入即可。
  
  (9)下列程序段的输出结果是 【9】 。
  main()
  {char b[]="Hello,you";
  b[5]=0;
  printf("%s\n",b);
  }
  答案:【9】Hello
  评析:字符串中,数值0或符号'\O'表示字符串的结束。本题中,b[5]被赋了0值,表明字符串b的第六个字符就是结束标志。因此,只输出前五个字符,即Hello。
  
  (10)下列程序段的输出结果是 【10】 。
  int n='c':
  switch(n++)
  {default:printf("error");break;
  case。a':
  case'A。:
  caseIb':
  tase'B':printf("good");break;
  case'c':case'C':printf("pass");
  case'd':case'D':printf("warn");
  }
  答案:【10】passwarn
  评析:n++是在执行完其所在的语句后再加l,因此,在执行case的时候,n的值依然为'c',执行case'c'后面的语句,先打印出"pass";在执行完case'c'后,未遇到break跳出switch,便接着执行下面的语句,又打印出warn。所以此题输出结果是:passwarn。
  
  (11)以下程序通过函数指针p调用函数mn,请在填空栏内,写出定义变量p的语句。
  void fun(int'x,int*y)
  { …… }
  main()
  { int a=lO,b=20;
  【11】 :
  p=fun; p(&a,&b);
  ……
  }
  答案:【11】void(*p)();
  评析:要定义p为指向函数的指针变量,需写成:void(*p)();注意+p两侧的括弧不可以省略,表示p先与*结合,是指针变量,再与后面的()结合,表示此指针变量指向函数,这个函数无返回值(同fun函数)。
  
  (12)以下程序的输出结果 【12】 。
  main()
  {
  int p[7]={ll,13,14,15,16,17,18};
  int i=0,J=0;
  while(1<7&&p[i]%2==1)j+=p[i++];
  printf("%d\n"J);
  }
  答案:【12】24
  评析:本题程序定义了一维数组p,有七个数组元素,整型变量i,.j初值分别为0,当while的条件表达式(i<7&&p[i]%2==1)的值为真时,执行语句j+=p[i++];,如:当i=0时,i<7为真,p[I]%2=11%2=1,表达式(p[i]%2:=1)的值为真,所以整个表达式(i<7&&p[i]%2==1)的值为真,执行j=j+p[i++]=0+11=11,i=l;依次类推可以得出答案24。
  
  (13)下列程序的输出结果是 【13】  。
  void fun(int *n)
  {
  while((*n)--);
  printf("%d",++(*n));
  }
  main()
  { int a=100;
  fun(&a);
  }
  答案:【13】0
  评析:在函数fun()中,while((*n)--)是先引用+n的值,再做(*n)--运算,所以循环结束时*n的值为O,再做(+n)--运算后,*n的值为-1;执行++(*n)后,*n的值是O。
  
  (14)以下程序的输出结果是 【14】 。
  main()
  {
  int arr[]={30,25,20,15,10,5},*p=arr;
  p++;
  printf("%d\n",*(p+3));
  )
  答案:【14】10
  评析:整型指针最初被赋的值是数组art的头指针,即指向数组的第一个元素30,p++后,指针指向数组的下一个元素,即*p=arr[1]=25,在执行*(p+3)时,则相当于a[1+3],即10。因此,输出应为10。
  
  (15)以下程序运行后的输出结果是 【15】 。
  main()
  {
  char a[]="Language",b[]="Programe";
  char *p1,*p2;
  int k:
  pl=a,p2=b;
  for(k=0;k<=7;k++)
  if(*(pl+k)==*(p2+k))printf("%c",*(pl+k));
  }
  答案:【15】gae
  评析:本题定义了两个字符串数组a[],b[],字符型指针变量p1和p2,且分别指向字符串数组a和b,执行for循环,当if(*(pl+k)==*(p2+k))条件为真,执行输出*(pl+k)对应的字符。即当k=0时,*(pl+k)对应的字符串数组a.中的字符L,*(p2+k)对应的字符串数组b中的字符P,因此if(*(pl+k)==*(p2+k))条件为假,不执行printf语句,依次类推,将字符串数组a和b中对应位置上的字符一一比较,如果对应位置上的字符相同,则输出该字符。
  
  (16)下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文  件中,请填空。
  #include "stdio.H"
  FILE *fp;
  main()
  {  char ch;
  if((fp=fopen( 【16】 ))==NULL)exit(0);
  while((ch=getchar())!='@')fputc(ch,fp);
  fclose(fp);
  }
  答案:【l6】"bi.Dat", "w"或"bi.dat","w+"或"bi.dat","r+"
  评析:本题的考点是fopen()函数,此函数的格式是fopen(文件名,使用文件方式),题目的要求是将从键盘读入的文本写到文件中,因此选择的打开方式应该是"w"(只写)。或者是读写"r+"或"w+"。
  
  (17)以下程序是从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。请填空。
  main()
  {
  int i,a[20],sum,count;
  sum=count= 【17】 ;
  for(i=0;i<20;i++)scanf("%d", 【18】  );
  for(i=0;i<20;i++)
  {
  if(a[I]>0)
  { count++;
  sum+=  【19】 ;
  }
  }
  printf("sum=%d,count=%d\n",sum,count);
  }
  答案:【17】0
  【18】&a[i]
  【19】a[i]
  评析:本题要求从终端读入数据到数组中,统计其中正数的个数,并计算它们的和。程序中首先要对存放正数个数的变量count及存放和值的变量sum初始化为0,所以第一空应填:0。接着要求从终端读入数据到数组中,可以通过scanf函数实现,因此第二空应填:&a[i]。最后通过sum+=a[i];语句累加正数a[i]的值到sum中,因此第三空应填:a[i]。
  
  (18)若变量n中的值为24,则pint函数共输出 【20】 行。
  void prnt(int n,int aa[])
  { int i;
  for(I=1;i<=n;i++)
  {  printf("%6d",aa[I]);
  if(!(i%5,J)printf("\n");
  }
  printf("\n");
  }
  答案:【20】5
  评析:本题的关键在于if(!(i%5))printf("\n");这句,即如果i可被5整除时,则换行。i值为24,可以被5整除4次,并余4,因此,prnt函数共输出5行,最后一行有4个

文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。