C/C++知识总结 三 C/C++数据类型与输入输出
C/C++数据类型与输入输出
- 基本数据类型
- 输入与输出
- 复合数据类型(将在下几篇博客中总结)
C/C++数据类型
数据类型总图
数据类型差别
数据类型不同的意义
1)指明数据的大小,以便正确分配,访问,回收内存。
2)对本质上不可区分的内存数据进行不同的操作。
- 注意:不同的编译器可能对数据类型分配的字节书可能不同,但这是常见的字节分配
- 补充字节数:字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八位二进制数。
基本数据类型应用
常量与变量:
程序运行过程中其值不能被改变为常量常量分为:整形常量(整数)、实型常量(实数)、字符常量(普通字符和转义字符)、自己声明的const常量。
注意:字符常量(字母及符号)与ASCALL码的关系,字符常量可以与ASCALL码的相互转化并应用于解题
变量:代表一个名字,具有特定的属性的一个存储单元,用来存放数据,在程序中自己先声明,后使用。
常用基本类型介绍
常见C/C++运算符
C/C++输入输出
概述C与C++输入输出的本质差异
C语言的的输入输出用的主要是scanf()、printf()函数,而C++是使用类对象cin、cout进行输入人输出
C语言输入输出格式
输出格式:printf(“格式控制字符”,“输出列表”)或printf(“字符串+转义字符(可省略)”);例如:printf("%d,%c\n",i,c);
输入格式:scanf(“格式控制字符”,地址列表);例如:scanf("%d,%f",&a,&b),
注意:1. &为取地址运算符,放在变量之前可以获取变量的地址。2.输出列表中变量的值应与格式控制符一一对应,否则会出现强制隐式转换甚至产生错误。
- C 输出应用举例
//例1:字符串输出
# include <stdio.h>
int main(void)
{
printf("Hello World!\n"); // \n表示换行
return 0;
}
//例2:变量值输出
#include<stdio.h>
int main()
{
int a=10;
double b=2.5;
float c=0.9;
char d={'A'};
printf("%d %f %f %c\n",a,b,c,d) // \n表示换行
return 0;
}
//例3:变量字符一起输出
#include<stdio.h>
int main()
{
int a=10;
float b=0.9;
printf("整数:%d,浮点数:%f,hai ke yi tian jia zi fu chuan\d",a,b);
return 0;
}
注意:浮点数(double和float等类型)默认输出为小数点后六位。
因为程序中虽然写的是 a=10,但是在内存中并不是将 10 这个十进制数存放进去,而是将 10 的二进制代码存放进去了。计算机只能执行二进制 0、1 代码,而 0、1 代码本身并没有什么实际的含义,它可以表示任何类型的数据。所以输出的时候要强调是以哪种进制形式输出。所以就必须要有“输>出控制符”,以告诉操作系统应该怎样解读二进制数据。
如果是%x就是以十六进制的形式输出,要是%o就是以八进制的形式输出,大家自己试一下。
在格式控制符之间的东西会被“如实”的打印出来,如在例2中:输出的数据以“空格”作为分隔符
在例三中输出的数据以‘,’来作为分隔符。
//例4:指定数据宽度和小数位数(格式控制符发生变化为:%m.nf)
#include<stdio.h>
int main()
{
double b=2.54321;
float c=0.123456789;
printf("%10.4f,%1.3f,\n",b,c); // \n表示换行
return 0;
}
注意请看数据宽度的定义
//例5:输出数据左对齐(默认右对齐)用例如这样的格式控制符:%-m.nf
#include<stdio.h>
int main()
{
double a=100/3.0;
printf("%25.15f",a);//默认右对齐
printf("\n");
printf("%-25.15f",a);//左对齐
printf("\n");
//注意浮点最后一位输出四舍五入已经不准确了
}
//输出结果
33.333333333333336
33.333333333333336 结尾处
C 输入应用举例
//scanf("格式控制字符",地址列表)输入与printf()用法相似,注意地址列表中的变量类型,要与格式控制符一一对应,“地址列表”放的一定是地址(如: &变量)。
//例子
#include<stdio.h>
int main()
{
int a;
double b;
char c;
scanf("%d %lf %c",&a,&b,&c);//空格间隔符
printf("%d %lf %c \n",a,b,c); //这里输出也指定了间隔符
}
//输入:2 42.422 p
//输出:2 42.422000 p
// Program ended with exit code: 0
//注意:1 在输入的时候需要指定相邻输入数据的间隔符,如变量a,b的间隔符为“空格”,过不指定间隔符则会一直读取输入的字符知道不满足该控制符所满足的类型,开始为下一个类型变量读取输入值。
//注意:2 以控制符%c输入时 空格 和 转义字符 也会被认为有效字符输入
c++输入输出输出格式
#include<iostream>
using namespace std;
int main()
{
int a,b;
double c;
cin>>a; //equal to scanf("%d",&a);
cin>>a>>b>>c; //equal to scanf("%d%d%lf",a,b,c)
cout<<a; //equal to printf("%d",a)
cout<<a<<b<<c; //equal to printf("%d%d%lf",a,b,c)
return 0;
}
//C++的简单输入输出,相对C 更简单,但是当需要控制格式输入输出时就相对C 更难了
补充知识以深入了解输入输出
补2. 什么是类:“类”并不是一个神秘的东西,简单说“类”就是用户定义的一种数据类型(与内置类型int、double、char等相似),类是对一类相似事物进行抽象,从而达到简化,找出它们共有的属性,改类 含有 能够表示什么信息、能够对数据执行的操作(即该类中的函数)。而“对象”则是一个“类”进行实例化(抽象的逆过程) 产生一个符合这个类的 真实(可用于解决问题的)“个体”,而这个“个体”拥有“这个‘类’所定义的功能”;
而cin,cout就是ostream实例化出的“个体”
还不懂可以借鉴百度百科
补1. 对输入输出流的理解
C++格式控制输入输出(没有格式化输入,因为cin比较智能)
C++有两种方法控制格式输出:
1、用格式控制符(使用控制符时,在程序开头加投文件#include )
2、用流对象的成员函数控制符
- 输出格式控制类成员函数用法
cout.precision()设置小数点后精确度,
cout.width(n) //设置输出宽度n,实际宽度>输出宽度,则按实际输出,每次使用只生效一次,下次使用还要再写上这句
cout.setf()设置显示格式,比如cout.setf(ios::left)左对齐或者cout.setf(ios::right)
cout.setf(ios::showpoint)不管是否有小数位,显示小数点
cout.fill();不足宽度则填充,如cout.fill(‘0’);
cout.precision(6);
cout.setf(ios::showpoint);//强制出现‘+’号- C++ 格式控制符方法
dec //设置基数为10hec //设置基数为16
oct //设置基数为8
setfill© //设置填充字符c
setprecision(n) //设置显示小数精度为n位
setw(n) // 设置域宽为n个字符
setiosflags(ios::fixed) // 固定的浮点显示
setiosflags(ios::scientific) //指数表示
setiosflags(ios::left) // 左对齐
setiosflags(ios::right) // 右对齐
setiosflags(ios::skipws) //忽略前导空白
setiosflags(ios::uppercase) //16进制数大写输出
setiosflags(ios::lowercase) //16进制小写输出
C++格式输出举例(以下是转载别人的)
/*基础例子*/
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
double a=123456.343001;
cout<<"a的值为123456.343001"<<endl<<endl;
cout<<"不做任何操作,默认情况下只显示6六位数据:"<<a<<endl<<endl;
cout<<"指定10位小数且为浮点数表示setiosflags(ios::fixed):"<<setiosflags(ios::fixed)<<setprecision(10)<<a<<endl<<endl;
cout<<"指定为10位小数且为指数形式表示setiosflags(ios::scientific),就是留下有效位:如何指定的有效位超过本来的有效位,其输出就是本身的位数:"<<setiosflags(ios::scientific)<<setprecision(12)<<a<<endl<<endl; cout<<"指定为10位小数且为指数形式表示setiosflags(ios::scientific),就是留下有效位:setprecision(10)指定留下10位有效位"<<setiosflags(ios::scientific)<<setprecision(10)<<a<<endl<<endl;
cout<<"左对齐:"<<setiosflags(ios::left)<<setprecision(20)<<a<<endl<<endl;
cout<<"右对齐:"<<setiosflags(ios::right)<<setprecision(20)<<a<<endl<<endl;
system("pause");
return 0;
16 }
/*一个按进制输出的例子*/
#include<iomanip.h>
void main()
{
int x=30, y=300, z=1024;
cout<<x<<' '<<y<<' '<<z<<endl; //按十进制输出
cout<<oct<<x<<' '<<y<<' '<<z<<endl; //按八进制输出
cout<<setiosflags(ios::showbase); //设置基指示符
cout<<x<<' '<<y<<' '<<z<<endl; //仍按八进制输出
cout<<resetiosflags(ios::showbase); //取消基指示符
cout<<hex<<x<<' '<<y<<' '<<z<<endl; //按十六进制输出
cout<<setiosflags(ios::showbase | ios::uppercase);
//设置基指示符和数值中的字母大写输出,
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六进制输出
cout<<resetiosflags(ios::showbase | ios::uppercase);
//取消基指示符和数值中的字母大写输出
cout<<x<<' '<<y<<' '<<z<<endl; //仍按十六进制输出
cout<<dec<<x<<' '<<y<<' '<<z<<endl; //按十进制输出
/*一个使用填充,宽度,对齐方式的例子*/
#include <iostream.h>
void main()
{
cout<<"第一章"<<endl;
cout<<" ";
cout.setf(ios::left); //设置对齐方式为left
cout.width(7); //设置宽度为7,不足用空格填充
cout<<"1.1";
cout<<"什么是C语言";
cout.unsetf(ios::left); //取消对齐方式,用缺省right方式
cout.fill('.'); //设置填充方式
cout.width(30); //设置宽度,只对下条输出有用
cout<<1<<endl;
cout<<" ";
cout.width(7); //设置宽度
cout.setf(ios::left); //设置对齐方式为left
cout.fill(' '); //设置填充,缺省为空格
cout<<"1.11";
cout<<"C语言的历史";
cout.unsetf(ios::left); //取消对齐方式
cout.fill('.');
cout.width(30);
cout<<58<<endl;
cout.fill(' ');
cout<<"第二章"<<endl;
}
/*关于浮点数的格式*/
#include <iostream.h>
void main()
{
float f=2.0/3.0,f1=0.000000001,f2=-9.9;
cout<<f<<' '<<f1<<' '<<f2<<endl; //正常输出
cout.setf(ios::showpos); //强制在正数前加+号
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpos); //取消正数前加+号
cout.setf(ios::showpoint); //强制显示小数点后的无效0
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::showpoint); //取消显示小数点后的无效0
cout.setf(ios::scientific); //科学记数法
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::scientific); //取消科学记数法
cout.setf(ios::fixed); //按点输出显示
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.unsetf(ios::fixed); //取消按点输出显示
cout.precision(18); //精度为18,正常为6
cout<<f<<' '<<f1<<' '<<f2<<endl;
cout.precision(6); //精度恢复为6
}
- 其他输入输出
在c/c++系统中除了标准的输入输出外,还提供了更多的输入函数。
这写函数主要有getch(),getche(), getchar (),cin.get(),putch(),putchar(),cout.put(),gets(),cin.getline(),puts()。另外 还有些为了让缓冲区不影响程序的正确操作的缓冲去的操作,如:cin.putback(),fflush(stdin),cout.flush().我们 做一下简单的说明。
1、getch()和getche(),非缓冲式输入,从键盘读入一个字符。getch()读入字符不显示。有conio.h支持。
2、cin.get(),getchar(),缓冲式输入,从键盘读入一个字符,并显示。getchar()由stdio.h支持,cin.get()由iostream.h支持。
3、putch()和putchar(),非缓冲式输出,输出一个字符到显示器。putch()由conio.h支持,putchar()由stdio.h支持。
4、cout.put(),缓冲式输出,输出一个字符到显示器。由iostream.h支持。
5、gets()和cin.geline(),缓冲式输入,读入一字符串(包括空格,不包括最后的回车),gets()由stdio.h支持,cin.getline()由iostream.h支持。
6、puts(),非缓冲输出,输出一个字符串,由stdio.h支持。
7、cin.putback(),把一个字符送回输入缓冲区。
8、fflush(stdin),清除输入缓冲区操作。无法清除cin.get()等带来的操作。
9、cout.flush(),清楚输出缓冲区。 在这里我们稍微说一下输入/输出缓冲区,这是为了减少程序访问io带来中断而设的一段空间。当程序满足某个刷新条件时,那就将清理缓冲区。具体条件为:
参考别人的各种函数总结
C/C++知识总结 三 C/C++数据类型与输入输出的更多相关文章
- day3 三、基本数据类型和运算符
一.多行注释和单行注释 """ 多行注释 多行注释 多行注释 """ # 单行注释 # print('hello world') # pri ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- 运维之Linux基础知识(三)
运维之Linux基础知识(三) 1. 查看文本 cat tac more less head tail 1.1 cat 连接并显示文件 cat -n:在显示的时候,将每一行编号 -E:显示结束符$ - ...
- 《Go语言圣经》阅读笔记:第三章基础数据类型
第三章 基础数据类型 Go语言将数据类型分为四类: 基础类型 数字 整数 浮点数 复数 字符串 布尔 复合类型 数据 结构体 引用类型 指针 切片 字典 函数 通道 接口类型 在此章节中先介绍基础类型 ...
- C语言------数据类型与输入输出
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3 .源代码及运行截图 4 .小结 1 .实训名称 实训2: ...
- web前端基础知识-(三)JavaScript基本操作
JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. JavaScrip ...
- Django知识总结(三)
拾伍 ● Ajax技术 一 ● Ajax定义 Ajax: 异步的 JavaScript 和 XML (Asynchronous+Javascript+XML) 通过Ajax, 我们可以在不重新加载整个 ...
- 林大妈的JavaScript基础知识(三):JavaScript编程(4)数组
数组,是一段线性分配的,具有非常高性能的数据结构.简单地说,数组以连续的空间存储,通过整数地计算偏移量访问其中的元素,将读取修改的时间复杂度降低至O(1),我们称之为猝发式存取.是不是非常期待?没错, ...
随机推荐
- 安装mysql.so
1.---- cd /usr/local/src/php-5.5.34/ext/mysql/2.---- /usr/local/php5/bin/phpize3.---- ./configure ...
- linux下 GUI 数码相册项目 持续更新中
GITHUB: https://github.com/nejidev/digital_photo_album 本项目,是部分参考别人的项目,是全新从0编写的.算法实现和别人肯定是不同的,github ...
- flask 对于邮件url进行一个加密防止爆破
注册表单 from app.modles import User class registerForm(FlaskForm): nicheng = StringField('昵称',validator ...
- Simulink仿真入门到精通(十三) Simulink创建自定义库
当用户自定义了一系列模块之后,可以自定义模块库将同类自定义模块显示到Simulink Browser中,作为库模块方便地拖曳到新建模型中. 建立这样的自定义库需要3个条件: 建立library的mdl ...
- python如何用format进行进制转换与如何删除进制前缀
10进行十进制,十六进制,八进制,二进制的转换:(#:保留进制前缀)对于带着进制前缀的,如"0x"“0o”“0b”,可以直接在后面加上’x’‘o’'b’进行删除:其他的一些小技巧: ...
- 人见人爱A-B 题解
参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算.(当然,大家都知道集合的定义,就是 ...
- JetBrains Quest 3
起因 今天早上看了一篇博文: 此时的我:"哎,这等好事不等我!" 然后......我打开官方推特: "什么?最后的任务?" 于是就有了这篇文章 开始操作 1.神 ...
- mysql5.7 ERROR 1045 (28000): Access denied for user解决方法
https://blog.csdn.net/csy2961903/article/details/51345401 参考此文注意指名数据库mysql.user
- ReentrantReadWriteLock源码探究
ReentrantReadWriteLock实现了可重入的读锁和写锁,其中读锁是共享锁,写锁是互斥锁.与ReentrantLock类似,ReentrantReadWriteLock也提供了公平锁和非公 ...
- 阿里淘宝的S1级别bug,到底是谁的锅?
3月25日,阿里的淘宝APP在IOS系统上出现BUG: 在打开淘宝APP以后,用户就会收到系统弹窗通知:“您使用的程序是测试/内测版本,将于当地时间2020-03-28到期,到期后将无法使用,请尽快下 ...