C语言错题

程序填空题注意 分号; 写上

char str[] = "ab\n\012\\\"";
printf("%d", sizeof(str));//7 包括终止符 '/0'
printf("%d", strlen(str));//6
3.为了避免嵌套的条件语句if-else的二义性,C语言规定:与else配对的是( )。
A.if同一行上的if
B.缩排位置相同的if
C.其之前最近的if
D.其之后最近的if
-------------------------------
C
4.设有定义: float a=2,b=4,h=3; 以下C语言表达式与代数式(a+b) /2*h计算结果不相符的是( )。
A. (1/2)* (a+b) *h
B. h/2*(a+b)
C. (a+b) *h/2
D. (a+b) *h*1/2
--------------------------------
printf("%d", 1/2);//0
printf("%f\n", b/a);//2.000000
printf("%f\n", 1.0/2.0);//0.500000
A
5.设变量t为int型,下列选项中不正确的赋值语句是( )。.
A. ++t;	B. nl=(n2=(n3=0));	C. k=i==m;	D. a=b+c=1;
--------------------------------
b,c的值无法确定
D
6.有以下程序的输出结果是( )。
void swap1(int c[])
{ 	int t;
	t=c[0];c[0]=c[1];c[1]=t;
}
void swap2(int c0,int cl)
{ 	int t;
	t=c0;c0=c1;c1=t;}
main
{ 	int a[2]={3,5},b[2]={3, 5};
	swapl (a);:
	swap2(b[0],b[1]);
	printf("%d %d %d %d')n",a[0],a[1],b[0],b[1]);
}
A.5353		B.5335
C.3535		D.3553
--------------------------------
B swap1里是a的地址所以改变了内部数组,swap2是数值
7.若有以下程序段:
char str[]="ab\n\012\\\""; printf( “%d”,strlen(str));
该程序段的输出结果是( )。
A. 3	B.4		C. 6	D.12
--------------------------------
C
/*加了场宽默认右对齐*/
printf("%5d", 3);//    3
printf("%05d", 3);//00003
printf("%-3d", 3);//变为左对齐3  
/*浮点数*/
float a = 57.666;
printf("%1.2f\n",a);//57.67
printf("%2.3f\n",a);//57.666
/*输入不能对小数指定精度,且小数也占一位*/
float a;//必须在scanf函数之上
scanf("%6f", &a);//&声明变量地址,必须
/*字符串*/
char str[10];
scanf("%s",str);//有没有&都行,本身字符数组名称就是一个地址。
15.执行语句for(i=1;i++<4;); 后变量i的值是( 5 )。
16.不能把字符串“Hello!" 赋给数组b的语句是( )。
A. char b[10]={ 'H','E','L','L','0','!'};
B. char b[10];b="Hello!";
C. char b[10]; strcpy(b,"Hello!" );
D. char b[10]="Hello!";
--------------------------------
B。不能先定义再赋值
20.以下程序的输出结果是( )。
main()
{
    int a=0, i;
    for(i=l; i<5; i++)
    	switch(i){
            case 0:
            case 3:a+=2;
            case l:
            case 2:a+=3;
            default: a+=5;
		}
	printf("%d\n",a);
}
--------------------------------
没有break,把后面都执行一遍。
31
21.下面程序的输出是( )。
fun(int x){
    static int a=3;
    a+= X;
    return(a);
}
main(){
    int k=2,m=1, n;
    n=fan(k);
    n=fun (m);
    printf(""%d" ,n);
}
--------------------------------
static 静态,编译时只赋值一次
6
22.以下函数值的类型是( ) 。
fun( float x){
    float y;
    y= 3*x-4;
    return y;
}
A. int	B.不确定	C. void	 D. float
--------------------------------
不指定就是默认int
A
pow(n,x)//是求n的x次方值
3、以下叙述中错误的是
A、在程序中凡是以"#"开始的语句行都是预处理命令行
B、预处理命令行的最后不能以分号表示结束
C、#define MAX是合法的宏定义命令行
D、C程序对预处理命令行的处理是在程序执行的过程中进行的
--------------------------------
解析:预处理命令不是C语言本身的组成部分,不能直接对它进行编译(因为编译程序不能识别它们),必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行"预处理",经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的程序进行通常的编译。故本题答案为D。
21、设有两行定义语句:
int scanf;
float case; 
则以下叙述正确的是 
A、第2行语句不合法		B、两行定义语句都合法
C、第1行语句不合法		D、两行定义语句都不合法
--------------------------------
case是关键字,scanf是预定义标识符(标准库函数名),可以被定义成变量名,但是失去原有含义。故本题答案为A。
24、以下叙述错误的是
A、若用户标识符的命名与关键字相同,将产生编译错误
B、若用户标识符的命名与预定义标识符相同,命名无效
C、若用户标识符的命名与预定义标识符相同,预定义标识符失去原有含义
D、若用户标识符的命名与预定义标识符相同,可能引发运行错误
--------------------------------
解析: 如果用户标识符与关键字相同,则在对程序进行编译时系统将给出出错信息,故选项A正确;如果用户标识符与预定义标识符相同,系统并不报错,只是该预定义标识符将失去原定含义,代之以用户确认的含义,这样有可能会引发一些运行时错误,故选项C、D正确。所以本题答案选B。
实型变量中只可以存放实型数
9、设有定义:inta;floatb;执行scanf("%2dwf”,&a,&b);语句时,若从键盘输入876 543.0<回车>则a和b的值分别是
A、76和543.0		 B、876和543.0 		C、87和543.0 		D、87和6.0
--------------------------------
"scanf("%2d%f", &a, &b);"中,"%2d%f"中的2代表输入数据所占宽度。所以a的数据宽度为两位,即值为87;数字字符串随后的1位赋值给了b。即a和b分别为87和6.0。故本题的答案为D。
阶乘
0!=1
1!=1
10、若变量已正确定义,在if(W) printf("%dNn",k);中,以下不可替代的是 
A、a==b		 B、a<>b		 C、chr=getchar()	D、b++
--------------------------------
if后面的表达式,可以是关系表达式或逻辑表达式,也可以是其他类型的数据,如整型、实型、字符型等。C语言中"不等于"是用"!="来表示的,而不是"<>"。B
3、有以下程序
main()
{int i;
for(i=1;i<=40;i++)
{	if(i++%5==0) 
		if(++i%8==0) printf(“%d",i);
}
printf("\n");
}
执行后的输出结果是 
--------------------------------
i%5==0
(i+2)%8==0
32
4、有以下程序
void f(int v,int w)
{int t;
t=v;v=w;w=t;
}
main()
{int x=5,y=7,z=6;
    if(x>y) f(x,y);
    else if(y>z) f(y,z);
    else f(×,z);
    printf("%d,%d,%d\n",x,y,z);
}
执行后输出结果 
--------------------------------
本题涉及函数传输问题,f函数的形参是基本类型变量,并非指针类型,所以不会更改实参的。x,y,z的值。
5,7,6
/*调用函数交换数值,利用指针交换*/
void swap(int *x, int *y)
{
	int t;
	t = *x;
	*x = *y;
	*y = t;
}
int main()
{
	int a = 1, b = 2;
	swap(&a, &b);
	printf("a=%d,b=%d", a, b);
	return 0;
}
3、有以下程序
main()
{int a=5,b=4,c=3,d=2;
	if(a>b>c)
		printf("%d\n",d);
	else if((c-1>=d)==1)
        printf("%d\n",d+1); 
	else
		printf("%d\n",d+2);
}
执行后输出的结果是 
--------------------------------
a>b>c,要先判断a>b,5>4,表达式为真;然后再判断1>c,不成立;接着执行(c-1>=d)==1中c-1>=d成立,为真,即1。1==1成立。输出d+1即3。
char a[]="xyz",b[]={'z','y','z'};
//C语言规定'\0'为字符串结束标志,系统对字符串常量自动加一个'\0'为结束符。所以"char a[]="xyz""的数组长度为4,而"b[]={'x','y','z'};"的数组长度为3
char str[20] = "0123456";
scanf("%s", str); strcat(str, "789");
puts(str);
//输入46,输出46789
//scanf("%s", str);结论会把原来字符串数组中的值替换掉
main() {
	int i, a = 0;
	for (i = 0; i < 5; i++)a += f();
	printf("%d\n", a);
}
int f() {
	static int i = 0;//静态变量
	int s = 1;//动态变量
	s += i; i++;
	return s;
}
--------------------------------
一个变量被指定为静态变量,在编译时就为其分配了存储空间,程序一开始执行便被建立,直到该程序执行结束都存在,而不像动态变量只存在于函数或分程序被调用期间。在函数多次被调用的过程中静态局部变量的值具有可继承性。
15
int a = 3;//全局变量
main() {
	int s = 0;
	{int a = 5; s += a++; }
	s += a++; printf("%d\n", s);
}
--------------------------------
作用域
8
int a=2;
int f(int n){
static int a=3;
int t=0;
if(n%2){static int a=4;t+=a++;}
else {static int _a=5;t+=a++;}
return t+a++;
}
main(){
{
int s=a,i;
for(i=0;i<3;i++) s+=f(i);
printf("%d\n",s);
}
--------------------------------
29
#define AA(x,y,z)
main{
	a=1,b=2,c=3;
	AA(a+b,b+c,a+c);
}
AA(x,y,z){
	reture x*y+z;
}
a+b*b+c+a+c=1+4+3+1+3=12
int x=1,y=1,z=1;
z=x++,y++,++x;
printf("%d,%d,%d",x,y,z);//3,2,1
//如果是逗号表达式
z=(x++,y++,++x);//这样的话是3,2,3
int x = 10;
printf("%d,%d,%d",x,x++,++x);
<----------------------------
12,11,12
x++不变
x,x++变
//统计字符串中字母个数
char s[50];
int i,j=0;
scanf("%s"%,s);
for(i=0;s[i]!='\0' ; i++)
if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))
j++;
printf(“j=%d\n”,j);
// 函数传递数组
int a[50];
average(a);
int average(int a[]){}
c语言中的PI
#define PI 3.1415926
char str[]="abcd";//ok
char str="abcd";//no
7.语句char str[20];说明str是一个字符串,最多能表示
A.20个字符		B.19个字符		C.18个字符		D.21个字符
--------------------------------
B。'/0'结束不算字符
char a[80];
sacnf("%s",a);//这里的a等价于&a[0],数组地址
25.下列程序
int c=1;
main()
{static int a=5;int b=6;
printf(“a=%d b=%d c=%d\n" ,a,b,c);
func();
printf(“a=%d, b=%d, c=%d\n”,a,b,c);
func() ;
}
func (){ 
	static int a=4;int b=10;
    a+=2;
    c+=10;
    b+=c;
    printf(“a=%d, b=%d, c=%d\n”,a,b,c);
}
运行后输出的数据为
--------------------------------
a=5 b=6 c=1
a=6 b=21 c=11
a=5 b=6 c=11
a=8 b=31 c=21
6.假设有条件int x=1,y=2,z=3;则表达式z+=x>y?++x:++y的值是______
--------------------------------
6。z+=3,考察运算符优先级。
3.语句printf("%f%%",1.0/3);输出为0.333333。
--------------------------------
错误
%%时转义字符。0. 333333%。
11. C语言中只能逐个引用数组元素而不能一次引用整个数组、
--------------------------------
正确
13.)通过return语句,函数可以带回一个或一个上的返回值.
--------------------------------
错误。就只能一个
1.下列程序的输出结果是(),
main()
{
printf("%d\n" ,nu11):
}
A.0		B.变量无定义		C.-1		D.1
--------------------------------
B
2.用下列语句定义a,b,c,然后执行b=a、 c='b'+b,则b,c的值是().
long a=0xfffff;
int b;
char C;
A.0ffffff和0x61		B.-1和98
C.-1和97				D.指向同一地址
--------------------------------
C。这里a时补码
补 1111 1111 1111 1111 1111 1111 1111
原 1000000000000000000000000000000001   -1
c=98-1=97
5.若a是float型变量,b是unsigned型变量,以下输入语句中合法的是().
A. scanf ("%6.2f%d" , &a, &b);
B. scanf("%f%n" , &a, &b) ;
C. scanf ("%f%3o" , &a, &b);
D. scanf( "%f%f”, &a, &b) ;
--------------------------------
C。printf("this%n is a test\n",&count);//调用后count为4
%n指针相关不考
8.下列各m的值中,能使m%3==2&&m%5==3&&m%7==2 为真的是().
A.8		B.23	C.17	D.6
--------------------------------
B。带回
17.在C语言中,引用数组元素时,其数组下标的数据类型允许是()
A.整型常量					B.整型表达式
C.整型常量或整型表达式		D.任何类型的表达式
--------------------------------
C
8.若输入字符串: abcde<回车〉,则以下while循环体将执行____次
While((ch=getchar())=='e')printf("*");
--------------------------------
0
4.若有说明int c;则while (c=getchar());是正确的C语句。
--------------------------------
正确
13.在执行switch语句时,default和各个case的出现次序不影响执行结果。
--------------------------------
正确
15.若i =3,则printf("%d",-i++);输出的值为-4。
--------------------------------
错误。-3
6、以下变量x、y、Z均为double类型且已正确赋值,不能正确表示数学式子:
(x)/(y*z)的c语言表达式是( ) 。
A. x/y*z		B.x*(1/ (y*z))		C.x/y*1/z		D.x/y/z
--------------------------------
A。x/(y*z)	
11.下列程序执行后的输出结果是( ) 。
main (){
    char arr[2][4]; strcpy(arr,"you"); strcpy(arr[1],"me");
    arr[0][3]='&';
    printf("%s\n", arr);
}
(A) you&me		(B) you		(C)me		 (D)err
--------------------------------
A。strcpy(arr,"you");把you放到arr[0]第一行
26.以下程序的输出结果是( ) 。
int a,b;
void fun(){
    a=100;b=200;
} 
main(){ 
	int a=5, b=7;
	fun();
	printf("%d%d\n",a, b);
}
(A) 100200	 (B) 57 	(C) 200100	 (D)75
--------------------------------
B
31.请选择正确的运行结果( )。
include <stdio. h> 
int x,y;
num(){
    int a=15,b=10;
    int x,y;
    y=a-b;
    y=a+b;
    return;
}
main(){ 
    int a=7,b=5;
    x=a+b;
    y=a-b;
    num();
	printf("%d,%d\n", x,y);
}
(A)12,2		(B)5,25		(C)2,12		(D)不确定
--------------------------------
A
32.以下程序的输出结果是( )。
#define M(x,y,z) x*y+z
main()
{ int a=1, b=2,c=3;
printf("%d\n", M(a+b, b+c, c+a));
(A) 19		(B)17		(C)15		(D)12
--------------------------------
D。a+b*b+c+c+a=12
2、语句 while(!E) { ....}中的条件 !E 等价于____
A.E==0		B.E!=1		C.E!=0		D.~E
--------------------------------
A。!E==1 --> E==0
11、为了判断两个字符串s1和s2是否相等,应当使用___
A.if(s1==s2)			B.if(s1=s2)
C.if(strcmp(s1,s2))		D.if(strcmp(s1,s2)==0)
--------------------------------
D。strcmp相同为0。if(!strcmp(s1,s2))才对
18、以下叙述中正确的是____
A.全局变量的作用域一定比局部变量的作用域范围大
B.静态(static) 类型变量的生存期贯穿于整个程序的运行期间
C.函数的形参都属于全局变量
D.未在定义语句中赋初值的auto变量和static变量的初值都是随机值
--------------------------------
B
19、 有以下程序,执行后输出的结果是
main()
{ int i=l,j=l,k=2;
if ((j++||k++)&&i++)
printf(“%d,%d, %d\n”,i,j,k);
}
A.1,1,2		B.2,2,1		C.2,2,2		D.2,2,3
--------------------------------
C
(18)设有以下函数:
f(int a){ 
    int b=0;
    static int c=3;
    b++; c++;
    return(a+b+c);
}
如果在下面的程序中调用该函数,则输出结果是(  )。
main(){ 
    int a=2, i;
    for (i=0;i<3;i++)
    printf ("%d\n",f(a));
}
--------------------------------
7
8
9
(20) 以下选项中,非法的字符常量是(  )。
A) '\t'		B) '\17' 	C)"\n"		D)'\xaa'
--------------------------------
C。'\n',B选项八进制17Q结果为15D
(23)假设int型变量占两个字节的存储单元,若有定义int x[10]={0,2,4};,则数组x在内存中所占字节数为( )。
A) 3	 B) 6	 C) 10	 D) 20
--------------------------------
D
(12)有以下程序段
int x=3;
do{printf ("%d", x-=2);}while(!(--x));
其输出结果是
A) 1		B) 30		C) 1-2		D)死循环
--------------------------------
C
当执行下面的程序时,如果输入ABC,则输出结果是( )。
A) ABC6789		B) ABC67	C) 12345ABC6	D)ABC456789
#include ”stdio.h"
#include "string.h"
main ()
{ char ss[10]="12345";
gets(ss); strcat(ss,"6789"); printf("%s\n",ss);}
--------------------------------
A
(31)以下程序的输出结果是( )。
A) 16		B) 2		C) 9		D) 1
#define SQR(X) X*X
main (){ 
int a=16,k=2, m=l;
a/=SQR(k+m)/SQR(k+m);
printf ("%d\n",a);
}
--------------------------------
B。k+m*k+m/k+m*k+m=16,a=16/7
已知int a=0x167,则a/2为
A. B2H
B.179.5
C.0263
D.101100011
--------------------------------
C
若有以下代码: 
char a[10] = "123567";
char b[10] = "abcdefg"; 
strcpy(a,b);
printf("0%-05o" ,a[b[4]-b[b[5]-b[3]]]-32);
如有空格请使用小写字母v代表
--------------------------------
0103vv
凡事函数中未指这存储类别的局部变量,其隐含的存储类别为
--------------------------------
auto
int a=2,b=4,c=0;
printf("%d,%d,%d,%d" ,(a+=b&&c++||++b+!c&&pow(2,c++)),c,b,a);
输出的结果是
--------------------------------
3,2,5,3
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值