IOS开发笔记4-流程控制/基本语句

1、关系运算符和关系表达式语言?

关系运算符用来比较两个表达式(数据)之间的大小关系,C语言中的关系运算符有 > 、>=、<、<=、=、!=来。

关系表达式由关系运算符连接起来的式子,就叫做关系表达式,也可以叫比较表达式。

int num1 = 10;
int num2 = 20;
num1 > num2; //这就是关系表达式

关系表达式描述的是1个条件,并且这个条件只有两种结果,一种是成立,另一种是不成立。char类型的数据也可以参与比较运算,比的是char数据对应的ASCII码值大小。

用int类型的变量来表示1个关系表达式的真假,0 代表假 ,1代表真

int num1 = 10;
int num2 = 20;
 
int result = num1 > num2; //result用于接收比较结果
int result1 = num1 < num2;
 
printf("result = %d\n",result); //输出 result = 0
printf("result1 = %d\n",result1); //输出 result = 1

2、逻辑运算符和逻辑表达式语言?

逻辑运算符:用来判断多个关系表达式之间的关系。C语言中常用的逻辑运算符有&&(逻辑与)、||(逻辑或)、!(逻辑非)。

逻辑表达式由逻辑运算符连接起来的关系表达式式子,就叫做逻辑表达式。

int num1 = 10, num2 = 20;
 
//存储关系表达式的结果
int result = num1 > num2; 
int result1 = num1 < num2;
 
//输出关系表达式的结果
printf("result = %d\n",result); //result = 0
printf("result1 = %d\n",result1); //result = 1
 
//对关系表达式的结果进行逻辑运算并存储收逻辑表达式的结果
int res = num && num1;
int res1 = num || num1;
int res2 = !res1;
 
//输出逻辑表达式的结果
printf("res = %d\n",res); // res = 0
printf("res1 = %d\n",res1); //res1 = 1
printf("res2 = %d\n",res2); //res2 = 0

&&运算:只有两个表达式同时成立,结果才为1,其他都为0

||运算:只有两个表达式同时不成立,才为0,其他都为1

!运算:表达式成立,结果为0,表达式不成立结果为1

逻辑运算短路问题:

&&是先计算左边的条件,再计算右边的条件。如果左边表达式的结果是不成立, 就可以直接确定整个逻辑表达式为不成立。右边的条件表达式将不会再执行。

|| 是先计算左边的条件,再计算右边的条件。如果左边的条件计算出来是成立,就可以直接确定整个逻辑表达式成立。右边的条件表达式将不会再执行。

int i  = 1,j = 1;
int res = i++ > 0 || ++i < 10; //i++ > 0已经为真,就不会执行 ++i < 10这个表达式了
int res1 = j++ < 0 && ++j < 10; //j++ < 0已经为假,就不会执行 ++j < 10这个表达式了
 
printf("res = %d\n",res); //res = 1
printf("i = %d\n",i); //i = 2
 
printf("res1 = %d\n",res1); //res1 = 0
printf("j = %d\n",j); //j = 2

3、运算符的优先级和结合性语言?

运算符优先级:C语言的表达式可以有很多种运算符来共同参与,当多种运算符参与表达式的时候,先算那1个,后算那1个呢?所以我们就要考虑运算符之间的优先级了。C语言中的运算符分为15个等级,1级的优先级最高,15级的优先级最低,运算符的优先级决定先进行那1个运算。

运算符的结合性:优先级决定了先算哪1个后算哪1个,但是当优先级相同的时候,是从左到右的计算,还是从右到左的计算则是根据结合性来决定的。



4、if-else语句的使用语言?

if结构

作用: 可以将1段代码在满足某个条件的时候执行,否则就不执行。

缺点: 只能在条件满足的时候执行代码,条件不满足的时候没法搞。

需求: 希望在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码。if结构也可以实现,但是效率低下,要写多个if结构语句,所以条件要判断多次。

int money = 599;
 
if(money >= 500){
    printf("走,下课小明请吃饭!\n");
}
 
if(money < 500){
    printf("放学别走,天台决战!\n");
}

if-else结构

作用:在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码. 并且条件只判断1次.

语法

if (条件表达式) {
    执行代码1;
} else {
    执行代码2;
}

if-else结构执行步骤

1.先计算if后条件表达式的结果。

2.如果结果为真:就执行if块中的代码1,执行完毕之后,结束if-else结构往下执行。特别注意这个时候不会执行else中的代码2。

3.如果结果为假:就跳过if中的代码1,执行else中的代码2,执行完毕之后继续往下执行。

if-else if-else结构:

作用: 可以有序的判断多个条件,当条件成立的时候执行对应的代码。

语法:

if(条件表达式1)
{
    执行代码1;
}
else if(条件表达式2)
{
    执行代码2;
}
else if(条件表达式3)
{
    执行代码3;
}
else
{
    执行代码;
}

if-else if-else结构执行步骤

1.从上到下的挨个的去判断每1个条件表达式,如果条件不成立,再判断下1个条件。

2.只要有1个条件是成立的,就会执行其中的代码,执行完毕之后就会立即结束整个结构。

3.如果所有的条件都不成立,那么就执行else中的代码。

5、变量的作用域语言?

当CPU在执行程序的时候,如果执行完1对大括弧,会将声明在这个大括弧之中的变量立即回收掉。所以,定义在1对大括弧之中的变量,只能在这个大括弧之中访问。出了这个大括弧就无法访问了,因为出了这个大括弧以后 定义在大括弧之中的变量就被系统回收掉了。

在多个层级关系的大括弧中,内层大括弧可以声明1个和外层大括弧名字相同的变量。在内层大括弧中,从声明同名变量的地方开始,访问这个同名变量访问的是内层变量。C语言根据变量作用域的不同,将变量分为局部变量全局变量

局部变量:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

全局变量:在所有函数外部定义的变量,称为全局变量。全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

#include <stdio.h>
 
int num = 10;//全局变量
 
int main() {
    printf("num = %d\n",num);//num = 10
    
    int num = 20;//局部变量
    printf("num = %d\n",num);//num = 20
    return 0;
}

6、三目运算符和三目表达式语言?

三目运算符有三个操作数参与运算,三目表达式就是有三个操作数参与运算的表达式。

语法:表达式1 ?  表达式2 : 表达式3;

执行流程:如果表达式1成立,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为条件表达式的值。

#include <stdio.h>
 
int main() {
    int a = 10;
    int b = a > 0 ? printf("printf函数返回值为int类型哦\n"):printf("不管你信不信,反正我信了\n");
    
    printf("b = %d\n",b);
    /*
     printf函数返回值为int类型哦
     b = 37
     */
    return 0;
}


7、如何生成一个随机数语言?

/*
先引入1个头文件.叫做stdlib.h
调用个函数.
int num =  arc4random_uniform(写1个整型的数);
就会返回0到这个整型的数-1中的1个随机的整数,然后赋值给num变量。
 */
 
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, const char * argv[]){
    
    int num =  arc4random_uniform(6) + 5; //产生5-10的随机数
    printf("num = %d\n",num);
    
    return 0;
}

8、基本语句语言?

C语言的基本语句跟Java中的差不多,所以,这里只是简单地提一下

  • 循环语句(do while、while、for)
  • 条件语句(if 、if-else、switch)
  • goto语句


9、基本运算语言?

计算机的基本能力就是计算,所以一门语言的计算能力十分重要。C语言之所以无所不能,很大原因在于它有强大的计算能力。C语言一共有34种运算符,其中的大多数运算符跟在Java中的用法是一样的。下面做一个简单介绍。

1.算术运算符

  • +  加法运算符
  • -  减法运算符,或负值运算符
  • *  乘法运算符
  • /  除法运算符
  • %  模运算符,或称取余运算符,要求%两侧均为整型

 

2.关系运算符

  • <   小于运算符
  • <=  小于等于运算符
  • >   大于运算符
  • >=  大于等于运算符
  • ==  等于运算符
  • !=  不等于运算符

* 关系运算的结果成立就为"真"(比如5>=4),不成立则为"假"(比如5<4)

* 在Java中,关系运算的结果为"真"就返回true,"假"则返回false,用boolean类型的变量来接收

boolean b1 = 5 > 4; // true

boolean b2 = 5 < 4; // false

C语言中没有boolean类型

在C语言中,关系运算的结果为"真"就返回1,"假"就返回0

int a1 = 5 > 4; // 1

int a2 = 5 < 4; // 0

* 还需注意的是,在C语言中,任何非0值都为"真",只有0值才为"假"

所以下面的做法是对的:

复制代码
int a = 10;

if (a) {
    printf("条件成立");
} else {
    printf("条件不成立");
}
复制代码

为a不为0,所以为"真",输出结果是:

若是在Java中,编译器直接报错了,因为if的括号()中只能放boolean类型的值。

以此类推,下面的写法也是对的:

复制代码
int a = 10;

if (a = 0) {
    printf("条件成立");
} else {
    printf("条件不成立");
}
复制代码

上述代码是完全合理的,编译器不会报错,只是个警告而已。因为a为0,所以为"假",输出结果是:

这样看来,C语言似乎比Java方便很多,其实有很大的陷阱在这里:

假设你本来是想判断a是否为0,那么本应该写if (a == 0),若你误写成了if (a = 0),那将是一件非常可怕的事情,因为编译器又不报错,这样的BUG就难找了。因此,像a==0这样的表达式,最好写成0==a,若你误写成0=a,编译器会直接报错的

复制代码
// 不推荐
if (a == 0) {
}

// 推荐
if (0 == a) {
}
复制代码

* 在C语言中,可以不保存关系运算的结果

因此,下面的写法是合法的:

1 int a = 10;
2 a > 10;
3 a == 0;

如果是在Java中,第2、3行编译器会直接报错,但在C编译器看来是合法的,只是个警告。

所以,这里又是一个陷阱,假设你的本意是想给a赋值为0,那么本应该写a = 0; ,若你误写成a == 0; ,那将又是一个非常难找的BUG,因为编译器根本不会报错。在1993年的时候,这个BUG差点让一桩价值2000万美元的硬件产品生意告吹,因为如果这个BUG不解决,这个产品就没办法正常使用。

 

3.逻辑运算符

  • &&  逻辑与运算符
  • ||  逻辑或运算符
  • !   逻辑非运算符

逻辑运算的结果也只有两个:成立就为"真",返回1;不成立就为"假",返回0

 

4.赋值运算符

1.简单的赋值运算符 = :int a = 5;

2.复合赋值运算符

  • +=  加赋值运算符。如a += 3+1,等价于 a = a +(3+1)
  • -=  减赋值运算符。如a -= 3+1,等价于 a = a -(3+1)
  • *=  乘赋值运算符。如a *= 3+1,等价于 a = a *(3+1)
  • /=  除赋值运算符。如a /= 3+1,等价于 a = a /(3+1)
  • %=  取余赋值运算符。如a %= 3+1,等价于 a = a %(3+1)

 

5.自增运算符和自减运算符

  • ++  自增运算符。如a++,++a,都等价于a = a+1
  • --  自减运算符。如a--,--a,都等价于a = a-1

 

6.逗号运算符和逗号表达式

* 逗号运算符主要用于连接表达式,例如:
1 int a = 9;
2 int b = 10;
3 
4 a = a+1 , b = 3*4;

用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为:

表达式1, 表达式2, … …, 表达式n

逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,...,最后计算表达式n

* 整个逗号表达式的值是最后一个表达式的值

复制代码
1 int a = 2;
2 int b = 0;
3 int c;
4 
5 c = (++a, a *= 2, b = a * 5); 
6 
7 printf("c = %d", c);
复制代码

++a的结果为3,a *= 2的结果为6,b = a * 5的结果为30。因此,输出结果为:

这里要注意的是,右边的表达式是有用括号()包住的,如果不用括号包住,也就是:

c = ++a, a *= 2, b = a * 5;
printf("c = %d", c);

输出结果将为:,因为c = ++a也属于逗号表达式的一部分,跟后面的a *= 2以及b = a * 5是相互独立的

 

7.条件运算符和条件表达式

其实就是三目运算符,一般形式为:表达式1 ? 表达式2 : 表达式3

int a = (b > 5) ? 10 : 9;

 

8.sizeof

* sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。

int size = sizeof(10);
printf("10所占的字节数:%d", size);

输出结果:10是int类型的数据,在64bit编译器环境下,int类型需要占用4个字节

* sizeof一共有3种形式

  • sizeof( 变量\常量 )
sizeof(10);

char c = 'a';
sizeof(c);
  • sizeof  变量\常量
sizeof 10;

char c = 'a';
sizeof c;
  • sizeof( 数据类型 )
sizeof(float);

注意,不可以写成sizeof float;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值