C语言程序设计之基础易错题锦集3

问题3_0

        以下程序输出结果是?

#include<stdio.h>

main(){
	int i=0, a=0;
	while(i<20){
		for(;;){
			if((i%5)==0) 
				break;
			else
				i--;
		}
		i += 13;
		a += i;
	}
	printf("%d\n", a);
} 

运行结果3_0

Result_3_0

问题3_1

        以下程序输出结果是?

#include<stdio.h>

main(){
	int a[5] = {1, 2, 3, 4, 5};
	int *p = a, **q = &p;
	printf("%d,", *(p++));
	printf("%d", **q);
} 

结果3_1

Result_3_1
        程序首先定义了一个指向一维数组 a 的指针 p,一个指向指针变量 p 的指针变量 q。输出 *(p++)是先输出 *p 即 a[0] 的值,再将指针 p 指向数组的下一个元素 a[1] ,输出 **q 是输出指针 p 指向单元的内容,即 a[1] 的值。

问题3_2

         以下程序输出的结果是?

#include<stdio.h>

int a=4;
int f(int n){
	int t=0;
	static int a=5;
	if(n%2){
		int a=6;
		t += a++;
	}
	else{
		int a=7;
		t += a++;
	}
	return t+a++;
}

main(){
	int s=a, i=0;
	for(;i<2;i++)
		s += f(i);
	printf("%d\n", s);
} 

结果3_2

Result_3_2

问题3_3

         以下程序输出的结果是?

#include<stdio.h>

main(){
	int p[8] = {11, 12, 13, 14, 15, 16, 17, 18}, i=0, j=0;
	while(i++<7)
		if(p[i]%2) j += p[i];
	printf("%d\n", j);
}

结果3_3

Result_3_3
         由循环语句 “while(i++<7) if(p[i]%2) j += p[i];” 可知,当 “p[i]%2” 为真时,也就是 p[i] 为奇数,累加 p[i] 到 j 上。因此,循环是累加数组 p[i] 中除 p[0] 外的奇数到 j 上,输出结果应该是: 13+15+17=45。

问题3_4

         以下程序输出的结果是?

#include<stdio.h>

main(){
	char p[20] = {'a', 'b', 'c', 'd'}, q[]="abc", r[]="abcde";
	strcat(p,r);
	strcpy(p+strlen(q), q);
	printf("%d\n", strlen(p));
}

结果3_4

Result_3_4
         题目中首先通过 strcat(p,r) 函数将 r 所指字符串内容连接到 p
所指的字符串后面,p[20] = {‘a’, ‘b’, ‘c’, ‘d’,‘a’, ‘b’, ‘c’, ‘d’,‘e’},然后通过 strcpy(p+strlen(q), q) ,首先在 p[0] 地址的基础上向后移动三位,然后将 q 所指字符串的内容复制到 p 所指的存储空间中,从字符 d 往后全部覆盖, p[20] = {‘a’, ‘b’, ‘c’,‘a’, ‘b’, ‘c’}。在输出语句中 strlen(p)是求字符串的长度值为 6。

问题3_5

         函数中指针变量与变量赋值的区别,以下程序输出的结果是?

#include<stdio.h>

void fun(char *c, char d){
	*c = *c+1;
	d = d+1;
	printf("%c,%c,", *c, d);
}
main(){
	char a='A', b='a';
	fun(&b, a);
	printf("%c,%c\n", a, b);
}

结果3_5

Result_3_5

         函数 fun(char *c, char d) 有两个参数, c 是指针型,传递的是实参的地址,对 *c 的操作也就是对实参的操作; d 是普通变量,传递的是实参的值,并不能改变实参的值。因此 fun 函数中的 printf 语句输出是 : b,B,而 main 的 printf 输出的是 : A,b。

问题3_6

         以下程序输出的结果是?

#include<stdio.h>

main(){
	int a=1, b=2, c=3, d=0;
	if(a==1&&b++==2)
	if(b!=2||c--!=3)
		printf("%d,%d,%d\n", a,b,c);
	else printf("%d,%d,%d\n", a,b,c);
	else printf("%d,%d,%d\n", a,b,c);
}

结果3_6

Result_3_6
        考察的范围广,第一个 if 中的表达式为逻辑与运算表达式,(a==1&&b++==2)由题干知,此逻辑表达式为真, b 的值变为 3。第二个 if 中的表达式为逻辑或运算表达式,(b!=2||c–!=3),首先判断 b!=2 成立,则表达式为真,c–!=3 没有判断,故 c 值仍为 3。

问题3_7

         以下程序输出的结果是?

#include<stdio.h>

struct ord{
	int x,y;
}dt[2]={1,2,3,4};

main(){
	struct ord *p=dt;
	printf("%d,",++p->x);
	printf("%d\n",++p->y); 
}

结果3_7

Result_3_7

问题3_8

         以下程序输出的结果是?

#include<stdio.h>

void fun(int *a, int *b){
	int *c;
	c=a; a=b; b=c;
}

main(){
	int x=3, y=5, *p=&x, *q=&y;
	fun(p,q);
	printf("%d,%d,", *p, *q);
	fun(&x, &y);
	printf("%d,%d\n", *p, *q);
}

结果3_8

Result_3_8

问题3_9

         设变量已正确定义,以下不能统计处一行中输入字符个数(不包括回车符)的程序段是:

	A)  n=0;
		while((ch=getchar())!='\n')
			n++;
	B)  n=0;
		while(ch=getchar()!='\n')
			n++;
	C) for(n=0; getchar()!='\n'; n++);
	D)  n=0;
		for(getchar();ch!='\n'; n++);

         for(表达式1;表达式2;表达式3),表达式1只在首次循环之前运行一次,此后不参与循环运算,故选 D。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值