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;
}
												
											Coursera课程笔记----计算导论与C语言基础----Week 8的更多相关文章
- Coursera课程笔记----计算导论与C语言基础----Week 6
		
理性认识C程序 导论(Week 6) 明确学习进度 讲课内容 感性➡️理性➡️函数➡️指针等 作业练习 初级阶段 ➡️正常作业练习 C语言的由来 程序设计语言的分类 低级语言之机器语言 0010101 ...
 - Coursera课程笔记----计算导论与C语言基础----Week 7
		
C语言中的数据成分(Week7) 内存 把内存想象成长带,带子上有许多方格,每个方格有8位(8bit) 2^10 = 1024 1B = 8 b 1KB = 1024Byte MB.GB.TB.PB- ...
 - Coursera课程笔记----计算导论与C语言基础----Week 4
		
感性认识计算机程序(Week 4) 引入 编程序 = 给计算机设计好运行步骤 程序 = 人们用来告诉计算机应该做什么的东西 问题➡️该告诉计算机什么?用什么形式告诉? 如果要创造一门"程序设 ...
 - Coursera课程笔记----计算导论与C语言基础----Week 2
		
计算机的历史与未来(Week 2) 计算机历史 早期计算机:手工计算器➡️机械计算器➡️计算机原型 现代计算机:电子管计算机➡️晶体管计算机➡️集成电路计算机➡️超大规模集成电路 早期的手工计算辅助工 ...
 - Coursera课程笔记----计算导论与C语言基础----Week 9
		
C语言中的控制成分(Week 9) 计算机程序的基本结构 任何具有单入口单出口的程序,都可以用顺序结构.分支结构.循环结构来表达 分支语句 在执行if语句前,先对表达式求解 if()内可以是任意的数值 ...
 - Coursera课程笔记----计算导论与C语言基础----Week 3
		
存储程序式计算机 冯·诺伊曼式计算机 "关于EDVAC的报告草案" 组成:控制器(协调工作).运算器(算数&逻辑运算).存储器(存储操作信息和中间结果).输入设备.输出设备 ...
 - Coursera课程笔记----计算导论与C语言基础----Week 1
		
计算机的基本原理(Week 1) 第一次数学危机 公元前500年,毕达哥拉斯学派,他们相信数是万物的本源:一切数均可表示成整数或者整数之比 然而毕达哥拉斯证明了勾股定理,某些直角三角形的三边比不能用整 ...
 - Coursera课程笔记----计算导论与C语言基础----Week 12
		
期末编程测试(Week 12) Quiz1 判断闰年 #include <iostream> using namespace std; int main() { int year; cin ...
 - Coursera课程笔记----计算导论与C语言基础----Week 11
		
C程序中的字符串(Week 11) 字符数组 所有的字符串,都是以\0结尾的 只能在数组定义并初始化的时候:char c[6] = "China"; 不能用赋值语句将一个字符串常量 ...
 
随机推荐
- Linux下配置mail使用外部SMTP发送邮件
			
修改/etc/mail.rc,增加两行:指定外部的smtp服务器地址.帐号密码等. # vi /etc/mail.rc set from=demo@qq.com smtp=smtp.qq.com se ...
 - php.ini中文详解
			
[PHP] ;;;;;;;;;;;;;;;;;;;;;;; ; 关于 php.ini 配置文件 ; ;;;;;;;;;;;;;;;;;;;;;;; ; PHP 的初始化文件, 必须命名为 php.in ...
 - pandas basic cheatsheet
			
"胖的要死"是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. 有多大?这篇 ...
 - stand up meeting 1/19/2016
			
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 准备最后的发布和整个开发的整理总结 6 继续releas ...
 - python白帽子/黑客/实战编程教程
			
Python搜索爬虫抓取超高清视频教程_第一期Python搜索爬虫抓取超高清视频教程_第二期Python搜索爬虫抓取视频教程_第三期Python搜索爬虫抓取视频教程_第四期Python搜索引擎爬虫抓取 ...
 - PHP函数:array_rand
			
array_rand() - 从数组中随机取出一个或多个单元. 说明: array_rand ( array $array [, int $num = 1 ] ) : mixed 参数: array ...
 - 必须先理解的RocketMQ入门手册,才能再次深入解读
			
RocketMQ入门手册 RocketMQ是一个分布式.队列模型的开源消息中间件,前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具 ...
 - 美的PDF转换成Word转换器完全免费
			
下载地址:百度网盘提取码:02ap 安装破解步骤:先安装主程序,末尾是full结尾的,安装完成后不要打开软件,然后接着安装破解补丁,即可破解成功! 需要的老铁们直接拿去用吧,亲测好用!有配套的功能强大 ...
 - pytorch 矩阵数据增加维度unsqueeze和降低维度squeeze
			
增加一个维度 out.unsqueeze(-1) 降低一个维度 out.squeeze(dim=1)
 - python安装pil库,操作流程以及安装中出现的问题。
			
0.用管理员方式打开cmd窗口. 1.跳转到python对应目录 比我: ***或者直接在该路径下输入cmd直接跳转.**** 例如: 直接回车搞定!! 2.输入 pip install pillow ...