计算机二级C语言基础选择易错题及答案解析(五)

1.以下敘述中錯誤的是()
A、可以给指针变量赋一个整数作为地址值
B、函数可以返回地址值
C、改变函数形参的值,不会改变对应实参的值
D、当在程序的开头包含头文件stio时,可以给指针变量赋NULL

解析:
不能将一个整数直接赋给指针变量作为地址,所以A)是错误的。函数的返回值可以是地址,即指针。
函数调用中形参值的变化不会传递给实参。

2.有以下程序

#include <stdio.h>
main()
{
int n, *p=NULL;
*P=&n;
print("Input n:");scanf("%d",&p);
print("output n:");scanf("%d\n",p);

该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是()
在这里插入图片描述在这里插入图片描述

3.有以下程序

#include<stdio.h>
main()
{
int x,y,z;
x=y=1;
z=x++,y++,++y;
print("%d,%d,%d\n",x,y,z);

程序运行的输出结果是()
在这里插入图片描述

解析:
赋值运算符的优先级高于逗号运算符,所以可将上式表示为(`z=x++,(y++,++y);自左向右计算表达式z=x++,因为x++先自增,所以z为1,x为2,再依次计算y,故C选项正确;

4.若有定义intx, y;并已正确给变量赋值,则以下选项中与表达式(x-y)? (X+ +): (y+ + )中的条件表达式(x - y)等价的是( A)。

在这里插入图片描述
在这里插入图片描述
5.有以下程序


#include <stdio.h>
main()
{
int x =1,y=0;
if(!x)y++;
else if (x==0)
    if(x)y+ =2;
    else y +=3
  print("%d\n",y);
  }

程序运行后的输出结果是(D
A、3
B、2
C、1
D、0

在这里插入图片描述
6.若有定义: floatx=1.5; inta=1, b=3,c=2;则正确的switch语句是(A )。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

解析:
B)选项中switch((int)x); 语句中不应该有最后的分号
switch(expr1),中的expr1不能用浮点类型或long类型,也不能为一个字符串,所以C)错误。
case后面常 量表达式的类型必须与switch后面表达式的类型一致,所以D错误。

有以下程序:

#include<stdio.h>
main()
int i,j,m=1;
for(i=1;i<3;i++)
for(j=3;j>0;j--)
if(i*j>3)break;
m*=i*j;
printf("m=%d\n",m);

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

A.m=6
B.m=2
C.m=4
D.m=5

解析:
这道题考查了for循环的嵌套应用。
对于外层for循环来说,变量i从1增到2,循环执行2次。
当变量i的值等于1时,对于内层for循环来说,变量j从3减到1,求得变量m的值等于6。
当变量i的值等于2时,第一遍执行内层for循环,变量j的值等于3,那么i*j的值等于6,其值大于3,这时执行break语句,退出内层for循环的执行。
所以程序输出变量m的值为6

有以下程序:

#include <stdio.h>
int fun(int x,int y)
{ if(x==y)return(x);
 else return((x+y)/2);
}
main()
{ int a=4,b=5,c=6;
 printf("%d\n",fun(2*a,fun(b,c)));
}

程序运行后的输出结果是(  )。
A 3
B 6
C 8
D 12

解析:
fun的功能是求两数的平均数,并且参数和结果都为整型。
题中是用一个函数作为另一个函数的参数,所以应该先做里面嵌套的函数即fun(b,c),值为5fun(2*a,fun(b,c))即为计算fun(2*45),所以结果为(5+8)/2=6

9.有以下程序

#include<stdio.h>
 int add(int a,int b) {return(a+b)} 
 main() 
 { 
 int k,(*f)(),a=5,b=10; f=add; ...
  }

以下函数语句错误的是()
在这里插入图片描述

解析:
 D)选项中*f(a, b)表示调用后返回一个指向整型数据的地址指针
 即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。

10.下列定义数组的语句中,正确的是()
A、
#define N 10
int x[N];

B、
int N= 10;
int x[N];
C、
int x[0…10];
D.int x[ ];

解析:
数组说明的一般形式为:类型说明符数组名[常表达式]。
B)中N是变量,不能用变量定义数组长度。
C)选项中数组长度是非法的一串数字。
定义数组时必须为其指明长度,D)选项中数组长度为空,所以非法。

有以下程序

#include<stdio.h>
main( )
{int a[]={2354},i;
for(i=0;i<4;i++)
switch(i%2)
{case 0switch(a[i]2)
{case 0:a[i]++breakcase 1:a[i]--}breakcase 1:a[i]=O;
}
for(i=O;i<4;i++)prinff(“%d”,a[i])prinff(“\n”)}

程序运行后的输出结果是

A.3 3 4 4

B.2 0 5 0

C.3 0 4 0

D.0 3 0 4


解析:
第一次循环,i=0,i%2=0,a[0]2=0,a[0]=a[0]+1=3;
第二次循环,i=l,12=1,a[1]=0;
第三次循环,i=2,a[2]2=l,a[2]=a[2]-1=4;
第四次循环,i=3,i%2=1,a[3]=0
发布了53 篇原创文章 · 获赞 108 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Miracle1203/article/details/104258803