C语言疑难点

AScii码:

\0 、0、0的区别‘\0’转义字符的ascii码值是0,\0与数字0相同,但不与‘0’相同,‘0’的ascii码值是48,‘a'字符的值是97ASCII表

字符串长度为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", '\'');//打印'\用于转义

函数:

  1. Sleep(1000)//经过一次sleep就会休息1000ms=1s.单位是毫秒。

头文件  #include<windows.h>

  1. System()执行系统命令的一个函数

System(cls)----cls---清空屏幕的一个函数

头文件  #include<stdlib.h>

System(pause)-----用系统函数暂停程序执行,等待任意操作来继续执行程序

  1. 字符串函数:<string.h>
  • strcmp用于判断两字符串是否相等,不能用==判断

Strcmp(字符串1,字符串2),如果两字符串相等,则该函数返回结果是0

Eg.If(strcmp(password,hu8yg)==0)

头文件为 #include<string.h>

  1. strlen函数:头文件为#include<string.h>

用于计算整个字符串的长度,不包含结束字符\0

  1. Strcpy------copy string------#include<string.h>----------在复制时要考虑数组长度,防止溢出,同时,\0也会被复制

char* strcpy(char* destination,const char* source);

  1. strcat字符串拼接函数。
  2. char* p = strchr(s, 'l');//字符串在前,要找的元素在后

//strchr返回的是找到元素的地址,printf("%s", p);//所以p这里打印的就是一个从要找的字符开始的字符数组

  1. int rand(void)-----------生成一个随机整数-------头文件#include<stdlib.h>

在调用rand函数之前,使用srand来调用rand,可以保证按照不同的顺序生成随机数。

srand((unsigned)time(NULL));

matrix[i][j] = rand() % 10

  1. #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总大于n

k = 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>

  1. 内存初始化函数:memset(void* ptr,char ch,int n),在首地址处填入n个ch字符
  2. calloc(size_t num,size_t bytes)

//calloc和malloc最主要区别是它会在已分配的内存空间设置0的默认值

  1. realloc:为已分配的内存空间重新分配并复制内容,新的空间大小设置为0时,相当于free

//动态分配不够的时候扩容

//void *realloc(*ptr,size_t byte)

//返回值为NULL失败,成功时返回首地址.

realloc(ptr, 0); /* free(ptr);*/

  1. 顺序存储结构:数组
  2. 单链表初始化时必须定义头指针,使他指向空。
  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值