C语言学习总结(二) 运算流程
第三章、基本运算
(运算符、算数运算符、关系运算符、逻辑运算符、三目运算符、ASXLL码)
一、什么是运算符?
概念:是编译程序执行特定的算术或逻辑操作的符号;
分类:算术运算符、 关系运算符、逻辑运算符、按位运算符。
按照运算操作数分为:
- 单目运算:只有一个操作数 如 : i++ ! sizeof
- 双目运算:有两个操作数 如 : a+b
- 三目预算:C语言中唯一的一个,也称为问号表达式 a>b ? 1 : 0
运算遵循规则:数学的运算规则,先看优先级,再看结合律(从左到右【赋值运算为从右往左x=y=z】);
二、算术运算
“ + ”加法运算符 “ - ”减法运算符 “ * ” 乘法运算符 “ / ”除法运算符 “ % ” 取余运算符.
- 1.不同数据类型精度不一样.double>float>int. 取余运算符只能整数;
- 2.若用高精度向低精度变量赋值.会丢失精度.如:int a=1.8;那么a值是1.(非四舍五入)
- 3.运算优先级是.从左到右 但: * = / = % > + = - 如果要人为改变则加().
- 4.运算时两个数据精度不一样,会自动类型转换,且是低精度向高精度转换.
- 5.同精度运算只能得到同精度的结果.如果需要提高精度,需要强制类型转换.
三、赋值运算
概念:把“=”号右面的值赋值给左边的变量;
注意:等号的左边一定是变量;
- a=10; 对;
- 10=a; 错;
复合赋值运算符:+=, -=, *=, /=, %=;
四、自增自减运算符:
概念:让连接的操作数自身的值+1或者-1
- “ ++ ” 自增运算符
- “ - - ”自减运算符
- 1.变量才能自我变化,如自增或自减,但常量不能.
- 2. ++a,与a++,对a本身没有区别,但是参与其它运算时,a++这个整体的值没有变化.
五、siziof运算符
概念:计算常量、变量、数据类型在我们内存中占用的字节数;
- 常量上 : sizeof(10) sizeof(2.3) sizeof('a') ;
- 变量上:int a; sizeof(a);
- 数据类型上:sizeof(int) sizeof(float) sizeof(char);
- sizeof不是一个函数,是一个运算符;
- sizeof('a') 4个字节,字符型的常量在C标准的编译中用int型存储的 ;
六、关系运算
“ == ” “ > ” “ < ” “ >= ” “ <= ” “!=”
用法:对数据进行比较,看是否成立,条件成立=真(1),条件不成立=假(0).
- 1.关系运算符运算结果是一个int值.0或1.
- 2.优先级:>,<,>=,<=,优先级相等, 但大于==和!=.同时==与!=优先级相等.
- 3.如果优先级相同的两个运算,先后顺序看结合律(结合律指要么从左往右运算,要么从右往左运算),关系运算符结合律是从左往右,即:先看优先级,再看结合律.如下:
int b=1!=2>3<4; 等效于:2>3为假=0. 0<4为真=1, 1!=1为假=0.所以最终结果=0;
七、逻辑运算
“ ||”或 “ && ”与 “ ! ”非
用法:对于多个表达式进行并列真假判断
- ||只要有一边的表达式为真,则结果为真1,两边都不成立,则结果为假0.
- &&必须两边全部为真才为真,只要有一边的表达式为假,结果为假.
- !则是取当前结果的反面.真假调换.
注意:
- 1.所有数据都有真假值.0为假,其它的数都为真(规定). 结合律:从左往右执行,
- 2. 如果||表达式左边表达式已经为真,则右边不执行.而&&只要左边为假右边不执行.
- 3.优先级顺序为:小括号() > 负号( -) > ! > 算术运算符 > 关系运算符 > && > ||
八、三目运算符--(可读性差,一般不用)
定义:
<真假判断表达式1>?<表达式2>:<表达式3>;
如: 1+2>4?2+2:3+4; 这个运算过程为:1+2=3, 3>4为假.则运行3+4这个表达式.所以最终结果为7.
九、ASCLL码
概念:美国标准信息交换码
字符运算会自动转换成ASCLL表对应的值:
‘a’-‘b’ =( 97-98)
常用:
- 48~57为0到9十个阿拉伯数字;
- 65~90为26个大写英文字母;
- 97~122号为26个小写英文字母;
第二章、流程控制
(顺序结构、选择结构--if/swich、循环结构--do...while/for)
一、程序的结构
1.默认(顺序结构):从上到下顺序执行
2.选择结构
是指编程中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作其中的一个
if分支语句:
--当程序执行的过程中有多个选择时使用
格式:
1.if(表达式){
语句块;
}
2.if(表达式1){
语句块1;
}else if(表达式2){
语句块2;
}else{
语句块3;
}
等等............
注意:
- 1.一次if语句只能执行给出的所有操作中的一个.
- 2.if();这种用法时if语句只有紧跟后面一句有效.(读到下一个;号结束).且不能定义变量
- 3.除了if();这种用法,所有的if()与{}之间不能有;号
- 4.if(条件判断){},里面的条件判断如果是与常量的等于判断,则常量写在前面(建议);
- 5.if(1)、if(-1)、if(a=5) 永真 if(0) 永假 ;
- 6.if(表达式) return 0; //程序退出,代码不会再往下执行了
swich分支语句
--同if一样也用于条件判断,当表达式的结果有多种情况时用switch比较方便
格式:
switch(表达式){ --->表达式:返回值是整型
case 常量1: 语句1; --->常量必须是整型
break;
case 常量n; 语句n; --->语句中定义变量会造成作用于紊乱:(int a=10)错!
break;
default: 语句n;
如果上面条件都不满足执行default;
}
注意:
- 1.条件结果只能是整数,而case只能是整型常量.注意:case ‘a’;
- 2.break 可有可无,有则执行完跳出,没有则继续执行,直到遇到下一个break或执行完.
- 3.default可有可无,有则如果条件都不满足,会执行这句,无则条件都不满足,执行结束.
- 4.case下面要定义变量必须加{}.且case后的常量值不能重复
- 5.switch语句可以全部用if语句替代.但if语句不能全用switch替代.
break和continue关键字使用:
概念:
break和continue语句都可以用在循环中,用来跳出循环(结束循环);
break语句还可以用 在switch语句中,用来跳出switch语句。
注意:
// if(表达式)else{ ...... break;......}
1)break语句对if-else的条件语句不起作用;
2)在多层循环中,一个break语句只向外跳一层。
3)continue表示跳过本次循环,而不是跳出循环体;
3.循环语句
概念:
是指编程循环语句,当满足条件时进入循环,循环判断,直到不满足条件跳出循环,根据条件反复执行一段代码的时候用
1.while语句:
格式:
while (条件) { ---先判断再执行:条件为真执行代码块,条件为假不执行;
语句块;
}
注意:
int num = 3;
while (3 == num) {
printf("num = %d\n",num);
num++;
}
1、通常把常量写在前面
2、while 后如果只有一条语句它可以省略大括号
3、while小阔号后面不可以直接写分号(没有意义)
4、作用域:内部代码块中定义的变量不可以在外边代码块中访问
5、作用域紊乱:while (1 < 3) int num = 5;
6、最简单死循环(条件一直为真,循环无法结束):while (1);
2.do...whlie语句:
格式:
do{
语句块;
} while(条件);
特点:与while相比,先执行后判断,至少会执行一次语句块;
3.for语句:
格式:
for(表达式1 ;表达式2 ;表达式3 ){ ---3个语句,2个分号隔开。
语句块4;
}
执行过程:
1—>2—>4—>3—>2—>4—>3......
表达式1:循环变量初赋值,开始前执行,只执行一次;
表达式2:循环条件,为真,就执行语句块4的代码。为假,循环结束;
表达式3:循环变量增值:每次执行完毕后执行;
注意:
- 1.如果碰到continue,则跳出本次循环继续下一次判断,如果条件成立继续执行循环.
- 2.如果碰到break无论条件满足与否,循环立刻结束.
- 3.continue与break跳出的都是当前所在的循环作用域.如果外层有循环,不受影响.
- for(; ;) 语句相当于while(1) 语句,为死循环。
for循环的嵌套:
1.for(int a=0;a<5;a++){
语句块1;
for(int b=0;b<10;b++){
语句块2;
}
}
核心:
- 外层for循环执行一次,内层执行10次;
- 打印图形:外层控制行数:为5行(a<5),内层控制列数:为10列(b<10);
案例1:(while)
思路:
)接收用户输入的字符串
)判断用户是不是敲了回车键
//定义字符变量接收字符
char ch;
//定义一个计数器变量,用于保存字符的个数
int count=;
//接收用户输入的字符串的第一个字符
scanf("%c",&ch);
//通过循环依次获取输入缓冲区的其他字符
//ch = '\n' 判断取到的字符是否是换行符
//此处如果是换行符,表示用户输入结束
while (ch!='\n') {
//计数器+1
count++;
//再次获取输入缓冲区的下一个字符 scanf("%c",&ch);
}
}
//打印计数器的值 printf("count = %d\n",count);
统计从键盘输入一行字符的个数
案例2:(while,switch)
思路: )一直循环等待用户输入 )输入四个字符,打印对应的方向 switch //定义变量存储用户输入的内容 char ch; //定义标志,0-正常,1-退出
int flag=;
printf("请控制小人移动:w.上 s.下 a.左 d.右 q.退出\n"); while (!flag) { scanf("%c",&ch); switch (ch) { //判断用户输入了大写和小写的w的情况 case 'w':
case 'W': printf("上\n"); break; //判断用户输入了大写和小写的s的情况 case 's': case 'S': printf("下\n"); break; //判断用户输入了大写和小写的a的情况 case 'a':
case 'A': printf("左\n"); break; //判断用户输入了大写和小写的d的情况 case 'd':
case 'D': printf("右\n"); break; case 'q': case 'Q': printf("已退出\n"); flag = ;
break; } }
输入wsad,打印对应的方向
案例3:(if...else,while)
思路
//1、定义变量,保存玩家竞猜的数字和电脑随机产生的数字
//2、让电脑随机产生一个1-1000之间的数
/*
难点:如何产生1-1000的数?
arc4random_uniform(1000) 产生的是 0-999之间的整数
arc4random_uniform(1001) 产生的是 0-1000之间的整数,
我们要求的是1-1000,所以不符合
arc4random_uniform(1000)+1 产生的是:0(+1)-999(+1),是 1-1000之间的数
得出结论: 要产生m,n之间的随机数公式
arc4random_uniform(n-m+1)+m
如产生 10-50之间的随机数
arc4random_uniform(50-10+1)+10;
1-1000之间的随机数
arc4random_uniform(1000-1+1)+1
*/
//3、通过循环控制,让用户最多可以竞猜10次
// 判断如果竞猜的数字>随机产生的数C语言学习总结(二) 运算流程的更多相关文章
- Go语言学习笔记二: 变量
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
- GO语言学习(二)Windows 平台下 LiteIDE 的安装和使用
1. 安装 Go 语言并设置环境变量 参考GO语言学习(一) 2. MinGW 的下载和安装 Windows 下的 Go 调试还需要安装 MinGW. 2.1 下载安装工具的安装 最新版本下载安装工具 ...
- Activiti工作流学习(二)流程实例、执行对象、任务
一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流 ...
- Dart语言学习(十二) Dart面向对象
Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...
- 【GO】GO语言学习笔记二
基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 ...
- java入门学习(十二)运算语句 if switch
这两天在网上做兼职,耽误了些博客见谅哈 欢迎来我的博客:www.taomaipin.com java中的运算语句而且频繁用到的无法就是条件语句和循环语句,包括if,for,while,switch,b ...
- C语言学习笔记二---数据类型运算符与表达式
一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/ b.// 二.C的常用输 ...
- c语言学习篇二【基础语法】
一.定义常量: 使用 #define 预处理器. 使用 const 关键字. #include <stdio.h> int main() { const int LENGTH = 10;/ ...
- C语言学习笔记二
第二章 数组 一,定义: 数组是有序数据的结合,同一数据类型 整型数组 int arr[10]={0,1,2,4,5,6,7,8,9}; 字符数组 char str[6]={'h',' ...
随机推荐
- 【03】尽可能使用const
1.为什么搞出const关键字? const指定一个语义约束,指定一个对象不可修改.如果一个对象不可修改,就应该说出来. 2.const与指针 const可以修饰指向之物,也可以修改指针本身.STL中 ...
- Google高级技巧—google Hack★★★★
google hacking事实上并算不上什么新东西,当时并没有重视这样的技术,觉得webshell什么的,并无太大实际用途.google hacking事实上并非如此简单... 经常使用的googl ...
- vim字符编码设置
vim 编码方式的设置 和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2.UTF-8 等流行的 Unicode 编码方式.然而不幸的是,和很多来自 Linux ...
- .net System.TypeInitializationException 类型初始值设定项引发异常
错误原因:静态字段连接数据库内容错误(应为Integrated Security=True) 果然解决! 来自:http://blog.csdn.net/zhang1597116/article/de ...
- JavaScript入门(5)
一.什么是数组? 数组是一个值的集合,每一个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数值. 好比一个团,团里有很多人.如下使用数组存储5个学生成绩: 二.如何创建数组 使 ...
- sql 判断表是否存在
if object_id(N'tablename',N'U') is not nulldrop table tablenamego if exists (select * from sysobject ...
- css position 定位
fixed 属于绝对定位,相对于浏览器窗口定位 (IE 6不支持) relative 相对定位,通过设置垂直或水平位置,让这个元素"相对于"它的原始起点进行移动. ...
- MVC3中使用AuthorizeAttribute特性来完成登陆权限的验证
以前判断用户是否登录,判断用户Session是否为空,一般会在这个页面写使用: if (HttpContext.Session.IsNewSession) { //todo Login } 每个需要验 ...
- SQL Server调优系列进阶篇 - 查询优化器的运行方式
前言 前面我们的几篇文章介绍了一系列关于运算符的基础介绍,以及各个运算符的优化方式和技巧.其中涵盖:查看执行计划的方式.几种数据集常用的连接方式.联合运算符方式.并行运算符等一系列的我们常见的运算符. ...
- 一、Maven环境搭建(windows 环境)
所需工具 : JDK 1.7 java 环境 Maven 3.3.9 下载最新版本 Windows 7 注 Maven 3.2 要求 JDK 1.6 或以上版本, 而 Maven 3.0/3. ...