视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
2014年9月二级C语言程序设计模拟(5)试题及答案
2025-09-29 18:26:05 责编:小OO
文档
2014年9月二级C语言程序设计模拟(5)试题及答案

单项选择题

1.  下列数据结构中,能用二分法进行查找的是( )。

      A:  无序线性表

      B:  线性链表

      C:  二叉链表

      D:  顺序存储的有序表

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 二分法查找只适用于顺序存储的有序表,表中的元素按值从小到大排列。

2.  下列叙述中,不属于设计准则的是( )。

      A:  提高模块性

      B:  使模块的作用域在该模块的控制域中

      C:  设计成多入口、多出口模块

      D:  设计功能可预测的模块

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 大量软件设计表明,以下的设计准则是可以借鉴为设计的指导和对软件结构图进行优化,这些准则是:提高模块性;模块规模适中;深度、宽度、扇出和扇入适当;使模块的作用域在该模块的控制域中;应减少模块的接口和界面的复杂性;设计成单入口、单出口的模块;设计功能可预测的模块。

3.  下列队列的描述中,正确的是( )。

      A:  队列属于非线性表

      B:  队列在队尾删除数据

      C:  队列按“先进后出”进行数据操作

      D:  队列按“先进先出”进行数据操作

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。队列的操作数是依据先进先出的原则进行的。因此队列亦称作先进先出的线性表,或后进后出的线性表。

4.  对下列二叉树进行前序遍历的结果为( )。

  

      A:  ABCDEFGH

      B:  ABDGEHCF

      C:  GDBEHACF

      D:  GDHEBFCA

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 遍历就是不重复地访问二叉树的所有结点。二叉树遍历的方法有3种:前序遍历、中序遍历和后序遍历。记住3种遍历的顺序:

        ①前序,访问根一按前序遍历左子树一按前序遍历右子树。

        ②中序,按中序遍历左子树一访问根一按中序遍历右子树。

        ③后序,按后序遍历左子树一按后序遍历右子树一访问根。

        所以对该二叉树的中序遍历结果为.ABDGEHCF。

5.  对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( )。

      A:  冒泡排序为n(n-1)/2

      B:  简单插入排序为n

      C:  希尔排序为n

      D:  快速排序为n/2

      参: A     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2;简单插入排序所需要的比较次数为n(n-1)/2:希尔排序所需要的比较次数为O(n1.5);堆排序所需要的比较次数为O(nlog2n)。

6.  为了使模块尽可能,要求( )。

      A:  内聚程度要尽量高,耦合程度要尽量强

      B:  内聚程度要尽量高,耦合程度要尽量弱

      C:  内聚程度要尽量低,耦合程度要尽量弱

      D:  内聚程度要尽量低,耦合程度要尽量强

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 模块性是指每个模块只完成系统要求的的子功能,并且与其他模块的联系最少且接口简单。耦合性与内聚性是模块性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的性。

7.  下列选项中不属于软件生命周期开发阶段任务的是( )。

      A:  软件测试

      B:  概要设计

      C:  软件维护

      D:  详细设计

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 软件生命周期分为软件定义、软件开发及软件运行维护三个阶段,其中开发阶段包括概要设计、详细设计、实现和测试。

8.  数据性是数据库技术的重要特点之一。所谓数据性是指( )。

      A:  数据与程序存放

      B:  不同的数据被存放在不同的文件中

      C:  不同的数据只能被对应的应用程序所使用

      D:  以上三种说法都不对

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 数据性是数据与程序间的互不依赖性,即数据库中数据于应用程序而不依赖于应用程序。所以选项A),选项B)和选项C)都不正确。

9.  在学校中,“班级”与“学生”两个实体集之间的联系属于( )关系。

      A:  一对一

      B:  一对多

      C:  多对一

      D:  多对多

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 一个班可以有多名学生,而一名学生只能属于一个班级,所以“班级”与“学生”两个实体集之间的联系属于一对多关系。

10.  软件调试的目的是( )。

      A:  发现错误

      B:  改善软件的性能

      C:  改正错误

      D:  验证软件的正确性

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 在对程序进行了成功的测试之后将进入程序调试,程序调试的任务是诊断和改正程序中的错误。

11.  C语言源程序名的后缀是( )。

      A:  .exe

      B:  .c

      C:  .obj

      D:  .cp

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。源程序经过C编译程序编译生成后缀为“.obj”的二进制文件(称为目标文件),然后由称为“连接程序”(Link)的软件把目标文件与C语言提供的各种库函数连接起来,生成后缀为“.exe”的可执行文件。

12.  若函数中有定义语句:int a;,则( )。

      A:  系统将自动给a赋初值0

      B:  这时a中的值是和随机数

      C:  系统将自动给a赋初值-1

      D:  这a中无任何值

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查变量赋值基本概念。在声明一个变量后,如果未显式的对其进行赋值,则它的值是一个随机值。

13.  以下选项中,合法的一组C语言数值常量是( )。

      A:  028 .5e-3 .0xf

      B:  12 OXa23 4.5e0

      C:  .177 4c1.5 Oabc

      D:  0x8A 10,000 3.E5

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 八进制数开头必须是数字“0”,其数字包括0~7,而在选项A)中,028是错误的。浮点数据的指数形式表示常量中,C语言规定字母e或E之前必须要有数字,且e或E之后的指数必须为整数,而选项C)中4e1.5是错误的。在选项D)中,整型数据10,000的表示形式是错误的。所以本题的答案为选项B)。

14.  下列语句组中,不正确的是( )。

      A:  char*s;s="Olympic";

      B:  char s[]="Olympic";

      C:  char*s;s={"Olympic");

      D:  char s[]={"Olympic"};

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: s是一个字符指针变量,s代表其地址,C将字符串赋给地址,因此选项C)错误。

15.  若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )。

      A:  scanf("%d",a,b,c);

      B:  scanf("%d%d%d",a,b,c);

      C:  scanf("%d",p);

      D:  scanf("%d",&p);

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 程序语句int a,b,c,*p=&c;定义了3个整型变量a,b,c和一个整型指针变量p,并且把变量c的地址赋给p。scanf函数的一般形式为“scanf("格式控制字符串”,地址列表)”,其中的地址列表应当是存放输入数据变量的地址。

16.  有以下程序,其中%u表示按无符号整数输出( )。

main()

{unsigned int x=OxFFFF:/*x的初值为十六进制数*/

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

}

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

      A:  -1

      B:  65535

      C:  32767

      D:  0xFFFF

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 因为%u表示按无符号整数输出,而x用十六进制表示为0xFFFF,所以输出无符号整数的最大值65535。

17.  设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是( )。

      A:  if(x++);

      B:  if(x 〉y&&y!=0);

      C:  if(x 〉 y)x-else y++;

      D:  if(y〈 0){;}else x++;

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 选项C)中,if(x 〉y)后面的“x--”是一个表达式而不是一个语句,所以在编译时会产生错误信息。

18.  以下选项中,当x为大于1的奇数时,值为0的表达式为( )。

      A:  x%2==1

      B:  x/2

      C:  x%2 1=0

      D:  x%2==0

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 当x为大于1的奇数时,x对2求余的结果为1,不为0,所以选项D)中表达式的值为0。

19.  若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为( )。

      A:  4

      B:  16

      C:  32

      D:  52

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查逗号表达式的运用。x=(i=4,j=16,k=32)中的i=4,j=16,k=32构成一个逗号表达式,整个表达式的值取最后一项的值,即32,所以x的值为32。

20.  在下列选项中,没有构成死循环的是( )。

      A:  int i=100; while(1) { i=i()+1; if(i 〉 100)break; }

      B:  for(;;);

      C:  int k=10000; do{k++;}while(k 〉10000);

      D:  int s=36: while(s)--s:

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 选项D)中,首先定义的变量s的值为36,因为语句--s;所以当s=0时循环会结束;选项A)由于while(1)永远成立,循环构成死循环;选项B)中for循环没有使循环结束的限定条件,也构成死循环;选项C)中由于k永远大于10000,所以循环无法停止。

21.  在printf的格式字符中,e格式字符的作用是( )。

      A:  以十六进制无符号形式输出整数

      B:  以带符号的十进制形式输出整数

      C:  以指数形式输出实数

      D:  以字符形式输出,且只输出一个字符

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查prinff函数的格式。格式字符“e”或者“E”都表示以指数形式输出单精度或双精度数。

22.  以下选项中正确的语句组是( )。

      A:  char s[];s="HELLO!";

      B:  char*s;s={"HELLO!"};

      C:  char s[10];s=:"HELLO!";

      D:  char*s;s="HELLO!";

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查数组和字符串的赋值。选项A)中数组s没有明确其大小就赋值是错误的。选项B)中不能有大括号,选项C)中的写法应该为{´H´´E´´L´´L´O´´!´}。

23.  字符串"%%\"ABCDEF\"\\"的长度是( )。

      A:  11

      B:  10

      C:  5

      D:  3

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题涉及字符串最基本的2个概念:①字符串的长度是指字符串中字符的个数,但不包括字符串结束符;②以反斜杆´\´开头的特殊字符序列,意思是把反斜杆后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,´\´连同后面的字符为一个长度;而´%´也是如此。

24.  下列说法正确的是

      A:  int(**def)[10];---def指向一个指针,该指针指向10个整型变量构成的数组

      B:  int*(*gh[10]);---gh指向一个指针,该指针指向10个整型变量构成的数组

      C:  int*(*gh[101);---gh是一个指针,指向由10个指向整型变量的指针构成的数组

      D:  A,C均正确

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: int*(*gh[10]);…gh是一个指针,指向由10个指向整型变量的指针构成的数组,int(**deft,[10];….def指向一个指针,该指针指向10个整型变量构成的数组。

25.  若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是( )。

      A:  函数的实参和其对应的形参共占同一存储单元

      B:  形参只是形式上的存在,不占用具体存储单元

      C:  同名的实参和形参占同一存储单元

      D:  函数的形参和实参分别占用不同的存储单元

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过return语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。

26.  设有如下定义:

struct sk

{ int m;

float x;

}data,*q;

若要使q指向data中的m域,正确的赋值语句是( )。

      A:  q=&data.m;

      B:  *q=data.m;

      C:  q=(struct sk*)&data.m;

      D:  q=(struct sk*)data.m:

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 利用强制类型转换(struct sk*)把整数型地址&data.m转换成结构体变量指针赋给结构体指针变量q。

27.  有以下程序:

int f1(double a)

{ return a*a;}

int f2(int x,int y)

{ double a,b;

a=n(x);

b=f1(y);

return a+b:

}

main()

{ double w;

w=f2(2.1,4.0);

}

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

      A:  20.21

      B:  20

      C:  20

      D:  0

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查函数调用的使用。计算w的时候,先调用f2函数,f2函数的公式是“a+b”,计算a和b的时候又调用到f1函数,f1的函数是“a*a”,因此,w的计算公式为:w=(double)[(int),(2.1*2.1)+(int)(4.0*4.0)]=20.0。

28.  若语句“t=fun(fun(x,y,a),(a+b,a+c),x+y+z);”对fun函数的调用正确,则fun函数的形参个数为( )。

      A:  3

      B:  4

      C:  5

      D:  6

      参: A     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查函数调用时的参数个数。在函数调用时,实参必须和形参的个数、类型一一对应。但函数的计算结果只有一个值,因而fun函数的参数个数为3。

29.  设X为整型变量,n=14,n的地址为4000;m=6,m的地址为2000;执行语句x=&n后的结果为( )。

      A:  14

      B:  6

      C:  2000

      D:  4000

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: &是取地址运算符,表达式x=&a是表示将a的地址赋给变量x。

30.  若有说明int m[31141={3,9,7,8.5},(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中0〈 =i〈 3,0〈 =i〈 4)值的正确引用为( )。

      A:  (q+i)[j]

      B:  *q[i][j]

      C:  *(*q[i]+j)

      D:  *(*(q+i)+j)

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: *(q+i)指向第i行首地址,*(*(q+i)代表第i行第j个元素。

31.  有以下程序:

void ss(char*s,char t)

{ while(*s)

{ if(*s==t)*s=t-´a´+´A´;

s++;

}

}

main()

{ char str1[100]="abcddfefdbd",c=´d´;

ss(str1,c);printf("%s\n",str1);

}

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

      A:  ABCDDEFEDBD

      B:  abcDDfefDbD

      C:  abcAAfefAbA

      D:  Abcddfefdbd

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 函数ss(char*s,char t)的功能是将指针s所指向的字符串中存在的字符“t”均改写成大写字母;所以main函数中引用函数ss后使得数组str1中的小写字母“d”均变成了大写字母“D”,然后输出数组str1,结果为:abcDDfefDbD。

32.  下述语句中,在字符串s1和s2相等时显示”they are Equal"的是( )。

      A:  if(*s1==*s2) puts("they are Equal");

      B:  if(!strcmp(s1,s2)) puts("they are Equal");

      C:  if(s1=s2) puts("they are Equal");

      D:  iffstrcmp(s1,s2)) puts("they are Equal");

      参: B     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 字符串比较不能用“==”,要用strcmp(s1,s2)函数,字符串s1和s2相等时返回值为0,故!strcmp(s1,s2)==1,条件成立执行后面的语句,输出theyare Equa1。

33.  设有说明int(*ptr)[M];其中的标识符ptr是( )。

      A:  M个指向整型变量的指针

      B:  指向M个整型变量的函数指针

      C:  一个指向具有M个整型元素的一维数组的指针

      D:  具有M个指针元素的一维指针数组,每个元素都只能指向整型变量

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 根据C语言的语法规则可知,int(*ptr)[M]中的标识符ptr是一个指向具有M个整型元素的一维数组指针。

34.  在C语言中,变量的隐含存储类别是( )。

      A:  auto

      B:  static

      C:  extem

      D:  无存储类别

      参: A     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: C语言中,变量的隐含存储类型为auto。

35.  有以下程序:

#include〈 stdio.h 〉 

struct tt

{ int x;struct tt*y;}*p;

struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a);

main()

{ int i;

p=a;

for(i=1;i〈 =2;i++){printf("%d,",p- 〉x);p=p- 〉y;)

}

程序的运行结果是( )。

      A:  20,30,

      B:  30,17,

      C:  15,30,

      D:  20,15,

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题考查的是指针和结构的应用。首先定义的数组tt中有两个成员,一个整型变量,一个结构指针。当i=1时,p指针指向结构数组的第一个元素,并输出此元素的第一个成员x,即20;当i=2时,p指针指向结构数组的第二个元素的第一个成员,所以输出15。

36.  有以下程序:

#include〈 stdio.h 〉 

main()

{ FILE*fp;int a[10]={1,2,3,0,0},i;

fp=fopen("d2.dat","wb");

fwrite(a,sizeof(int),5,fp);

fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen("d2.dat;

fread(a,sizeof(int),10,fp);

fclose(fp);

for(i=0;i〈 10;i++)printf("%d,",a[i]);

}

程序的运行结果是( )。

      A:  1,2,3,0,0,0,0,0,0,0,

      B:  1,2,3,1,2,3,0,0,0,0,

      C:  123,0,0,0,0,123,0,0,0,0,

      D:  1,2,3,0,0,1,2,3,0,0,

      参: D     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 首先用函数fopen()以“wb”的方式打开文件“d2.dat”,然后调用两次fwrite函数将数组a的5个元素,依次输出到文件fp中(共10个字节),然后关闭文件。再次打开文件,使用文件指针指向文件的开头,调用tread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的内容就变为{1,2,3,0,0,1,2,3,0,0},因此最后的输出结果为“1,2,3,0,0,1,2,3,0,0”。

37.  定义结构体数组

struct stu

{ int num;

char name[20];

}x[5]={1,"ZHAO",2,"QIAN",3,"SUN",4,"LEE",5,"ZHOU"};

for(i=l;i〈 5;i++)

printf("%d%c",x[i].aura,x[i].name[2]);

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

      A:  2A3N4E5O

      B:  1H213U4E

      C:  1A2N3E4O

      D:  1A2N3E4O

      参: A     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题主要考查结构体数组。x[i].num是结构体x[i]中的num成员,x[i].name[2]是结构体x[i]中name成员的第3个元素。第一次循环,i=l,输出x[1].num,x[1].name[2]的值,即2A;第二次循环,i=2,输出x[2].num,x[2].name[2]的值,即3N;第三次循环,i=3,输出x[3].num,x[3].name[2]的值,即4E;第四次循环,i=4,输出x[4].num,x[4].name[2]的值,即50。

38.  union dt

{

int a;char b;double c;

}data;

以下叙述中错误的是

      A:  data的每个成员起始地址都相同

      B:  变量data所占内存字节数与成员C所占字节数相等

      C:  程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000

      D:  data可以作为函数的实参

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 输出不会是5.00000的,因为单精度浮点数和双精度浮点数在内存中的存储形式不一样。

39.  设x=021,y=012,则z=x|y的值是( )。

      A:  1

      B:  0

      C:  11011

      D:  1.1e+007

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 本题主要考查按位或运算。按位或是对两个运算对象相应的位进行逻辑或运算,其运算规则和逻辑或相同,两个运算对象只要有一个是1,则结果为1。

40.  fgets(str,n,fp))函数从文件中读入一个字符串,以下错误的叙述是( )。

      A:  字符串读入后会自动加入´\0´

      B:  fp是指向该文件的文件型指针

      C:  fgets函数将从文件中最多读入n个字符

      D:  fgets函数将从文件中最多读入n-1个字符

      参: C     题目分值: 1.0 分   您的答案:     得分: 0.0 

      详细解答: 字符串输入函数fgets()的调用形式为:fgets(s,n,f1))。s可以是一个字符数组名,或是指向字符串的指针;n为要读取的最多的字符个数:fp是指向该文件的文件型指针。字符串输入函数的功能是:从fp所指向的文件中读取长度不超过n-1个字符的字符串,并将该字符串存放到字符数组s中。

程序填空题

41.  给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include〈 stdio.h 〉 

#include〈 string.h 〉 

#include〈 stdlib.h 〉 

void WriteText(FILE木);

void ReadText(FILE*);

main()

{FILE*fp;

if((fp=fopen("myfile4.txt","w"))==NULL)

{ printf("open fail!!\n"):exit(0);}

WriteText(fp);

fclose(fp);

if((fp=fopen("myfile4.txt","r"))==NULL)

{ printf("open fail!!\n");exit(0);}

ReadText(fp);

fclose(fp);

}

/**********found*********/

void WriteText(FILE__1__)

{ char str[81];

printf("\nEnter string with-1 to end:\n");

gets(str);

while(strcmp(str,"-1")!=0){

/**********found**********/

fputs(___2___,fW);fputs("\n",fw);

gets(str);

}

}

void ReadText(FILE*fr)

{ char str[81];

printf("\nRead file and output to screen:\n");

fgets(str,81,fr);

while(!feof(fr)){

/**********found**********/

printf("%s",__3__);

fgets(str,81,fr);

}

}

      

      参: (1)*fw

(2)str

(3)str      题目分值: 1.0 分

      您的答案: 

      详细解答: 第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,fputs("\n",fw)是将字符“\n”写入文件,可知fw是文件指针名,因此第一空处应该是void WdteText(FILE*fw)。

        第二空:while(strcmp(str,"-1")!=0)循环的结束标志是str字符串等于“-1”时循环退出,如果str不等于“-1”,执行循环体内容:用fputs函数将s仃字符串写入文件。fputs函数的调用形式是:fputs(s,fp),其中s是指向字符串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此第二处应该是fbuts(str,fw)。

        第三空:while(!feof(fr)循环的作用是不断读取文件直到到达文件尾,每次最多读81个,将读到的数据放在str字符串里,并用printf输出到屏幕,因此第三处应该是printf("%s",str)。

程序修改题

42.  给定程序MODI1.C中函数fun的功能是:判断一个整数是否是素数,若是返回1,否则返回0。

在main()i~数中,若fun返回l输出YES,若fun返回0输出NO!。

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

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

#include〈 stdio.h 〉

int fun(int m)

{ int k=2;

while(k〈 =m&&(m%k))

/**********found**********/

k++

/**********found**********/

if(m=k)

return 1:

else return 0:

}

main()

{ int n;

printf("haPlease enter n:");scanf("%d",&n);

if(fun(n))printf("YES\n");

else printf("NO!\n");

}

      

      参: (1)k++;

(2)if    (m==k)      题目分值: 1.0 分

      您的答案: 

      详细解答: (1)第一个标识下“k++”语句没有结束符分号,所以将“k++”改为“k++;”。

        (2)第二个标识下的“if(m=k)”语句应该是判断m是否素数,而原题中是将k的值赋给m,并不表示是否m等于k,所以第二个标识下“if(m=k)”应该改为“if(m==k)”。

程序设计题

43.  假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

注意:部分源程序在文件PROG1.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include〈 stdio.h 〉 

void fun(char*a)

{

________

}

main()

{ char s[81];void NONO ();

printf("Enter a string:ha");gets(s);

fun(s);

printf("The string after deleted:\n");puts(s);

NONO();

}

void NONO()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

FILE*in,*out;

int i;char s[81];

in=fopen("in.dat","r¨);

out=fopen("out.dat","w");

for(i=0;i〈 10;i++){

fscanf(in,"%s",s);

fun(s);

fprintf(out,"%s\n",s);

}

fclose(in);

fclose(out);

}

      

      参: inti=0:

        char*p,*q;

        p=q=a;

        while(*p)

            p++;

        p--;

        while(*p==´*´)

            p--;

        while(q〈 =p)

            {

             a[i]=*q;

             i++:

             q++;

            }

        a[i]=´\0´;      题目分值: 1.0 分

      您的答案: 

      详细解答: (1)首先,使用一个指针p指向串尾,然后对指向串尾的指针p指向的字符进行判断,如果是“*”,指针p就跳过,这样来设置一个指针变量q指向字符串的头位置。

        (2)然后,将由字符串起始到最后一个字母之间的字符拷贝到字符串a。

        (3)最后,在新生成的字符串尾加´\0´。下载本文

显示全文
专题