类型转换、分支结构、循环结构、循环控制语句

类型转换

混合运算中的类型转换

不同类型的数值数据 在进行混合运算时,要先转换成同一类型之后再运算。
无论是自动转换还是强制转换,都只是为了某次计算的需要 而对变量的数据长度进行的 临时性转换,并不会改变数据说明时对该变量定义的类型

自动类型转换

在这里插入图片描述
不论运算对象是否为不同的类型,float 型向 double 型的转换、char 型向 int 型的转换是必定要进行的。

强制类型转换

当较低类型的数据转换为较高类型时,一般只是形式上有所改变,而不影响数据的实质内容。
当较高类型的数据转换为较低类型时,则可能伴有数据的丢失。
强制类型转换一般用于自动类型转换不能达到目的的时候。

// 华氏度转摄氏度
#include <stdio.h>

int main(int argc, char const *argv[])
{
    float f, c;
    scanf("%f", &f);
    c = 5 / 9.0 * (f - 32);			// 若用5 / 9 * (f - 32),则结果为0!!!!!
    printf("%.2f\n", c);
    return 0;
}

赋值中的类型转换

浮点型与整型

在这里插入图片描述

单、双精度浮点型

在这里插入图片描述

字符型与整型

在这里插入图片描述

int 型 与 long 型

在这里插入图片描述

无符号整数

在这里插入图片描述

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int a = 5;
    float b = a/2;
    float c = (float)a/2;
    printf("%f\t%f\n",b,c);           // 2.000000     2.500000

    int d = 1.0f;                   // 把 f 改成其他字母(不包括l)会报错
    printf("%d\n", d);              // 1

    int e = 2.6f;                   // 把 f 改成其他字母(不包括l)会报错
    printf("%d\n", e);              // 2

    int g = 3.0l;                   // 把 l 改成其他字母(不包括f)会报错
    printf("%d\n", g);              // 3

    int h = 4.9l;                   // 把 l 改成其他字母(不包括f)会报错
    printf("%d\n", h);              // 4

    printf("%d\n", 1.0);            // 0
    printf("%d\n", 5.7);            // ??
    printf("%d\n", sizeof(1.0));    // 8, double 类型
    
    printf("%d\n", (int)1.0);       // 1
    printf("%f\n", 1);              // 1.000000			???

    printf("%d\n", (int)(1.0 + 'A'));       // 66

    float fl = 1.92;
    printf("%d %f\n", (int)fl, fl);         // 1    1.920000

    return 0;
}

忽略掉各种警告后,
在这里插入图片描述
运行结果如下:
在这里插入图片描述

分支结构

if 语句

if(条件表达式1){
    语句块1} else {
    语句块2}					// 基本形式


if(条件表达式1){
    if(条件表达式1.1){
        语句块1.1} else {
        语句块1.2}
} else {
    if(条件表达式2.1){
        语句块2.1} else {
        语句块2.2}
}					// 嵌套形式


if(条件表达式1){
    语句块1} else if(条件表达式2){
    语句块2} else if(条件表达式3){
    语句块3} else if(条件表达式4){
    语句块4} ...				// 分层结构(多分支)

注意:
1、if 和 else 语句,if 后面可以没有 else,else 前面必须有 if 语句
2、else 后面不能加条件,但可跟 if
3、if 和 else 语句中间不能有间隔语句(if 控制下,有且仅有一条语句时,才可以省略花括号)

switch 语句

switch(变量或表达式)			// 必须为整型值或字符型值
{
    case 常量(表达式)一:
        语句块一; 
    	break;
    case 常量(表达式)二: 
        语句块二; 
    	break;
    ....
    case 常量(表达式)n: 
        语句块 n; 
    	break;
    default: 
        语句块 n+1;			
        break; 				// 这里的 break 可以省略
}

循环结构

for 循环

for(表达式一; 表达式二; 表达式三){
    语句块;
}

表达式一:赋初值给循环变量,通常是赋值表达式;在for语句前给循环变量赋初值时,该表达式可省略
表达式二:循环的条件,根据条件判断是否结束循环,通常是关系表达式或逻辑表达式;死循环时可省略
表达式三:修改循环变量的值(通常增值或减值),可省略

while 循环

定义循环变量并赋值;
while (判断条件) 			// 表达式
{
    语句块;
    循环变量的增值或减值语句;
}

执行顺序:
	1)定义循环变量并赋值;
	2)判断是否符合循环条件,如果符合就进入循环3)。如果不满足条件,跳转到5);
	3)执行语句块及增值或减值语句;
	4)跳转到2);
	5)条件不成立,退出循环。
// 举例,1 ~ 10累加
int main(int argc, char const *argv[])
{
    int i = 1,num = 0;
    while (i <= 10)
    {
        num += i;
        i++;
        printf("%d\n", i);
    }
    printf("%d\n", num);
    
    return 0;
}

do-while 循环

// 在 do 上面定义循环变量并赋值
do{
    语句块;
    增值减值语句;
}while(循环条件); 
//先执行后判断
// 实现 1-10 求和
int main(int argc, char const *argv[])
{
    int i = 1, num = 0;
    do{
        num += i;
        i++;
        // printf("%d\n", i);
    } while (i <= 10);
    printf("%d\n", num);
    
    return 0;
}

循环控制语句

break;

continue;

break;    		// 直接结束当前一层循环
continue;		// 结束本次循环,继续下一次循环(未跳出当前层的循环,且continue后的语句不执行)

使用场景:
    使用在循环语句中,结束循环
    使用时需要有判断条件


// 跳出多层循环时,可参考如下操作:
for (i = 0; i < M; i++)
    for (j = 0; j < N; j++)
        for (k = 0; k < L; k++)
        {
            if (判断条件)
            {
                i = M; 
                j = N; 
                break;
            }
        }

// 循环从终端输入整数,判断是不是偶数,偶数打印提示语句,输入0的时候结束循环。
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a;

    while(scanf("%d", &a) != 0){        // scanf();的返回值为正确输入数据的个数,1!=0,所以会进入while循环      //删掉!=0也可
        if(a == 0)
            break;
        if(a % 2 != 0)
            continue;

        printf("It is an even number. \n");
    }
   
    return 0;
}

goto;

无条件转移语句,用来改变程序流向,转去执行 语句标号所标识的语句。
goto; 可以用来构造循环、实现条件转移、跳出循环体等。

mark:
代码块;

goto mark;

// ————————————————————————————

goto mark;

mark:
代码块;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值