第三章、基本运算

(运算符、算数运算符、关系运算符、逻辑运算符、三目运算符、ASXLL码)

一、什么是运算符?

概念:是编译程序执行特定的算术或逻辑操作的符号;

分类:算术运算符、 关系运算符、逻辑运算符、按位运算符。

按照运算操作数分为:

  1. 单目运算:只有一个操作数 如 : i++       !       sizeof
  2. 双目运算:有两个操作数 如 : a+b
  3. 三目预算: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. “ - - ”自减运算符
格式: 变量名++           ++ 变量名         变量名--             -- 变量名 
  • 1.变量才能自我变化,如自增或自减,但常量不能.
  • 2. ++a,与a++,对a本身没有区别,但是参与其它运算时,a++这个整体的值没有变化.

五、siziof运算符

概念:计算常量、变量、数据类型在我们内存中占用的字节数;

用法:

  1. 常量上 : sizeof(10) sizeof(2.3) sizeof('a') ;
  2. 变量上:int a; sizeof(a);
  3. 数据类型上:sizeof(int) sizeof(float) sizeof(char);
注意事项:
  1. sizeof不是一个函数,是一个运算符;
  2. 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. ||只要有一边的表达式为真,则结果为真1,两边都不成立,则结果为假0.
  2. &&必须两边全部为真才为真,只要有一边的表达式为假,结果为假.
  3. !则是取当前结果的反面.真假调换.

注意:

  • 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)

常用:

  1. 48~57为0到9十个阿拉伯数字;
  2. 65~90为26个大写英文字母;
  3. 97~122号为26个小写英文字母;

第二章、流程控制

(顺序结构、选择结构--if/swich、循环结构--do...while/for)

一、程序的结构

1.默认(顺序结构):从上到下顺序执行

2.选择结构

是指编程中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作其中的一个

if分支语句:

--当程序执行的过程中有多个选择时使用

格式:

1.if(表达式){

语句块;

}

2.if(表达式1){

语句块1;

}else if(表达式2){

语句块2;

}else{

语句块3;

}

等等............

表达式求值:如果表达式的值为非0(真) 会执行语句块 0 (假) 不会执行语句块,;

注意:

  • 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;

}

}

核心:

  1. 外层for循环执行一次,内层执行10次;
  2. 打印图形:外层控制行数:为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语言学习总结(二) 运算流程的更多相关文章

  1. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  2. GO语言学习(二)Windows 平台下 LiteIDE 的安装和使用

    1. 安装 Go 语言并设置环境变量 参考GO语言学习(一) 2. MinGW 的下载和安装 Windows 下的 Go 调试还需要安装 MinGW. 2.1 下载安装工具的安装 最新版本下载安装工具 ...

  3. Activiti工作流学习(二)流程实例、执行对象、任务

    一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流 ...

  4. Dart语言学习(十二) Dart面向对象

    Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...

  5. 【GO】GO语言学习笔记二

    基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 ...

  6. java入门学习(十二)运算语句 if switch

    这两天在网上做兼职,耽误了些博客见谅哈 欢迎来我的博客:www.taomaipin.com java中的运算语句而且频繁用到的无法就是条件语句和循环语句,包括if,for,while,switch,b ...

  7. C语言学习笔记二---数据类型运算符与表达式

    一.C的基本语法单位 1.标识符:有效长度:31(DOS环境下) 2.关键字:main不是 3.分隔符:空格符,制表符,换行符,换页符 4.注释符:a./*.....*/   b.// 二.C的常用输 ...

  8. c语言学习篇二【基础语法】

    一.定义常量: 使用 #define 预处理器. 使用 const 关键字. #include <stdio.h> int main() { const int LENGTH = 10;/ ...

  9. C语言学习笔记二

    第二章 数组 一,定义: 数组是有序数据的结合,同一数据类型 整型数组     int arr[10]={0,1,2,4,5,6,7,8,9}; 字符数组     char str[6]={'h',' ...

随机推荐

  1. 【转】C++ 类中的static,const,及引用类型的初始化

    文档主要来自:http://blog.csdn.net/yjkwf/article/details/6067267 1. static类型 用static可以为类类型的所有对象所共有,像是全局对象,但 ...

  2. mysql中对数据库的每个表执行优化的存储过程

    说明:此处为<高性能mysql(第二版)>中的示例代码,除了数据库名 其他未经更改.仅供学习及参考 对数据库的每个表执行优化的存储过程 CREATE PROCEDURE `inventor ...

  3. 开启URL伪静态的方法

    ## 开启URL伪静态的方法.txt# 1. 请确认您服务器的类型. ThinkSNS的伪静态规则支持Apache.IIS.Nginx. 2. 请确认您的服务器支持URL Rewrite(可从服务器提 ...

  4. Activity 与ListActivity的区别

    转载自 http://www.cnblogs.com/bravestarrhu/archive/2012/05/06/2486703.html

  5. angularjs填写表单

    https://scotch.io/tutorials/handling-checkboxes-and-radio-buttons-in-angular-forms <!DOCTYPE html ...

  6. TCP三次握手/四次握手

    TCP连接三次握手 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样 ...

  7. Win10 10586 更新

    最近发现,电脑c盘突然少了许多,发现c盘多了个windowsBT文件夹,大概6个G,恩,win10 又推出更新了,版本10586. 不知道为啥,更新时win10 把原来的下载的删除了,大概出了什么错误 ...

  8. javaweb入门20160305---xml的解析入门

    一个XML文件除了我们人去读写以外,我们希望可以通过程序去读写,利用程序去增删改查XML的过程就是XML编程 CRUD:Create.Read.Update.Delete   XML的两种解析方式 d ...

  9. Servlet单实例多线程模式

    http://kakajw.iteye.com/blog/920839 前言:Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP默认是以 ...

  10. Java之反射的应用

      package com.zheges; import java.util.Date; public class Customer {//JavaBean 对象 private String nam ...