C语言平常笔记
C语言平常笔记
在在自定义函数中使用sqrt函数,必须将开方数,重定义如(double)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21void n_prime(int a)
{
int x=0;
for(x=2;x<sqrt((double)x);x++)
{
if(0==a%x)
{
printf("this is not a prime");
}
}
printf("this is a prime");
}
int main()
{
int num=0;
printf("请输入判断的数:");
scanf("%d",&num);
n_prime(num);
return 0;
}getchar的用法:如果单独只用gerchar(),则只取一个字符。把getcahr 放入循环中则可读取输入进去的所有值,包括(‘\n’,’ ‘),但是scanf,只读取缓冲区中‘\n’之前的,\n是因为键盘使用了回车
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30//这是一个计算输入数字中字母,数字,空格,和其他字符的代码
#include<stdio.h>
int main()
{
char arr;
int letters=0,numbers=0,spaces=0,others=0;
printf("请输入查找的字符串:");//存放得到的字符串
while((arr=getchar())!='\n')//必须放入循环
{
if(arr>='a'&&arr<='z'||arr>'A'&&arr<'Z')
{
letters++;
}
else if(arr>='0'&&arr<='9')
{
numbers++;
}
else if(' '==arr)
{
spaces++;
}
else
{
others++;
}
}
printf("letters=%d\nnumber=%d\nspace=%d\nothers=%d\n",letters,numbers,spaces,others);
return 0;
}staticu作用:
3.1 隐藏该语句
3.2 被static修饰的变量存活时间更长
3.3 初始化变量为0
typedef
4.1 取别名: typedef 类型 别名
1
2
3
4
5//数组起别名
typedef int array[3];
array arr={0,1,2};//定义的一维数组
array arr2[3]={0,1,2,3,4,5,6,7,8};//定义2维数组指针大小在32位是4,在64位是8
输出中间取位
1
2
3
4
5
6
7int a=2;
printf("%.4d",a);
//结果位0002
printf("%4d",a);
//结果为 2
printf("%-4d",a);
//结果为2 (有3个空格)sqrt() 函数:括号里里面,放变量名
1
2
3
4
5A=b*b-4*a*c;
sqrt(b*b-4*a*c);
//不太行
sqrt(A);
//可以double,可以用来表示整数
取一个高位数,从头开始取
1
2
3
4
5
6//例如
a=x/10000;
b=x%1000/100;
c=x%100/10;
d=x%10;乘法符号不能省略
如果想使用除法输出小数,先转化再除法
define常量,不用加
‘;’
1
2#define count 5
//就好了局部变量是放在栈区上的,栈区内存的使用习惯是,先使用高地址,再使用低地址
size_t:它是为了方便系统之间的移植而定义的,不同的系统上,定义size_t 可能不一样。size_t在32位系统上定义为 unsigned int,也就是32位无符号整型。在64位系统上定义为 unsigned long ,也就是64位无符号整形
清空外部控制台:
system("cls");
,头文件是:stdlib.h
。void
函数return ;
对于结构体的引用
- 若使用地址使用结构体内的成员,使用
->
- 若直接通过使用结构体的名字则使用:
.
- 若使用地址使用结构体内的成员,使用
对于链表的使用,应该将所有元素都初始化
使用
malloc
时,需要判断是否申请内存成功判断存储方式
- 大端存储:低位存在高地址
- 小端存储:低位存放在低地址
- 用共同体判断存储方式
枚举类型
1
2
3
4
5
6
7
8
9
10
11
12
13enum sex{man, woman};
int main()
{
int a = 0;
enum sex chg = 0;
scanf("%d", &a);
chg = a == 0 ? man : woman;
printf("chg=%d", chg);
return 0;
}
//如果chg=man,打印0
//如果chg=woman,打印13.14
是double 类型,3.14f
是float类型内存释放:只是将使用的部分的内存打上可回收的标记,还是可以修改内存所存的元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20int main()
{
int n;
int i=0;
printf("Input n:");
scanf("%d", &n);
int* p = (int*)calloc(n, sizeof(int));
while (i < n)
{
p[i++] = i;
}
i = 0;
while (i < n)
{
printf("%d ", p[i++]);
}
free(p);
p = NULL;
return 0;
}mollioc calloc realloc
函数:1
2
3int* p=(int *)calloc(n,size);//n:有多少个连续的int,size:只指针对应的类型的大小
int* p1=(int *)malloc(n*sizeof(int));
int* p=(int *)realloc(p,n*sizeof(int));//n:可用于改变内存(重新申请)使用
calloc
会自动初始化,malloc
不会使用
realloc
有两种情况,小扩容,大扩容,小扩容是在原有的内存基础上扩容,大扩容会改变位置自己的交换函数,不能交换地址,交换地址对应的值
1
2
3
4
5
6
7void swap ( int *a, int *b )
{
int p;
p=*a;
*a=*b;
*b=p;
}不能再自己的函数里面计算,数组的长度,因为,接受的是首地址
可以通过字写的程序计算,数组里面的字符(字符串特别适用,数字注意0)