1.#include
2.数据类型
char 字符数据类型
short 短整型
int 整形
long 长整型
long long 更长的整形
float 单精度浮点数( 有效数字8位,表示范围:-3.40E+38~3.40E+38 )
double 双精度浮点数( 有效数字16位,表示范围:-1.79E+308~-1.79E+308 )
3.sizeof()用于打印数据类型的大小。
3.变量的分类
全局变量:定义在int main()以外,对整个代码有效
局部变量:定义在某一个范围内用{ }括起来的区域,当出了该范围则无效,如果全局变量和局部变量一起存在,则局部变量优先。
局部变量的作用域是变量所在的局部范围。全局变量的作用域是整个工程。
4.常量
const 修饰的常变量:对所赋值的变量有固定作用,后续不能改变
const int num = 4;
define 定义的标识符常量 :定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。例如:对MAX的赋值,在main函数外定义。#define MAX 10
枚举常量:是 C语言中的一种基本数据类型,用于定义一组具有离散值的常量。
/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
/* 使用基本数据类型声明变量,然后对变量赋值 */
int x, y, z;
x = 10;
y = 20;
z = 30;
/* 使用枚举类型声明变量,再对枚举型变量赋值 */
enum DAY yesterday, today, tomorrow;
yesterday = MON;
today = TUE;
tomorrow = WED;
5.字符串+转义字符+注释
字符串: 这种由双引号(Double Quote )引起来的一串字符称为字符串字面值( String Literal)
转义字符:转义字符是以“\”为开头的字符,后面跟一个或几个字符,其意思是将反斜杠“\”后面的字符转变成为另外的意思。
6.选择语句:用if语句、switch case语句实现
7.循环语句:用while语句、for语句、do ... while语句实现
8.函数:是简化代码,代码复用。
库函数:strcpy (字符串的拷贝)
自定义函数:int Add(int x, int y)
9.数组:一组相同类型元素的集合
10.操作符:算术操作符、移位操作符【<<左移操作符 >>右移操作符】、
位操作符【&按位与 |按位或 ^按位异或(均是对二进制进行)】、
赋值操作符【= += -= *= /= &= ^= |= >>= <<= 】
单目操作符【!】前置++作用是先进行运算再赋值,而后置++为先先复制后运算
i++ 返回原来的值,++i 返回加1后的值。
间接访问操作符【int* p= &a;】
关系操作符【!=】、逻辑操作符【&& ||】
条件操作符【exp1 ? exp2 : exp3】
eg:((a>b)?(x):(y)) 意思就是如果满足条件a>b,那么就返回x的值,否则就返回y的值。
11.常见关键字
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
12.指针
用来储存地址的变量叫指针变量。
取地址符& 解引用符*
int a = 10;
int* p= &a;
*p =20;
定义一个整型的变量a=10,用&a取出变量a的地址并放入指针变量p中,指针变量p的类型(也就是a的类型)是整型,用解引用符找到p变量的指向对象(a),并对指向对象重新赋值20,打印a的结果时发现打印的就是第二次赋值的20。
13.结构体
允许您存储不同类型的数据项。
struct Books
{ char title[50]; char author[50]; char subject[100]; int book_id;
} book = {"C 语言", "RUNOOB", "编程语言", 123456};
int main()
{ printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id); }
//此结构体的声明包含了指向自己类型的指针
struct NODE
{ char string[100];
struct NODE *next_node; };
14.static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。
静态变量在程序中只被初始化一次,即使函数被调用多次,该变量的值也不会重置。
15.字符串的函数
序号 | 函数 & 目的 |
---|---|
1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。 |
2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。 |
3 | strlen(s1); 返回字符串 s1 的长度。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1 |
5 | strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 |
6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置 |
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
过程演示:
#include
void bubble_sort(int arr[], int len)
{ int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } }
int main() { int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 }; int len = (int) sizeof(arr) / sizeof(*arr); bubble_sort(arr, len); int i; for (i = 0; i < len; i++) printf("%d ", arr[i]); return 0; }
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
过程演示:
void selection_sort(int a[], int len) { int i,j,temp; for (i = 0 ; i < len - 1 ; i++) { int min = i; // 记录最小值,第一个元素默认最小 for (j = i + 1; j < len; j++) // 访问未排序的元素 { if (a[j] < a[min]) // 找到目前最小值 { min = j; // 记录最小值 } } if(min != i) { temp=a[min]; // 交换两个变量 a[min]=a[i]; a[i]=temp; } /* swap(&a[min], &a[i]); */ // 使用自定义函数交換 } } /* void swap(int *a,int *b) // 交换两个变量 { int temp = *a; *a = *b; *b = temp; } */
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到 {\displaystyle O(1)} {\displaystyle O(1)}的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后
挪位,为最新元素提供插入空间。
void insertion_sort(int arr[], int len)
{ int i,j,temp;
for (i=1;i { temp = arr[i]; for (j=i;j>0 && arr[j-1]>temp;j--) arr[j] = arr[j-1]; arr[j] = temp; } }