C语言笔记
- 一简单点
- 1.1调试的作用与如何调试
- 1.2a++与++a的区别
- 1.3 if else的使用方法
- 1.4 if(条件) 的用法
- 1.5switch的用法
- 1.6while与do while区别
- 1.7 for用法
- 2.1goto out用法
- 2.2 字节如何显示
- 2.3 原码,补码,反码如何转换
- 2.4整数的范围
- 2.5进制的表达
- 2.6逃逸字符
- 2.7类型的强制转换
- 2.8复制代码可以改为这种
- 3.1指针大集合
- 3.2malloc用法及free
- 3.3指针的输出用法
- 3.4strcmp用法
- 3.5struct与union的简单区别和用法
- 4.1随机数命令
- 4.2 最大公约数如何求
- 4.3 %,%d,%i
- 4.4符号优先级
- 4.5程序的一些小毛病
- 4.6 如何构造素数
- 4.7int main(void)是什么意思
- 4.8字符串的输入
- 4.9动态内存分配
- 4.10typedef的用法
- 4.11静态本地变量
一简单点
1.1调试的作用与如何调试
调试-----编好程序后,用各种手段进行查错和排错的过程
有很多问题导致不能调试
1.要用管理员身份运行dev c++
2.程序编译保存的文件夹必须在dev c++的目录下 最好是全英文
3.调试后 无显示变量 选择连接器,将产生调试信息改为yes
1.2a++与++a的区别
a++和++a 都属于自增运算符,区别是对变量a的值进行自增的时机不同。a++是先进行取值,后进行自增。++a是先进行自增,后进行取值。
例如:假设 x=3,y=4;
(1) (x++)+(++x)=8
解释:对于第一个(x++),因为x++是先取值后自增,所以(x++)所取得值为3,然后x进行自增,此时x=4;对于第二个(++x),因为++x是先自增后取值,所以(++x)所取得值为5,此时x=5,所以结果为8。
(2) (x++)/3+(--y)*2-(x--)%6+(y++)*3-(y--)
1+6-4+9-4=8
解释:首先(x++)取值为3,然后x=4;然后(--y)取值为3,此时y=3;然后(x--)取值为4,然后x=3;然后(y++)取3,然后后y=4;最后(y--)取4,然后y=3;
注意:()可以提高算数优先级,所以先算括号里面的表达式,但是x++的取值为x,然后x在自增。
重点: ++ 运算优先级 很高
1.3 if else的使用方法
if (条件) {
} else/否则/ {
}
嵌套if=else
else靠近if
if中的if为else影响对象(不加大括号)
加大括号影响第一个if
//就是else影响的永远是最近的那个if
1.4 if(条件) 的用法
例如:int a=5;
if (a>0) {
printf(“可以输出”)
}
a>0–条件符合 使得结果输出为1
若是a<0–结果输出为0
if (1) {
printf(“成功输出”)
}
即 if () 括号中不一定要a>0,只要括号中的结果是对的,那么就可以输出
1.5switch的用法
int a=5;
switch (a/5) {
case 1:printf(“随便”)
case2:
case3:
}
a/5使得结果输出为1
符合case 1
当然1只是一个例子
你也可以case white
case blue
1.6while与do while区别
do while先循环再判断
Do {
<循环体语句>
}while(<循环条件>);
while先判断再循环
While(条件){
动作;
}
1.7 for用法
for(初始条件;条件;动作)
不细说,没啥难的
二、难一点
2.1goto out用法
Goto out
Out:(跳到这,跳过中间的程序)
注:可跳过程序直接至另一个地方继续运行
禁术,少使用
2.2 字节如何显示
Sizeof??)
可以显示??有几个字节
不细说
2.3 原码,补码,反码如何转换
2.4整数的范围
2.5进制的表达
16进可表达2进
0001 0010 2进
1 2 16进
2.6逃逸字符
2.7类型的强制转换
Int a=(double)a/b
将右边a变成double
右边为double
左边a也为double
2.8复制代码可以改为这种
#include <stdio.h>
void sum(int begin,int end) //1
{
int i;
int sum=0;
for (i=begin;i<=end;i++) {
sum+=i;
}
printf(“%d加到%d的值为%d\n”,begin,end,sum);
}
int main() //2
{
sum(1,10);
sum(10,30);
sum(30,50);
}
可以将1 2换 但是要在2前面加 void sum(int begin,int end) ; //要分号
不用void ***
就一直要复制 printf(“%d加到%d的值为%d\n”,begin,end,sum);
三、难点
3.1指针大集合
传入函数的数组为指针
Sizeof(a)==sizeof(int*)
*a=a[]
可以用数组的运算符[]进行运算
第二第三一样
*在后 &i无法修改
*在前 p3无法修改
让指针加一 加的是字节
Char +1 int +4
*p等于等于a[0]
*p+1等于等于a[1]
用中文是因为不知道为什么==不能打出来
用指针相减、
结果是多少进制/sizeof(int or char …)
3.2malloc用法及free
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100个整数的内存空间。
每次用malloc都需要free(指针名字)
指针名字=NULL
不然会变成野指针
我也不是很熟这个怎么用
3.3指针的输出用法
3.4strcmp用法
strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不到的字符,或者到达字符串末尾(遇见\0)。
返回值:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。
注意,上面的用法小概率会出错
3.5struct与union的简单区别和用法
struct 变量1 {
int 变量2;
int 变量3;
};
struct 变量1 变量4 = {3,4}
printf(”%i %i“,变量4.变量2,变量4.变量3);
注意,不都是括号,有逗号的
struct中的变量只能是int
union用法与之类似 但是其中的变量可以是指针,char什么的
四、杂七杂八
4.1随机数命令
#include <stdlib.h>
#include <time.h>
Srand(time(0));
Int a=rand();
两位随机数
a%100
4.2 最大公约数如何求
如果b=0 结束,a为最大公约数
否则,计算a/b的余数,让a=b,b=余数
回到第一步
辗转相除法
4.3 %,%d,%i
c语言中的%u是输入输出格式说明符,表示按unsigned int格式输入或输出数据。 %d 有符号10进制整数 %i 有符号10进制整数
4.4符号优先级
不全哦
4.5程序的一些小毛病
4.6 如何构造素数
4.7int main(void)是什么意思
int main (void) 指的是此函数的参数为空,不能传入参数,如果你传入参数,就会出错。 int main () 表示可以传入参数。 在 C++ 中 int main () 和 int main (void) 是等效的,但在 C 中让括号空着代表编译器对是否接受参数保持沉默。
4.8字符串的输入
4.9动态内存分配
问:什么时候需要动态分配内存
答:当程序中有比较大的数据块需要使用内存的时候使用。原因:比较大的数据块如果使用了静态内存,在该数据块运行完毕后不能动态的释放该内存,直到整个程序运行完才能释放,如果整个程序比较大,有可能因为内存不够而发生错误。
4.10typedef的用法
例如 int a;
int b;
使用typedef可以改成
typedef int i;
i即为int;
i a;
i b;
typedef 原来的字符 你想要将改的名字;
可以使代码更加简洁
4.11静态本地变量
static只调用一次