1、二级 C语言笔试-154 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.fwrite函数的一般调用形式是( )。(分数:1.00)A.fwrite(buffer,count,size,fp);B.fwrite(fp,size,count,buffer);C.fwrite(fp,count,size,buffer);D.fwrite(buffer,size,count,fp);2.有如下说明:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则数值为 9的表达式是( )。(分数:1.00)A.*p+9B.*(p+8)C.*
2、p+=9D.p+83.在结构化方法中,用数据流图(DFD)作为描述工具的软件开发阶段是( )。(分数:1.00)A.可行性分析B.需求分析C.详细设计D.程序编码4.对以下说明语句的正确理解是( )。int a10=6,7,8,9,10;(分数:1.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4C.将 5个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确5.下列程序的运行结果是( )。#include stdio.hvoid fun(int *a, int *b)int *k;k=a; a=b; b=k;main()int a
3、=3,b=6, *x=fun(x,y);printf(“%d%d“,a,b);(分数:1.00)A.6 3B.3 6C.编译出错D.0 06.若有条件表达式(exp)? a+:b-,则以下表达式中能完全等价于表达式(exp)的是 ( )。(分数:1.00)A.(exp= =0)B.(exp! =0)C.(exp= =1)D.(exp! =1)7.假定 int类型变量占用两个字节,若有定义:int x10=0,2,4;则数组 x在内存中所占字节数是( )。(分数:1.00)A.3B.6C.10D.208.以下程序执行后 x的值是( )。#include stdio.hmain()int x,y=
4、252,i=386,*m=x=(z= =m);printf(“%d“,x);(分数:1.00)A.252B.1C.0D.运行时出错,x 无定值9.下面叙述正确的是( )。(分数:1.00)A.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.以上三种描述都不对10.若有下面的说明和定义,则 sizeof(struct a(分数:1.00)A.的值是(11.阅读下列程序,当运行程序时,输入 asd af aa z67,则输出为( )。#include sldio.hint fun (char *str
5、)int i,j=0;for(i=0;stri! =/0;i+)if(stri! =“) strj+=stri;strj=/0;main()char str81;int n;printf(“Input a string:“);gets(str);fun(str);printf(“%s/n“,str);(分数:1.00)A.asdafaaz67B.asd af aa z67C.asdD.z6712.以下选项中,与 k=n+完全等价的表达式是( )。(分数:1.00)A.k=n,n=n+1B.n=n+1,k=nC.k= +nD.k+=n+113.有以下函数:fun(char *p)return p
6、;该函数的返回值是( )。(分数:1.00)A.无确切值B.形参 p中存放的地址值C.一个临时存储单元的地址D.形参 p自身的地址值14.若有如下语句:int x=3;do printf(“%d/n“,x-=2);wbile(! ( -x);则上面程序段( )。(分数:1.00)_15.有如下定义:struct person char name9;int age;struct person class10=“John“,17,“paul“,19,“Mary“,18,“Adam“,16;根据上述定义,能输出字母 M的语句是( )。(分数:1.00)A.printf(“%c/n“,class3.n
7、ame);B.printf(“%c/n“,class3.name1);C.printf(“%c/n“,class2.name1);D.printf(“%c/n“,class2.name0);16.设变量 n为 float类型,m 为 int类型,则以下能实现将 n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。(分数:1.00)A.n=(n*100+0.5)/100.0B.m=n*100+0.5,n=m/100.0C.n=n*100+0.5/100.0D.n=(n/100+0.5)*100.017.设 x,y 和 z都是 int型变量,且 x=3,y=4,z=5,则下面表达式
8、中,值为 0的表达式是 ( )。(分数:1.00)A.x0;表达式 3)B.for(表达式 1;1;表达式 3)C.for(表达式 1;表达式 1;表达式 3)D.for(表达式 1;表达式 3;表达式 3)19.有以下程序:#include stdio.hvoid fun(int a,int b,int c)a=456,b=567,c=678;main()int x=10,y=20,z=30;fun(x,y,z);printf(“%d,%d,%d/n“,x,y,z);此程序的输出结果是( )。(分数:1.00)A.30,20,10B.10,20,30C.456,567,678D.678,56
9、7,45620.有以下程序:#include stdio.h#include string.hmain()char a=a,b,c,d,e,f,g,h,/0; int i,j;i=sizeof((分数:1.00)A.; j=strlen(a);char ch8;PER;则下面叙述中正确的是( )。(分数:1.00)A.PER是结构体变量名B.PER是结构体类型名C.typedef struct是结构体类型D.struct是结构体类型名26.若有定义:char *st=“how are you“;下列程序段中正确的是( )。(分数:1.00)A.char a11, *p; strcpy(p=a+
10、1,B.char a11; strcpy(+a, st);C.char a11; strcpy(a, st);D.char a, *p; strcpy(p=27.以下数据结构中不属于线性数据结构的是( )。(分数:1.00)A.队列B.线性表C.二叉树D.栈28.在软件开发中,下面的任务不属于设计阶段的是( )。(分数:1.00)A.数据结构设计B.给出系统模块结构C.定义模块算法D.定义需求并建立系统模块29.以下程序的运行结果是( )。#include stdio.h#define MIN(x,y) (x)(y)? (x):(y)main()int i=10,j=15,k;k=10*MIN
11、(i,j);printf(“%d/n“,k);(分数:1.00)A.10B.15C.100D.15030.若变量已正确说明为 int类型,要通过语句 scanf(“%d %d %d“,给 a赋值 3,b 赋值 5,c赋值 8,下面不正确的输入形式是( )。(分数:1.00)A.3回车5回车8回车B.3,5,8回车C.3回车58回车D.35回车8回车31.下面的描述中,符合结构化程序设计风格的是( )。(分数:1.00)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B.模块只有一个入口,可以有多个出口C.注重提高程序的执行效率D.不使用 goto语句32.有如下程序段:int
12、 *p,a=10,b=1;p= a= *p+b;执行该程序段后,a 的值为( )。(分数:1.00)A.12B.11C.10D.编译出错33.以下程序调用 scanf函数给变量 a输入数值的方法是错误的,其错误原因是( )。#include stdio.hmain()int *p,*q,a,b;p=printf(“input a:“);scanf(“%d“,*p);(分数:1.00)A.*p表示的是指针变量 p的地址B.*p表示的是变量 a的值,而不是变量 a的地址C.*p表示的是指针变量 p的值D.*p只能用来说明 p是一个指针变量34.以下程序的输出结果是( )。#include stdi
13、o.hmain()int a=21,b=11;printf(“%d/n“,-a+b,-b+(分数:1.00)A.;35.若有说明:int a4=0,0;则下面不正确的叙述是( )。(分数:1.00)A.数组 a的每个元素都可得到初值 0B.二维数组 a的第一维大小为 1C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D.只有元素 a00和 a01可得到初值,其余元素均得不到确定的初值36.请选出下面正确的程序段( )。(分数:1.00)A.int *s;scanf(“%d“,s);B.int *s,k;*s=100;C.int *s,k;char *p, c;s= p
14、=*p=a;D.int *s,k;char *p, c;s= p=s=p; *s=1;37.下列用于 printf函数的控制字符常量中,代表“竖向跳格”的转义字符常量是( )。(分数:1.00)A./bB./tC./vD./f38.判断 char型变量 cl是否为大写字母的正确表达式是( )。(分数:1.00)A.=cl=ZB.(cl=);main()struct abc s2=1,2,3,4,5,6;int t;t=s0.a+s1.b;printf(“%d/n“,t);(分数:1.00)A.5B.6C.7D.841.下列是合法的用户自定义标识符的是( )。(分数:2.00)A._w1B.3_
15、xyC.intD.LINE-342.下列叙述中正确的是( )。(分数:2.00)A.数据库是一个独立的系统,不需要操作系统的支持B.数据库设计是指设计数据库管理系统C.数据库技术的根本目标是要解决数据共享的问题D.数据库系统中,数据的物理结构必须与逻辑结构一致43.有如下程序:#include stdio.hint func(int a,int b)return(a+b):main()int x=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%d/n“,r);该程序的输出结果是( )。(分数:2.00)A.12B.13C.14D.1544.以下程序的输出结果是
16、( )。#include stdio.hmain()int a,i;a=0;for(i=1;i5;i+)switch(i)case 0:case 3:a+=2;case 1:case 2:a+=3;default:a+=5;printf(“%d/n“,(分数:2.00)_45.以下对 C语言函数的有关描述中,正确的是( )。(分数:2.00)A.在 C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参B.C函数既可以嵌套定义又可以递归调用C.函数必须有返回值,否则不能使用函数D.函数必须有返回值,返回值类型不定46.已知学生记录描述为:struct studentint no;c
17、har name20,sex;structint year,month,day;birth;struct student s;设变量 s中的“生日”是“1984 年 11月 12日”,对“birth”正确赋值的程序段是( )。(分数:2.00)A.year=1984;month=11;day=12;B.year=1984;s.month=11;s.day=12;C.birth.year=1984;birth.month=11;birth.day=12;D.birth.year=1984;s.birth.month=11;s.birth.day=12;47.表达式 ab|(cscanf(“%d%
18、d“,while(_)if(ab) t=a;a=b;b=t;printf(“%d,%d/n“,a,b);scanf(“%d%d“,(分数:2.00)A.! a=bB.a! =bC.a= =bD.a=b50.没有程序段:int k=10;while(k=0) k=k-1;则下面描述中正确的是( )。(分数:2.00)A.while循环执行 10次B.循环是无限循环C.循环体语句一次也不执行D.循环体语句执行一次二、填空题(总题数:18,分数:40.00)51.长度为 n的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为 【1】 。(分数:2.00)填
19、空项 1:_52.用树型结构表示实体类型及实体间联系的数据模型称为 【2】 。(分数:2.00)填空项 1:_53.类是一个支持集成的抽象数据类型,而对象是类的 【3】 。(分数:2.00)填空项 1:_54.数据流图的类型有 【4】 和事务型。(分数:2.00)填空项 1:_55.当数据的物理结构(存储结构、存取方式等)改变时,不影响数据库的逻辑结构,从而不致引起应用程序的变化,这是指数据的 【5】 。(分数:2.00)填空项 1:_56.使用结构体处理数据的场合是 【6】 。(分数:2.00)填空项 1:_57.有定义 char a,b;若想通过case 1: case2: return
20、1;return (fib(g-1)+fib(g-2);main()long k;k=fib(5);printf(“k=%d/n“,k);(分数:2.00)填空项 1:_59.strcmp函数的功能是 【9】 。(分数:2.00)填空项 1:_60.以下程序段中,错误的行号是 【10】 。 #include stdio.h main() char str14;str=“I love China!“; printf(“%s“,str);(分数:2.00)_61.将以下程序段写成三目运算表达式: 【11】 。if(ab) max=a;else max=b;(分数:2.00)填空项 1:_62.设
21、x和 y均为 int型变量,且 x=1,y=2,则表达式 double(1+x/y)的值为 【12】 。(分数:2.00)填空项 1:_63.下面程序的功能是输出数组 s中最大元素的下标,请填空。#include stdio.hmain()int k, p,s=1, -9,7,2, -10,3;for(p =0,k =p; p6; p+)if(spsk) 【13】 printf(“%d/n“, k);(分数:2.00)填空项 1:_64.设有以下定义和语句,则*(*(p+2)+1)的值为 【14】 。int a32=10,20,30,40,50,60,(*p)2;p=a;(分数:2.00)填空
22、项 1:_65.下面函数要求计算两个整数 x,y 之和,并通过形参返回该值,请填空。add(int x, int y, 【15】 z)【16】 =x+y;(分数:4.00)填空项 1:_66.下面程序的运行结果是 【17】 。#include stdio.h#define N 10#define s(x) x*x#define f(x) (x*x)main()int i1,i2;i1=1000/s(N); i2=1000/f(N);printf(“%d %d/n“,i1,i2);(分数:2.00)填空项 1:_67.以下程序的输出结果是 【18】 。#include stdio.hunsign
23、ed fun6(unslgned num)unsigned k=1;dok * =mum%10;num/=10;while (num);return k;main()unsigned n=26;printf(“%d/n“,fan6(n);(分数:2.00)填空项 1:_68.以下程序的功能是:删去一维数组中所有相同的数,使相同的数只剩一个。数组中的数已按由小到大的顺序排列,函数 fun返回删除后数组中数据的个数。例如,若一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。请填空。#
24、include stdio.h#define N 80int fun(int a, int n)int i,j=1;for(i=1;in;i+)if(aj-1 【19】 ai) aj+=ai;【20】 ;main()int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,i,n=19;printf(“The original data :/n“);for(i=0;in;i+) printf(“%3d“,ai);n=fun(a,n);printf(“/nThe data after deleted :/n“);for(i=0; in; i+) printf
25、(“%3d“,ai); printf(“/n/n“);(分数:4.00)填空项 1:_二级 C语言笔试-154 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.fwrite函数的一般调用形式是( )。(分数:1.00)A.fwrite(buffer,count,size,fp);B.fwrite(fp,size,count,buffer);C.fwrite(fp,count,size,buffer);D.fwrite(buffer,size,count,fp); 解析:解析 fwrite 的形式是 fwrite(buffer,size,cou
26、nt,fp),buffer 是准备输出的数据块的起始地址,size 是每个数据块的字节数,count 用来指定每写一次或输出的数据块,fp 为文件指针。2.有如下说明:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则数值为 9的表达式是( )。(分数:1.00)A.*p+9B.*(p+8) C.*p+=9D.p+8解析:解析 数组元素 a0可以用表达式。(p+0),即*p 来引用;数组元素 a1可以用表达式*(p+1)来引用,在这里,p+1 的值就是数组元素 a1的地址,*(p+1)就代表存储单元 a1,这里的一对圆括号不可少。同样,数组元素 a9可以用表达式。(p+9)
27、引用。因此,当指针变量 p指向 a数组的起始地址时,若 0i10,则数组元素 ai可以用*(p+i)来表示。3.在结构化方法中,用数据流图(DFD)作为描述工具的软件开发阶段是( )。(分数:1.00)A.可行性分析B.需求分析 C.详细设计D.程序编码解析:解析 软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段,其中需求分析阶段常用的工具是数据流图和数据字典。4.对以下说明语句的正确理解是( )。int a10=6,7,8,9,10;(分数:1.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4 C.将 5个初值依次赋给 a6至 a10D.因为
28、数组长度与初值的个数不相同,所以此语句不正确解析:解析 本题中,表达式将 5个初值分别赋给 a0至 a4,系统自动给后面的元素 a5至 a9赋0。5.下列程序的运行结果是( )。#include stdio.hvoid fun(int *a, int *b)int *k;k=a; a=b; b=k;main()int a=3,b=6, *x=fun(x,y);printf(“%d%d“,a,b);(分数:1.00)A.6 3B.3 6 C.编译出错D.0 0解析:解析 程序看上去是要实现交换两个指针的值,但是 C语言中实参变量和形参变量之间的数据传递是单向的“值传递”,指针变量做函数参数也要遵
29、循这一规则。调用函数不能企图通过改变形参指针的值而使实参指针的值也改变。所以本题的输出结果是 36。6.若有条件表达式(exp)? a+:b-,则以下表达式中能完全等价于表达式(exp)的是 ( )。(分数:1.00)A.(exp= =0)B.(exp! =0) C.(exp= =1)D.(exp! =1)解析:解析 条件表达式的一般形式为:表达式 1?表达式 2:表达式 3其求解顺序是:先求解表达式 1,若为非 0(真),则求解表达式 2,此时表达式 2的值就作为整个条件表达式的值;若表达式 1的值为 0(假),则求解表达式 3,表达式 3的值就是整个条件表达式的值。7.假定 int类型变量
30、占用两个字节,若有定义:int x10=0,2,4;则数组 x在内存中所占字节数是( )。(分数:1.00)A.3B.6C.10D.20 解析:解析 x 数组共有 10个元素,在花括号内只提供 3个初值,这表示只给前面的 3个元素赋值,后7个元素的值为 0,所以,一共有 20个字节。8.以下程序执行后 x的值是( )。#include stdio.hmain()int x,y=252,i=386,*m=x=(z= =m);printf(“%d“,x);(分数:1.00)A.252B.1C.0 D.运行时出错,x 无定值解析:解析 指针变量 m和 z分别指向整型变量 y,i,所以这两个指针变量中
31、存储的地址是不同的,变量 x接受的是一个关系运算结果 0(因为 m和 z两个地址是不同的),所以 x为 0。9.下面叙述正确的是( )。(分数:1.00)A.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 D.以上三种描述都不对解析:解析 算法的执行效率与数据的存储结构有关;算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度;算法的有穷性是指一个算法必须在执行有限步骤以后结束。10.若有下面的说明和定义,则 sizeof(struct a(分数:1.00)A.的值是(解析:解析 struct
32、aa 的字节数等于结构体中除共用体的成员所占存储单元之和+共用体的长度,所以计算结果为 2+8+4+8=22。11.阅读下列程序,当运行程序时,输入 asd af aa z67,则输出为( )。#include sldio.hint fun (char *str)int i,j=0;for(i=0;stri! =/0;i+)if(stri! =“) strj+=stri;strj=/0;main()char str81;int n;printf(“Input a string:“);gets(str);fun(str);printf(“%s/n“,str);(分数:1.00)A.asdafaa
33、z67 B.asd af aa z67C.asdD.z67解析:解析 本题题意是删除字符串中所有空格。由于 C语言中没有直接删除字符的操作,所以删除字符的操作都是采用“留下”字符的算法来实现。从串头 str0到串尾逐一比较,判断其是否为空格,若不是空格,则将其保存在 strj中,最后加串结束符“/0”。12.以下选项中,与 k=n+完全等价的表达式是( )。(分数:1.00)A.k=n,n=n+1 B.n=n+1,k=nC.k= +nD.k+=n+1解析:解析 k=n+的意思是先将 n的值赋给 k,然后 n的值再加 1,选项 A)符合题意;选项 B)和 C)是先使 n的值加 1,然后再赋值给
34、k;选项 D)等价于 k=k+(n+1)。13.有以下函数:fun(char *p)return p;该函数的返回值是( )。(分数:1.00)A.无确切值B.形参 p中存放的地址值 C.一个临时存储单元的地址D.形参 p自身的地址值解析:解析 return 中返回的是指针 p的值,也就是形参 p中存放的地址值。14.若有如下语句:int x=3;do printf(“%d/n“,x-=2);wbile(! ( -x);则上面程序段( )。(分数:1.00)_解析:解析 do - while 语句的一般格式为:do 循环体语句15.有如下定义:struct person char name9;
35、int age;struct person class10=“John“,17,“paul“,19,“Mary“,18,“Adam“,16;根据上述定义,能输出字母 M的语句是( )。(分数:1.00)A.printf(“%c/n“,class3.name);B.printf(“%c/n“,class3.name1);C.printf(“%c/n“,class2.name1);D.printf(“%c/n“,class2.name0); 解析:解析 本题的关键是弄清楚给结构体数组赋初值的问题。初始值将按数组的各个元素在内存中的存放次序逐个地赋给各元素。结构体数组的各个元素在内存中的存放次序是:
36、 class0.name,class0.age,class1.name,class1.age,,由此可知,包含字符“M”的字符串“Mary”赋值给了元素class2.name,则与字符“M”相对应的表达式是 class2.name0。16.设变量 n为 float类型,m 为 int类型,则以下能实现将 n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。(分数:1.00)A.n=(n*100+0.5)/100.0B.m=n*100+0.5,n=m/100.0 C.n=n*100+0.5/100.0D.n=(n/100+0.5)*100.0解析:解析 选项 A),C),D)中的
37、 n没有按题目要求进行任何转换,得到的结果达不到题目的要求;选项 B)中,先求出 n*100+0.5的值,n 的第三位小数四舍五入,后面的小数忽略变成整数 m,将 m/100.0的值赋给 n时,先转换其类型,然后再赋值给 n,即达到题目要求。17.设 x,y 和 z都是 int型变量,且 x=3,y=4,z=5,则下面表达式中,值为 0的表达式是 ( )。(分数:1.00)A.x0;表达式 3)B.for(表达式 1;1;表达式 3) C.for(表达式 1;表达式 1;表达式 3)D.for(表达式 1;表达式 3;表达式 3)解析:解析 本题中,省略了 for语句的第二个表达式,表示第二个
38、表达式始终为真,即为 1。19.有以下程序:#include stdio.hvoid fun(int a,int b,int c)a=456,b=567,c=678;main()int x=10,y=20,z=30;fun(x,y,z);printf(“%d,%d,%d/n“,x,y,z);此程序的输出结果是( )。(分数:1.00)A.30,20,10B.10,20,30 C.456,567,678D.678,567,456解析:解析 本题考查函数中变量的作用范围,在主函数中给变量 x,y,z 赋值,然后将其作为实参传递给函数 fun,在函数 fun中虽然改变了这三个变量的值,但两个函数中的
39、 x,y,z 只是同名的局部变量,互不影响,所以调用函数 fun后,主函数中 x,y,z 的值并未改变,即变量作形参时,其值的改变不能影响实参的值。20.有以下程序:#include stdio.h#include string.hmain()char a=a,b,c,d,e,f,g,h,/0; int i,j;i=sizeof((分数:1.00)A.; j=strlen(a);char ch8;PER;则下面叙述中正确的是( )。(分数:1.00)A.PER是结构体变量名B.PER是结构体类型名 C.typedef struct是结构体类型D.struct是结构体类型名解析:解析 本题用 t
40、ypedef声明新的类型名 PER来代替已有的类型名,PER 代表上面指定的一个结构体类型,此时,也可以用 PER来定义变量。26.若有定义:char *st=“how are you“;下列程序段中正确的是( )。(分数:1.00)A.char a11, *p; strcpy(p=a+1, B.char a11; strcpy(+a, st);C.char a11; strcpy(a, st);D.char a, *p; strcpy(p=解析:解析 C 语言不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组,例如,已定义字符数组 str1和 str2,那么 str1=“China“
41、和 str1=str2都是错误的。通常使用 strcpy函数进行字符串的赋值,例如:strcpy(str1,“China“)或 strcpy(str1,str2)。需要注意的是,字符数组 str1的长度不应小于字符串“China”或字符数组 str2的长度,函数 strcpy的第一个参数必须用数组名的形式,如 str1,第二个参数可以是字符数组名,也可以是字符串常量。27.以下数据结构中不属于线性数据结构的是( )。(分数:1.00)A.队列B.线性表C.二叉树 D.栈解析:解析 线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表,它只能在固定的一端进行插入
42、和删除操作,又称后进先出表;队列是插入在一端进行,删除在另一端进行的线性表,又称先进先出表。28.在软件开发中,下面的任务不属于设计阶段的是( )。(分数:1.00)A.数据结构设计B.给出系统模块结构C.定义模块算法D.定义需求并建立系统模块 解析:解析 软件设计一般分为总体设计和详细设计两个阶段。总体设计的任务是确定软件的总体结构、子系统和模块的划分,确定模块间的接口和评价模块划分质量,并进行数据分析;详细设计的任务是确定每一模块实现的定义,包括数据结构、算法和接口。29.以下程序的运行结果是( )。#include stdio.h#define MIN(x,y) (x)(y)? (x):
43、(y)main()int i=10,j=15,k;k=10*MIN(i,j);printf(“%d/n“,k);(分数:1.00)A.10B.15 C.100D.150解析:解析 该题考查函数的宏定义及三目运算符。表达式 10*MIN(i,j)利用宏展开后为: 10*ij? i:j,即 10015? 10:15,其值为 15,然后将 15赋给 k。30.若变量已正确说明为 int类型,要通过语句 scanf(“%d %d %d“,给 a赋值 3,b 赋值 5,c赋值 8,下面不正确的输入形式是( )。(分数:1.00)A.3回车5回车8回车B.3,5,8回车 C.3回车58回车D.35回车8回
44、车解析:解析 本题中,“%d%d%d”表示按整数输入数据,输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键或 Tab键。选项 B)中不应该使用逗号。31.下面的描述中,符合结构化程序设计风格的是( )。(分数:1.00)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B.模块只有一个入口,可以有多个出口C.注重提高程序的执行效率D.不使用 goto语句解析:解析 结构化程序设计方法的四条原则是:自顶向下;逐步求精;模块化;限制使用 goto语句。“自顶向下”是指在程序设计时,先考虑总体,后考虑细节,先考虑全局目标,后考虑局部目标;“逐步求精”是指对复杂问题应设
45、计一些子目标作过渡,逐步细节化;“模块化”是指一个复杂问题由若干稍简单的问题构成,解决这个复杂问题的程序也应由若干稍简单问题的小程序组成。32.有如下程序段:int *p,a=10,b=1;p= a= *p+b;执行该程序段后,a 的值为( )。(分数:1.00)A.12B.11 C.10D.编译出错解析:解析 p=a=*p+b表达式的含义是指针变量 p所指内存的值 10与 b的和赋给 a。33.以下程序调用 scanf函数给变量 a输入数值的方法是错误的,其错误原因是( )。#include stdio.hmain()int *p,*q,a,b;p=printf(“input a:“);sc
46、anf(“%d“,*p);(分数:1.00)A.*p表示的是指针变量 p的地址B.*p表示的是变量 a的值,而不是变量 a的地址 C.*p表示的是指针变量 p的值D.*p只能用来说明 p是一个指针变量解析:解析 本题经过定义语句和赋值后,p 表示的是变量 a的地址,*p 表示的是变量 a的值。34.以下程序的输出结果是( )。#include stdio.hmain()int a=21,b=11;printf(“%d/n“,-a+b,-b+(分数:1.00)A.;解析:解析 该题考查的是 C语言中自减运算符和逗号表达式的应用。自减运算符作为前缀时,先使变量的值减 1,再进行赋值运算。逗号表达式的形式为:表达式 1,表达式 2,其求解过程是:先求解表达式 1,再求解表达式 2,整个逗号表达式的值是表达式 2的值。35.若有说明:int a4