AScii码:
\0 、0、‘0’的区别:‘\0’转义字符的ascii码值是0,’\0’与数字0相同,但不与‘0’相同,‘0’的ascii码值是48,‘a'字符的值是97(ASCII表)
字符串长度为5,大小为6,还有’\0’,不计入长度。
自己写复制字符串的程序一定要记得在末尾添加’\0’。----字符串结束标志
48-57对应数字0-9,65-90对应A-Z,97-122对应a-z.(同一字母的大写与小写之间相差32)
进制:
八进制:%o,Printf(“%04o”,
输入0xxx,系统会默认识别为八进制输入。
十六进制:%x,Printf(“0x%x”,d)
输入0xbbbbbb,系统会默认认为十六进制输入。
//c语言中,十六进制和八进制可以自动转换,二进制需要编写程序。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){unsigned int i, j;int k;printf("please input a number less than 256\n");scanf("%d", &i);printf("the hexadecimal express of i is ox%x\n", i);//十六进制printf("the octal express of i is %04o\n", i);//八进制---用0填充,宽度为4;//打印的时候只打印一位,会从右边往左打一位,那就是次高位j = (i >> 7) + 48;//最高位有可能是2,当取256的时候,所以最高位不和0x01按位与printf("%1c", j);for (k = 6; k >= 0; k--){j = ((i >> k) & 0x01) + 48;//每次除了最后一位其他的都被置零了。printf("%1c", j);}return 0;}
printf("%c\n", '\'');//打印',\用于转义
函数:
- Sleep(1000)//经过一次sleep就会休息1000ms=1s.单位是毫秒。
头文件 #include<windows.h>
- System()执行系统命令的一个函数
System(“cls”)----cls---清空屏幕的一个函数
头文件 #include<stdlib.h>
System(“pause”)-----用系统函数暂停程序执行,等待任意操作来继续执行程序
- 字符串函数:<string.h>
- strcmp用于判断两字符串是否相等,不能用==判断
Strcmp(字符串1,字符串2),如果两字符串相等,则该函数返回结果是0
Eg.If(strcmp(password,”hu8yg”)==0)
头文件为 #include<string.h>
- strlen函数:头文件为#include<string.h>
用于计算整个字符串的长度,不包含结束字符’\0’。
- Strcpy------copy string------#include<string.h>----------在复制时要考虑数组长度,防止溢出,同时,’\0’也会被复制
char* strcpy(char* destination,const char* source);
- strcat字符串拼接函数。
- char* p = strchr(s, 'l');//字符串在前,要找的元素在后
//strchr返回的是找到元素的地址,printf("%s", p);//所以p这里打印的就是一个从要找的字符开始的字符数组
- int rand(void)-----------生成一个随机整数-------头文件#include<stdlib.h>
在调用rand函数之前,使用srand来调用rand,可以保证按照不同的顺序生成随机数。
srand((unsigned)time(NULL));
matrix[i][j] = rand() % 10
- #include <math.h>
pow() 函数用来求 x 的 y 次幂(次方),其原型为: double pow(double x, double y)
Sqrt()开方
sqrt的参量只能是浮点数,所以要强制类型转换,这个不会报错。---sqrt((double)a)
double要用lf
位操作符:
&按位与 ^按位异或 | 按位或
#define _CRT_SECURE_NO_WARNINGS 1
要点:
1不是素数。
一串数字要计算每个的出现次数时,可以搞一个全为0的数组专门用来标记,某个数字出现一次对应位置上就加一。
别忘记free。
用\做换行符的话,打印的结果是会保留第二行中的空格。
switch的case中每个都要加break,不加的会自动执行下一种情况。case只决定程序入口,删除break,将会接着输出下面的case操作。当输入的整形表达式在case中找不到时,设置default,将会执行对应操作。不是每一个case后面都要加break
不可在for循环体内修改循环变量,容易出错/形成死循环/失去控制
C语言中的eof指的是在操作系统中表示资料源无更多的资料可读取,可以用来和getchar搭配停止循环。
#include<stdio.h>int main(){char i;while((i = getchar())!=EOF)//putchar(i);//会等用户的输入全部完成以后再进行下一步操作return 0;}
数组名做指针。
char* mycpy(char* b, char* a){int i = 0;while (a[i])//a[i]最后一位是'\0',循环就会自动不允许进行了{b[i] = a[i];i++;}//上面走到最后一位的时候停止了 ,所以要补上'\0'b[i] = '\0';return b;}
打印结构体:today.year----必须精准到它里面的元素,因为可能数据类型不一样。
自定义函数名大写,类名首字母大写。
二维数组在已知后面数据初始化的时候必须确定列数
typedef struct clock CLOCK;//将struct clock类型的重命名为CLOCK
\r使得每次新的输出会覆盖原来的,从而有时钟跳动的效果
如果malloc分配的指针在后续循环中被移动了,需要弄一个指针保存它最开始的地址,方便后面释放。
记不住ascii码可以直接用字符’a’,’0’等。
辗转相除法:最大公约数大数除以小数,然后小数除以余数,直到余数为0,除数就是最大公倍数。
if (n > m) {k = m;m = n;n = k;}//m总大于nk = m * n;t = m % n;while (t)//余数不为0{m = n;n = t;t = m % n;}
最小公倍数:大数乘以小数除以最大公约数。
最小公倍数还可以把较大数依次扩大123倍直到能整除小数为止。
注意:scanf("%d%d", &m, &n);scanf括号里面的格式必须与输入格式一致,要输入逗号里面要设置逗号。注意这里必须按照原样输入scanf内的字符,注意是英文内的逗号
循环内的有些累加判断标志每次循环结束后要归0。
(int)i % 2 == 0只有整数才能取模
scanf时“ %c”前面有空格,scanf从第一个非空格/回车字符开始录入。
scanf时“%c”前面没有空格,scanf会将键盘的任何一个键入都作为录入(空格看作空白字符,回车看作换行符),多余的部分存入缓存区。
scanf只要开始读取了字符后面一遇到回车符、空格、跳格符就会退出读取,而且不会把最后读到的回车、空格、跳格符从缓冲区中拿走。所以需要getchar()
输入“abc def”,输出为“abc”。
gets只会被回车中断。
getchar只接收单个字符。
Static:
即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。static变量存放在静态存储区,在程序整个运行期间都不释放;
而auto变量存放在动态存储区,随着生命周期的结束而立即释放。
register只能修饰局部变量,不能修饰全局变量和函数;register变量必须是能够被CPU所接受的类型,意味着register变量必须是一个单个的变量,变量长度小于等于寄存器长度;
宏
使用C++分配的数组空间释放格式:delete[]p。
double或者long double型解决阶乘溢出。------打印用LF。
类的定义最后不要少写分号.
函数写在最前面,可以直接调用。
char是ascii表里里面的一个符号。
不知道循环多少次就用while,break掉while.
且&&,或||
continue不执行后面了,直接重新进行循环。
Switch----default:不是上面的任何一种情况,最后必须使用 default 分支。即使程序真的不需要 default 处理,也应该保留语句:
default:
break;
case 后面只能是整型或字符型的常量或常量表达式。
指针指向数组第一个位置的地址,就用数组名。
namespaceOne::caculate;
namespaceTwo::a;------命名空间构造的大括号后面不需要分号。
类的名字首字母必须大写。构造函数与类名相同。析构函数
类的后面必须要加分号。和struct一样。
Human a(1);----初始化.
setage();通过 . 调用。也类似于struct。
在类的外面编写类的函数------int University::getStuNumber-----使用::。
程序C++:
指针
#include <iostream.h>void swap(float *m,float *n){float t;t=*m;*m=*n;*n=t;}void main(){float a,b,*p1,*p2;cin>>a>>b;p1=&a; p2=&b;swap(p1, p2);cout<<a<<endl<<b<<endl;}
指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址(&a,&b)作为实参。
引用
#include <iostream.h>void swap(float& m,float& n)//引用符号加在形参上{float temp;temp=m;m=n;n=temp;}void main(){float a,b;cin>>a>>b;swap(a,b);cout<<a<<endl<<b<<endl;}
引用中的&只会出现在定义中 , 在变量类型(类)名后面(与指针相似) , 并且在接下来的代码中 , &符号都不会再出现 , 只需直接使用引用定义的名字即可 , 而取地址符是不用绑定类名的 , 直接在变量(对象)左边写上& 即可(变量可以是指针或引用 , 毕竟它们也算是变量)。
Int &ri=i;
数据类型加&就声明引用,这个只有C++里面使用。
Creview:链表
#include<stdlib.h>
- 内存初始化函数:memset(void* ptr,char ch,int n),在首地址处填入n个ch字符
- calloc(size_t num,size_t bytes)
//calloc和malloc最主要区别是它会在已分配的内存空间设置0的默认值
- realloc:为已分配的内存空间重新分配并复制内容,新的空间大小设置为0时,相当于free
//动态分配不够的时候扩容
//void *realloc(*ptr,size_t byte)
//返回值为NULL失败,成功时返回首地址.
realloc(ptr, 0); /* free(ptr);*/
- 顺序存储结构:数组
- 单链表初始化时必须定义头指针,使他指向空。