C语言中的数据成分(Week7)

内存

把内存想象成长带,带子上有许多方格,每个方格有8位(8bit)

  • 2^10 = 1024

  • 1B = 8 b

  • 1KB = 1024Byte

  • MB、GB、TB、PB……

变量

  • 值可以变化的量
  • 变量的定义格式:(变量类型)(变量标识符)
  • 最好在定义的时候赋予初始值
  • 定义,再使用
  • 定义变量后:找到一片存储空间,给这片存储空间起名(变量名),将数据存储到这个存储空间中,将名字(变量名)和存储空间的起始地址联系起来

基本数据类型

整形

分类:

  • 基本型 int(32bit)

  • 短整形 short/short int(16bit)

  • 长整形 long/long int(32bit)

  • C标准没有具体规定以上各类数据所占的内存字节数,只要求long不短于int,short不长于int

  • sizeof运算符,用于计算某种类型的对象在内存中所占的字节数

  • 根据有符号、无符号,在前加signed和unsigned即可,如果不标注,程序默认为有符号

存储:

  • signed 1位符号位+31位数据位
  • unsigned 32位数据位
  • 正整数存储:原码
  • 负整数存储:补码
  • 补码 = 原码取反 + 1
  • 存储补码会提高计算机的运算效率

负数补码的求法:

  1. 先确定其符号为为1
  2. 求出其绝对值的原码
  3. 对原码各位取反
  4. +1

打印一个数的十六进制表示:

  1. int a = -123;
  2. cout<<hex<<a<<endl;

打印一个数的八进制表示:

  1. int a = -123;
  2. cout<<oct<<a<<endl;

打印一个数的十进制表示:

  1. int a = -123;
  2. cout<<dec<<a<<endl;
  • 0x表示16进制数

  • 03表示8进制数

最大的整数:无符号大约42亿,有符号大约21亿

最小的整数:无符号0,最小-21亿(当最高位是1,其他位是0时,最高位既表示负号,也表示整数最高位1)

结论:用int就行了

使用须知:在定义变量时,一定要紧接着赋初值。

实型(浮点型)

分类:

  • float(32bit) 有效7位
  • doble(64bit) 有效15位
  1. cout<<setprecision(10)<<a<<endl;
  2. //setprecision()设置精度

存储:

  • 1位符号位+8位指数位(exponent)+23位二进制小数位(fraction)

    (把数字都转换成科学计数法)

  1. float a = 0;
  2. a = 123456.789e5;
  3. // 科学计数法,e5=10^5

使用须知:

避免将一个很大的数和很小的数直接相加or相减,否则就会“丢失”小的数。

字符型

  • 一个字符型占一个字节

    • 其值可以是任何“可以出现在C/C++语言中的字符”
    • 最多可以表示256个字符——ASCII Character Codes
  • 由于存储类型和整形相同
    • 可以与整形数据相互赋值
    • 可以和整数一样进行运算
  • 转义字符
    • \a 响一下
    • \n 换行

布尔型

  • 用于存储“真”和“假”的变量

    • 只占一个字节
    • 其值只能为1或0
      • 1=True
      • 0=False
  • 赋给布尔型变量的值
    • 赋0为False
    • 赋别的数为True

常数

  • 常量:在程序运行过程中,其值保持不变的量

    • 字面常量:-1,0,123,4.6……
    • 符号常量:用一个标识符代表一个常量的,称为符号常量
  1. const double PI = 3.1415926

类型:

  • 整形常量的后缀

    • n=10000L:长整形常量
    • m = -0x88abL:长整形十六进制常量
    • k = 10000U:无符号整形常量
    • i = 07777LU:无符号长整型八进制常量
  • 浮点型常量的后缀
    • x = 3.1415F:单精度浮点型常量
    • y = 3.1415L:长双精度浮点型常量
  • 说明:
    • 浮点型常量默认为double型
    • U、L、F均可小写

标识符(identifier)

  • 字母,数字,下划线,不与保留字(关键字)等同
  • 匈牙利命名法:
    • 以一个或多个小写字母开头,指定数据类型
    • 其后是一个或多个第一个字母大写的单词,指出变量的用途
    • 如:chGrade;nLength……
  • 驼峰命名法
    • 由一个或多个单词链接在一起
    • 第一个字母以小写字母开始
    • 第二个单词的首字母大写或者每一个单词的首字母都大写

总结

学习数据成分的关键是了解但不陷入细节,等用到时再细究它。

习题

Quiz1 约瑟夫问题

  1. #include <iostream>
  2. using namespace std;
  3. int succedent[300];
  4. //用于保存一个猴子的后一位是谁
  5. int precedent[300];
  6. //用于保存一个猴子的前一位是谁
  7. int main()
  8. {
  9. int n,m;
  10. while (true)
  11. {
  12. cin >> n >> m;
  13. if( n == 0 && m == 0)
  14. break;
  15. for (int i = 0; i < n - 1; i++)
  16. {
  17. succedent[i] = i + 1;
  18. precedent[i + 1] = i;
  19. }
  20. succedent[n-1] = 0;
  21. precedent[0] = n-1;
  22. int current = 0;
  23. while (true)
  24. {
  25. for (int count = 0; count < m - 1; count++)
  26. current = succedent[current];
  27. int pre = precedent[current];
  28. int suc = succedent[current];
  29. succedent[pre] = suc;
  30. precedent[suc] = pre;
  31. if(pre == suc)
  32. {
  33. cout<< pre+1 << endl;
  34. break;
  35. }
  36. current = suc;
  37. }
  38. }
  39. return 0;
  40. }

Quiz2 分数求和

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n;
  6. cin >> n;
  7. int sumn = 0, sumd = 1;
  8. while (n--)
  9. {
  10. int num, deno;
  11. char slash;
  12. cin >> num >> slash >> deno;
  13. sumn = sumn*deno + num*sumd;
  14. sumd = sumd*deno;
  15. }
  16. int a = sumd, b = sumn, c;
  17. while(a != 0)
  18. {
  19. //欧几里得法
  20. c = a;
  21. a = b % a;
  22. b = c;
  23. }
  24. int gcd = b;
  25. sumd /= gcd;
  26. sumn /= gcd;
  27. if(sumd > 1)
  28. cout << sumn << '/' << sumd<<endl;
  29. else
  30. cout<< sumn <<endl;
  31. return 0;
  32. }

Quiz3 年龄与疾病

  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4. int main()
  5. {
  6. int numAll = 0, numA = 0, numB = 0, numC = 0,numD = 0;
  7. cin >> numAll;
  8. for (int i = 0; i < numAll; i++) {
  9. int temp;
  10. cin >> temp;
  11. if(temp <= 18)
  12. numA++;
  13. else if(temp >= 19 && temp <= 35)
  14. numB++;
  15. else if(temp >= 36 && temp <= 60)
  16. numC++;
  17. else numD++;
  18. }
  19. cout<<"1-18: "<<fixed<<setprecision(2)<<(double)numA/(double)numAll*(double)100<<"%"<<endl;
  20. cout<<"19-35: "<<setprecision(2)<<(double)numB/(double)numAll*(double)100<<"%"<<endl;
  21. cout<<"36-60: "<<setprecision(2)<<(double)numC/(double)numAll*(double)100<<"%"<<endl;
  22. cout<<"60-: "<<setprecision(2)<<(double)numD/(double)numAll*(double)100<<"%"<<endl;
  23. return 0;
  24. }

Quiz4 成绩判断

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int score;
  6. cin >> score;
  7. if(score <= 100 && score >= 95)
  8. cout<<"1"<<endl;
  9. if(score < 95 && score >= 90)
  10. cout<<"2"<<endl;
  11. if(score < 90 && score >= 85)
  12. cout<<"3"<<endl;
  13. if(score < 85 && score >= 80)
  14. cout<<"4"<<endl;
  15. if(score < 80 && score >= 70)
  16. cout<<"5"<<endl;
  17. if(score < 70 && score >= 60)
  18. cout<<"6"<<endl;
  19. if(score < 60 )
  20. cout<<"7"<<endl;
  21. return 0;
  22. }

Quiz5 找出第k大的数

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. //从最大的数开始逐个寻找并逐个删除,直到找到第k个
  6. int n,k,index,temp = 0;
  7. cin>>n>>k;
  8. int a[n];
  9. for (int i = 0; i < n; i++)
  10. {
  11. cin>>a[i];
  12. }
  13. for (int i = 0; i < k; i++)
  14. {
  15. for (int j = 0; j < n; j++)
  16. {
  17. if(a[j] > temp)
  18. {
  19. temp = a[j];
  20. index = j;
  21. }
  22. }
  23. a[index] = 0;
  24. if(i == k-1)
  25. cout<<temp<<endl;
  26. else
  27. temp = 0;
  28. }
  29. }

Quiz6 人民币支付

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int num,n100,n50,n20,n10,n5,n1;
  6. cin>>num;
  7. n100 = num / 100;
  8. num -= n100*100;
  9. n50 = num / 50;
  10. num -= n50*50;
  11. n20 = num / 20;
  12. num -= n20*20;
  13. n10 = num / 10;
  14. num -= n10*10;
  15. n5 = num / 5;
  16. num -= n5*5;
  17. n1 = num;
  18. cout<<n100<<"\n"<<n50<<"\n"<<n20<<"\n"<<n10<<"\n"<<n5<<"\n"<<n1<<endl;
  19. return 0;
  20. }

Coursera课程笔记----计算导论与C语言基础----Week 7的更多相关文章

  1. Coursera课程笔记----计算导论与C语言基础----Week 6

    理性认识C程序 导论(Week 6) 明确学习进度 讲课内容 感性➡️理性➡️函数➡️指针等 作业练习 初级阶段 ➡️正常作业练习 C语言的由来 程序设计语言的分类 低级语言之机器语言 0010101 ...

  2. Coursera课程笔记----计算导论与C语言基础----Week 8

    C语言中的运算成分(Week 8) 赋值运算符 "="赋值运算符 给赋值号左边的变量赋予数值 在变量定义的同时可以为变量赋初值 要点一:两面类型不同 若=两边的类型不一致,赋值时要 ...

  3. Coursera课程笔记----计算导论与C语言基础----Week 4

    感性认识计算机程序(Week 4) 引入 编程序 = 给计算机设计好运行步骤 程序 = 人们用来告诉计算机应该做什么的东西 问题➡️该告诉计算机什么?用什么形式告诉? 如果要创造一门"程序设 ...

  4. Coursera课程笔记----计算导论与C语言基础----Week 2

    计算机的历史与未来(Week 2) 计算机历史 早期计算机:手工计算器➡️机械计算器➡️计算机原型 现代计算机:电子管计算机➡️晶体管计算机➡️集成电路计算机➡️超大规模集成电路 早期的手工计算辅助工 ...

  5. Coursera课程笔记----计算导论与C语言基础----Week 9

    C语言中的控制成分(Week 9) 计算机程序的基本结构 任何具有单入口单出口的程序,都可以用顺序结构.分支结构.循环结构来表达 分支语句 在执行if语句前,先对表达式求解 if()内可以是任意的数值 ...

  6. Coursera课程笔记----计算导论与C语言基础----Week 3

    存储程序式计算机 冯·诺伊曼式计算机 "关于EDVAC的报告草案" 组成:控制器(协调工作).运算器(算数&逻辑运算).存储器(存储操作信息和中间结果).输入设备.输出设备 ...

  7. Coursera课程笔记----计算导论与C语言基础----Week 1

    计算机的基本原理(Week 1) 第一次数学危机 公元前500年,毕达哥拉斯学派,他们相信数是万物的本源:一切数均可表示成整数或者整数之比 然而毕达哥拉斯证明了勾股定理,某些直角三角形的三边比不能用整 ...

  8. Coursera课程笔记----计算导论与C语言基础----Week 12

    期末编程测试(Week 12) Quiz1 判断闰年 #include <iostream> using namespace std; int main() { int year; cin ...

  9. Coursera课程笔记----计算导论与C语言基础----Week 11

    C程序中的字符串(Week 11) 字符数组 所有的字符串,都是以\0结尾的 只能在数组定义并初始化的时候:char c[6] = "China"; 不能用赋值语句将一个字符串常量 ...

随机推荐

  1. Pytorch自定义创建BP神经网络

    class BPNet(nn.Module): def __init__(self, in_dim, n_hidden_1, n_hidden_2,\ n_hidden_3, n_hidden_4, ...

  2. [linux][mysql] MySQL中information_schema是什么

    来源:MySQL中information_schema是什么 information_schema数据库是MySQL自带的,information_schema提供了访问数据库元数据的方式.这就是?元 ...

  3. [Laravel框架学习二]:Laravel的CURD和查询构造器的CURD,以及聚合函数

    public function index() { //return Member::getMember();//这是调用模型的方法 return view('lpc',[ 'age'=>18, ...

  4. Laravel - 上手实现 - 文件上传、保存到 public 目录下

    1.为了访问方便,将上传的文件保存在 public 目录下,需要进行修改配置. 找到 config/filesystems.php 文件然后修改 root.具体如下: 'local' => [ ...

  5. position的用法(top, bottom, left, right 四个定位属性配合进行使用)

    一般情况下 页面元素的定位方式是根据文档流也就是说默认的从上到下,从左到右的方式进行排列的,而将元素从文档流脱离出来显示的方式有两种,一种是 position 定位另一种是float 浮动,这里我们详 ...

  6. thinkphp5.0 模型的应用

    <?php namespace app\admin\controller; use app\common\controller\BaseController; use think\Db;//数据 ...

  7. Linux查看端口或pid使用路径

    1. lsof -i:10010 查看10010端口的占用情况 命令返回结果: 2. netstat -lpn | grep 80 查看80端口服务端socket占用状况 3. ll /proc/26 ...

  8. (第九篇)Iptables详解

    常见的网络攻击形式 1.拒绝服务攻击:DOS 2.分布式拒绝服务攻击 DDOS 3.漏洞入侵 4.口令猜测 以上内容简单了解,具体可自行百度,此处不必知晓. Linux防火墙基础 Linux防火墙体系 ...

  9. [http 1.1] M-POST w3

    5. Mandatory HTTP Requests An HTTP request is called a mandatory request if it includes at least one ...

  10. Node 接入阿里云实现短信验证码

    本文介绍在案例云开通短信服务的流程以及在Node项目中使用的方法. 一.开通阿里云短信服务 登陆阿里云,然后进入 https://dysms.console.aliyun.com/dysms.htm  ...