二级C语言选择题专项强化真题试卷12
选择题
1.以下选项中叙述正确的是( )。(B)
A. C程序必须由main语句开始
B. 函数体必须由{开始
C. C程序中的注释可以嵌套
D. C程序中的注释必须在一行里完成
解析:编写函数的时候需要用“{}”将其函数体括起来,表示是该函数的一部分,所以函数体必须由“{”开始,选项B正确;C程序必须由main函数开始,而不是main语句,选项A错误;C程序中的注释有单行注释“//”和多行注释“/*…*/”,多行注释以“/*”开始,直到遇到“*/”结束,只是寻找配套,而不能嵌套,选项C、D错误;答案选B。
2.以下选项中错误的是( )。(A)
A. a!=b与a=a!b等价
B. a^=b与a=a^b等价
C. a|=b与a=a|b等价
D. a&=b与a=a&b等价
解析:A选项中,a!=b表示a不等于b时,运算结果为1,或者为0;而a=a!b是一种语法错误,!是非运算,且是单目运算符,只要求有一个操作数,故两者不等价,故A选项正确。
3.以下选项中,与n=i++完全等价的表达式是( )。(A)
A. n=i,i=i+1
B. n+=i+1
C. i=i+1,n=i
D. n=++i
解析:运算符“++”放在变量后面时,表示变量先参与其他操作,再完成加1操作,故表达式n=i++的运算顺序是先将i赋值给n,再将i+1赋值给i,因此答案为A选项。
4.有如下程序段:
for(i=0;i<10;i++)
if(i>5)break;
则循环结束后i的值为( )。(D)
A. 10
B. 5
C. 9
D. 6
解析:if(i>5)break;语句执行时先判断i的值,如果i的值大于5,执行break语句,结束循环程序,这里i=6,循环结束。因此答案为D选项。
5.有以下程序:
#include
main()
{
int i,*ptr;
int array[4]={ 0,1};
for(ptr=array,i=0;i<3;i++,ptr++)
{
if(*ptr==0)
putchar(’#’);
else
putchar(’M’+*ptr);
}
printf(\\(D)
A. MO#
B. #F#
C. MMM
D. #N#
解析:for语句中把array数组首地址值赋给变量ptr,ptr++表示每次执行完循环体后,ptr指向下一数组元素,当指针指向值为0时,输出#,否则’M’再加上指针对应数组值进行输出。当*ptr=1时,’M’+1=’N’,结果输出为#N#,故答案为D选项。
6.有以下结构体说明、变量定义和赋值语句:
struet STD
{char name[10];
int age;
charsex:
}s[5],*ps;
ps=&s[0];
则以下seanf函数调用语句有错误的是( )。(D)
A. scanf(\\
B. scanf(\\
C. scanf(\\
D. scanf(\\
解析:本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。
7.有以下程序:
#include
#include
typedef struct stu{
char name[10];
char gender;
int score;
}stu;
void f(char name[10],char gender,int score)
{ strcpy(name,\\(A)
A. Qian,f,350,Sun,f,350
B. Qian,f,350,Qian,f,350
C. Qian,f,350,Sun,m,370
D. Zhao,m,290,Sun,m,370
解析:C语言函数参数传递大致分为(1)值传递过程中,被调函数的形参作为被调函数的局部变量处理,即在内存的堆栈中开辟空间以存放由主调函数放进来的实参的值,从而成为了实参的一个拷贝。值传递的特点是被调函数对形参的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值。
(2)地址传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。结构体中nanle是数组,做实参传递,会退化为指针,因此调用f(),b.name发生修改,其他的成员,传递的是拷贝文件,不会被修改。因此输出Sun,f,350。故答案为A选项。
8.以下程序拟实现计算sum=1+1/2+1/3+…+1/50。
#include
main()
{ int i;double 8um;
sum=1.0;
i=1;
do
{i++;sum+=1/i;}
while(i<50);
printf(\\(A)
A. sum+=1/i;
B. while(i<50);
C. sum=1,0;
D. i++;
解析:选项A中,sum+=1/i;i为整型,因此1/i是整型类型,当1/i有小数时,小数部分会被截断。因此1/i结果始终为0,导致结果出错,应改为sum+=1.0/i。因此答案为A选项。
9.有以下程序
#include t
main()
{char b[3][10],c;
int i;
for(i=0;i<2;i++)scanf(\\(A)
A. Peachflower is pink.
B. Peachflower is pink.
C. Peachtlowerispink.
D. Peach flower is pink.
解析:由于用“%s”格式输出字符串时,是以空格作为间隔符,因此,输入给b[0]=\\
10.有以下程序:
#include
int fun(int*b,int n)
{ int i,r=1;
for(i=0;i<=n;i++)r=r*b[i];
return r;
}
main()
{ int x,a[]={2,3,4,5,6,7,8,9};
x=fun(a,3);
printf(\\(C)
A. 24
本文档预览:3600字符,共7824字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载