1. C语言基础
1.1 基本数据类型
1.2.1 变量1.1.2 运算符 1.2 输入输出
1.2.1 scanf与printf输入输出1.2.2 getchar()与putchar(someChar)1.2.3 C++的输入流与提取运算符>>1.2.4 C++的输入流与cin.get(变量)函数
1.2.4.1 应用之输入向量 1.2.5 C++的输入流与cin.ignore(number,someChar)函数1.2.6 C++的输入流与getline(cin, myString)函数1.2.7 C++输入失败的情况 1.3 常用math函数
1. C语言基础 1.1 基本数据类型 1.2.1 变量int:,32位,4Byte,简要记忆:绝对值在10^9范围内的整数,%d64位,8Byte,long long型,赋大于2^31-1的初值,后面需要加上LL, 10的18次幂方以内,输入输出==%lld==float型:精度6~7位,输出格式都为==%f==double型:精度15~16位 ,输入==%lf , 输出为%f==,浮点型尽量用double小写字母比大写字母ASCII码值大32,直接赋值字符需要使用单引号,输入输出为==%c==转义字符n(换行) (空字符NULL,ASCII为0),输出直接在引号里面就行字符串常量,赋值给字符数组。输入输出用==%s==,输入格式符变量地址前不用加取地址运算符&布尔型,头文件stdbool.h强制类型转换符号常量
#define 标识符 常量 //末尾不加分号
#const 数据类型 变量名 = 常量;//更加推荐
#define 标识符 语句或片段
#define ADD(a,b) ((a)+(b)) //先替换再运行,需要用括号
//提前定义优先级
1.1.2 运算符
注意位运算符的一种用法
const int INF = (1<<30)-1;//必须加括号,位运算符优先级低于算术运算符 const int INF = 0x3fffffff;1.2 输入输出
2022/02/02
1.2.1 scanf与printf输入输出scanf("格式控制“,变量地址)
注意数组名本身就代表地址,不用加取地址运算符
scanf对除了%c以外的格式符的输入以== 空白符(空格,Tab,换行) ==为结束判断标志
当scanf遇见第一个非对应数据类型的字符,就得出结论,已经读到尾部,它会将这个字符放回输入;即意味着当程序下一次读取输入时,将从前面被放弃的那个字符开始
%c格式可以读入空格跟换行
#includeusing namespace std; int main(){ char a[10],b[10]; char c,d,e; scanf("%s%s",a,b); scanf("%c%c%c",&c,&d,&e); printf("%sn%sn",a,b); printf("%c%c%c",c,d,e); } 输入: 123 234 1 2 3 4 输出: 123 234 1 结论:c,d,e分别是换行符、1、空格
若要输出”%“”",前面再加一个%或者%md——不足m位的int型变量以m位进行右对齐输出,高位用空格补齐,若本身超过m位,保持原样%0md——用0补齐而不是空格%.mf——让浮点数保留m位小数输出,四舍六入五成双
a.被修约的数字小于5时,该数字舍去;
b.被修约的数字大于5时,则进位;
c.被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。
1.2.2 getchar()与putchar(someChar)
输入输出单个字符,包括空白符
C++也包含了该函数
#include1.2.3 C++的输入流与提取运算符>>using namespace std; int main(){ char c,d,e; getchar(); c=getchar(); d=getchar(); putchar(c); putchar(d); }
#include
该头文件包含两种数据类型的定义——istream和ostream,分别表示输入流和输出流,以及以下声明
istream cin; ostream cout;
提取运算符>>:有两个操作数,左操作数为一个流表达式,右操作数为一个可以向其存储输入数据的变量名(而在插入运算符中右侧项目包括:常量、变量或复杂表达式)(因为只有变量名才能引用内存位置,以便在运行程序时向其保存数据值)
特点:跳过所有空白字符后,从输入流中提取所需要的数据值,如果是char值,在输入单个字符后即停止输入;如果数据是int或者float,则在遇到第一个数据类型不合适的字符(比如空白字符)后停止数字的输入(后续会有深入问题见1.2.7)
1.2.4 C++的输入流与cin.get(变量)函数istream数据的另一种读取字符数据的方法**,不会略过任何空白字符**
cin.get(someChar); 注意必须使用点标记法1.2.4.1 应用之输入向量
#include#include #include using namespace std; int main(){ vector a; int x; while(cin>>x){ a.push_back(x); if(cin.get()=='n') break; } for(int i=0;i 1.2.5 C++的输入流与cin.ignore(number,someChar)函数 用于跳过(读取并丢弃)输入流的字符
cin.ignore(200,'n') 跳过随后输入的200个字符,若在没结束之前遇到了换行符则终止1.2.6 C++的输入流与getline(cin, myString)函数常用来输入字符串
两种输入方法:
使用>>运算符——**跳过所有前导空白字符 **,然后将后续字符读入变量,并在第一个后缀空白字符处停止(这个后缀空白字符没有消失,而是作为在输入流中等待的第一个字符)
getline()方法——不会跳过空白字符,一直持续输入,直到遇到换行符号n,并且换行符会被消去
#include#include using namespace std; int main(){ string s1,s2; char i,j,k; getline(cin,s1);//输入字符串1 i=getchar(); cin>>s2;//输入字符串2 j=getchar(); k=cin.get(); cout<<"输出第一个字符:"; putchar(i); cout< 1.2.7 C++输入失败的情况 此处可以引申思考一个问题:
使用>>运算符输入其他类型的数据时,若前缀不匹配或者为空符号如何处理答:若是空符号继续略过,若是不匹配的数据,cin流进入失败状态,即后续使用该流的IO操作都被认为是空操作,计算机继续执行程序但悄悄忽略所有使用这个流的后续尝试
补充:另一个使流进入失效状态的方法是尝试打开一个并不存在的输入文件;
1.3 常用math函数#include1.fab(double x) 2.floor(double x):向下取整 3.ceil(double x):向上取整 4.pow(double r,double p):返回r的p次方 5.sqrt(double x) 6.log(double x) 7.sin(double x)、cos(..)、tan(..) 8.asin(..)|acos(..)|atan(..) 9.round(double x):四舍五入,返回依旧double



