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

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


     (28)有以下程序
  Void f(int *x, int *y)
  {
  int t;
  t= *x; *x=*y;'*y=t;
  )
  main( )
  {
  int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
  p=a;q=&a[7];
  while(p<q)
  {f(p,q); p++; q--;}  。
  for(i=0;i<3;i++) printf("%d",a[1][i]);
  }
  程序运行后的输出结果是________。
  A)8,2,3,4,5,6,7,1,  B)5,6,7,8,1,2,3,4.
  C)1,2,3,4,5,6,7,8,  D)8,7,6,5,4,3,2,l,
  答案:D
  评析;本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。
  
  (29)有以下程序
  main()
  {
  im a[3][3],*p,i;
  p=&a[0][o];
  for(i=0;j<9;i++) p[i]=I;
  for(i=0;j<3;i++)printf("%d",a[1][i]);
  )
  程序运行后的输出结果是________。
  A)012  B)123  C)234  D)345
  答案:D
  评析:本题赋值后,a的数组元素的值分别为a[01[0]=0,a[0][1]=1,a[0][2]=2,a[1][0]=3,a[1][1]=4,a[1][2]=5,a[2][0]=6,a[2][1]=7,a[2][2]=8,故本题输出的值为345。
  
  (30)以下叙述中错误的是________。
  A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
  B)数组名代表的是数组所占存储区的首地址,其值不可改变
  C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出"下标越
  界"的出错信息
  D)可以通过赋初值的方式确定数组元素的个数
  答案:C
  评析:在c语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出"下标越界"的错误提示。
  
  (31)有以下程序
  #define N20
  fun(int a[],int n,int m)
  {  int i,j;
  for(i=m;i>=n;i--)a[i+1]=a[i];
  }
  main()
  {
  int i,a[N]={1,2,3,4,5,6,7,8,9,10};
  fun(a,2,9);
  for(i=O;i<5;i++) printf("%d",a[i]);
  }
  程序运行后的输出结果是________。
  A)10234  B)12344  C)12334  D)12234
  答案:C
  评析:本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用"fun(a,2,9);"可知,函数fun用于将a[2]到a[9]的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。
  
  (32)有以下程序
  main()
  {
  int a[3][2]={0},(*ptr)[2],i,j;
  for(i=0;i<2;i++) {ptr=a+i; scanf("%d",ptr); ptr++;}
  for(i=0;i<3;i++)
  { for(i=0;j<2;j++) printf("%2d",a[i][j]);
  printf("\n");
  }
  }
  若运行时输入:1 2 3<回车>,则输出结果是________。
  A)产生错误信息
  B)l 0  C)l 2  D)l 0
  2 O   3 0   2 0
  0 0   0 O   3 0
  答案:B
  评析:二维数组a,通过a[3][2]={0}将数组中的各个元素初始化为0,指针变量ptr,指向包含2个元素的一维数组。a[0][0]:l,a[1][0]=2,故本题的输出选B。
  
  (33)有以下程序
  prt(int *m, int n)
  { int i;
  for(i=O;i<n;i++) m[i]++;
  )
  main()
  {
  int a[]={ 1,2,3,4,5 },i;
  prt(a,5);
  for(i=O;i<5;i++)
  printf("%d,",a[i]);
  程序运行后的输出结果是________。
  A)l,2,3,4,5,  B)2,3,4,5,6,  C)3,4,5,6,7,  D)2,3,4,5,1,
  答案:B
  评析:用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,这样两个数组就共同占用同一段内存单元。
  
  (34)有以下程序
  main()
  { int a[]={1,2,3,4,5,6,7,8,9,0},*p;
  for(p=a;p<a+10;p++)printf("%d,",*p);
  }
  程序运行后的输出结果是________。
  A)l,2,3,4,5,6,7,8,9,0,  B)2,3,4,5,6,7,8,9,10,1,
  C)0,1,2,3,4,5,6,7,8,9,  D)l,l,1,l,l,l,l,l,l,l,
  答案:A
  评析:c语言规定数组变量名代表数组的首地址,即第0号元素的地址。本题将a数组中的值全部输出,即为l,2,3,4,5,6,7,8,9,0,。
  
  (35)有以下程序
  #define P 3
  void F(int x){return(P*x*x);}
  main()
  {printf("%d\n",F(3+5));}
  程序运行后的输出结果是________。
  A)192  B)29  C)25  D)编译出错
  答案:D
  评析:return语句用于从被调函数带回一个函数值。void关键字表示"无类型",即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。
  
  (36)有以下程序
  main()
  {int c=35;printf("%d\n",c&C);}
  程序运行后的输出结果是________。
  A)0  B)70  C)35  D)1
  答案:C
  评析:按位"与"时,1&1=1,其他都等O。因为本题中相与的两个值相等,即对应位上的二进制值相等,所以"与"的结果也即为其值本身。
  
  (37)以下叙述中正确的是________。
  A)预处理命令行必须位于源文件的开头
  B)在源文件的一行上可以有多条预处理命令
  C)宏名必须用大写字母表示
  D)宏替换不占用程序的运行时间
  答案:D
  评析:通常,预处理命令位于源文件的开头,也可以写在函数与函数之间;不能在一行上写多条预处理命令:宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。
  
  (38)若有以下说明和定义
  union dt
  {int a;har b;ouble c;}data;
  以下叙述中错误的是________。
  A)data的每个成员起始地址都相同
  B)变量data所占的内存字节数与成员c所占字节数相等
  C)程序段:data.a=5;pintf("%f\n",data.C);输出结果为5.000000
  D)data可以作为函数的实参
  答案:C
  评析:union是表示共用体的关键字,成员a,b,c共占用同一个内存空间,data的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量'data所占的内存字节数与成员c所占字节数相等;执行"data.a=5;printf("%f\n",data.C);"printf函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数,故C是错误的。
  
  (39)以下语句或语句组中,能正确进行字符串赋值的是________。
  A)char*sp;*sp="right!";  B)char s[lO];s="right! ";
  C)char s[10];*s="right! ";  D)char*sp="right! ";
  答案:D
  评析:选项A定义了字符型的指针变量sp,则*sp存储的是第一个字符,而给它赋的是字符串,故错;
  选项B表示代表数组的首地址,而题中给它赋的是字符串,所以错误;
  选项c定义了一个字符型的数组s[10],再通过+s给数组元素赋初值,这时是与选项A相同的错误。
  
  (40)设有如下说明
  typedef struct ST
  {long a; int b; char c[2];}NEW;
  则下面叙述中正确的是________。
  A)以上的说明形式非法  B)ST是一个结构体类型
  C)NEW是一个结构体类型  D)NEW是一个结构体变量
  答案:C
  评析:typedef关键字用于声明一个新的类型名代替已有的类型名。
  本题中如果没有用typedef进行定义的话,则struct ST为结构体类型,现在用typedef定义后,相当于用NEW代表了struct ST这一结构体类型,故NEW为结构体类型。
  
  (41)有以下程序
  main()
  {  int a=1,b;
  for(b=l;b<10;b++)
  { if(a>=8)break;
  if(a%2==1){a+=5;continue;}
  a-=3;
  )
  printf("%d\n",b);
  }
  程序运行后的输出结果是________。
  A) 3   B) 4   C) 5   D) 6
  答案:B
  评析:break和continue的区别是:continue语句只结束本次循环,而不是终止整个循环的执行;而break语句则是结束整个循环过程,.不再判断执行的条件是否成立。
  
  (42)有以下程序
  main()
  { char s[]="l 59",*p;
  p=s;
  printf("%c",*p++);printf("%c",*p++);
  }
  程序运行后的输出结果是________。
  A)15  B)16  C)12  D)59
  答案:A
  评析:本题通过"p=s"将指针变量p指向字符数组s,在第一次输出时,由于++和*为同一优先级,"*p++"相于"+(p++)"。p指向s[1],输出为s[1]的值。
  
  (43)有以下函数
  fun(char*a,char*b)
  { while((*a!='\0')&&(*b!='\0')&&(*a==b))
  {a++;b++; }
  return(*a-*b);
  }
  该函数的功能是________。
  A)计算a和b所指字符串的长度之差
  B)将b所指字符串连接到a所指字符串中
  C)将b所指字符串连接到a所指字符串后面
  D)比较a和b所指字符串的大小
  答案:D
  评析:字符串的比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止,相等,则返回0,否则返回第一个不等字符串的ASCII码的差值。
  
  (44)有以下程序
  main()
  { int num[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16}},i,j;
  for(i=O;i<4;i++)
  {  for(j=0;j<=i.j++)printf("%4c",' ');
  for(j______; j<4;j++)printf("%4d",num[i][j]);
  printf("\n");
  }
  }
  若要按以下形式输出数组右上半三角
  l  2  3  4
  6  7  8
  11 12
  16
  则在程序下划线处应填入的是________
  A)i-l  B)i  C)i+1  D)4-i
  答案:B
  评析:本题程序为二重循环,外循环控制输出数据的行数,内循环控制输出数据的列数。从本题输出的形式来看,程序要求输出的是4行4列。
  
  (45)有以下程序
  point(char*p){p+=3;}
  main()
  { char b[4]={'at,lb','c','d.},*p=b;
  poim(p);primf("%c\n",*p);
  }
  程序运行后的输出结果是________.
  A)a  B)b  C)c  D)d
  答案:A
  评析:在c语言中,函数的参数传递方式采用按值传递,因此不能通过调用函数的方式来改变指针本身的值,只能改变指针所指变量的值。
  
  (46)程序中若有如下说明和定义语句
  char fun(char*);
  main()
  {
  char *s="one; a[5]={O},(*f1)()=fun,ch;
  }
  以下选项中对函数fun的正确调用语句是________.
  A)(*f1)(a);  B)*f1(*s);  C)fun(&a);  D)ch=*fl(s);
  答案:A
  评析:题中将函数fun的入口地址赋给了指针变量f1,这时f1和fun都指向函数的开头,调用*fl。就是调用函数fun.
  
  (47)有以下结构体说明和变量定义,如图所示:
  struct node
  {int data;struct node *next;} *p,*q,*r;
  
  现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作
  的语句是________。
  A)P->next=q->next;  B)p->next=p->next->next;
  C)p->next=r;     D)p=q->next;
  答案:D
  评析:要想将q所指结点从链表中删除,同时保持链表的连续,必需使p结点的next指向r,在四个选项中,只有选项D不能做到。
  
  (48)以下对结构体类型变量td的定义中,错误的是________。
  A) typedef struct aa             B) struct aa
  { int n;                  { int n;
  float m;                    float m;
  }AA;                }td;
  AA td;                   struct aa td;
  C) street                 D) struct
  { int n;                  { int n;
  float m;                    float m;
  }aa;                  }td;
  struct aa td;
  答案:C
  评析:选项c中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误的:
  
  (49)以下与函数fseek(f1),0L,SEEK_SET)有相同作用的是________。
  A)feof(fp)   B)ftell(fp)   C)fgetc(fp)  D)rewind(fp)
  答案:D
  评析:fseek函数用于改变文件的位置指针。
  本题中"fseek(fp,0L,SEEK_SET)"的作用是将位置指针移到文件头。
  feof的作用是判断文件是否结束,已指到文件的末尾,则返回值为非零,否则为零。
  ftell的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。
  fgets的作用是指定文件读入二个字符串。
  
  (50)有以下程序
  #include <stdio.h>
  void WriteStr(char *fn, char *str)
  { FILE *fp;
  fp=fopen(fn,"w");fputs(str, fp);fclose(fp);
  }
  main()
  {
  WriteStr("t1.dat","start");
  WriteStr("tl.dat","end");
  }
  程序运行后,文件t1.dat中的内容是________。
  A)start   B)end   C)startend    D)endrt
  答案:B
  评析:两次使用"写入"的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所以此次写入的数据覆盖了文件原有的数据,故本题中t1.dat的内容为end。
  
  二、填空题(每空2分,共40分)
  
  请将每空的正确答案写在【1】至【20】序号的横线上,答在试卷上不得分。
  
  (1)某二叉树中度为2的结点有18个,则该二叉树中有一___【1】___ 一个叶子结点。
  答案:【1】19
  评析:二叉树的性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,故叶子结点数为18+1=19个。
  
  (2)在面向对象方法中,类的实例称为___【2】___.
  答案:【2】对象
  评析;将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。
  
  (3)诊断和改正程序中错误的工作通常称为___【3】___.
  答案:【3】程序调试
  评析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整个软件生命期,调试主要再开发阶段。
  
  (4)在关系数据库中,把数据表示成二维表,每一个二维表称为___【4】___。
  答案:【4】关系
  评析:在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系。
  
  (5)问题处理方案的正确而完整的描述称为___【5】___。
  答案:【5】算法
  评析:所谓算法是指解题方案的准确而完整的描述。
  
  (6)以下程序运行时,若从键盘输入:10 20 30<回车>,输出的结果是___【6】___.   #include<stdio.h>
  main()
  { int i=0,j=0,k=0;
  scanf("%d%*d%d",&i,&j,&k);
  printf("%d%d%d\n"I,j,k);
  }
  答案:【6】10300
  评析:在scanf格式控制符中,如果在%后有一个"*"附加说明符,表示跳过它指定的列数。本题中""%d%*d%d""表示将10赋给i,%+d表示读入整数但不赋给任何变量,然后再读入整数30赋给变量j,那么变量k并没有重新赋值,仍为初始值0。所以输出的结果为10300。
  
  (7)以下程序运行后的输出结果是___【7】___。
  #define S(x)4*x*x+l
  main()
  { inti=6,j=8;
  printf("%d\11",S(i+j));
  }
  答案:【7】81
  评析;带参数的宏定义是按#define命令行中指定的字符串从左到右进行转换。本题中替换的式子为:4*i+j*i+j+l,代入i,j的值得81。
  
  (8)以下程序运行后的输出结果是___【8】___。
  main()
  { int a=3,b=4,c=5,t=99;
  if(b<a&&a<C)t=a;a=c;c=t;
  if(a<c&&b<C)t=b;b=a;a=t;
  printf("%d%d%d\n",a,b,C);
  }
  答案:【8】4 5 99
  评析:本题需特别注意的是";"的问题,不能把"t=a;a=c;c=t;"误认为是第一个if的语句,实际上,只有"t=a;"才是第一个if的语句。
  
  (9)以下程序运行后的输出结果是___【9】___。
  main()
  { int a,b,c;
  a=10;b=20;c=(a%b<1)||(a/b>1);
  printf("%d %d %d\n",a,b,C);
  }
  答案:【9】10 20 0
  评析:本题中"(a%b<1)‖(a/b>1)"的运算顺序为先算括号→算术运算符→关系运算符→逻辑运算符。其中a%b=10,a/b=0,所以a%b<l的值为0,a/b>l值也是0,故整个表达式的结果为0,所以输出的a,b,c的值为10 20 0。
  
  (10)以下程序运行后的输出结果是___【10】___。
  main()
  {char c1,c2;
  for(c1='0',c2='9';c1<c2;c1++,c2--) printf("%c%c",c1,c2);
  printf("\n");
  }
  答案:【10】0918273645
  评析:本题程序的作用是通过for循环将0-9这10个数字从前向后,同时也从后向前依次输出。
  
  (11)已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>,
  则输出结果是_____。
  #include<stdio.h>
  main()
  {chara,b;
  a=getchar();scanf("%dt",&b);
  a=a-'a'+'O';b=b*2;
  printf("%c%c\n",a,b);
  }
  答案:【11】1 B
  评析:c语言使字符型数据和整型数据之间可以通用。题中执行"a=getchar();"后,a的值B,在内存中的表现形式为ASCII码66;执行"scanf("%d"&b);"后,b在内存中的表现形式为33,然后经过"a=a-'A'+'0';b=b*2;"运算,得出a的值为字符'1',b的值为ASCII码66,最后以字符型输出为l B。
  
  (12)以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值。请填空。
  void fun(int, int, int(*)[4],int *);
  main()
  { int a[a][4]={{12,41,36,28},{19,33,15,27},{3,27,19,1}},b[3],i;
  fun(3,4,a,b);
  for(i=O;i<3;i++) printf("%4d",b [i]);
  printf("\n");
  }
  void fun(int m,int n, int ar[][4],int *br)
  { int i,j,x;
  for(i=O;i<m;i++)
  ( x=ar[i][0];
  For(j=O;j<n;j++) if(x<ar[i][j]) x=ar[i][j];
  ___【12】___=x;
  }
  }
  答案:【12】br[I]或*(br+i)
  评析:二维数组a存放3行4列的数组元素,一维数组b用于存放每行的最大数。在函数fun中,外层for循环用于控制行数,内层for循环用于控制列数。
  
  (13)以下程序运行后的输出结果是___【13】___。
  void swap(int x, int y)
  { int t;
  t=x;x=y;y=t;printf("%d %d ",x,y);
  }
  main()
  { int a=3,b=4;
  swap(a,b); printf("%d %d",a,b);
  答案:【13】4 3 3 4
  评析:用变量作为函数的实参时,属单向传递,即"值传送"方式,此种函数参数的传递方式只能由实参传给形参,不能由形参传回来给实参。
  
  (14)以下程序运行后的输出结果是___【14】___。
  #include <string.h>
  void fun(char *s, int p, int k)
  { int i;
  for(i=p;i<k-1;i++) s[i]=s[i+2];
  }
  main()
  { char s[]="abcdefg";
  fun(s,3,strlen(s)); puts(s);
  }
  答案:【14】abcfg
  评析:函数fun的作用是将s所指的字符串中从第p十3到第k+1个字符向前移动两个位置。本题程序是将数组s中从第6个元素开始的值分别向前移动两个位置。在执行fun函数时,p的值是3,k的值是7,
  所以,具体执行"for(i=p;i<k-1;i++)s[i]=s[i+2];"语句的过程如下:
  i=3:判断i<k-1成立,执行s[3]=s[5],此时,s[3l=f;
  i=4:判断i<k-1成立,执行s[4]=s[6],此时,s[4]=g;
  i=5:判断i<k-l成立,执行s[5]=s[7],此时,s[5]='\O':
  i=6:判断i<k-1不成立,返回主函数输出s的值,即为abcfg。
  
  (15)以下程序运行后的输出结果是___【15】___。
  #include <string.h>
  main()
  { char ch[]="abc",x[3][4]; int i;
  for(i=O;i<3;i++) strcpy(x[i],ch);
  for(i=O;i<3;i++) printf("%s",&x[i][i]);
  printf("\n");
  }
  答案:【15】abcbcc
  评析:字符数组ch的值'abc'分别复制到了二维数组x的每一行,使得二维数组中每一行的值均为'abc',再通过第二个for循环打印出每一行上所要求输出的字符串。
  
  (16)以下程序运行后的输出结果是___【16】___。
  fun(int a)
  int b=0;static int c=3;
  b++;c++;
  return(a+b+C);
  }
  main()
  {int i,a=5;
  for(i=0;i<3;i++)printf("%d%d",i,fun(a));
  printf("\n");
  }
  答案:【16】010111212
  评析:静态局部变量是在编译时赋初值的,在程序运行时它已有初值。
  
  (17)以下程序运行后的输出结果是___【17】___。
  struct NODE
  { int k;
  struct NODE *link;
  };
  main()
  { struct NODE m[5],*p=m,*q=m+4;
  int i=0;
  while(p!=q) {
  p->k=++i; p++;
  q->k=i++; q--;
  }
  q->k=i;
  for(i=0;i<5;i++) printf("%d",m[i].k);
  printf("n");
  }
  答案:【17】13431
  评析:程序执行过程如下:
  p=m,q=m+4,条件p!=q成立,执行p->k=++i;,由于是"前加",所以m[O].k=1.执行p++后p=m+l;执行q->k=i++;,由于是"后加",所以m[4].k=1,然后使得i加上1,即i=2,q--后,q=m+3:
  p=m+l,q=m+3,条件p!=q成立,执行p->k=++i;,由于是"前加",所以i=3,m[0].k=3,执行p++后p=m+2;执行q->k=i++;,由于是"后加",所以m[4].k=3,i=4,q--后,q=m+2;
  p=m+2,q=m+2,条件p!=q不成立,则执行q->k=i;即m[2].k=4;故输出的值为13431。
  
  (18)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文,
  时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出,所谓回
  文即正向与反向的拼写都一样,例如:adgda。请填空。
  #include <string.h>
  char *huiwen(char *str)
  { char *pl,*p2; int i,t=0;
  pl=str;p2=___【18】___;
  for(i=0;i<=strlen(str)/2;i++)
  if(*pl ++!=*p2--) {t=l ;break;}
  if(___【19】___) retum("yes!");
  else return("no!");
  }
  main()
  { char str[50];
  printf("Input:"); scanf("%s",str);
  printf("%s\n",___【20】___ );
  }
  答案:【18】pl+(strlen(str)-1)或str+(strlen(str)-1)
  【19】t==0或!(tl=0)或t!=l或!t
  【20】huiwen(str)
  评析:本题的要求是判断从键盘输入的字符串是否是回文,但在主函数中并没有完成此功能的代码,故第20空应该填调用函数huiwen代码,即huiwen(str)。
  由于回文字符串是指正向与反向拼写都一样,所以对于一个字符串,如果正向顺序与反向顺序对应位置上的字符一样,则此字符串即为回文。在函数huiwen中,已用"pl=str"使得pl指向字符串str的第一个字符的地址,则第18空语句的功能应该是使得p2指向字符串str的最后一个字符串的地址,故填pl+(strlen(str)-1),由于p1与str指向的是同一个地址,所以,第18空也可以填str+(strlen(str)-1)。
  在进行for循环时,如果pl所指向的字符与p2指向的字符不相同,则说明,字符串str不是回文,则用t=l标记,并退出循环,执行下面的if语句,由于题中要求如果是回文,则返回"yes!",否则,返回"no!"。故当t=O的时候,说明字符串str为回文,所以第19应填t==O或!(t!=O)或t!=l或!t。

   相关阅读:   
    -----------------------------------------------
    05年9月等级考试二级C语言考前上机密卷2
     05年9月等级考试二级C语言考前上机密卷1
     05年9月等级考试二级C语言考前密卷(十)
     05年9月等级考试二级C语言考前密卷(九)
     05年9月等级考试二级C语言考前密卷(八)
     05年9月等级考试二级C语言考前密卷(七)
     05年9月等级考试二级C语言考前密卷(六)
     05年9月等级考试二级C语言考前密卷(五)
     05年9月等级考试二级C语言考前密卷(四)
     05年9月等级考试二级C语言考前密卷(三)
    ------------------------------------------------

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