一篇文章,把你的C语言拉满绩点

目录

注:博主本主期末考试范围是:

易错选择题

1.关于C语言的说法

①关键字,函数名,标识符

 ②关于定义

2.合法常量

2.转义字符

3.scanf和printf类型

(1)scanf类型

(2)scanf和printf类型

(3)printf输出

4.sizeof类型

5.++与--

①后置++和后置--

②前置++和后置++

6.逻辑表达式

(1)|| 运算​编辑

(2)&& 和 || 运算 

(3)逻辑表达式运算

(4)!非

(5)整体表达式

​编辑

(6)宏替换

7.switch语句

8.continue

9.while循环

执行次数①

执行次数②continue

10.for循环

①关于for循环的说法

②for循环和continue

执行次数③

11.函数

①说明

②函数传参

12.数组


注:博主本主期末考试范围是:

用C语言编写程序;分支结构,循环结构;函数;数据类型和表达式;数组!!!

易错选择题

1.关于C语言的说法

①关键字,函数名,标识符

解析:

A.C语言的关键字是非常重要的,既不能作为变量名,也不可以作为函数名

B.标识符的有有效长度最多包含63位

D.自定义的标识符见名知义,能随意定义,只是说见名之义就更好理解

故本题选C

 ②关于定义

解析:

A.字符变量可以再定义时赋初始值,如:char ch=A;

C.同一英文字母的大小写对应的ASCII码值不一样

D.转义字符以反斜杠 "\" 开头

故本题选B 

2.合法常量

解析:

B 实型字面值常量有两种表示方式:小数形式和指数形式

小数形式:由最前面的确定正负号数字0-9和小数点组成,不允许有其他符号;

指数形式;包括指数和尾数两个不可缺少的部分,

用符号E(e)分割;E(e)左边是尾数,为十进制整数或小数形式的实数右边为指数,必须为十进制整数,表示乘以10的多少次方

so,选B

解析: 

A中160是十进制数,-0xffff是十六进制数,011是八进制数,均合法

B中01a非法,因为a不是八进制数码

C中986,012非法,不能包含“,”,0668非法,因为8不是八进制数码

D中0x非法,因为后面没有有效的十六进制数码

故选A

2.转义字符

本题选C

如想了解B选项退格,点此链接在这篇文章有详解:

http://t.csdnimg.cn/fGZaU  错题->4.转义字符 

看此段代码

int main()
{
	printf("123\b2\n");               //"\b"表示退回一个光标
	printf("\'\n");                   //"\'"表示 '
	printf("\\ \n");                  //"\\"表示 \
	printf("a\bre\' hi\' y\\\bou\n"); 
	return 0;
}

控制台输出: 

 

3.scanf和printf类型

(1)scanf类型

先看代码

int main()
{
    int a,b,c;
    scanf("a=%d b=%d c=%d",&a,&b,&c);

    printf("%d %d %d",a,b,c);

    return 0;
}

若想给a输入123,给b输入456,给c输入666,该怎么在控制台输入呢? 

你是不是这样子输入? 123 456 666?

答案是不行的

scanf函数,格式是怎样的,就要怎么输出

so,控制台输入:a=123 b=456 c=666.

(2)scanf和printf类型

解析: 

A.printf输出的数据隐含对齐

B.scanf和printf是C语言提供的输入和输出函数

D.printf 输出数据所占的宽度由系统决定

so,本题选C

(3)printf输出

看此段代码:

int main()
{
	int a = 2, b = 5;

	printf("a=%%d b=%%d\n", a, b);
	return 0;
}

解析:

C 语言中用 "%%" 打印输出字符 "%", 输出为 %d%d 两个普通字符 

而不是格式控制符 "%d" 的含义

4.sizeof类型

在内存中存储字符时,除了要存储有效字符外,还要在最后存储一个’\0’作为结束标志;

通常利用字符数组来存字符串,如果是直接给数组赋值字符串,系统会自动存’\0’;

如果是将数组元素依次存储的话,需要将’\0’也作为一个元素给数组赋值。 

so,本题选C

如果感兴趣,可以去看看这篇文章,关于strlen和sizeof的计算

http://t.csdnimg.cn/fGZaU ->重点题型1.->strlen和sizeof的计算

5.++与--

①后置++和后置--

先看此代码

int main()
{
	int a = 5;
	if (a++ > 5)
		printf("%d\n", a);
	else
		printf("%d\n", a--);
	return 0;
}

输出的结果是什么呢?

前置++:先使用,后+1;

后置--:   先使用,后-1; 

(a++ > 5)先使用 ,5 !=5,不满足if循环

后+1, a=6;

进入else,输出a--,先使用, a=6,输出6,再-1.

②前置++和后置++

先看代码:

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

	return 0;
}

a,b,c分别输出什么?

后置++,先使用,后+1

前置++,先+1,后使用

a++,x先使用a=1

++b,2+1=3

||或表达式左边为真,右边不再执行

所以c=3

结果为:

6.逻辑表达式

(1)|| 运算

(2)&& 和 || 运算 

下列说法是否正确?

对于逻辑表达式: a++ ||  b++,  设a的值为1,则求解表达式的值后,b的值会发生改变;
对于逻辑表达式: a++ && b++,设a的值为0,则求解表达式的值后,b的值会发生改变;

解析:
都不对.

对于逻辑表达式,其中b的值不会因为表达式的结果发生改变

(3)逻辑表达式运算

已知x=43,ch='A',y=0;则( x>=y && ch < 'B' && !y )

输出的结果是?

( (x >= y) && ( ch< ' B ' ) && ( !y ) )

43>0,为真       ' A '< 'B',为真   !为非的意思,非0为真

so,结果输出1

(4)!非

循环语句while( !E );中的表达式 !E等价于

E == 0;

(5)整体表达式

先看此代码

int main()
{
	int a = 3, b = 1, c = 0;

	int ret = (a <= b <= c);

	printf("%d\n", ret);

	return 0;
}

 结果为 1,为什么呢?

(6)宏替换

先看此段代码 

#define MOD(x,y) x%y
int main()
{
	int a = 13, b = 94;
	printf("%d\n", MOD(b, a + 4));
}

宏替换是直接替换的,所以这里替换后应该是b % a + 4,先算%后算+,也就是3+4得7 

7.switch语句

switch( 表达式 )

{

        case 1:

          break;

}

8.continue

先看代码

int main()
{
	int a = 0, s = 0;
	int i = 0;
	for (;;)
	{
		if (i == 3 || i == 5) continue;
		if (i == 6) break;
			i++;
			s += i;
	}
	printf("%d\n", s);
	return 0;
}

 continue:终止最近的循环中的当前迭代并立即开始下一次迭代;

因此当i=3时,终止此次循环并进行下一次循环,而这个过程中i的值一直未发生变化,所以会陷入死循环

9.while循环

执行次数①

先看此代码

int main()
{
	int i = 0, x = 0;
	while (!x && i < 3)
	{
		x++;
		i++;
	}
	return 0;
}

 这段代码执行循环多少次?

第一轮x=0,i=0则!x即为!0=1,while(1)可以循环,所以第一轮可以运行

第二轮i=1 ,x=1,这个时候!x为!1=0,0与1,对或错,所以第二轮不运行

程序只执行一次

执行次数②continue

先看此代码

int main()
{
	int i = 0;
	while (i < 10)
	{
		if (i < 1)
			continue;
		if (i == 5)
			break;
		i++;
	}
	return 0;
}

while循环的次数是?

在C语言中continue和break都可以放在循环体中,

continue代表跳过后续语句直接进入下一轮循环

而break代表跳出循环

so,本题答案为死循环

10.for循环

①关于for循环的说法

解析:

A,for循环常用于循环次数已知的循环中,但也可以用于循环次数未知的循环中(可以循环0次也可以死循环)

B,for循环先判断表达式,根据表达式的值来决定是否循环

C,break的作用就是跳出循环的

②for循环和continue

先看此代码

int main()
{
	int sum = 0, j = 0;
	for (j = 0; j < 6; j++)
	{
		if (j % 2)continue;
		sum++;
	}
	printf("%d\n", sum);
	return 0;
}

输出什么?

 解析:

执行次数③

若循环体 S 中不改变 和 n(n > 0) 的值,也不包含 continue 和 break 语。

循环语“for(i=0; i=n; i++)S;”中循环体 S 被执行的次数为多少?

答案为:n+1;

由for(初始化;条件判断;调整)

可知循环次数为0-n的次数,S被执行次数为n+1次

11.函数

①说明

函数若无返回值,则它一定无形参。请问这个说法是正确的吗?

不对 x

一个函数可以有参数,没有返回值;

               可以没有参数,有返回值;

               可以没参数,没返回值;

               可以有参数,有返回值。

参数和返回值没有必然联系.

②函数传参

解析:

函数定义fun第一个参数为char类型,第二个为float数组类型。

选项A:“abc”属于字符串常量,与定义函数参数不匹配,所以A错误。

选项B:fun函数为void没有返回值,所以无法赋值给t,所以B错误。

选项C:第二个参数2.8通常编译器默认是double类型,后面加上f即为float类型,即2.8f。因此和定义函数参数类型不匹配,所以C错误。 

选项D:字符型变量本质底层存储的还是数字(字符ASCII编码),所以数字传参也是没问题的。

 故本题选D

12.数组

看此段代码

void main()
{
	char ch[80] = "123abcdEFG*&";
	int j;
	puts(ch);
	for (j = 0; ch[j] != '\0'; j++)
		if (ch[j] >= ' A' && ch[j] <= 'Z')
			ch[j] = ch[j] + 'e' - 'E';
		puts(ch);
}

 ***********************************************************分割线*****************************************************************************

完结!!!

感谢浏览和阅读。

你的点赞和关注是我持续写作的动力!!! 

  • 33
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值