二级C语言选择题专项强化真题试卷33
选择题
1.有以下程序:
#include<stdio.h>
#include<string.h>
struct s
{char name[10];};
void change(struct S*data,int value)
{
strcpy(data->name,\\(A)
A. #3
B. #6
C. OK 3
D. OK 6
解析:考查结构体成员的引用规则。
2.设变量m为float类型,变量n为int类型,则以下能实现将m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。(B)
A. m=(m*100+0.5)/100.0
B. n=m*100+0.5,m=n/100.0
C. n=m/100+0.5,m=n*100.0
D. m=m*100+0.5/100.0
解析:n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留m的小数点后两位,需要将m乘以100。若要将m小数点后第三位四舍五人,则需要加上0.5,然后赋给整型变量,所以n=m*100+0.5,接下来需要将m还原成有两位小数的浮点数。若除号两边操作数有一个是浮点数时,则结果为浮点数,因此将n/100.0赋值给m时,得到的m值含两位小数,故答案为B选项。
3.若有定义:
char s[30]={0};
运行时输入:
This is a string.
则以下不能正确读入整个字符串:
This is a string.
到字符数组s中的语句组是( )。(D)
A. i=0;while((c=getchar())!=’\n’)s[i++]=c;
B. gets(s);
C. for(i=0;(c=getchar())!=’\n’;i++)s[i]=c;
D. scanf(\\
解析:在使用格式符“%s”进行字符串的输入时,空格和回车(Enter)会被读入,并且函数scanf()以它们作为分隔符停止一个字符串的输入,因此答案为D选项。
4.以下程序拟实现计算s=1+2*2+3*3+…+n*n+…,直到s>1000为止。
#include
main()
{ int s,n;
s=1:
n=1;
do
{n=n+1;s=s+n*n;}
while(s>1000);
printf(\\(A)
A. 把while(s>1000);改为while(s<=1000);
B. 把s=1;改为s=0;
C. 把n=1;改为n=0;
D. 把n=n+1;改为n=n*n;
解析:题目中程序不能实现预期功能是因为while的循环条件错误,在B选项中,把s=1,改为s=0,最终的结果s=4,与题目原意不同;在C选项中,把n=1,改为n=0,最终的结果s=2,与题目原意不同;在D选项中,把n=n+1,改为n=n*n,最终的结果s=2,与题目原意不同;A选项,正确地修改了while循环条件,可以得到正确结果。故答案为A选项。
5.有以下程序:
#include
main()
{FILE*fp;
int i,a[6]={1,2,3,4,5,6},k;
fp=fopen(\\(A)
A. 6
B. 21
C. 123456
D. 654321
解析:本题首先定义文件指针变量fp和一个数组a[],再打开一个文件“dat(a)dat”,随后先给文件写入数据a[0]。由于rewind函数是将文件指针从当前位置重新指向文件开始位置,所以for循环依次将数组a[]中的数据写入文件开始位置,退出循环后,文件中的数据顺序为:654321,重新使指针指向文件开始位置,将此时fp指向的数据(即文件中第一个数据为6)写入变量k中,关闭文件,输出k值,故答案为A选项。
6.有以下程序:
#include
main()
{ char a,b,c,d;
scarf(\\(A)
A. 12
B. 12
3
C. 1234
D. 12
34
解析:scanf()函数从标准输入输出中读入两个字符’1’、’2’分别赋给变量a、b,遇到回车自动结束,但回车符已经存入缓冲区,函数getchar()将从中接受了回车符,故c被赋值为回车符,第二个getchar()读入字符’3’,因此a=’1’,b=’2’,c=,d=’3’。故答案为A选项。
7.软件开发中需求分析的主要任务是( )。(A)
A. 定义和描述目标系统“做什么”
B. 获取需求
C. 给出软件解决方案
D. 需求评审
解析:需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。需求分析的任务是发现需求、求精、建模和定义需求的过程,是描述“做什么”的软件开发阶段。故选A选项。
8.若有以下定义和语句:
#include<stdio.h>
char s1[10]=\\(C)
A. 10 7
B. 10 5
C. 5 5
D. 5 8
解析:strlen函数返回字符串的长度,求字符串长度时,遇到结束标志‘\0’为止,但是长度不包括结束标识。字符数组s1的后5个元素没有赋值,都为‘\0’,即“abcd!”后为‘\0’。所以strlen(s1)的值为5。字符指针s2所指向的字符串中,\n为转义字符换行符,表示1个字符,\\也为转义字符,代表\,也是1个字符,其后为字符串结束标识‘0’;所以strlen(2)的值也为5。因此C选项正确。
9.有以下程序:
#include<stdio.h>
#define f(x)x*x*x
main( )
{
int a=3,s,t;
s=f(a+1);
t=f((a+1));
prinff(\\(A)
A. 10,64
B. 10,10
C. 64,10
D. 64,64
解析:本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(a+1)=a+1*a+1*a+1=3*a+1=10,f((a+1))=(a+1)*(a+1)*(a+1)=64,所以答案为A选项。
10.以下叙述正确的是( )。(B)
A. #include<stdio.h>是C程序的一条语句
B. 使用符号\可以将一条#include命令写在多行里
C. 一个#include行可以包含多个文件,文件名用逗号分开
D. 一个#include行可以包含多个文件,且最后一个文件起作用
解析:C语言中语句必须是以“;”结尾,#include是文件包含的宏定义,不属于C语言的语句,选项A错误;一个#include只可以包含一个文件,如果需要包含多个文件,必须使用多个#
本文档预览:3600字符,共8984字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载