zoukankan      html  css  js  c++  java
  • Coursera课程笔记----计算导论与C语言基础----Week 8

    C语言中的运算成分(Week 8)

    赋值运算符

    • “=”赋值运算符
      • 给赋值号左边的变量赋予数值
    • 在变量定义的同时可以为变量赋初值
    • 要点一:两面类型不同
      • 若=两边的类型不一致,赋值时要进行类型转换
      • 不管=右边是什么类型,都转为=左边的类型
      • cout打印默认6位精度
    • 要点二:长数赋给短数
      • 截取长数的低n位送给短数
    • 要点三:短数赋给长数
      • 低位不变,高位全补0或1
    • 要点四:符号位的赋值处理
      • 直接搬运,不管符号位还是数字位

    表达式

    • 程序中由运算符、操作数和括号等所组成的计算式,是计算求值的基本单位。(赋值语句也是运算符)
    • 表达式是有**“值”**的,赋值语句也不例外
    (i = 10) // 10
    (i = i + i) // 20
    
    • 复合的赋值运算

      • 在赋值符号前面加上其他运算符号构成复合赋值运算
        • a += 3 // a = a + 3
        • x *= y + 8 // x = x * (y+8)
        • x %= 3 // x = x % 3
    • 连续的赋值运算

      • 自右向左的结合顺序
        • a = b = 5 // a = 5, b = 5
        • a = b = c = 5 // 同上
        • int a=b=c=5 // 编译错误!!!

    算术运算符&算术表达式

    • 基本的算术运算:+、-、*、/、%

      • %是模运算,求余,两侧都必须是整数
    • 注意

      • 整数运算,结果仍为整数
      • 实数运算,结果为double型
      • 舍入的方向随编译器的不同而不同
    • 算术运算符的优先级

      • ()
      • * / %
      • + -
      • 在同一级别中,按结合方向处理
      • 可以用剪刀法求表达式的值,从右往左砍,砍最低优先级的算术运算符,最后被砍下来的表达式优先计算。
    • 计算过程中的类型转换

      • float➡️double
      • char、shoet➡️int
    • 自增、自减运算符:使变量的值+1或-1

      • ++i --i ——先计算再使用
      • i++ i-- ——先使用再计算
      • ++只能用于变量,不能用于表达式
      • (-i)++❌ i
      • cout的时候,从右往左计算值(不同编译器规则可能不同)

    关系运算符

    • 优先级 </<=/>/>= ➡️==/!=
    • 关系运算表达式的值:“真”/“假
    • 总优先级:算术运算符➡️关系运算符➡️赋值运算符

    逻辑运算符

    • 三种逻辑运算符

      • 逻辑 &&
      • 逻辑 ||
      • 逻辑 !
    • 逻辑表达式的值:0or1

    • 优先级:!➡️&&➡️||

    • 混合运算的优先级:!➡️算术运算符➡️关系运算符➡️&& ||➡️赋值运算符

    • 在不确定优先级的情况下,通过加括号解决。

    • ||两边当左侧为1,右侧将不会计算

    • &&两边当左侧为0时,右侧将不会计算

    • 只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。

    运算对象的扩展

    • 逻辑运算符两侧可以是任何类型
      • 如字符型、实型或指针型等
      • 系统最终以0和非0来判别他们

    逗号,条件,强转

    ####逗号运算符

    • 用逗号把两个表达式连起来
      • 表达式1,2,3……
      • 先求表达式1,再2,3……,整个表达式的值为表达式n的值

    条件运算符

    表达式1?表达式2:表达式3

    • 如果1为真,则返回2,否则返回3

    强制类型转换

    • 注意:只转换表达式的,被转换的量的类型并没有发生变化。

    位运算(选讲)

    • 位运算就是指进行二进制位的运算

    • C++中的位运算符

      • 按位与(&) 双目

        参加运算的两个数据,各数位均独立进行“”运算

      • 按位或(|) 双目

        参加运算的两个数据,各数位均独立进行“”运算

      • 按位异或(^)XOR运算符 双目(参与运算的两者结果一样为0,结果不同为1)

        参加运算的两个数据,各数位均独立进行“异或”运算

      • 取反(~) 单目

        按位取反

      • 左移(<<) 单目

        左移若干位,高位溢出,低位补0

        左移1位相当于*2,左移2位相当于*2*2

      • 右移(>>) 单目

        右移若干位,低位溢出,高位补0(无符号数)

        右移1位相当于/2,右移2位相当于/2/2(当没有非零数位溢出时)

        • 右移运算符号位的处理

          对无符号数,补0

          对有符号数:若原本为正数,补0;若原本为负数,则补0or1取决于计算机系统

          若补0,称为逻辑右移或简单右移;若补1,称为算术右移(VC)

    • 不同长度的数据进行位运算

      • 右端对齐
      • 如果短数位无符号整数or有符号正数:补满0,否则补满1。
    • 位运算+赋值运算 = 复合赋值运算(&= |=……)

    • 优先级:~ ➡️<< >>➡️ & ^ |

    • 作用:

      • 按位与:取一个数中某些指定位

      • 按位或:对一个数据的某些位取定值为1

      • 异或运算:使特定位反转(与1异或),使特定位保持一样(与0异或)

        交换两个值不用临时变量:a=ab;b=ba;a = a^b;

    练习题

    Quiz1 点评赛车

    #include <iostream>
    using namespace std;
    int main()
    {
        int best;
        for (int best = 1; best <= 4 ; best++) {
            bool a = (best == 2);
            bool b = (best == 4);
            bool c = !(best == 3);
            bool d = !b;
            if(a + b + c + d != 1)
                continue;
    
            cout << best << endl;
            if ( a == 1)
                cout << "A" << endl;
            else if ( b == 1)
                cout << "B" << endl;
            else  if ( c == 1)
                cout << "C" << endl;
            else
                cout << "D" << endl;
        }
        return 0;
    }
    

    Quiz2 数字求和

    #include <iostream>
    using namespace std;
    int main()
    {
        int a,b[5];
        cin >> a;
        for (int i = 0; i < 5; i++)
        {
            cin >> b[i];
        }
    
        int sum = 0;
        for (int i = 0; i < 5; i++) {
            if(b[i] < a)
                sum += b[i];
        }
    
        cout<<sum<<endl;
    }
    

    Quiz3 骑车与走路

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        int issue[n];
        for (int i = 0; i < n; i++) {
            cin >> issue[i];
        }
    
        for (int i = 0; i < n; i++) {
            double ride = 50.0 + double(issue[i]) / 3.0;
            double walk = double(issue[i]) / 1.2;
            if(ride < walk)
                cout<<"Bike"<<endl;
            else if(ride > walk)
                cout<<"Walk"<<endl;
            else
                cout<<"All"<<endl;
        }
    
        return 0;
    }
    

    Quiz4 买房子

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    int main() {
        int n, k;
        while (cin >> n >> k) {
            int i;
            for (i = 1; i <= 20; i++) {//20之前,直接输出,如果到了20,若不能买下,则输出impossible,结束
                if (n * i > 200 * pow((1 + k / 100.0), i - 1)) {
                    cout << i << endl;
                    break;
                }
                else if (i == 20)
                    cout << "Impossible" << endl;
            }
        }
        return 0;
    }
    
    //这个题我莫名其妙的纠结了好久……
    

    Quiz5 找和为K的两个元素

    #include <iostream>
    using namespace std;
    int main()
    {
        int n,k;
        cin >> n >> k;
        int a[n];
        for (int i = 0; i < n; i++) {
            cin >> a[i];
        }
    
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++) {
                if(a[i] + a[j] == k)
                {
                    cout<<"yes"<<endl;
                    return 0;
                }
            }
        }
        cout<<"no"<<endl;
        return 0;
    }
    
    

    Quiz6 自整除数

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
    
        for (int i = 10; i <= n; i++) {
            if(i % (i / 10 + i % 10) == 0)
                cout<<i<<endl;
        }
    
        return 0;
    }
    
  • 相关阅读:
    MySQL回顾
    mysql多表查询
    通过JDBC进行简单的增删改查(以MySQL为例)
    如何正确学习JavaScript
    List集合遍历时修改元素出现并发修改异常总结
    国内有哪些质量高的JAVA社区?
    【题解】【链表】【Leetcode】Add Two Numbers
    【题解】【字符串】【Leetcode】Valid Palindrome
    【题解】【DP】【Leetcode】Climbing Stairs
    【题解】【数组】【Leetcode】Merge Sorted Array
  • 原文地址:https://www.cnblogs.com/maimai-d/p/12799537.html
Copyright © 2011-2022 走看看