类型 | 大小(字节) | 取值范围 |
bool | 1 | true 或 false |
int | 4 | -2147483648~2147483647 |
short int | 2 | -32768~32767 |
long int | 4 | -2147483648~2147483647 |
long long int | 8 | -9223372036854775807~9223372036854775807 |
unsigned int | 4 | 0~4294967395 |
unsigned short int | 2 | 0~65535 |
unsigned long int | 4 | 0~4294967395 |
char | 1 | 256 个字符 |
wchar_t | 2 | 256 个字 |
float | 4 | 10^-37~10^38 |
double | 8 | 10^-307~10^308 |
long double | 16 | 10^-4931~10^4932 |
注:一下的数字为unsigned int型数据
| 按位或运算符
eg:2|4=6;2|6=6;
& 按位与运算符
eg:2&4=0;2&6=2;
^ 按位异或运算符
eg: 2^4=6;2^6=4;
~ 按位求反运算符
eg: ~2=4294967393
>> 运算符把位向右移动
eg: 8>>2=2
<< 运算符把位向左移动
eg:2<<2=8
优先级 |
运算符 |
名称或含义 |
使用形式 |
结合方向 |
说明 |
1 |
[] |
数组下标 |
数组名[常量表达式] |
左到右 |
|
() |
圆括号 |
(表达式)/函数名(形参表) |
|||
. |
成员选择(对象) |
对象.成员名 |
|||
-> |
成员选择(指针) |
对象指针->成员名 |
|||
2 |
- |
负号运算符 |
-表达式 |
右到左 |
单目运算符 |
(类型) |
强制类型转换 |
(数据类型)表达式 |
|||
++ |
自增运算符 |
++变量名/变量名++ |
单目运算符 |
||
– |
自减运算符 |
–变量名/变量名– |
单目运算符 |
||
* |
取值运算符 |
*指针变量 |
单目运算符 |
||
& |
取地址运算符 |
&变量名 |
单目运算符 |
||
! |
逻辑非运算符 |
!表达式 |
单目运算符 |
||
~ |
按位取反运算符 |
~表达式 |
单目运算符 |
||
sizeof |
长度运算符 |
sizeof(表达式) |
|||
3 |
/ |
除 |
表达式/表达式 |
左到右 |
双目运算符 |
* |
乘 |
表达式*表达式 |
双目运算符 |
||
% |
余数(取模) |
整型表达式/整型表达式 |
双目运算符 |
||
4 |
+ |
加 |
表达式+表达式 |
左到右 |
双目运算符 |
- |
减 |
表达式-表达式 |
双目运算符 |
||
5 |
<< |
左移 |
变量<<表达式 |
左到右 |
双目运算符 |
>> |
右移 |
变量>>表达式 |
双目运算符 |
||
6 |
> |
大于 |
表达式>表达式 |
左到右 |
双目运算符 |
>= |
大于等于 |
表达式>=表达式 |
双目运算符 |
||
< |
小于 |
表达式<表达式 |
双目运算符 |
||
<= |
小于等于 |
表达式<=表达式 |
双目运算符 |
||
7 |
== |
等于 |
表达式==表达式 |
左到右 |
双目运算符 |
!= |
不等于 |
表达式!= 表达式 |
双目运算符 |
||
8 |
& |
按位与 |
表达式&表达式 |
左到右 |
双目运算符 |
9 |
^ |
按位异或 |
表达式^表达式 |
左到右 |
双目运算符 |
10 |
| |
按位或 |
表达式|表达式 |
左到右 |
双目运算符 |
11 |
&& |
逻辑与 |
表达式&&表达式 |
左到右 |
双目运算符 |
12 |
|| |
逻辑或 |
表达式||表达式 |
左到右 |
双目运算符 |
13 |
?: |
条件运算符 |
表达式1? 表达式2: 表达式3 |
右到左 |
三目运算符 |
14 |
= |
赋值运算符 |
变量=表达式 |
右到左 |
|
/= |
除后赋值 |
变量/=表达式 |
|||
*= |
乘后赋值 |
变量*=表达式 |
|||
%= |
取模后赋值 |
变量%=表达式 |
|||
+= |
加后赋值 |
变量+=表达式 |
|||
-= |
减后赋值 |
变量-=表达式 |
|||
ACM输入输出技术总结
#include < stdio.h >
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
return 0;
}
注:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1。
#include < iostream >
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
cout << a+b << endl;
return 0;
}
>>输入操作符返回流对象的引用,cin >> x 返回istream&,cout << x返回oostream&
若流被标记错误(读取失败)就返回false.
ctrl+z,F6可跳出循环,这代表eof(文件结束符)
当在缓冲区读取到的数据与>>后面的变量类型不匹配的时候,就会结束。
输入是一整行的字符串的,C语法:
char buf[20];
gets(buf);
C++语法:
如果用string buf;来保存:
getline( cin , buf );
如果用char buf[ 255 ]来保存:
cin.getline( buf, 255 );
scanf(“ %s%s”,str1,str2),在多个字符串之间用一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长字符用gets函数。
而getchar函数每次只接受一个字符,经常c=getchar()这样来使用。
getline 是一个函数,它可以接受用户的输入的字符,直到已达指定个数,或者用户输入了特定的字符。它的函数声明形式(函数原型)如下:
istream& getline(char line[], int size, char endchar = ‘\n’);
不用管它的返回类型,来关心它的三个参数:
char line[]: 就是一个字符数组,用户输入的内容将存入在该数组内。
int size : 最多接受几个字符?用户超过size的输入都将不被接受。
char endchar :当用户输入endchar指定的字符时,自动结束。默认是回车符。
结合后两个参数,getline可以方便地实现: 用户最多输入指定个数的字符,如果超过,则仅指定个数的前面字符有效,如果没有超过,则用户可以通过回车来结束输入。
char name[4];cin.getline(name,4,’\n’);
由于 endchar 默认已经是 ‘\n’,所以后面那行也可以写成:
cin.getline(name,4);
最后需要说明的是,C++的输入输出流用起来比较方便,但速度比C要慢得多。在输入输出量巨大时,用C++很可能超时,应采用C的输入输出
#include <stdio.h>
int main()
{
int a,b;
freopen("debug\\in.txt","r",stdin); //输入**重定向**,输入数据将从in.txt文件中读取
freopen("debug\\out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中
while(scanf("%d %d",&a,&b)!=EOF) //C++直接用cin,cout效果一样
printf("%d\n",a+b);
fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
return 0;
}
函数名:freopen
声明:FILE *freopen( const char *path, const char *mode, FILE *stream );
所在文件: stdio.h
参数说明:
path: 文件名,用于存储输入输出的自定义文件名。
mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。
stream: 一个文件,通常使用标准流文件。
返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)
功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。
#include <stdio.h>
int main()
{
//写操作
char f[7]="ddddd";
/*定义char数组并初始化*/
FILE *fp;
fp=fopen("test_b.txt", "w+"); /*创建一个二进制文件只写*/
fwrite(f, sizeof(char), 7, fp);/*将6个char写入文件中*/
int i=6;
char *s="haha";
fputs("Your score of TOEFLis\n", fp);/*向所建文件写入一串字符*/
//fputc(':\n', fp); /*向所建文件写冒号:*/
fprintf(fp, "%s", s); /*向所建文件写一字符串*/
fclose(fp); /*关闭文件*/
//读操作
//fread
FILE *fpp;
char dat[10];
fpp=fopen("test_b.txt", "rb");/*打开一个二进制文件只读*/
int p=fread(dat, sizeof(char), 10, fpp);
if(p!=10)
{
if(feof(fpp))//feof()函数检测文件位置指示器是否到达了文件结尾
printf("End of file");
else
printf("Read error"); /*读数错误*/
fclose(fpp); /*关闭文件*/
}
else
printf("%s",dat);
//fscanf
fpp=fopen("test_b.txt", "rb");/*打开一个二进制文件只读*/
char temp[100];
while (fscanf(fpp,"%s",temp)!=-1)
{
printf("%s\n",temp);
}
fclose(fpp);
//fgets
fpp=fopen("test_b.txt", "rb");
char tpp[100];
char *tp;
while((tp=fgets(tpp,3,fpp))!=NULL)
{
printf("%s\n",tp);
}
fclose(fpp);
//fgetc
fpp=fopen("test_b.txt", "rb");
char t;
while((t=fgetc(fpp))!=EOF)
{
printf("%c\n",t);
}
fclose(fpp);
return 0;
}
fopen函数 用于打开文件
FILE *fopen(char *filename, *type);
fopen(“c:\ccdos\clib”, “rb”); 如果成功的打开一个文件, fopen()函数返回文件指针,否则返回空指针(NULL)。由此可判断文件打开是否成功。
“r” 打开文字文件只读
“w” 创建文字文件只写
“a” 增补,如果文件不存在则创建一个
“r+” 打开一个文字文件读/写
“w+” 创建一个文字文件读/写
“a+” 打开或创建一个文件增补
“b” 二进制文件(可以和上面每一项合用)
“t” 文这文件(默认项)
fclose()函数用来关闭一个由fopen()函数打开的文件,其调用格式为:
int fclose(FILE *stream);该函数返回一个整型数。当文件关闭成功时,返回0,否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。
文件的随机读写
fseek()函数一般用于对 二进制文件进行操作。当fseek()函数返回0时表明操作成功, 返回非0表示失败。
fread()函数是从文件中读count个字段, 每个字段长度为size个字节, 并把 它们存放到buf指针所指的缓冲器中。
fwrite()函数是把buf指针所指的缓冲器中, 长度为size个字节的count个字 段写到stream指向的文件中去。
ftell()函数返回文件位置指示器的当前值,这个值是指示器从文件头开始 算起的字节数, 返回的数为长整型数, 当返回-1时, 表明出现错误。
文件的顺序写函数
fprintf() 函数的返回值为实际写入文件中的字符个数(字节数)。如果写错误,则返回一个负数;
fputs()函数返回0时表明将string指针所指的字符串写入文件中的操作成功, 返回非0时,表明写操作失败。
fputc()函数返回一个向文件所写字符的值,此时写操作成功,否则返回EOF(文件结束结束其值为-1, 在stdio.h中定义)表示写操作错误。
fprintf( ) 函数中格式化的规定与printf( ) 函数相同,所不同的只是fprintf()函数是向文件中写入。而printf()是向屏幕输出。
文件的顺序读操作函数
fscanf()函数的用法与scanf()函数相似,只是它是从文件中读到信息。 fscanf()函数的返回值为EOF(即-1), 表明读错误,否则读数据成功。读到空白字符自动返回。
fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中,在读入之后自动向字符串未尾加一个空字符,读成功返回string指针,失败返回一个空指针。
fgetc()函数返回文件当前位置的一个字符,读错误时返回EOF。
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
//文本文件打开方式设为可读写
// fstream outfile("f1.dat",ios::out|ios::in);
// if (!outfile)
// {
// cout<<"open error!"<<endl;
// exit(1);
// }
// char a[10];
// cout<<"输入十个数字"<<endl;
// //写入文件中
// for (int i=0;i<10;i++)
// {
// cin>>a[i];
// outfile<<a[i]<<' ';
// }
// //从文件读取
// for (int i=0;i<10;i++)
// {
// outfile>>a[i];
// cout<<a[i]<<' ';
// }
// outfile.close();
//从键盘读入一行字符,将其中的字母存在磁盘文件
// ofstream outfile("f2.dat");
// if (!outfile)
// {
// cout<<"open error"<<endl;
// exit(1);
// }
// char c[80];
// cin.getline(c,80);//最多提取80个字符,或者遇到默认终止符\n结束
// for (int i=0;c[i]!='\0';i++)
// {
// if (c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122)
// {
// //outfile.put(c[i]);或者
// outfile<<c[i];
// cout<<c[i];
// }
// }
// cout<<endl;
// outfile.close();
//从上面的文件读入字符,将其中的小写字母改写为大写字母在存在f3文件
ifstream infile("f2.dat");
if (!infile)
{
cout<<"openerrr";
exit(1);
}
ofstream outfile3("f3.dat");
if (!outfile3)
{
cout<<"error";
exit(1);
}
char ch;
while (infile>>ch/*infile.get(ch)*/)
{
if (ch>=97&&ch<=122)
{
ch=ch-32;
}
outfile3<<ch;
cout<<ch;
}
cout<<endl;
infile.close();
outfile3.close();
return 0;
}
1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<”Write Stdout”<<’\n’;就表示把字符串”Write Stdout”和换行字符(‘\n’)输出到标准输出流。
2、析取器(>>) 从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
ifstream file2(“c:\pdos.def”);//以输入方式打开文件 ofstream file3(“c:\x.123”);//以输出方式打开文件
stringstream详解
#include <iostream>
#include <sstream>
using namespace std;
string s;
stringstream ss;
int a;
char c;
while(getline(cin,s)){//s = 123A23B234C......
ss.clear();//注意不能忘记清空流
ss<<s;
while(ss>>a>>c;){//注意ss.eof()会导致最后一个数据重复操作
cout<<a<<c<<endl;
}
}