@EncyKe
2017-03-10T06:42:57.000000Z
字数 6364
阅读 3090
#手册
C
// 头文件;
#inclue<stdio.h>
// 主函数;int 是主函数类型;
int main()
{
// printf() 是格式输出函数;
printf("文本");
// return 是函数返回值;
return 0;
}
main()
函数,C 程序就是执行主函数里的代码,主函数就是 C 语言中的唯一入口;A
- Z
, a
- z
)、数字 ( 0
- 9
)、下划线 _
组成的字符串,并且第一个字符必须是字母或下划线;
/* 多行注释 */
// 单行注释
int
赋值;auto
auto
定义的变量为自动变量,auto
可省略,隐含定为“自动存储类别”,属于动态存储方式。static
用 static
修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量。
register
为了提高效率,C 语言允许将局部变量得值放在 CPU 中的寄存器中,这种变量叫“寄存器变量”,用关键字 register
作声明。
extern
语法:
#define 标识符 常量值
基本数据类型 | 说明 | 字节 | 应用 | 示例 |
---|---|---|---|---|
char |
字符型 | 1 | 用于存储单个字符 | char sex = 'M'; |
int |
整型 | 2 | 用于存储整数 | int height = 18; |
float |
单精度浮点型 | 4 | 用于存储小数 | float price = 11.1; |
double |
双精度浮点型 | 8 | 用于存储位数更多的小数 | double pi = 3.1415926; |
整型数据类型 | 说明 | 字节 | 取值范围 |
---|---|---|---|
int |
整型 | 2 | ~ |
short int / short |
短整型 | 2 | ~ |
long int / long |
整型 | 4 | ~ |
unsigned int |
无符号整型 | 2 | 0 ~ |
unsigned short int / unsigned short |
无符号短整型 | 2 | 0 ~ |
unsigned long int / unsigned long |
无符号长整型 | 4 | 0 ~ |
语法:
(数据类型)变量/(表达式);
名称 | 算术运算符号 | 举例 |
---|---|---|
加法运算符 | + |
2 + 10; |
减法运算符 | - |
10 - 3; |
乘法运算符 | * |
2 * 10; |
除法运算符 | / |
30 / 10; |
求余(模)运算符 | % |
24 % 7; |
自增运算符 | ++ |
i++; |
自减运算符 | -- |
i--; |
×
、÷
等算术符号。自增自减运算表达式 | 说明 |
---|---|
先运算,再取值 | |
++a |
a 自增 1 后再取值 |
--a |
a 自减 1 后再取值 |
先取值,再运算 | |
a++ |
a 取值后,再自增 1 |
a-- |
a 取值后,再自减 1 |
=
=
之前加上其它运算符构成:+=
、-=
、*=
、/=
、%=
关系运算符 | 意义 | 举例 | 结果 |
---|---|---|---|
> |
大于 | 10 > 5; | 1 |
>= |
大于等于 | 10 >= 10; | 1 |
< |
小于 | 10 < 5; | 0 |
<= |
小于等于 | 10 <= 10; | 1 |
== |
等于 | 10 == 5; | 0 |
!= |
不等于 | 10 != 5; | 1 |
逻辑运算符 | 意义 | 举例 | 结果 |
---|---|---|---|
&& |
逻辑与 | 0 && 1; | 0 |
|| |
逻辑或 | 0 || 1; | 1 |
! |
逻辑非 | !0; | 1 |
语法:
表达式1 ? 表达式2 : 表达式3;
优先级 | 运算符 |
---|---|
1 | () |
2 | ! , +(正) , -(负) , ++ , -- |
3 | * , / , % |
4 | +(加) , -(减) |
5 | < , <= , >= , > |
6 | == , != |
7 | && |
8 | || |
9 | ?: |
10 | = , += , -= , *= , /= , %= |
语法:
printf("输出格式符",输出项);
常用格式符 | 说明 | 举例 | 结果 |
---|---|---|---|
%d |
带符号十进制整数 | int a = 10; printf("%d", a); |
10 |
%c |
单个字符 | char x = 'a'; printf("%c", x); |
a |
%s |
字符串 | printf("%s", "FooBar"); |
FooBar |
%f |
6 位小数 | float a = 1.23; printf("%f", a); |
1.230000 |
if(){...}
或者——
if(){...}
else{...}
或者——
if(){...}
else if(){...}
else{...}
或者——
if()
{
if(){...}
else if(){...}
else{...}
}
else
{
...
}
或者使用 switch——
switch(变量){
case 判断:
...
break;
case 判断:
...
break;
default: // 可以省略,位置可变
...
}
while(){...}
或者——
do{...}while()
或者——
for(赋值; 判断; 步进){...}
// 三种表达式中同种若有多个,以,隔开
break
continue
LOOP: if(){...}
goto LOOP;
goto
引用执行;声明语法:
数据类型 函数名(参数){
...
return (表达式);
}
先行声明语法:
// 置于 main 函数之前
数据类型 函数名(参数);
语法:
函数名(参数);
语法:
return (表达式);
return;
static
关键字来定义,因此又被称谓静态函数;语法:
static 数据类型 函数名(参数)
extern
关键字来定义;extern
也可以省略;语法:
extern 数据类型 函数名(参数)
声明:
数据类型 数组名称[长度];
初始化:
数据类型 数组名称[长度n] = {元素1,元素2…元素n};
// 或者——
数据类型 数组名称[] = {元素1,元素2…元素n};
// 或者——
数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n] = 元素n;
获取:
数组名称[元素所对应下标];
static
和外部 extern
类型的数组元素初始化元素为 0,自动 auto
类型的数组的元素初始化值不确定;数组可作为参数传递,可以整个数组传递:函数(数组名)
,也可单独传递一个数组元素:函数(数组名[i])
;作为函数实参传递时,数组元素类型必须与形参数据类型一致。
示例:
#include <stdio.h>
int main()
{
double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
int i,j;
printf("\n************排队前*************\n");
for(i=0;i<10;i++)
{
if(i != 9)
printf("%.2f, ", arr[i]);
//%.2f表示小数点后精确到两位
else
printf("%.2f", arr[i]);
//%.2f表示小数点后精确到两位
}
for(i=8; i>=0; i--)
{
for(j=0;j<=i;j++)
{
if(arr[j]>arr[j+1])
//当前面的数比后面的数大时
{
double temp;
//定义临时变量temp
temp = arr[j];
//将前面的数赋值给temp
arr[j] = arr[j+1];
//前后之数颠倒位置
arr[j+1]=temp;
//将较大的数放在后面
}
}
}
printf("\n************排队后*************\n");
for(i=0;i<10;i++)
{
if(i != 9)
printf("%.2f, ", arr[i]);
//%.2f表示小数点后精确到两位
else
printf("%.2f", arr[i]);
//%.2f表示小数点后精确到两位
}
return 0;
}
示例:
#include <stdio.h>
int getIndex(int arr[5],int value)
{
int i;
int index;
for(i=0;i<5;i++)
{
if(arr[i]==value)
{
index=i;
break;
}
}
return index;
}
int main()
{
int arr[5]={3,12,9,8,6};
int value = 8;
int index = getIndex(arr, value);
if(index!=-1)
{
printf("%d在数组中存在,下标为:%d\n",value,index);
}
else
{
printf("%d在数组中不存在。\n",value);
}
return 0;
}
声明:
数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n];
初始化:
数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n
// 或者——
数据类型 数组名称[常量表达式1][常量表达式2]...[常量表达式n]; 数组名称[下标1][下标2]...[下标n] = 值;
多维数组 | 第 0 列 | 第 1 列 | 第 2 列 |
---|---|---|---|
第 0 行 | num[0][0]=1 |
num[0][1]=2 |
num[0][2]=3 |
第 1 行 | num[1][0]=4 |
num[1][1]=5 |
num[1][2]=6 |
第 2 行 | num[2][0]=7 |
num[2][1]=8 |
num[2][2]=9 |
声明语法:
char 字符串名称[长度] = "字符串值";
// 或者——
char 字符串名称[长度] = {'字符1','字符2',...,'字符n','\0'};
[]
中的长度是可以省略不写的;输出语法:
printf(“%s”,字符数组名字);
// 或者——
puts(字符数组名字);
函数格式 | 说明 |
---|---|
strlen(s) |
获取字符串的长度(单位字节) |
strcmp(s1, s2) |
比较字符串 |
strcpy(s1, s2) |
拷贝字符串 |
strcat(s1, s2) |
字符串拼接 |
atoi(s1) |
字符串转为整数 |
strlen()
获取字符串的长度,在字符串长度中是不包括 \0
而且汉字和字母的长度是不一样的;strcmp()
在比较的时候会把字符串先转换成 ASCII 码再进行比较,返回的结果为 0 表示 s1 和 s2 的 ASCII 码相等,返回结果为 1 表示 s1 比 s2 的 ASCII 码大,返回结果为 -1 表示 s1 比 s2 的 ASCII 码小;strcpy()
拷贝之后会覆盖原来字符串且不能对字符串常量进行拷贝;strcat
在使用时 s1 与 s2 指的内存空间不能重叠,且 s1 要有足够的空间来容纳要复制的字符串;