二级C语言-76
(总分100,做题时间90分钟)
一、选择题
下列各题A、B、C、D四个选项中,只有一个选项是正确的。
1.
下列叙述中正确的是______。
SSS_SINGLE_SEL
A栈是“先进先出”的线性表
B队列是“先进后出”的线性表
C循环队列是非线性结构的线性表
D有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
分值:1
答案:D
[解析]栈是先进后出的线性表,因此A错误;队列是先进先出的线性表,因此
B错误;循环队列是线性结构的线性表,因此C错误,故本题答案为D。
2.
支持子程序调用的数据结构是______。
SSS_SINGLE_SEL
A栈
B树
C队列
D二叉树
分值:1
答案:A
[解析]栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在
主程序调用子程序时要首先保存主程序当前的状态,然后转去执行子程序,最
终把子程序的执行结果返回到主程序中调用子程序的位置,然后继续向下执
行,这种调用方式符合栈的特点,因此本题的答案为A。
3.
某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是______。
SSS_SINGLE_SEL
A10
B8
C6
D4
分值:1
答案:C
[解析]根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总
是比度为2的结点多一个,因此本题答案是5+1=6,故选择C。
4.
下列排序方法中,最坏情况下比较次数最少的是______。
SSS_SINGLE_SEL
A冒泡排序
B简单选择排序
C直接插入排序
D堆排序
分值:1
答案:D
[解析]冒泡排序、直接插入排序与简单选择排序法在最坏情况下均需要比较
n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog
2
n,因此本题答
案为D。
5.
软件按功能可以分为应用软件、系统软件和支撑软件(工具软件),下面属于应
用软件的是______。
SSS_SINGLE_SEL
A编译程序
B操作系统
C教务管理系统
D汇编程序
分值:1
答案:C
[解析]编译程序、操作系统、汇编程序都属于系统软件,只有教务管理系统才
是应用软件,因此本题答案为C。
6.
下面叙述中错误的是______。
SSS_SINGLE_SEL
A软件测试的目的是发现错误并改正错误
B对被调试的程序进行“错误定位”是程序调试的必要步骤
C程序调试通常也称为Debug
D软件测试应严格执行测试计划,排除测试的随意性
分值:1
答案:A
[解析]软件测试的目的是为了发现错误而执行程序的过程,并不涉及改正错
误,因此选项A错误。程序调试的基本步骤有:错误定位、修改设计和代码以
排除错误、进行回归测试以防止引进新的错误。程序调试通常称为Debug,即
排错。软件测试的基本准则包括:所有测试都应追溯到需求、严格执行测试计
划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己
的程序、不可能实现穷举测试、妥善保存测试计划等文件。
7.
耦合性和内聚性是对模块独立性度量的两个标准,下列叙述中正确的是
______。
SSS_SINGLE_SEL
A提高耦合性降低内聚性有利于提高模块的独立性
B降低耦合性提高内聚性有利于提高模块的独立性
C耦合性是指一个模块内部各个元素间彼此结合的紧密程度
D内聚性是指模块间互相连接的紧密程度
分值:1
答案:B
[解析]模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他
模块的联系最少且接口简单。一般较优秀的软件设计应尽量做到高内聚、低耦
合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立
性,因此A错误,B正确。耦合性是模块间互相连接的紧密程度的度量,内聚
性是指一个模块内部各个元素间彼此结合的紧密程度,因此C与D错误。
8.
下列叙述中错误的是______。
SSS_SINGLE_SEL
A在数据库系统中,数据的物理结构必须与逻辑结构一致
B数据库技术的根本目标是要解决数据的共享问题
C数据库设计是指在已有数据库管理系统的基础上建立数据库
D数据库系统需要操作系统的支持
分值:1
答案:A
[解析]数据库应用系统中的核心问题是设计一个能满足用户需求、性能良好的
数据库,这就是数据库设计,因此本题答案为A。
9.
有两个关系R,S如下:
R
ABC
a32
b01
c21
S
AB
a3
b0
c2
由关系R通过运算得到关系S,则所使用的运算为______。
SSS_SINGLE_SEL
A选择
B投影
C插入
D连接
分值:1
答案:B
[解析]投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的角度
进行的运算,相当于对关系进行垂直分解。本题中,S是在原有关系R的内部
进行的,是由R中原有的那些域的列所组成的关系,因此选择B。
10.
将E-R图转换为关系模式时,实体和联系都可以表示为______。
SSS_SINGLE_SEL
A属性
B键
C关系
D域
分值:1
答案:C
[解析]从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关
系,E-R图中属性也可以转换成关系的属性,因此本题答案为C。
11.
以下叙述中错误的是______。
SSS_SINGLE_SEL
AC语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指
令
BC程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令
文件
C用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件
中
DC语言源程序经编译后生成后缀为.obj的目标程序
分值:1
答案:A
[解析]C语言中的非执行语句不会被编译,不会生成二进制的机器指令,因此
A选项错误。由C语言构成的指令序列称为C源程序,C源程序经过C语言编译
程序编译之后生成一个后缀为.obj的二进制文件(称为目标文件);最后要由
“连接程序”把此“.obj”文件与C语言提供的各种库函数连接起来生成一个
后缀为“.exe”的可执行文件。根据上述分析可知,A选项叙述错误。
12.
以下选项中,合法的一组C语言数值常量是______。
SSS_SINGLE_SEL
A12.0Xa234.5e0
B028.5e-3-0xf
C.1774e1.50abc
D0x8A10,0003.e5
分值:1
答案:A
[解析]C语言中八进制整型常量的开头是数字0,十六进制整型常量的开头是
数字0x。C语言中的实型常量有两种表示形式:小数形式,小数形式表示的实
型常量必须要有小数点;指数形式,以“e”或“E”后跟一个整数来表示以10
为底数的幂数,且规定字母e或E之前必须要有数字,且e或E后面的指数必
须为整数。B选项中028错误,八进制中没有数字8。C选项中“4e1.5”中e
后面的指数不是整数。D选项中“3.e5”小数点后面缺少数字。因此本题答案
为A。
13.
以下选项中不合法的标识符是______。
SSS_SINGLE_SEL
Aprint
BFOR
C&a
D_00
分值:1
答案:C
[解析]C语言中标识符由字母、下划线或数字组成,且开头必须是字母或下划
线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B选项中
的“FOR”可以作为标识符来用。C选项中含有非法字符&,因此选择C。
14.
若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确
表示该代数式的C语言表达式是______。
SSS_SINGLE_SEL
Asqrt(fabs(pow(n,x)+pow(x,e)))
Bsqrt(fabs(pow(n,x)+exp(x)))
Csqrt(abs(n^x+e^x))
Dsqrt(fabs(pow(x,n)+exp(x)))
分值:1
答案:A
[解析]B选项中函数“pow(x,c)”错误,应该直接使用“exp(x)”函数。C选
项中函数“abs(n^x+e^x)”错误,应该使用“fabs()”返回浮点数的绝对值。D
选项中“pow(x,n)”参数顺序错误。本题正确答案为A。
15.
若有定义“doublea=22;inti=0,k=18;”,则不符合C语言规定的赋值语句是
______。
SSS_SINGLE_SEL
Ai=a%11;
Bi=(a+k)<=(i+k);
Ca=a++,i++;
Di=!a;
分值:1
答案:B
[解析]取模运算符“%”为二元运算符,具有左结合性,参与运算的量应均为
整型,选项B中的变量a是double型,所以选项B不符合规定。
16.
有以下程序
#include<stdio.h>
main()
{ints,t,A=10;doubleB=6;
s=sizeof(A.;t=sizeof(B);
printf("%d,%dn",s,t);
}
在VC++6.0平台上编译运行,程序运行后的输出结果是______。
SSS_SINGLE_SEL
A4,8
B4,4
C2,4
D10,6
分值:1
答案:A
[解析]C语言中利用“sizeof()”函数判断数据类型长度,在VC6平台中,
整型数据int占4个字节,double型数据占8个字节。因此本题答案为A。
17.
有以下程序
#include<stdio.h>
main()
{chara,b,c,d;
scanf("%c%c",&a,&b);
c=getchar();d=getchar();
printf("%c%c%c%cn",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:
回车也是一个字符)
12<CR>
34<CR>
则输出结果是______。
SSS_SINGLE_SEL
A1234
B12
C1234
D123
分值:1
答案:D
[解析]按照从键盘输入的数据可以判断字符1赋给了变量a,字符2赋给了变
量b,字符<CR>即回车赋给了变量c,字符3赋给了变量d。因此打印输出的
结果为选项D。
18.
以下关于逻辑运算符两侧运算对象的叙述中正确的是______。
SSS_SINGLE_SEL
A可以是任意合法的表达式
B只能是整数0或非0整数
C可以是结构体类型的数据
D只能是整数0或1
分值:1
答案:A
[解析]C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以
是任意合法的表达式,因此选择A。
19.
有以下程序
#include<stdio.h>
main()
{inta=0,b=0,c=0,d=0;
if(a=1)b=1;c=2;
eld=3;
printf("%d,%d,%d,%dn",a,b,c,d);
}
程序输出______。
SSS_SINGLE_SEL
A编译有错
B0,0,0,3
C1,1,2,0
D0,1,2,0
分值:1
答案:A
[解析]本题中“if(a=1)b=1;”与“eld=3;”之间多了语句“c=2”;因此
会出现el语句的位置错误的编译失败提示。
20.
有以下程序
#include<stdio.h>
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{ca1:
switch(y)
{ca0:a++;break;
ca1:b++;break;
}
ca2:a++;b++;break;
ca3:a++;b++;
}
printf("a=%d,b=%dn",a,b);
}
程序的运行结果是______。
SSS_SINGLE_SEL
Aa=2,b=1
Ba=2,b=2
Ca=1,b=1
Da=1,b=0
分值:1
答案:A
[解析]ca常量表达式只是起语句标号作用,并不是该处进行条件判断。在
执行switch语句时,根据switch的表达式,找到与之匹配的ca语句,就从
该ca子句执行下去,不再进行判断,直到碰到break或语句结束为止。因此
执行内层“switch(y)”时只执行了a++,此时a的值为1,然后执行外层ca
2语句的“a++;b++;”,a为2,b为1。所以结果为A。
21.
以下程序段中的变量已正确定义
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf("*");
程序段的输出结果是______。
SSS_SINGLE_SEL
A**
B****
C*
D********
分值:1
答案:C
[解析]由于内层循环“for(k=1;k<3;k++)”后面直接跟了空语句“;”,因此
在循环内部什么操作也不做,执行完内层循环后执行打印语句,所以打印了一
个“*”,故本题答案C。
22.
有以下程序段
#include<stdio.h>
main()
{
inti,n;
for(i=0;i<8;i++)
{n=rand()%5;
switch(n)
{ca1:
ca3:printf("%dn",n);break;
ca2:
ca4:printf("%dn",n);continue;
ca0:exit(0);
}
printf("%dn",n);
}
}
以下关于程序段执行情况的叙述,正确的是______。
SSS_SINGLE_SEL
A当产生的随机数n为0时,结束程序运行
B当产生的随机数n为4时,结束循环操作
C当产生的随机数n为1和2时,不做任何操作
Dfor循环语句固定执行8次
分值:1
答案:A
[解析]ca常量表达式只是起语句标号作用,并不是在该处进行条件判断。
在执行switch语句时,根据switch的表达式,找到与之匹配的ca语句,就
从该ca子句执行下去,不再进行判断,直到碰到break或函数结束为止。简
单地说,break是结束整个循环体,而continue是结束单次循环。B选项中当
产生的随机数n为4时要执行打印操作。C选项中当产生的随机数为1和2时
分别执行ca3与ca4后面语句的内容。由于存在break语句,因此for
循环不是固定执行8次,执行次数与产生的随机数n有关系。故本题答案为
A。
23.
有以下程序
#include<stdio.h>
intf(intx);
main()
{intn=1,m;
m=f(f(f(n)));printf("%dn",m);
}
intf(intx)
{returnx*2;}
程序运行后的输出结果是______。
SSS_SINGLE_SEL
A2
B8
C4
D1
分值:1
答案:B
[解析]第一次调用“m=f(f(f1)))”,第二次为“m=f(f2))”,第三次为
“m=f(4)”,即返回值为8,选项B正确。
24.
以下叙述中错误的是______。
SSS_SINGLE_SEL
A当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
B函数可以返回地址值
C改变函数形参的值,不会改变对应实参的值
D可以给指针变量赋一个整数作为地址值
分值:1
答案:D
[解析]不能将一个整数直接赋给指针变量作为地址,因此D是错误的。函数的
返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。故本
题答案为D。
25.
设已有定义“floatx;”,则以下对指针变量p进行定义且赋初值的语句中正
确的是______。
SSS_SINGLE_SEL
Afloat*p=&x;
Bint*p=(float)x;
Cfloatp=&x;
Dfloat*p=1024;
分值:1
答案:A
[解析]指针是用来存放地址的变量,用“类型名*指针变量名”的形式定义。
赋值时应将某个变量地址即&x赋给指针变量,因此选择A。
26.
以下数组定义中错误的是______。
SSS_SINGLE_SEL
Aintx[][3]={{1,2,3},{4,5,6}};
Bintx[][3]={0};
Cintx[2][3]={{1,2},{3,4},{5,6}};
Dintx[2][3]={1,2,3,4,5,6};
分值:1
答案:C
[解析]C选项中x[2][3]定义的是一个2行3列的二维数组,而在给数组元素
赋值时却赋成了3行,因此错误。
27.
有以下程序
#include<stdio.h>
voidfun(inta[],intn)
{inti,t;
for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
main()
{intk[10]={1,2,3,4,5,6,7,8,9,10},i;
fun(k,5);
for(i=2;i<8;i++)printf("%d",k[i]);
printf("n");
}
程序的运行结果是______。
SSS_SINGLE_SEL
A321678
B876543
C1098765
D345678
分值:1
答案:A
[解析]本题中,函数fun()的功能是将数组k中前5个元素倒序,因此返回后
数组k中的元素排列是“5,4,3,2,1,6,7,8,9,10”。程序打印输出k[2]到k[7]
元素的值,即321678,所以选择A。
28.
有以下程序
#include<stdio.h>
#defineN4
voidfun(inta[][N],intb[])
{inti;
for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];
}
main()
{int
x[N][N]={{"1,2,3,4},(5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;
fun(x,y);
for(i=0;i<N;i++)printf("%d,",y[i]);printf("n");
}
程序运行后的输出结果是______。
SSS_SINGLE_SEL
A-3,-1,1-3,
B-12,-3,0,0,
C0,1,2,3,
D-3,-3,-3,-3,
分值:1
答案:A
[解析]本题中由fun函数可知,b[0]=a[0][0]-a[0][3]=1-4=-3,
b[1]=a[1][1]-a[1][2]=6-7=-1,b[2]=a[2][2]-a[2][1]=11-10=1,
b[3]=a[3][3]-a[3][1]=16-13=3。因此主函数中打印y数组元素的值为A选
项。
29.
设有定义“chars[81];inti=0;”,以下不能将一行(不超过80个字符)带有
空格的字符串正确读入的语句或语句组是______。
SSS_SINGLE_SEL
Awhile((s[i++]=getchar())!="n");s[i]="0";
Bscanf("%s",s);
Cgets(s);
Ddo{scanf("%c",&s[i]);}while(s[i++]!="n");s[i]="0";
分值:1
答案:B
[解析]字符串的输入不能使用“scanf("‰s",s);”,而应该使用
“get(s)”,因此选择B。
30.
设有定义“charp[]={"1","2","3"},*q=p;”,以下不能计算出一个char型数
据所占字节数的表达式是______。
SSS_SINGLE_SEL
Asizeof(p)
Bsizeof(char)
Csizeof(*q)
Dsizeof(p[0])
分值:1
答案:A
[解析]根据题目中的定义可以知道“sizeof(p)”,计算的是数组p中所有元
素所占用的字节数,而不是char型数据所占字节数。
31.
有以下程序
#include<stdio.h>
#include<string.h>
main()
{charstr[][20]={"One*World","One*Dream!"},*p=str[1];
printf("%d,",strlen(p));printf("%sn",p);
}
程序运行后的输出结果是______。
SSS_SINGLE_SEL
A10,One*World
B9,One*Dream!
C9,One*World
D10,One*Dream!
分值:1
答案:D
[解析]p是指向二维字符数组第二行“One*Dream!”的数组指针,因此长度是
10,打印输出的也是该字符串。
32.
有以下程序
#include<stdio.h>
main()
{chars[]="012xy08s34f4w2";
inti,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>="0"&&s[i]<="9")n++;
printf("%dn",n);
}
程序运行后的输出结果是______。
SSS_SINGLE_SEL
A7
B0
C3
D8
分值:1
答案:C
[解析]本题中遇到“”字符循环结束,因此只统计“”之前的数字字符,结
果为3。
33.
有以下程序
#include<stdio.h>
fun(intx,inty)
{staticintm=0,i=2;
i+=m+1;m=i+x+y;returnm;
}
main()
{intj=1,m=1,k;
k=fun(j,m);printf("%d,",k);
k=fun(j,m);printf("%dn",k);
}
执行后的输出结果是______。
SSS_SINGLE_SEL
A5,11
B5,5
C11,11
D11,5
分值:1
答案:A
[解析]声明静态局部变量:函数调用结束后,其占用的存储单元不释放,在下
次该函数调用时,该变量保留上一次函数调用结束时的值。本题子函数fun中
的变量i和m均为静态局部变量。因此第一次调用fun函数,返回m的值为
5,第二次再调用fun函数时,i的值为3,m的值已经是5了,所以执行
i+=m+1,i的值变为9,m=i+x+y=9+1+1=11,故本题答案为A。
34.
在C语言中,只有在使用时才占用内存单元的变量,其存储类型是______。
SSS_SINGLE_SEL
Aauto和register
Bextern和register
Cauto和static
Dstatic和register
分值:1
答案:A
[解析]auto:函数中的局部变量动态地分配存储空间,数据存储在动态存储区
中,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释
放这些存储空间。register:为了提高效率,C语言允许将局部变量的值放在
CPU中的寄存器中,这种变量叫“寄存器变量”,只有局部自动变量和形式参
数可以作为寄存器变量。extern:外部变量(全局变量)是在函数的外部定义
的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不
在文件的开头定义,其有效的作用范围只限于定义处到文件末尾。static:静
态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运
行期间都不释放。根据以上分析可知,故本题答案为A。
35.
下面结构体的定义语句中,错误的是______。
SSS_SINGLE_SEL
Astructord{intx;inty;intz;}structorda;
Bstructord{intx;inty;intz;};structorda;
Cstructord{intx;inty;intz;}a;
Dstruct{intx;inty;intz;}a;
分值:1
答案:A
[解析]A选项“structord{intx;inty;intz;}structorda;”错
误,不能在定义结构体的同时,又用结构体类型名定义变量,应该写成B选项
或者D选项的格式。
36.
有以下程序
#include<stdio.h>
typedefstruct{intb,p;}A;
voidf(Ac)/*注意:c是结构变量名*/
{intj;
c.b+=1;c.p+=2;
}
main()
{inti;
Aa={1,2};
f(A);
printf("%d,%dn",a.b,a.p);
}
程序运行后的输出结果是______。
SSS_SINGLE_SEL
A2,4
B1,2
C1,4
D2,3
分值:1
答案:B
[解析]结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实
现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构
体变量名以实现传值调用,实参将复制的副本传递给形参,在被调用函数中改
变形参值对于调用函数中的实参没有影响。因此本题选择B。
37.
以下叙述中正确的是______。
SSS_SINGLE_SEL
A在C语言中,预处理命令行都以“#”开头
B预处理命令行必须位于C源程序的起始位置
C#include<stdio.h>必须放在C程序的开头
DC语言的预处理不能实现宏定义和条件编译的功能
分值:1
答案:A
[解析]预处理命令是以“#”号开头的命令,它们不是C语言的可执行命令,
这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起
始位置书写,因此B、C选项错误。C语言的预处理能够实现宏定义和条件编译
等功能,因此D选项错误。故本题答案为A。
38.
有以下程序
#include<stdio.h>
#include<stdlib.h>
intfun(intn)
{int*p;
P=(int*)malloe(sizeof(int));
*p=n;return*p;
}
main()
{inta;
a=fun(10);printf("%dn",a+fun(10));
}
程序的运行结果是______。
SSS_SINGLE_SEL
A20
B10
C0
D出错
分值:1
答案:A
[解析]“malloc(sizeof(int))”的作用是开辟一个长度为“sizeof(int)”的
存储空间,并通过强制类型转换“(int*)”将此存储空间的地址赋给了一个整
型的指针变量p。然后执行语句*p=n,使得*p的值为10,并通过return返回
此值,即a的值为10。然后在主函数中输出a+fun(10)=10+10=20。故本题答案
为A。
39.
有以下程序
#include<stdio.h>
main()
{unsignedchara=8,c;
c=a>>3;
printf("%dn",c);
}
程序运行后的输出结果是______。
SSS_SINGLE_SEL
A32
B16
C1
D0
分值:1
答案:C
[解析]无符号整型变量a的值为8,二进制表示为00001000,右移3位后为
00000001,即十进制的1,因此输出1。
40.
读取二进制文件的函数调用形式为“fread(buffer,size,count,fp);”,其中
buffer代表的是______。
SSS_SINGLE_SEL
A一个内存块的首地址,代表读入数据存放的地址
B一个整型变量,代表待读取的数据的字节数
C一个文件指针,指向待读取的文件
D一个内存块的字节数
分值:1
答案:A
[解析]“fread(void*buffer,sizet_size,sizet_count,FILE*stream);”
功能是从一个文件流中读数据,读取count个元素,每个元素占size个字节,
如果调用成功返回count。buffer:用于接收数据的内存地址,大小至少是
size*count个字节;size:单个元素的大小,单位是字节;count:元素的个
数,每个元素占size个字节;stream:输入流。故本题答案为A。
二、程序填空题
1.
给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按
原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数27638496,函数返回值为26846。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结
果。
注意:源程序存放在下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include<stdio.h>
unsignedlongfun(unsignedlongn)
{unsignedlongx=0,s,i;intt;
s=n;
/**********found**********/
i=________;
/**********found**********/
while________
{t=s%10;
if(t%2==0){
/**********found**********/
x=x+t*i;i=________;
}
s=s/10;
}
returnx;
}
main()
{unsignedlongn=-1;
while(n>99999999‖n<0)
{printf("Pleainput(0<n<100000000):");
scanf("%ld",&n);)
printf("nTheresultis:%ldn",fun(n));
}
SSS_FILL
分值:20
1s>0i*10
答案考生文件夹[解析](1)变量i用来控制被取出的偶数在新数中的位置,应
赋初值1。
(2)while语句的循环条件是s>0。
(3)变量i用来标识个位、百位和千位等。
三、程序改错题
1.
给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条
对角线上元素之和,返回此和数。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
给定源程序:
#include<stdio.h>
#defineM5
/************found************/
intfun(intn,intxx[][])
{inti,j,sum=0;
printf("nThe%dx%dmatrix:n",M,M);
for(i=0;i<M;i++)
{for(j=0;j<M;j++)
/************found************/
printf("%f",xx[i][j]);
printf("n");
}
for(i=0;i<n;i++)
sum+=xx[i][i]+xx[i][n-i-1];
return(sum);
}
main()
{intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
printf("nThesumofallelementson2diagnalsis%d.",mn(M,aa));
}
SSS_TEXT_QUSTI
分值:20
(1)intfun(intn,intxx[][M])
(2)printf("%d",xx[i][j]);[解析](1)当用数组作为函数的形参时,可以不
定义数组的行数,但一定要定义数组的列数。
(2)该处错误比较隐蔽,一般C语言上机考试很少涉及printf函数中的错误,
此处只要明白"d"和"f"的区别就可以了。格式字符d表示以带符号的十进制形
式输出整数(正整数不输出符号);格式字符f表示以小数形式输出单精度、双
精度数据,隐含输出6位小数。
四、程序设计题
1.
函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c
中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b
中的十位和个位数依次放在变量c的个位和百位上。
例如,当a=45,b=12,调用该函数后,c=4251。
注意:部分源程序存在文件PROG1.C中。数据文件中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入
你编写的若干语句。
给定源程序:
#include<stdio.h>
voidfun(inta,intb,long*c)
{
}
main()
{inta,b;longc;
printf("Inputab:");
scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:%ldn",c);
}
SSS_TEXT_QUSTI
分值:20
voidfun(inta,intb,Iong*c)
{
*c=b/10+(a%10)*10+(b%10)*100+(a/10)*1000;
}[解析]本题中主要的问题是如何取出a和b的个位数和十位数,取出后如何
表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除
10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后
对应乘以1000、100、10、1,就可得到c的千位数、百位数、十位数和个位
数。注意使用c时要进行指针运算。
1
本文发布于:2023-01-26 00:17:10,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/136342.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |