Linux C基础笔记(2)

Linux C基础笔记(2)

**补充申明:Linux C基础笔记共分为四部分,第一部分是Linux下基本命令,以及vi编辑器的使用还有C中的数据类型,第二部分为运算符、常量变量和输入输出。第三部分是控制语句、数组、字符串函数。第四部分为指针、函数以及分配内存管理。在写完这四部分之后我会继续上传数据结构、IO、以及网络编程的学习笔记,大家如果有需要学习Linux下编程的可以关注一下,我会将我所有的学习笔记发布在此供大家一起学习。(在笔记里面会有一些其他博主的总结,如果涉及到实属抱歉,您可以通过邮箱联系我,我会及时修改。**1509965601@qq.com)。

【0】运算符

		算术运算符:+ - * / % ++ --

1】关系运算符和逻辑运算符
他两主要用于判断,在条件语句当中经常使用

关系运算符
	>    <    >=    <=   ==    !=

逻辑运算符
	逻辑与:&&, 运算符两边都为真才为真 
	逻辑或:|| ,只要有一个为真就为真
	逻辑反:!,原来为真则为假,原来为假,则为真

【2】位运算符

A = 0011 1100

位逻辑反 ~        ~ 1 = 0, ~0 = 1;

位逻辑与 &        0 & 0 = 0,  0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1; 

位逻辑或 |	  0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1;

位逻辑异或 ^	  0 ^ 0 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1; 1 ^ 1 = 0;

左移 <<		  A << 2 = 1111 0000

右移 >>		  A >> 2 = 0000 1111

【3】赋值运算符与赋值复合运算符

==  代表判断
=	代表赋值

赋值运算符为“=”,其运算的一般形式如下:
	<左值表达式> = <右值表达式>

赋值复合运算符其运算的一般形式如下: 
	<变量>  <操作符>=  <表达式>
	a + b => a += b;
	a = a / b => a /= b;

+=:  C += A 相当于 C = C + A;

-=:  C -= A 相当于 C = C - A

*=:  C *= A 相当于 C = C * A

/=:  C /= A 相当于 C = C / A

%=:  C %= A 相当于 C = C % A

<<=:  C <<= 2 相当于 C = C << 2

>>=:  C >>= 2 相当于 C = C >> 2

&=:  C &= 2 相当于 C = C & 2

^=:  C ^= 2 相当于 C = C ^ 2

|=:  C |= 2 相当于 C = C | 2

【4】逗号运算符(“,”)
从左到右依次计算,最后表达式的值,作为整个表达式的值。
整个表达式的值就是最后一个表达式的值
但是前边所有的表达式都会被计算。

int a = 10, b = 5, c = 9;

这个不是逗号运算符,逗号运算符需要加括号
a = a + b + c, a+b, c;

a = ( c = a + b, c++, c = b + c); 
a = 21;

【5】条件运算符"? :" – 三目运算符
条件运算符"? :"是一个三目运算符, 其运算的一般形式是:
<表达式1> ? <表达式2> : <表达式3>

执行过程:
	先执行表达式1,如果表达式1为真,则执行表达式2,否则执行表达式3

等价于if..else...
	if(表达式1)
	{
		表达式2
	}
	else
	{
		表达式3
	}

【6】sizeof运算符
sizeof运算符运算的一般形式如下:
sizeof(<类型或变量名>)

是一个关键字,计算一个变量或者数据类型所占的内存空间的大小,以字节为单位。
注意:它只针对数据类型,而不针对变量!   

【7】变量与常量
常量是指在程序运行期间其数值不发生变化的数据。

	整型常量
		C语言的整数可以是十进制数、八进制数和十六进制数。可以有一个后缀U(无符号)或L(长整形)  例如: 215U, 84L
	浮点常量 
		浮点常量又称为实数,一般含有小数部分。
		在C语言中,实数只有十进制的实数,它又分为单精度实数和双精度实数,它们的表示方法基本相同。实数有两种表示方法, 即一般形式和指数形式。
		float或者double定义的变量所对应的数据
		科学计数法:3.5e+5 = 350000   3.5e-5 = 0.000035
	字符常量
		所谓字符常量是指一个单一字符, 其表示形式是由两个单引号包括的一个字符。
	常用转义字符
		\\      \ 字符
		\'	' 字符
		\"	" 字符
		\r	回车符 (跳到本行开头)
		\n	换行
		\t	水平制表符
		\b	退格符		

	字符串常量
		所谓字符串常量是指用双引号括起来的一串字符来表示的数据。
		
		a	变量
		'a'	字符
		"a"	字符串,每一个字符串都会有一个结束标志,'\0'
		
		大小写字母A和a差32;A=65; a=97;
		数字0和字符‘0’差48  ‘0’=48;
		空格为 32;

	常量定义
		1.#define预处理器    #define 符号名 替换列表    (替换列表可以是任意字符、数字、字符串、表达式等)

			#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)); }
			输出结果为12

		2.const      const int a = 10; a的值不能被修改  
				     const指针   const int *p = a   指针指向的内容是只读的  (无法被修改) a不可改变,p可改变        
       			     int * const p = a  指针本身是只读的(无法被修改) p不可改变,a可改变

变量:static 静态变量说明符	静态局部变量:在函数内使用,退出函数不能使用
				静态全局变量:只能在定义变量文件内使用
				指针函数中延长生命周期
				修饰函数,
      extern 全局变量声明 	可以在其他文件使用该变量,

【8】格式输入输出函数
printf/scanf

#include <stdio.h>
int printf(const char *format, ...(arg));(文件末尾详细解读了各种输出格式)
功能:按照一定的格式将数据输出到终端
参数:
	format:格式控制串
		%d 十进制整数
		%u 无符号的十进制整数
		%o 八进制整数
		%x 十六进制整数
		%c 字符数据
		%s 字符串
		%f 浮点类型
		%% 百分号本身
			%e(%E) 浮点数指数输出[e-(E-)记数法]
  			%g(%G) 浮点数不显无意义的零"0"
		
			附加格式说明符
			m	输出数据域宽,数据长度<m,左补空格;否则按实际输出
			.n	对实数,指定小数点后位数(四舍五入)
			-	输出数据在域内左对齐(缺省右对齐)
			
			+	指定在有符号数的正数前显示正号(+)
			0	输出数值时指定左面不使用的空位置自动填0
			#	在八进制和十六进制数前显示前导0,0x
			l	long类型输出 %ld
				double类型输出 %lf
	arg:可变参
返回值:
	成功输出的个数

#include <stdio.h>
int scanf(const char *format, ...(arg));
功能:按照格式从终端输入数据
参数:
	format:格式控制串
		%d 十进制整数
		%c 字符数据
		%s 字符串
		%f 浮点类型
			
	arg:可变参
		如果要将输入的数据保存在arg变量里面,需要传arg的地址
返回值:
	成功输入的个数

垃圾字符的回收:
		在输入多个字符的时候,往往会产出空格以及回车这个垃圾字符,所以需要处理
		scanf("%c%c%c", &a, &b, &c);
		
		方法1:使用空格隔开	
		scanf("%c %c %c", &a, &b, &c);
		
		方法2:使用%*c隔开,但是那次只能回收一个	
		scanf("%c%*c%c%*c%c", &a, &b, &c);
		
		方法3:使用getchar来回收垃圾字符	
		scanf("%c", &a);
		getchar();
		scanf("%c", &b);
		getchar();
		scanf("%c", &c);
		getchar();
	
	输入字符串时,注意不能超过其规定的字符串的字节数的范围
	如果想输入一个带空格的字符串,使用%[^\n]

getchar() 读取一个字符
putchar() 输出一个字符
gets()	  读取一个字符串
puts()  输出一个字符串

strcpy(s1, s2); 复制字符串 s2 到字符串 s1。

strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾。

strlen(s1); 返回字符串 s1 的长度。

strcmp(s1, s2);如果 s1 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。

【附录】printf 输出格式(转载CSDN某博客,具体是哪位大神的我也记不清了,当时逛博客的时候发现的,如有任何问题可以给我发邮箱,我会随时回复)
---------------------------------------
格式字符
格式字符用以指定输出项的数据类型和输出格式。

①d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。

②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。
例:
main()
{ int a = -1;
  printf("%d, %o", a, a);
}
运行结果:-1,177777
程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。

③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式	输出。

④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。

⑤c格式:输出一个字符。

⑥s格式:用来输出一个串。有几中用法
	%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
	%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m	,则左补空格。
	%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
	%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
	%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n	个字符正常输出。

⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
	%f:不指定宽度,整数部分全部输出并输出6位小数。
	%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。 
	%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。

⑧e格式:以指数形式输出实数。可用以下形式:
	%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
	%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数	据所占的宽度。

⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。

---------------------------------------
关于printf函数的进一步说明:
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
输出0.333333%。

---------------------------------------
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.
对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.

由高手指点
对于m.n的格式还可以用如下方法表示(例)
char ch[20];
printf("%*.s\n",m,n,ch);
前边的
定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。

(验证成功)
今天()又看到一种输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:

int slen;

printf(“hello world%n”, &slen);

执行后变量被赋值为11

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值