C语言代码编写规范 第一个:注意缩进 用tab键缩进对齐 第二个:适当的空行 第三个:注释,简明扼要 C语言注释只有两种写法: 第一种:单行注释 //注释文字 第二种:块注释 /* 注释的内容 */,块注释不能嵌套 尤其是重要的核心代码必须写注释 第四个:命名,通俗易懂,英文,千万不要用拼音
C语言中的运算符 算术运算符 + - * / % (取余) 关系运算符 > < == != >= <= 逻辑运算符 ||逻辑或 &&逻辑与 !逻辑非 指针运算 * & 三目运算符 ?: 求数据类型大小,变量大小 sizeof 位运算 & | ~ ^ 组合运算 += -= *= \= &= |= 移位运算 >> << 自增自减 ++ -- (1) 除法 情况一: 两个整数相除,结果取整,而且不会四舍五入 情况二: 除法运算中有一个是小数 1/2 --》结果不是0.5 是0 16/3 --》5 2/3 --》 [url=][/url]
#include <stdio.h>int main(){ //int a=1/3; int a=2/3; float b=2/3; float c=2.0/3; // 2/3.0 2.0/3.0 int d=2.0/3; printf("%d\n",a); printf("%f\n",b); printf("%f\n",c); printf("%d\n",d);}[url=][/url]
结果如下: 00.0000000.6666670
(2)取余,计算余数 只能用于整数运算 15%2 余数1 15.0%2 不对的,小数不能参与取余运算 实际开发作用: 除法和取余配合实现获取一个数的各个位 任意输入一个整数,编程得到这个整数总共多少位,各个位分别是多少 7545 (3)逻辑运算,跟条件判断配合在一起使用 if(a>b) 数学中: 10<x<100 C语言中: if(x>10 && x<100) if(姓名==zhang || 姓名==王) //或者 if(姓名==zhang && 富二代) //并且 重点:区分==和= ==用来判断变量是否相同 if(a==b) = 赋值运算符号 C语言规定的真和假 非零就是真 1 18 -9 零就是假 表达式一 || 表达式二 || 表达式三 //从左到右,有一个条件为真,后面的都不用运算了,整个表达式都为真 表达式一 && 表达式二 && 表达式三 //从左到右,有一个条件为假,后面的都不用运算了,整个表达式都为假 if(有房&&有车&&帅) 逻辑非 真--》假 假--》真 [url=][/url]
#include<stdio.h>int main(){ int a=78; int b=8; if(!(a<b)) printf("a>b\n");}[url=][/url]
结果如下: a>b
(4) 三目运算符 表达式1?表达式2:表达式3 判断表达式1是否为真 为真 --》执行表达式2 为假 --》执行表达式3 [url=][/url]
#include <stdio.h>int main(){ int a,b; printf("请输入两个整数!\n"); //scanf("%d",&a); //获取键盘输入整数保存到变量a的地址中 //scanf("%d",&b); scanf("%d%d",&a,&b); //用三目运算符比较他们的大小 int ret=(a>b)?a:b; printf("%d和%d中较大的一个数是:%d\n",a,b,ret);}[url=][/url]
结果如下: 请输入两个整数!152015和20中较大的一个数是:20
(5)位运算(重点) 对整数的二进制进行运算 按位与 & 只要有一个是0结果就是0,全部都是1,结果就是1 比如: 18&16结果是多少? int a=89; int b=96; a&=b; //等价于 a=a&b; 18 --》二进制 10010 16 --》二进制 10000 10000 特点: 任意一个整数要求把它的第三位二进制置0,其它位不允许改变 125--》二进制1111101 --》最终希望的结果1111001 1111101 --》125 1111011 & 1111001 任何二进制位跟1进行按位与运算结果保持不变 任何二进制位跟0进行按位与运算结果一定是0 按位或 | 只要有一个是1,结果就是1,全部都是0,结果就是0 比如: 18|16结果是多少? 18 --》二进制 10010 16 --》二进制 10000 10010 特点:实际开发中,用位或运算去设置某一位二进制为1 int a=785; 785 00000.....100 或 任何二进制位跟0进行按位或运算结果保持不变 任何二进制位跟1进行按位或运算结果一定是1 按位异或 ^ 相同为0,相异为1 比如: 18^16结果是多少? 18 --》二进制 10010 16 --》二进制 10000 00010 特点:实际开发中我想把某个数的二进制取反 比如: int a=785 第三位二进制取反 785 0000........100 异或 一个数跟自己异或,结果为0 a^a结果为0 异或满足交换律 a^b^a等价于 a^a^b 一个数跟0异或,结果保持不变 a^0结果为a
按位取反 ~ 0变成1 1变成0 比如: ~18结果是多少? 18 --》二进制 10010 ~18 --》 01101 (6)组合运算(复合运算) += a+=10; //等价于 a=a+10; (7)移位 左移 << 把一个整数的二进制整体向左移动若干位,低位补0 18<<2; //18左移2位 0000000000.........10010<<2 特点:一个数左移n位,相当于乘以2的n次方 右移 >> 把一个整数的二进制整体向右移动若干位,高位补什么?? 算术右移: 高位补符号位 逻辑右移: 高位补0 特点:一个数右移n位,相当于除以2的n次方 (8)自增和自减 a++ 后置++ 先使用a原本的值,然后再把a加1赋值给自己 ++a 前置++ 先把a加1,然后再使用加一之后的a a-- 后置-- 先使用a原本的值,然后再把a减1赋值给自己 --a 前置-- 先把a减1,然后再使用减一之后的a
[url=][/url]
#include <stdio.h>int main(){ int a=78; //int b=a++; //后置++ int b=++a; //前置++ int c=a++; printf("b is:%d a :%d c:%d\n",b,a,c);}[url=][/url]
结果如下: b is:79 a :80 c:79
练习: 1. float a=1.6; if(a==1.6) //请问这个条件是否成立,为什么 [url=][/url]
#include <stdio.h>int main(){ float a=1.6; //不能精准表示,整数部分和小数部分 float b=1.5; //可以精准表示 if(b==1.5) printf("b==1.5\n"); else printf("b!==1.5\n"); if(a==1.6) //某些小数在计算机中是无法精准表示的 //左边的a是个变量,它里面存放的是1.6的二进制的近似值 //右边的1.6是个常量,精度高一些 printf("a==1.6\n"); else printf("a!==1.6 a is:%f\n",a);}[url=][/url]
结果如下: b==1.5a!==1.6 a is:1.600000
2. int a=10; int b=6; if((a<2)||(b=18)) printf("a ,s:%d b is:%d\n",a,b); if((a<12)&&(a>b)&&(a=96)) printf("a ,s:%d b is:%d\n",a,b); [url=][/url]
#include <stdio.h>int main(){ int a=10; int b=6; if((a<2)||(b=18)) //判断a<2或者18赋值给b printf("a is:%d b is:%d\n",a,b); if((a<12)&&(a>b)&&(a=96)) printf("a ,s:%d b is:%d\n",a,b);}[url=][/url]
结果如下: a is:10 b is:18
3. 用三目运算符实现三个整数求最大值 [url=][/url]
#include <stdio.h>int main(){ int a,b,c; printf("请输入三个整数!\n"); scanf("%d%d%d",&a,&b,&c); //scanf("%f",&m); //分步骤写 int firstmax=(a>b)?a:b; int max=(firstmax>c)?firstmax:c; //合并写 //int result=((a>b)?a:b)>c?((a>b)?a:b):c; printf("最大值result is:%d\n",max);}[url=][/url]
结果如下: 请输入三个整数!5 9 4 最大值result is:9
总结按位或,按位异或的特点 完成任意一个整数m,要求把它的第三位二进制置零,置一,取反,其它二进制位不允许改变
|