预处理#include<stdio.h>;头文件。

stdio.h 标准输入输出。

string.h 字符串预处理,。

int main()主函数,返回的是int整型,

return 0;返回一个0;

自定义函数的类型和返回的类型要一致的;

 

关键字及作用:

数据类型:

无返回void, 整型int,短整型short,长整型long,字符型char,浮点型float,双精度double,无符号unsigned,有符号signed。

控制类型:

循环语句:while,do-while,for,

条件分支if,if-else,if-else if,多路分支switch-ease default,switch(条件){ease 1: printf();braek;},直接转移goto,goto a; a:,continue,break。

return返回到函数调用处,

extern 声明全局变量,

 

标准输入printf(),标准输出scanf();输入需要取地址’&’。

 

sizeof()判断数据类型长度函数,

如:sizeof(int);输出整型类型的长度。

 

逗号表达式:i = 0; a = (i++, i++,i++);则a=3。

 

自动类型转换:int I = 97;  printf(“%c”, i);输出a,

强制转换: printf(“%f”,(float)10/3);输出3.333333。

 

逻辑运算符:&&,||,!。

赋值运算:I = I % 5等价I %= 5。

三目运算?::max = a > b ?a : b;。

 

字符输入getchar(),字符数出putchar(),ch = getchar();putchar(ch),输入输出的都是单个字符。

不回显输入函数getch(),在conio.h头文件中,只输入到缓冲区中。

 

指针,int  *p;,数组,int a[];。

程序中定义字符串。

 

字符串指针,char  *p = “noxue”; p表示地址,*p表示第一个地址的内容。

定义数组,int a[] ={0,1,2,3,4,5,6,7};,  a表示数组的首地址。

多维数组与指针,inta[5][5][5];int *p[5][5] = a; *(*(*(p+2)+3)+4)表示第二层的第三行的第四个数字,去掉指针符号就是指针指向的地址。

注意转义字符,%d是地址和整型的指针数组,%c是字符型的指针数组。

 

函数的定义和调用,带参数的自定义函数,形参与实参,全局变量与局部变量。

 

用指针得 分配空间,释放空间,

分配空间malloc():char  *str = NULL; str = (char  *)malloc(sizeof(char)* 100);分配的空间是没有类型的,要自己强制定义类型,

释放空间free():free(str);。

 

字符串输入gets(),字符串输出puts(),char ch[] = “”;gets(ch); puts(ch);。

 

指针做函数参数,传地址,数据只有一份,传值是复制一份出来。

函数之递归。

 

stdout 标准输出,输出到显示屏上。

stdin 标准输入,从键盘中输入。

 

fgets() 从文件流中输入n个字符到目标字符串,键盘输入fgets(buf,n,stdin);

函数原型:char *fgets(char*buf, int bufsize, FILE *stream);

参数:

*buf: 字符型指针,指向用来存储所得数据的地址。

bufsize: 整型数据,指明存储数据的大小。

*stream: 文件结构体指针,将要读取的文件流。

 

fputs(() 把字符串输出到指向的文件流中,输出显示屏fputs(buf,stdout);

函数原型:int fputs (const char * str, FILE * stream );

参数:

str:数组包含以null结尾的字符序列。

stream:指针指向一个文件对象标识流写入的字符串。

 

字符串处理函数:

strlen()计算字符串长度,

函数原型:extern unsignedint strlen(char *s);

strcat()字符串拼接,

函数原型:extern char*strcat(char *dest, const char *src);

strncat()也是字符串拼接,只是拼接n个字符到目标字符串的后面,

函数原型:char *strncat(char *dest, const char *src, size_t n);

strcmp()比较两个字符串大小,遇到第一个不同的字符比较,

函数原型:extern intstrcmp(const char *str1,const char *str2);

若str1==str2,则返回零;

若str1<str2,则返回负数;

若str1>str2,则返回正数。

strncmp()比较前n个字符,

函数原型:int strncmp (const char * str1, const char * str2, size_t n );

strcpy()字符串复制,

char *strcpy(char* dest, const char *src);

strncpy()复制前n个字符串,

函数原型:char*strncpy(char *dest,char *src, size_t n);

strstr()查询字符串是否为目标字符串的子串,

函数原型:extern char*strstr(char *str1, const char *str2);

strchr()查找目标字符串中首次出现某字符,有则返回出现的位置,

函数原型:extern char*strchr(const char *s,char c);

strset()把目标字符串中的所有字符设置成某字符,

函数原型:extern char*strset(char *s, char c);

strnset()把目标字符串中的前n个字符设置成某字符

函数原型:char*strnset(char*str,charch,unsigned n);

fprintf(),其作用是格式化输出到一个流/文件中

函数原型:int fprintf(FILE* stream, const char*format, [argument]);

参数:

FILE*stream:文件指针。

const char* format:输出格式。

[argument]:附加参数列表。

 

打开文件fopen(),

函数原型:FILE *fopen(const char * path,const char * mode);

参数:

path:字符串包含欲打开的文件路径及文件名。

mode:字符串则代表着流形态。

关闭文件fclose(),

函数原型:int fclose( FILE*fp );

读写文件:

getc(),从流中读取下一个字符并返回它作为一个无符号字符铸int,或EOF文件或错误的结束。

函数原型:int getc(FILE*stream)

putc(),功能是输出一字符到指定流中。

函数原型:int putc(int ch,FILE *fp);

fgetc(),从文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。

函数原型:int fgetc(FILE*stream);

fputc(),将字符ch写到文件指针fp所指向的文件的当前写指针的位置。

函数原型:int fputc (intc, File *fp);

文件结束符EOF,

feof()如果文件结束,则返回非0值,否则返回0。

函数原型:int feof(FILE*stream);

字符串结尾是’\0’,

 

printf格式代码修改符:

 

\a    响铃(BEL)                                                             007

\b    退格(BS) ,将当前位置移到前一列                 008

\f    换页(FF),将当前位置移到下页开头               012

\n    换行(LF) ,将当前位置移到下一行开头         010

\r    回车(CR) ,将当前位置移到本行开头            013

\t    水平制表(HT) (跳到下一个TAB位置)        009

\v    垂直制表(VT)                                                      011

\\    代表一个反斜线字符''\'                                     092

\'     代表一个单引号(撇号)字符                         039

\"    代表一个双引号字符                                         034

\?    代表一个问号                                               063

\0    空字符(NULL)                                                      000

\ooo       1到3位八进制数所代表的任意字符       三位八进制

\xhh       1到2位十六进制所代表的任意字符       二位十六进制

%d十进制转义字符,%o八进制转义字符,%x十六进制转义字符,

%#o 输出的八进制前面加0,%#x 输出的十六进制前面加0x,

 

 

优先级:

 

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

 

()

圆括号

(表达式)/函数名(形参表)

 

.

成员选择(对象)

对象.成员名

 

->

成员选择(指针)

对象指针->成员名

 

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

 

++

自增运算符

++变量名/变量名++

单目运算符

--

自减运算符

--变量名/变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

 

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式/整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<< 

左移

变量<<表达式

左到右

双目运算符

>> 

右移

变量>>表达式

双目运算符

6

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

 

/=

除后赋值

变量/=表达式

 

*=

乘后赋值

变量*=表达式

 

%=

取模后赋值

变量%=表达式

 

+=

加后赋值

变量+=表达式

 

-=

减后赋值

变量-=表达式

 

<<=

左移后赋值

变量<<=表达式

 

>>=

右移后赋值

变量>>=表达式

 

&=

按位与后赋值

变量&=表达式

 

^=

按位异或后赋值

变量^=表达式

 

|=

按位或后赋值

变量|=表达式

 

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

 

 

mode有下列几种形态字符串:

“r” 以只读方式打开文件,该文件必须存在。

“r+” 以可读写方式打开文件,该文件必须存在。

”rb+“ 读写打开一个二进制文件,允许读写数据,文件必须存在。

“w” 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

“w+” 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

“a” 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)

”a+“ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)

“wb” 只写打开或新建一个二进制文件;只允许写数据。

“wb+” 读写打开或建立一个二进制文件,允许读和写

“wx” 创建文本文件,只允许写入数据.[C11]

“wbx” 创建一个二进制文件,只允许写入数据.[C11]

”w+x“ 创建一个文本文件,允许读写.[C11]

“wb+x” 创建一个二进制文件,允许读写.[C11]

“w+bx” 和"wb+x"相同[C11]

“rt” 只读打开一个文本文件,只允许读数据
“wt” 只写打开或建立一个文本文件,只允许写数据
“at” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+” 读写打开一个文本文件,允许读和写
“wt+” 读写打开或建立一个文本文件,允许读写
“at+” 读写打开一个文本文件,允许读,或在文件末追加数据
“rb+” 读写打开一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据

以x结尾的模式为独占模式,文件已存在或者无法创建(一般是路径不正确)都会导致fopen失败.文件以操作系统支持的独占模式打开.

 

所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

  转义字符 意义 ASCII码值(十进制)

  \a 响铃(BEL) 007

  \b 退格(BS) 008

  \f 换页(FF) 012

  \n 换行(LF) 010

  \r 回车(CR) 013

  \t 水平制表(HT) 009

  \v 垂直制表(VT) 011

  \\ 反斜杠 092

  \? 问号字符 063

  \' 单引号字符 039

  \" 双引号字符 034

  \0 空字符(NULL) 000

  \ddd 任意字符 三位八进制

  \xhh 任意字符 二位十六进制

\a:蜂鸣,响铃

\b:回退:向后退一格

\f:换页

\n:换行,光标到下行行首

\r:回车,光标到本行行首

\t:水平制表

\v:垂直制表

\\:反斜杠

\':单引号

\":双引号

\?:问号

\ddd:三位八进制

\xhh:二位十六进制

\0:空字符(NULL),什么都不做

注:

1,\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。

2,\n其实应该叫回车换行。换行只是换一行,不改变光标的横坐标;回车只是回到行首,不改变光标的纵坐标。

3,\t 光标向前移动四格或八格,可以在编译器里设置

4,\' 在字符里(即单引号里)使用。在字符串里(即双引号里)不需要,只要用 ' 即可。

5,\? 其实不必要。只要用 ? 就可以了(在windows VC6 和tc2 中验证)。

 

格式控制符参考:

 

格式输出字符:printf

 

使用:向终端输出若干个类型任意的数据。

 

形式:printf (格式控制符,输出列表)

 

说明:

 

格式控制符:% 格式说明引导符。

 

- 指定左对齐输出。

 

0 指定空位填零。

 

m.n 指定输出域宽度及精度。

 

l.h 输出长度的修正。

 

格式字符 指定输出的数据类型。

 

说明:

 

格式字符:指定输出项的数据类型和输出格式。

 

d 有符号十进制整数。

 

o 无符号八进制数。

 

x 无符号十六进制数。(小写的x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数,大写的X则用大写的ABCDEF来表示10到15之间的数)

 

u 不带符号的十进制整数。

 

基本整型:两个字节,十六个bit(位)

 

11 11 11 11 11 11 11 11 等于 65535.

 

11 11 11 11 11 11 11 10 等于 -2.

 

负数的第一位(符号位)为1。负数的补码怎么得到:原码取反加一。2的二进制数为:00 00 00 00 00 00 00 10,取反就等于11 11 11 11 11 11 11 01,然后加1,二进制数逢二进一,所以就得出-2 的二进制代码。

 

有符号的整型数可以用 %d 输出。

 

无符号的整型数可以用 %u 输出。

 

电脑里存的数字都是二进制数,最高位是符号位还是数据位,可以由输出格式符来控制。

 

二进制数转换八进制数:三个 1 对应一个 7 。

 

二进制数錾十六进制数:四位二进制对应一位十六进制,四个1 对应一个 f。

 

说明:

 

格式字符:c 输出一个字符。

 

s 输出一个字符串。

 

e 以指数形式输出实型数。

 

f 以小数形式输出实型数。

 

g 自动决定输出格式为e和f中较短的一种,不打印无效的零。

 

% 输出%。

 

注意:对于单精度数,使用 %f 格式符输出时,仅前7位是有效数字,小数6位。

 

对于双精度数,使用 %lf 格式符输出时,前16位是有效数字,小数6位。

 

长度修正符

 

l:对整型指定长整型long

 

例:%ld , %lx , %lo , %lu

 

对实型指定双精度double

 

例:%lf

 

h:只用于整型的格式字符修正为short

 

例:%hd , %hx , %ho , %hu

 

对64位整数的输入输出,在POJ上的C++环境下(即VC++),64位整数是:

__int64

输入输出格式为”%I64d”.

 

在G++环境下, 64位整数是

long long

输入输出格式为”%lld”.

 

域宽及精度的描述

 

M:域宽,即对应的输出项在输出设备上所占字符数

 

若:实际数据宽度>M,按实际数据宽度输出。

 

实际数据宽度<M,左边补空。

 

N:精度,说明输出的实型数的小数位数。

 

几点说明:

 

编译程序只是检查printf 函数的调用形式,不分析格式控制字符串,如果格式字符与输出项的类型不匹配,不进行类型转换。(输出的数为随机)

 

格式字符要用小写字母。

 

格式控制字符串中可以包含转义字符。

 

格式控制字符串中的普通字符则原样输出。

 

输出项的参数除了常数、变量外还可以是表达式、函数调用。

 

%g,%f和%e这三个格式用于打印浮点值。

                 %g格式用于打印那些不需要按列对齐的浮点数特别有用。其作用有二:

                 一,去掉该数尾多余的零(没有达到六位的数)

                 二,保留六位有效数字(多余六位的)

                 %e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:3.141593e+00

                两者的区别:

                %g格式打印出的数是总共6位有效数字

                %e格式打印出小数点后的6位有效数字

                %f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593

                (但注意它的精度要求:也是小数点后6位有效数字)

                (8)%%格式用于打印一个%字符。

               (9)%E和%G只是在输出时用大写字母(E)代替了小写字母(e)

 

                 输出正负号的技巧,例如:

               printf("%+d %+d %+d\n",-5,0,5);

                只要在中间加个“+”号就行。作用是输出符号位(即,数的正负号)

                如果不希望正数的前面出现‘+’号,可用下面的方法

                只要在中间加个“ ”号(即:空格)就行。例如:

                作用:如果一个数是非负数,就在它的前面插入一个空格。

               int i;

               for(i=-3;i<=3;i++)

                       printf("% d\n",i); //注意%和d之间有一个空格

 

                sscanf()的使用技巧:

                分解字符串,很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用sscanf来分解字符串 的用法。

               1.

               char str[100],str1[100],str2[100];

               gets(str);

               sscanf(str,”%s%s”,str1,str2);

                将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。

               2

                取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。

        sscanf("123456 ", "%4s", str);

 

注:首发在https://blog.csdn.net/qq_27501261/article/details/79681108