Coursera课程笔记----计算导论与C语言基础----Week 7
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
打印一个数的十六进制表示:
int a = -123;
cout<<hex<<a<<endl;
打印一个数的八进制表示:
int a = -123;
cout<<oct<<a<<endl;
打印一个数的十进制表示:
int a = -123;
cout<<dec<<a<<endl;
0x表示16进制数
03表示8进制数
最大的整数:无符号大约42亿,有符号大约21亿
最小的整数:无符号0,最小-21亿(当最高位是1,其他位是0时,最高位既表示负号,也表示整数最高位1)
结论:用int就行了
使用须知:在定义变量时,一定要紧接着赋初值。
实型(浮点型)
分类:
- float(32bit) 有效7位
- doble(64bit) 有效15位
cout<<setprecision(10)<<a<<endl;
//setprecision()设置精度
存储:
1位符号位+8位指数位(exponent)+23位二进制小数位(fraction)
(把数字都转换成科学计数法)
float a = 0;
a = 123456.789e5;
// 科学计数法,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……
- 符号常量:用一个标识符代表一个常量的,称为符号常量
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 约瑟夫问题
#include <iostream>
using namespace std;
int succedent[300];
//用于保存一个猴子的后一位是谁
int precedent[300];
//用于保存一个猴子的前一位是谁
int main()
{
int n,m;
while (true)
{
cin >> n >> m;
if( n == 0 && m == 0)
break;
for (int i = 0; i < n - 1; i++)
{
succedent[i] = i + 1;
precedent[i + 1] = i;
}
succedent[n-1] = 0;
precedent[0] = n-1;
int current = 0;
while (true)
{
for (int count = 0; count < m - 1; count++)
current = succedent[current];
int pre = precedent[current];
int suc = succedent[current];
succedent[pre] = suc;
precedent[suc] = pre;
if(pre == suc)
{
cout<< pre+1 << endl;
break;
}
current = suc;
}
}
return 0;
}
Quiz2 分数求和
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int sumn = 0, sumd = 1;
while (n--)
{
int num, deno;
char slash;
cin >> num >> slash >> deno;
sumn = sumn*deno + num*sumd;
sumd = sumd*deno;
}
int a = sumd, b = sumn, c;
while(a != 0)
{
//欧几里得法
c = a;
a = b % a;
b = c;
}
int gcd = b;
sumd /= gcd;
sumn /= gcd;
if(sumd > 1)
cout << sumn << '/' << sumd<<endl;
else
cout<< sumn <<endl;
return 0;
}
Quiz3 年龄与疾病
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int numAll = 0, numA = 0, numB = 0, numC = 0,numD = 0;
cin >> numAll;
for (int i = 0; i < numAll; i++) {
int temp;
cin >> temp;
if(temp <= 18)
numA++;
else if(temp >= 19 && temp <= 35)
numB++;
else if(temp >= 36 && temp <= 60)
numC++;
else numD++;
}
cout<<"1-18: "<<fixed<<setprecision(2)<<(double)numA/(double)numAll*(double)100<<"%"<<endl;
cout<<"19-35: "<<setprecision(2)<<(double)numB/(double)numAll*(double)100<<"%"<<endl;
cout<<"36-60: "<<setprecision(2)<<(double)numC/(double)numAll*(double)100<<"%"<<endl;
cout<<"60-: "<<setprecision(2)<<(double)numD/(double)numAll*(double)100<<"%"<<endl;
return 0;
}
Quiz4 成绩判断
#include <iostream>
using namespace std;
int main()
{
int score;
cin >> score;
if(score <= 100 && score >= 95)
cout<<"1"<<endl;
if(score < 95 && score >= 90)
cout<<"2"<<endl;
if(score < 90 && score >= 85)
cout<<"3"<<endl;
if(score < 85 && score >= 80)
cout<<"4"<<endl;
if(score < 80 && score >= 70)
cout<<"5"<<endl;
if(score < 70 && score >= 60)
cout<<"6"<<endl;
if(score < 60 )
cout<<"7"<<endl;
return 0;
}
Quiz5 找出第k大的数
#include <iostream>
using namespace std;
int main()
{
//从最大的数开始逐个寻找并逐个删除,直到找到第k个
int n,k,index,temp = 0;
cin>>n>>k;
int a[n];
for (int i = 0; i < n; i++)
{
cin>>a[i];
}
for (int i = 0; i < k; i++)
{
for (int j = 0; j < n; j++)
{
if(a[j] > temp)
{
temp = a[j];
index = j;
}
}
a[index] = 0;
if(i == k-1)
cout<<temp<<endl;
else
temp = 0;
}
}
Quiz6 人民币支付
#include <iostream>
using namespace std;
int main()
{
int num,n100,n50,n20,n10,n5,n1;
cin>>num;
n100 = num / 100;
num -= n100*100;
n50 = num / 50;
num -= n50*50;
n20 = num / 20;
num -= n20*20;
n10 = num / 10;
num -= n10*10;
n5 = num / 5;
num -= n5*5;
n1 = num;
cout<<n100<<"\n"<<n50<<"\n"<<n20<<"\n"<<n10<<"\n"<<n5<<"\n"<<n1<<endl;
return 0;
}
Coursera课程笔记----计算导论与C语言基础----Week 7的更多相关文章
- Coursera课程笔记----计算导论与C语言基础----Week 6
理性认识C程序 导论(Week 6) 明确学习进度 讲课内容 感性➡️理性➡️函数➡️指针等 作业练习 初级阶段 ➡️正常作业练习 C语言的由来 程序设计语言的分类 低级语言之机器语言 0010101 ...
- Coursera课程笔记----计算导论与C语言基础----Week 8
C语言中的运算成分(Week 8) 赋值运算符 "="赋值运算符 给赋值号左边的变量赋予数值 在变量定义的同时可以为变量赋初值 要点一:两面类型不同 若=两边的类型不一致,赋值时要 ...
- 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"; 不能用赋值语句将一个字符串常量 ...
随机推荐
- 告诉你那里最受欢迎,python爬取全国13个城市旅游数据
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...
- gdb 调试中No symbol “***” in current context解决方法
主要是因为GCC/G++版本和GDB不匹配造成的,网上也有说是因为O2优化问题,具体啥原因需要自己尝试一下. 解决: 放狗搜索,解决办法是在编译是加-gdwarf-3即可,出现这样的原因是gcc,gd ...
- 详解 Collection集合
(请关注 本人"集合总集篇"博文--<详解 集合框架>) 首先,本人来讲解下 Collection集合的继承体系: Collection集合 的继承体系: Collec ...
- kubernetes的无状态服务和有状态服务介绍
无状态服务 1)是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的 2)多个实例可以共享相同的持久化数据.例如: nginx实例和tomcat实例 3 ...
- json:格式化数据
formatData = JSON.Stringfy(data, null, 2)
- C/C++,被誉为“最经典的编程语言”,不仅是因为编程入门需要学?
计算机诞生初期,用机器语言或汇编语言编写程序; 第一种高级语言FORTRAN诞生于1954年; BASIC语言(1964)是由FORTRAN语言的简化而成的是为初学者设计的小型高级语言; C语言是19 ...
- c++指定输出小数的精度
在c++中,有的时候要对输出的double型或float型保留几位小数,这时可以使用setflags(ios::fixed),不过要先包含有文件<iomainp>,具体如下 例: #inc ...
- 2、flink入门程序Wordcount和sql实现
一.DataStream Wordcount 代码地址:https://gitee.com/nltxwz_xxd/abc_bigdata 基于scala实现 maven依赖如下: <depend ...
- java list随机截取(洗牌)
public void solution(){ List<Integer> givenList = Arrays.asList(1, 2, 3,4,5,6); Collections.sh ...
- ansible的剧本play(四)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA68AAAETCAYAAADZDzDOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw