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),值为5。
fun(2*a,fun(b,c))即为计算fun(2*4,5),所以结果为(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[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{case 0:switch(a[i]%2)
{case 0:a[i]++;break;
case 1:a[i]--;
}break;
case 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,1%2=1,a[1]=0;
第三次循环,i=2,a[2]%2=l,a[2]=a[2]-1=4;
第四次循环,i=3,i%2=1,a[3]=0。