C语言学习总结(二) 基本运算

第三章、基本运算

(运算符、算数运算符、关系运算符、逻辑运算符、三目运算符、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)

 1 思路:
 2 1)接收用户输入的字符串
 3 2)判断用户是不是敲了回车键
 4 //定义字符变量接收字符
 5 char ch;
 6 //定义一个计数器变量,用于保存字符的个数
 7 int count=0;
 8 //接收用户输入的字符串的第一个字符
 9 scanf("%c",&ch);
10 //通过循环依次获取输入缓冲区的其他字符
11 //ch = ‘\n‘ 判断取到的字符是否是换行符
12 //此处如果是换行符,表示用户输入结束
13 while (ch!=‘\n‘) {
14 //计数器+1
15 count++;
16 //再次获取输入缓冲区的下一个字符 scanf("%c",&ch);
17 }
18 }
19 //打印计数器的值 printf("count = %d\n",count);

统计从键盘输入一行字符的个数

案例2:(while,switch)

 1 思路:
 2
 3 1)一直循环等待用户输入
 4
 5 2)输入四个字符,打印对应的方向
 6
 7 switch
 8
 9 //定义变量存储用户输入的内容
10
11 char ch;
12
13 //定义标志,0-正常,1-退出
14 int flag=0;
15 printf("请控制小人移动:w.上 s.下 a.左 d.右 q.退出\n");
16
17 while (!flag) {
18
19 scanf("%c",&ch); switch (ch) {
20
21 //判断用户输入了大写和小写的w的情况
22
23 case ‘w‘:
24 case ‘W‘:
25
26 printf("上\n");
27
28 break;
29
30 //判断用户输入了大写和小写的s的情况
31
32 case ‘s‘:
33
34
35 case ‘S‘:
36
37 printf("下\n");
38
39 break;
40
41 //判断用户输入了大写和小写的a的情况
42
43 case ‘a‘:
44 case ‘A‘:
45
46 printf("左\n");
47
48 break;
49
50 //判断用户输入了大写和小写的d的情况
51
52 case ‘d‘:
53 case ‘D‘:
54
55 printf("右\n");
56
57 break;
58
59 case ‘q‘:
60
61 case ‘Q‘:
62
63 printf("已退出\n");
64
65 flag = 1;
66 break;
67
68 } } 

输入wsad,打印对应的方向

案例3:(if...else,while)

 1 思路
 2 //1、定义变量,保存玩家竞猜的数字和电脑随机产生的数字
 3 //2、让电脑随机产生一个1-1000之间的数
 4 /*
 5 难点:如何产生1-1000的数?
 6 arc4random_uniform(1000) 产生的是 0-999之间的整数
 7 arc4random_uniform(1001) 产生的是 0-1000之间的整数,
 8 我们要求的是1-1000,所以不符合
 9 arc4random_uniform(1000)+1 产生的是:0(+1)-999(+1),是 1-1000之间的数
10 得出结论: 要产生m,n之间的随机数公式
11 arc4random_uniform(n-m+1)+m
12 如产生 10-50之间的随机数
13 arc4random_uniform(50-10+1)+10;
14 1-1000之间的随机数
15 arc4random_uniform(1000-1+1)+1
16 */
17 //3、通过循环控制,让用户最多可以竞猜10次
18 // 判断如果竞猜的数字>随机产生的数??示猜大了
19 // <随机产生的数 ??示 猜小了
20 // ==随机产生的数 ??示 猜对了, 如果猜对了,循环则要停止,游戏结束
21
22 //代码实现
23 int main() {
24 //定义变量
25 int inputNum=-1,randomNum=-1,m=1,n=1000;
26 int flag=1;
27 int oldNum=0;//用于保存上一次竞猜的值
28 int count=1;
29 int totalCount = 10;
30 //设定游戏总次数
31 //产生一个随机数
32 // 10-50
33 // m,n之间的随机数
34 // arc4random_uniform(n-m+1)+m;
35 randomNum = arc4random_uniform(n-m)+m;
36 //循环竞猜
37 printf("%d\n",randomNum);
38 while (flag) {
39 if (count<=totalCount) {
40 //??示用户输入一个数字 printf("\n请竞猜[%d,%d]之间的一个数字,%d次机会:\n",m,n,totalCount);
41 scanf("%d",&inputNum);
42 // 判断如果竞猜的数字>随机产生的数??示猜大了
43 if (inputNum > randomNum) {
44 printf("上次竞猜:%d,本次竞猜:%d \n竞猜结果:猜大了!\n剩余次数:%d \n",oldNum,inputNum,totalCount-count);
45 }else if (inputNum < randomNum){
46 // <随机产生的数 ??示 猜小了
47 printf("\n上次竞猜:%d,本次竞猜:%d \n竞猜结果:猜小了!\n剩余次数:%d
48 \n",oldNum,inputNum,totalCount-count);
49 }else{
50 // ==随机产生的数 ??示 猜对了,如果猜对了,循环则要停止,游戏结束
51 printf("\n上次竞猜:%d,本次竞猜:%d \n竞猜结果:猜对了!\n",oldNum,inputNum); printf("本次竞猜结束!\n");
52 flag = 0;
53 }
54 //竞猜后,让本次的值保存到oldNum中 oldNum = inputNum;
55 //计数器增加
56 count++;
57 }else{
58 printf("%d次都没有猜对,你的智商不适合玩这个游戏!\n",totalCount);
59 //让程序退出
60 flag = 0;
61 }
62 }
63 return 0; }

《疯狂猜数字》

案例4:双层for循环打印图形

 1 /*
 2  使用循环打印三角形
 3  ---*
 4  --***
 5  -*****
 6  *******
 7  */
 8 #include<stdio.h>
 9 int main(){
10     for (int a=0; a<4; a++) {
11         for (int b=0; b<a+4; b++) {
12             if(b<3-a){printf(" ");
13             }else
14             printf("o");
15         }
16         printf("\n");
17     }
18     return 0;
19 }

打印三角形

时间: 2024-10-26 09:47:32

C语言学习总结(二) 基本运算的相关文章

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

C语言学习(二)——字符串和格式化输入输出

C语言学习(二)——字符串和格式化输入输出 1.char数组类型和空字符 C没有为字符串定义专门的变量类型,而是把它存储在char数组里.数组的最后一个位置显示字符\0.这个字符就是空字符,C用它来标记字符串的结束,其ASCII码的值为(或者等同于)0.C的字符串存储时通常以这个空字符结束,该字符的存在意味着数组的单元数必须至少比要存储的字符数多1.计算机可以自己处理大多数这些细节问题(例如,scanf( )会添加'\0'使得数组内容成为C字符串). 2.strlen( )函数与sizeof运算

Go语言学习笔记(二) [变量、类型、关键字]

日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变量的类型在变量名的后面.例如:不是,int a,而是 a int.当定义了一个变量,它默认赋值为其类型的 null 值.这意味着,在 var a int后,a 的 值为 0.而 var s string,意味着 s 被赋值为零长度字符串,也就是 "". 3.Go语言的变量声明和赋值 在Go中使

C++语言学习(二)——C++对C语言基础语法的扩展

C++语言学习(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.实用性增强 C语言中变量的定义必须在作用域开始的位置进行定义. #include <stdio.h> int main(int argc, char *argv[]) { int i;//定义变量 int j; //使用变量 for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++)

C++语言学习(二十)——自定义内存管理

C++语言学习(二十)--自定义内存管理 一.统计类对象中成员变量的访问次数 mutable是为了突破const函数的限制而设计的,mutable修饰的成员变量将永远处于可改变的状态.mutable成员变量破坏了只读对象的内部状态,而const成员函数保证只读对象的状态不变性,因此mutable成员变量无法保证只读对象状态的不变性. #include <iostream> using namespace std; class Test { public: Test():m_count(0) {

C语言学习笔记(二) static关键字详细分析

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用st

c语言学习之二

记得复读的时候,数学老师就经常给我们说,每天让自己轻松一点,不要给自己找那么多的麻烦……他不是让我们什么都不干,而是每天积累一点点,弄懂以前不明白的问题,让自己的生活过得轻松一点.我是十分认可这句话的,不管你学什么,都要扎扎实实的弄懂一点,不要贪多,贪多反而让你消化不了,反而会让你迷惑重重.学习任何东西,我们一定要知其所以然……懂得原理.就像以前老师为什么总是让我们去演算书上帮我们总结好的结论. 废话不多少,今天我们说一下C语言的常量和变量. 常量就是不能改变的量. 定义一个常量有两中方式: ①

【GO】GO语言学习笔记二

基本类型: 布尔型:boolean 整型:int8,byte,int16,int,uint,uintptr等 浮点型:float32,float64 复数类型:complex64,complex128 字符串型:string 字符型:rune 错误类型:error 复合类型: 指针:pointer 数组:array 切片:slice 字典:map 通道:chan 结构体:struct 接口:interface 1.布尔型,与其他语言中的布尔型一样 2.整型: a.类型表示 需要注意的是,int和

C语言学习笔记二

第二章 数组 一,定义: 数组是有序数据的结合,同一数据类型 整型数组     int arr[10]={0,1,2,4,5,6,7,8,9}; 字符数组     char str[6]={'h','e','l','l','o','\0'};  \0是结束标志,如果不加,系统会自动给后面补个\0 字符串  char str[]="hello"; 在数组中,   指针-指针得到是两个地址之间元素的个数. sizeof(数据名)表示的是数组整个的大小. 其余情况都指数组首元素大小 关于字符