标准头文件结构:
//作用:避免引入头文件重复定义引用
#ifndef _MAX_H_
#define _MAX_H_
~~~~~~
~~~~~~
~~~~~~
#endif
在头文件声明 extend int a;(让编译器知道在某个文件有这么一个全局变量a)
项目:将函数原型放在一个头文件里(.h),在需要调用这个函数的源代码文件(.c)文件中 #include"XXX.h"这个头文件,就能让编译器在编译的时候知道函数的原型
Viod不需要return 0
const int是常量(加const是常量,不能被修改,必须赋初始值)
scanf输入记得加&,如scanf(“%d“,&inch)
%f输入有小数点
Folat是单精度浮点数!double是双精度浮点数!
用scanf输入浮点型数,需要用%lf,用printf输出用%f
- scanf("%[^\n]",str) ,遇到"\n"结束
'^'含有非的意思
“%[^\n]“即遇到\n结束。
如果使用”%[^v]”,那我们输入 “I love you!” ,输出的就是 “I lo” 。
fflush (stdin)清除输入缓冲区内容。
inch是表示为int类型的变量。
二进制可以表示的数范围是2的n次方-1
Pow(10,x);就是十的x次方 sqrt()是二次根号
a 与 b 的值互换,不能用a=b,b=a
正确方法是:t=a;
a=b;
b=t;
!total +=5等于total=total+5
count++等于count+1 ++叫递增运算符,算子必须是变量
count --等于count-1 --叫递减运算符,算子必须是变量
若a=10,则a++=10 ++a=11
a=11 a=11
无论是前缀形式还是后缀形式,a最后都等于11
但后缀形式的值是加1之前的值,后缀形式的值是+1之后的值
== 相等 >=大于或等于
!= 不相等 <小于
> 大于 <=小于或等于
while:循环
do{ }while( ); :do while循环(先执行一次,再考虑条件是否符合人)
for循环:for( ; ; ){ }。初始条件;循环继续的条件;循环每轮要做的事情
条件运算符: y=(A>B)?A:B; 非A即B
即 if(A>B)printf(“%d”,A)
else printf(“%d”,B)
swich(控制表达式)
case 常量:
语句
break;
…
case 常量:
语句
break;
default:
语句
#define宏定义 (define a 11 即把a定义为11,是定义为常量)
#include<stdlib.h> 每次召唤rand()就得到一个随机的数字
#include<time.h>
srand(time(0))
int a = rand()
if(a):如果a为非0数字或字符那么就为真,if条件成立,反之不成立。=if(a!=0)
if(!a):如果!a为真,也就是a为0时,if条件成立,反之不成立。=if(a=0)
if(a!=0):如果a不等于0,则使得if条件成立,反之不成立。等价于if(a)。
if(a==0): 如果a等于0,则使得if条件成立,反之不成立。等价于if(!a)。
goto 变量 ; 令语句直接跳到“:”后面
……
变量:
多组数据输入写法:
while(scanf(“%d“,&n) != EOF)
while(~scanf(“%d“,&n) )
while((ch=getchar()) != EOF)
用ctrl+c输入结束,用ctrl+d结束程序
X,Y的最大公约数*最小公倍数=X*Y
最大公约数:辗转相减法:即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。----来源百度百科辗转相减法即通过对两数的不断减法运算。假设两数为 x, y。当 x > y 时,令 x = x - y;反之,则令 y = y - x;之后一直辗转相减,直至 x = y 时,终止。
- while (x!=y)
- {
- if (x>y)
- x = x-y;
- else
- y = y-x;
- }
.辗转相除法:又名欧几里德算法(Euclidean algorithm),它是已知最古老的算法, 其可追溯至公元前300年前。 辗转:望文生义,就是翻来覆去。相除就很好理解了,就是进行除法运算。辗转相除法的核心就是不断的让两个数做除法运算。其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。假设两数为 x,y。先令 z = x % y ;之后 y 赋x 即令 x = y ;再将 z 赋给 y 即令 y = z;辗转相减,其终止条件为:y 等于0时。
- while (y != 0)
- {
- z = x%y;
- x = y;
- y = z;
- }
穷举法:穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。穷举法又称枚举法,通过对数值范围内的所有数字进行检验,得出其结果。
- for (i = x; i > 0; i--)
- {
- if (x%i == 0 && y%i == 0)
- break;
- }
//该函数返回在字符串 str 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL。
strlwr():大写转小写
strupr():小写转大写
atoi():将字符串转为整数
tolower():将字母转为小写
char *strstr(const char *haystack, const char *needle)(strcasestr 同效果,忽略大小写)
- haystack -- 要被检索的 C 字符串。
- needle -- 在 haystack 字符串内要搜索的小字符串。
字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。
char *strncpy(char *dest, const char *src, size_t n)
- dest -- 指向用于存储复制内容的目标数组。
- src -- 要复制的字符串。
- n -- 要从源中复制的字符数。
把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。
void *memset(void *str, int c, size_t n)
- str -- 指向要填充的内存块。
- c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
- n -- 要被设置为该值的字符数。
- 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。
char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置(strrchr 搜索最后一次出现的位置)
scanf("%s" ) 会跳过换行符,gets()不会自动跳过,
sizeof(); 计算字节数
可以用sizeof(a)/sizeof(a【0】)计算数组大小。
当数组作为函数参数输入时候,往往必须再用另外一个参数来传入数组大小
二分法搜索次数。
指针:
int *p; (定义一个指针变量)
int j = 6;
*p = &j (将j的地址赋给*p;
指针作用:可以在函数中得到某实参的地址,使在函数中可以对该实参进行操作,直接作用于地址。
如何定义一个结构体类型:
struct 结构体名 也可以这样
{ Struct 结构体名
成员列表 {
}; 成员列表
int main() }变量名;
{
struct 结构体名 变量名
}
如果在sturct前面加一个typedef,那么}后面的内容将会定义为类型名 ,如:
typedef struct 结构体名
{
成员列表
}std:
int main()
{
std 变量名;
}
结构体指针(’.’是分量运算符,’->’是指向运算符) :
typedef struct 结构体名
{
int numb;
int ID;
}std:
int main()
{
std student={1,666}
std *point=&student;
point->ID=777;(要用->来表示指向,这里是用指针修改)
}
void *calloc(size_t nitems, size_t size) 同malloc,但calloc会对内存初始化为0
- nitems -- 要被分配的元素个数。
- size -- 元素的大小