0
点赞
收藏
分享

微信扫一扫

C语言简单

1. 数据类型 

	按照数据在内存中所占的大小(32位机) 一般有如下划分
	
	int  	整型   			4个字节  
	char 	字符型          1个字节 
	float   单精度浮点型    4个字节 
	double  双精度浮点型    8个字节 
	long 	长整型    		4个字节 
	short   短整型			2个字节 
	...
	
	
	按照数据有无符号位的划分 有可以分为 : 
	
	signed int : 有符号整型 
	unsigned int : 无符号的整型 
	...
	
	
	进制之间的转换: 
	
	十进制数 15 -》 十六进制数 ? 
	
			1111       0xf
	
	十六进制的1位 对应二进制的4位 
	八进制的1位 对应二进制的3位 
	
	例: 
		10进制数 253 --》 16进制 ? 
		
		253 = 256 - 1 - 2 
		
		256:  1 0000 0000 
		
		255:    1111 1111 
		
		253:    1111 1101
		
		十六进制:0xfd
	
		//1 2 3 4 5 6 7 8 9 a b c d e f 
	
		
		十进制176换成 八进制 和 十六进制  ?
	
	
		176 = 128(2^7) + 32(2^5) + 16(2^4)
		
		176 :  10 110 000
		
		十六进制: 0xB0
	
		八进制: 260
		
		
	整数在计算机中存储形式? 
	
		整数在计算机中以补码的形式存放。 
		
		正数的补码是其原码本身    原码:二进制
		负数的补码是其绝对值的原码 取反 +1 
		
		
		例: 
			17的补码是多少? 
				
				17 = 16(2^4) + 1 
		
				00000000 00000000 00000000 00010001
		
			-17的补码是多少? 
				
			绝对值17的原码: 00000000 00000000 00000000 00010001 
			取反		  : 11111111 11111111 11111111 11101110
			+1			  : 11111111 11111111 11111111 11101111    --》 -17的补码
	
	
		
			11111111 11111111 11111111 11101111 ?
			
		-1:11111111 11111111 11111111 11101110 
		取反00000000 00000000 00000000 00010001    -17
			
 2. 运算符与表达式  

	= : 赋值 
	== : “等于” 
	+ - * / % : 
				5/3 = 1 
				6.0/3 = 2.0
	
	逻辑运算符: 
				&& :两者都为真 结果才为真 
				|| :只要有一个为真 结果就为真
				! : 结果取反
				在C语言中 什么代表真 什么代表假? 
							非0代表真  0代表假 
			
				printf("%d\n", 5&&-1); //1
				printf("%d\n", 5&&0);  //0
			
			
	位运算符: 他的操作的对象是bit位。

			& : 按位与 
			| :按位或 
			~ :按位取反 
			^ :异或  “求异”  不同为1  相同为0
			<< :按位左移 
			>> :按位右移
			
	  例: 
			5 & 6  ? 
			
			位运算符计算前 先把操作的数都化成二进制 
			然后对相对应的bit位进行操作 
			
			5:  00000101 
			6:  00000110 
			————————————————
			
			&	 00000100 	  == 4


	练习: 
			
			求: 5 | 6  		7
			     ~(5 | 17)    -22 
				 7 ^ 10         13
				 3 >> 1         1
				 1 << 4         16

	

				 ~(5 | 17)    -22 

				5:  00000000 00000000 00000000 00000101 
				17: 00000000 00000000 00000000 00010001 
				___________________________________________
				| : 00000000 00000000 00000000 00010101 
				
				
				
				~ : 11111111 11111111 11111111 11101010 
				
				-1: 11111111 11111111 11111111 11101001 
				取反00000000 00000000 00000000 00010110  	16 + 4 + 2 = 22 《==绝对值 


	 自增和自减运算符: 

		++ :  
				int a = 1; 
				a++;  先用 后加 
				
				++a;  先加 后用 
				
				例: 
					 int a = 1; 
					 printf("%d\n",a++); 1
					 printf("%d\n",++a); 3
				
				
		-- : 
			    例: 
					int a = 1; 
					printf("%d\n",a--); 1
					printf("%d\n",--a); -1

	 三目运算符: 
			
			格式:   a ? b : c   
			
			如果a表达式为真 那么整个表达式的值就是b的值 
			如果a表达式为假 那么整个表达式的值就是c的值 

					printf("%d\n",1>2?3:4);

	
	
	3. 假设现有有一个整型变量a 请你将a的第8个bit位取反 其他bit位不变 (位操作)

			xxxxxxxx xxxxxxxx xxxxxxx0 xxxxxxxx

		==>
			xxxxxxxx xxxxxxxx xxxxxxx1 xxxxxxxx
	
	
			任何数&上1 结果都是其本身
				
				x = 1   x&1 = 1   
				x = 0   x&1 = 0
				
			任何数|上0 结果都是其本身 
				
				x = 1   x|0 = 1 
				x = 0   x|0 = 0
			
			任何数^上1 结果都是其本身取反 
				
				x = 1   x^1 = 0 
				x = 0   x^1 = 1
			任何数^上0 结果都是其本身 
				 
				x = 1   x^0 = 1 
				x = 0   x^0 = 0
	
		   xxxxxxxxxxxxxyxxxxxxxx 			a
		   
		^  0000000000000100000000         2 ^ 8 (1<<8)
		———————————————————————————————————— 
		   xxxxxxxxxxxxxkxxxxxxxx
		   
	
	
 3.三大结构   

	1. 顺序结构 
			在代码块中的代码都是按照从上到下的顺序执行。 
			{
				xxx;
				yyy;
				zzz;
			}
	
	2. 选择/分支结构
			
			if   
			else if 
			else 
			
			switch  - case 
	
	3. 循环结构
			
	
			while 
			
			for 
	
	
	
	0. 求所有的水仙花数
	水仙花数: 他是一个三位数 满足个位的立方+十位的立方 +百位的立方 的和等于他本身的值的数
	
			int i = 0;
			for(i=100;i<1000;i++)
			{
				//个位
				int gewei = i%10;   // 123    123%10 = 3 
				//十位 
				int shiwei = i/10%10;		// 123    123/10%10 = 2
				//百位 
				int baiwei = i/100 ;
				if( gewei * gewei *gewei + shiwei *shiwei*shiwei +baiwei*baiwei*baiwei	== i)
				{
					printf("%d\n",i);
				}
			}
			
	
	2.求100-1000之间满足各位数字之和是5的所有数。
	
		int i=0;
		for(i=100;i<1000;i++)
		{
			//个位
			int gewei = i%10;   // 123    123%10 = 3 
			//十位 
			int shiwei = i/10%10;		// 123    123/10%10 = 2
			//百位 
			int baiwei = i/100 ;
			if(gewei + shiwei + baiwei == 5)
			{
				printf("%d\n",i);
			}
		}
	
	
	
	《算经》中提出一个著名的“百钱买百鸡问题”,鸡翁一,值钱5,鸡母一,值钱三,鸡雏三,值钱一,
	百元买百鸡,问翁,母,雏各几何?
	
	//	5x + 3y + z/3 = 100; 
	//	x + y + z = 100;

	int x ; //鸡翁
	int y ; //鸡母 
	int z ; //鸡雏
	
	for(x=0; x<21 ;x++)
	{
		for(y=0;y<34;y++)
		{
			for(z=0;z<100;z+=3)
			{
				if(x+z+y == 100 && (5*x + 3*y + z/3 == 100 )  )
				{
					printf("x=%d , y=%d , z=%d\n",x,y,z);
				}
			}
		}
	}
举报

相关推荐

0 条评论