【C++系列】c语言基础 day05 类型转换 分支 循环
in C/C++ with 0 comment

【C++系列】c语言基础 day05 类型转换 分支 循环

in C/C++ with 0 comment

#类型转换

如果表达式里多个数字的类型不同就必须首先转换成同一类型然后才能计算
这个转换过程叫做隐式类型转换,转换过程完全由计算机完成。
隐式类型转换中一定把占用存储空间小的类型转换成占用存储空间大的类型。
可以避免数据丢失。

e.g.:

#include<stdio.h>
int main(){
printf("%d",sizeof(1 ? 1 : 0.9));
return 0;
 }.

输出结果为8。 计算机对其在比较时进行了隐式类型转换,int 为4个字节,0.9 为8个字节。

如果不同数字类型不同但是大小一样,就把整数类型转换成浮点类型,把有符号类型转换成无符号类型。

#强制类型转换:

C语言里可以临时给数字指定一个模型,这叫做强制类型转换
强制类型转换格式如下:
(char)300
强制类型转换有可能导致数据内容丢失。
无论是隐式类型转换还是强制类型转换不会修改存储区的内容。计算机会分配一个新的存储区记录转换后的结果。

#分支结构

分支语句可以在程序运行的时候从几组语句中选择一组执行而忽略其他组。
如果在编写程序的时候遇到多种可能性,每种可能性需要专门的语句处理时就可以考虑使用分支解决

If 关键字可以用来编写分支语句。
If分支里需要为每种可能性编写专门的处理语句
每组语句需要一个配对的逻辑表达式,它们负责进行选择。如果某个逻辑表达式的结果为真就执行它后面的语句。
If分支的任何两组语句不可以同时执行。
编写if分支的时候应该先把所有可能性的个数确定下来。
如果if分支语句必然有一种可能性会出现就可以把最后一组语句的逻辑表达式和if关键字省略。
如果if分支里多个逻辑表达式同时为真就执行第一个为真的逻辑表达式所对应的语句而忽略后面的逻辑表达式。
If分支里的每组语句和它前面的所有逻辑表达式都有关系
编写if分支的时候应该 把简单逻辑表达式对应的情况写在前面

练习

编写程序从键盘得到三个整数,找到其中最小的数字并显示在屏幕上。

/*
 * if分支练习
 * */
#include <stdio.h>
int main() {
    int num = 0, num1 = 0, num2 = 0;
    printf("请输入三个数字:");
    scanf("%d%d%d", &num, &num1, &num2);
    /*if (num < num1 && num < num2) {
        printf("最小数字是%d\n", num);
    }
    else if (num1 < num && num1 < num2) {
        printf("最小数字是%d\n", num1);
    }
    else if (num2 < num && num2 < num1) {
        printf("最小数字是%d\n", num2);
    }*/
    if (num > num1) {
        if (num1 > num2) {
            printf("最小数字是%d\n", num2);
        }
        else {
            printf("最小数字是%d\n", num1);
        }
    }
    else {
        if (num > num2) {
            printf("最小数字是%d\n", num2);
        }
        else {
            printf("最小数字是%d\n", num);
        }
    }
    return 0;
}

如果一个分支里的所有可能性都可以用整数表示就可以采用switch 。。case 格式编写分支解决它。

循环语句可以让一组语句反复多次执行
For关键字可以用来编写循环:
For循环里可以让一个变量代表一组数字,然后用一组语句处理它所代表的每个数字。
这个变量叫做循环变量。
采用如下格式描述循环变量的变换过程(把开始数字赋值给循环变量;
用逻辑表达式描述循环变量和结束数字之间的关系;
循环变量每次的变化规律;
);

练习

54321
5432
543
54
5
编写for循环在屏幕上显示以上5行内容

/*
 * for循环练习
 * */
#include <stdio.h>
int main() {
    int num = 0;
    for (num = 54321;num >= 5;num /= 10) {
        printf("%d\n", num);
    }
    return 0;
}

如果一个问题可以用一组数字的变化过程描述就可以采用for循环解决它。

假设有如下的for循环
For(1;2;3){

 4

}
它按照以下方式分组执行:
1,2[4,3,2]…[4,3,2]
第一组和其它组都不同
正常情况下for循环一定在两组之间结束。
如果某一组最后编号为2的逻辑表达式为真就启动下一组,否则结束循环。
循环正常结束的时候循环变量一定落在指定数字范围之外。
For循环有可能不执行大括号里面的语句。
for循环小括号里面的每部分语句都可以省略,
如果省略中间的逻辑表达式就表示逻辑表达式永远为真,这种循环不能正常结束,叫做死循环

小括号里面前面和后面的部分可以是用逗号连接的多条语句,
C99规范里允许在循环小括号里临时声明循环变量,这种循环变量只能在循环里使用,循环结束后变量就不存在了

练习

一共有40个头,100只脚
编程计算有多少只兔子,多少鸡

/*
 * for循环练习
 * */
#include <stdio.h>
int main() {
    int num = 0;
    for (num = 0;num <= 40;num++) {
        if (4 * num + 2 * (40 - num) == 100) {
            printf("兔子有%d只,鸡有%d只\n", num, 40 - num);
            break;
        }
    }
    printf("num是%d\n", num);
    return 0;
}

如果循环采用break;语句结束则循环结束后循环变量一定落在指定范围内。
如果编写循环的时候不能计算出循环的执行次数,就可以编写一个死循环,然后用break语句结束它。

可以在循环中使用continue语句,直接跳转到循环大括号的末尾,中间的所有语句这次循环都不执行。

练习

编写程序从键盘得到一个0-99 之间的数字,把这个数字到100之间所有与7无关的数字都显示在屏幕上。

/*
 * for循环练习
 * */
#include <stdio.h>
int main() {
    int min = 0, num = 0;
    printf("请输入一个数字:");
    scanf("%d", &min);
    for (num = min;num <= 100;num++) {
        if (num % 10 == 7) {
            continue;
        }
        if (num >= 70 && num <= 79) {
            continue;
        }
        if (!(num % 7)) {
            continue;
        }
        printf("%d ", num);
    }
    printf("\n");
    return 0;
}

预习

1,for循环
2,多重循环
3,while循环和do。。while循环
4,缓冲区管理
5,数组

Responses