明解C语言 初级篇1~8章

1.使用printf函数输出的时候,若想输出%,必须写成%%。
2.进行整数除法或者取模运算的时候,当操作数中至少有一个为负时,结果是依赖编译器的。举例如下:

例子x / yx%y
负除以负 例x=-22,y=-54-2
负除以负 例x=-22,y=-553
负除以正 例x=-22,y=5-4-2
负除以正 例x=-22,y=5-53
正除以负 例x=22,y=-5-42
正除以负 例x=22,y=-5-5-3

3.使用printf函数输出浮点数转换说明%f,默认小数点后6位数字,使用scanf函数读取浮点数时,用%lf.
4.转换说明的格式 %09.9f
(1)设定了0标志后,如果数值前面有余位,则用0补齐位数,否则用空白补齐。
(2)第一个9为最少要显示出的字符位数。另外,如果有“ - ”,数据会左对齐,未设定会右对齐。
(3)小数点后的9指定显示的小数位数(注意整数没有)
5.逻辑运算符中的&&运算符在左操作数的判断结果为0时不对右操作数进行判断,||运算符在左操作数的判断结果不为0时不会对右操作数进行判断(短路求值情况)。
6.循环中使用continue语句后,循环体的剩余部分会被跳跃,break语句会跳出内层循环。

函数

1.赋给变量的标识符,它的名称都有一个通用的范围,成为作用域,在程序块中声明的变量的名称,只在该程序块中通用,在其他区域无效。
2.在函数外声明的变量标识符,其名称从声明的位置开始,到该程序的结尾都是通用的,这样的作用域称为文件作用域。
3.调用函数的过程中,如果传递数组时只是引用所接受的数组的元素值,而不改写的话,在声明数组的形参的过程中应该加上const。

void printf_array(const int v[],int n){...}

作用域与存储期

1.在相同的作用域内,如果两个同名变量分别拥有文件作用域和块作用域,那么只有拥有块作用域的变量是“可见的”,而拥有文件作用域的变量会被隐藏起来。
2.在相同的作用域内,当同名变量都被赋予了块作用域的时候,内层的变量是“可见”,而外层的变量会被“隐藏起来”。

int x = 75; //文件作用域
void print_x()
{
	printf("x=%d\n", x);
}
int main()
{
	int x = 999;//块作用域
	print_x();
	printf("x=%d\n", x);
	for (int i = 1;i < 2;i++)
	{
		int x = i * 100;//块作用域
		printf("x=%d\n", x);
	}
	return 0;
}

输出结果:x=75 x=999 x=100
3.存储期:在函数中声明的变量,它们是有寿命的,用存储期表示。
自动存储期:不使用static定义的对象。
静态存储期:在函数中使用static定义出的对象,或者在函数外声明定义出的对象。

两者比较自动存储期静态存储期
生成程序执行到对象声明的时候创建出相应的对象在程序开始执行的时候被创建出来
初始化如果不显式的进行初始化,则该对象会被初始化为不确定的值如果不显式的进行初始化,则该对象会被初始化为0
消失执行到包含该声明的程序块的结尾的时候,该对象消失到程序结束的时候消失
int fx = 0;
void func()
{
	static int sx = 0;
	int ax = 0;
	printf("%3d%3d%3d\n", ax++, sx++, fx++);
}
int main()
{
	int i = 0;
	for (i = 0;i < 3;i++)
		func();
	return 0;
}

运行结果:0 0 0
0 1 1
0 2 2

基本数据类型

size_t型和typedef型

1.由sizeof运算符生成的值的数据类型是在<stddef.h>头文件中定义的size_t型,在许多编译器中用typedef声明来定义size_t型。

typedef  unsigned size_t;//unsigned因编译器的不同可能会有不同

2.typedef声明是创建数据类型的同义词的声明。(而非创建新的数据类型)
typedef A B typedef声明为已有的数据类型A创建别名B

按位操作的逻辑运算

对于整数内部的位,有四种逻辑运算,分别为:
按位与:a&b 两者都为1时结果为1
按位或:a|b 只要有一个为1,结果就为1
按位异或:a^b 有且只有1个为1,结果才为1
按位求反:a~b 将每一位取反
(这些运算只针对整数数据类型或者枚举型)

位移运算符

(适用于无符号整型,如果是有符号整型的负数,分为逻辑位移和算术位移)
<<运算符:a<<b 将a左移b位,右边空出的位用0填充
>> 运算符:a>>b 将a右移b位,空出的位置同样补0

整型后缀

在部分整型常量后附带U和L等符号,这些符号称为整型后缀
u和U…表示该整型常量为无符号类型
l和L…表示该整型常量为long型
无符号整型的运算不会发生溢出,当运算结果超过最大值时,结果为“数学运算结果%(该无符号整型能够表示的最大值+1)。

浮点数

1.分为三种:float double long double
long doule 的显示用%lf
2.浮点型后缀:在浮点型常量的末尾加上指定类型的浮点型后缀,后缀f或F表示float型,后缀l或者L表示long double 型。
3.

项目sqrt
头文件#include <math.h>
原型double sqrt(double x)
说明计算x的平方根(实参为负数时会发生定义错误)
返回值返回计算出的平方根

运算和运算符

在这里插入图片描述

自动类型转换

在不同类型的混合运算中,编译器会自动转换数据类型,将参与运算的所有数据先转换为同一种数据类型,然后在进行计算。转换的规则如下

  1. 转换按数据长度增加的方向进行,以保证数值不失真,或者精度不降低。例如,int 和 long 参与运算时,先把 int 类型的数据转成 long 类型后再进行运算。
    2.所有的浮点运算都是以双精度进行的,即使运算中只有 float 类型,也要先转换为 double 类型,才能进行运算。
    3.char 和 short 参与运算时,必须先转换成 int 类型。
整形提升

链接: link.

动手编写各种程序吧

函数式宏

1.语法: #define sqr(x) ( (x)*(x) ) //计算一个数的平方的函数宏
注意:不要在宏名称和“(”之间写入空格
在宏定义时,将每个参数以及整个表达式都用括号括起来,防止出现宏的副作用。
2.函数式宏sqr是在编译时展开并填入程序的,没有函数定义的严格,它同样可以不带参数。

函数式宏和逗号运算符

如果宏定义中要代换两个以上的表达式,则使用逗号运算符连接,使其在语法上构成一个表达式。

 #define puts_alert(str)   (putchar('\a'),puts(str))
 int main()
 {
 	int n;
 	printf("请输入一个整数:");
 	scanf("%d",&n);
 	if(n)
 		puts_alert("这个数不是0.");
 	else
 		puts_alert("这个数是0.");
 	return 0;
 }

逗号运算符:a,b 按顺序判断a和b,对a仅进行判断,判断结果会被省去,整个表达式最终生成b的判断结果。

枚举类型

枚举类型是用来表示一定整数值的集合。

#include <stdio.h>
enum animal { Dog, Cat, Monkey, Invalid};//枚举类型的声明,animal是枚举名,大括号中的是枚举常量
void dog()
{
	puts("汪汪!!");
}
void cat()
{
	puts("喵喵~~");
}
void monkey()
{
	puts("唧唧!!");
}

enum animal select()
{
	int tmp;
	do {
		printf("0...狗   1...猫     2...猴     3...结束:");
		scanf_s("%d", &tmp);
	} while (tmp<Dog || tmp>Invalid);
		return tmp;
}
int main()
{
	enum animal selected;
	do {
		switch (selected = select()) {
		case Dog:dog();
			break;
		case Cat:cat();
			break;
		case Monkey:monkey();
			break;
		}
	} while (selected != Invalid);
	return 0;
}

各枚举常量从左往右分别被赋予0,1,2,3
变量selected的类型是enum animal,它的取值范围是0,1,2, 3
注意:枚举常量的值也可以根据需要任意设置,只要在枚举常量的名称后面写上赋值运算符“=”和值就行了。
通过赋值运算符"="赋值的枚举常量,其值为定值,没有给定值的枚举常量,其值为前一个枚举常量+1.
多个枚举常量允许有相同的值
程序中的枚举名是可以省略的
枚举名和变量名属于不同的命名空间,因此是可以相同的

输入输出和字符

关于putchar 的使用添加链接描述
关于scanf的使用添加链接描述

关于输入流中的EOF添加链接描述

\‘和\’'的用法

在字符串字面量中的写法:
字符’‘必须使用转义字符\’‘来表示,例如:AB’‘C就要写成’‘AB’‘C’’
字符‘既可以用’也可以使用\‘来表示
在字符常量中的写法:
与上面的恰好相反

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值