个人学习笔记,若有错误请指正
1.没有定义的小数,默认为 double,不可取余“%” 。sqrt()返回值也为double类型,不可%。1.5f为float 。正整数为 int。浮点数可以省略前面的整数,保留小数
2.标识符 首字符必须为 “字母”“ 下划线”包括:数字,字母,下划线。不可出现符号。
3.long int ,short int 可以省略 int ,写成 long(4字节) ,short (2字节)
4.整型常量后面加 U/u -unsigned int 加L/l -long int 264U 12L,也可以一起写,“0UL—无符号长整型 0”
5. 科学计数法 3.14*100=3.14e2 , 3.14*0.0001=3.14e-4 其中e后面只能为“整数”。E前后必须有数字
6.不允许使用关键字作为标识符的名字,其他的都可以被定义。例如: scanf,main,strcpy.sqrt;甚至可以定义相同的名字,一个为变量名,一个为函数名。定义函数名的时候,如果.h文件中有定义像scanf,main,strcpy.sqrt等,再次被自己定义的时候定义类型必须一致。可能会将原函数覆盖。
7. (a++)++或者 (++a)++ 是错的!首先(a++)执行完之后返回是一个临时变量具有const属性(右值),无法修改。而++ 操作的变量必须是一个可以修改的左值
8. 强制转换,将取值小的类型转为取值大的类型是安全的。浮点数转为整数,会丢失小数部分。
9.scanf回车干扰问题
1.—> scanf("%d", &a); scanf("%c",&b);
2.—> scanf("%d", &a); scanf("%d",&c);
- 输入 %d 之后,输入流中有 回车符,%c吸收了回车,输入的字符无效
- %c 会吸收 回车,%d不吸收 ,回车本身就是字符。
int data1,data2; char op;
scanf("%d", &data1); printf("data1=%d\n", data1);
//getchar();
scanf("%c",&op); printf("字符:\" %c \"\n",op);
scanf("%d",&data2);
printf("%d+%d=%d\n",data1,data2,data1+data2);
10.数组的定义中,{}中只能为常量,不可以为变量,即使已经赋值的也不行
Int a=10,b={a} 错误的
11.所有数组中 不可以 定义数组后,对数组名赋值。对数组定义后默认为const类型,不可修改。数组的赋值,只能初始化时,或者定义后一个一个赋值
错误示例: char string[20];
string =“I love China!”; string[]=“I love China!”;(错误)
String[20] =“I love China!”;可以,但是输出乱码。/会提示出错,可运行/
12.常量中“0或-0”开始的数字都为8进制,“\+整数”结尾的为ASIC码。
字符串中常出现 “char *s="\t a \01 8 b c" “6个 ” char *s=" \t a \017 b c “ “5个
13.逗号运算符:“z=x++,y++,++y”=“++y“
14. 与“\t”不同 ;包含了数据,数据+空格=8位
%8.6f:该数据最少8位宽度
15. sqrt() 返回——double 不可以 %
转义字符:
16. 字符串以“\0”结尾,字符常量没有,字符串数组定义时,必须把‘\0’
算入其中,多预留以为字节。例如:s[6]=”abcde”第六位是 ‘\0’
17. strcpy(a,b); 复制b到a,\0 也复制
a>b(长度)以b中’\0’结尾, 多余部分不变
a<b 崩溃
18. strcmp(str1,str2),按ASCII值大小相比较,从第一个逐个比较,出现大小就退出,不比较后续。‘\0’
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
19.辗转相除法求、最大公约数、公倍数。
最大公约数:2个数相除,余数反复除以小的。
C语言第七篇:辗转相除法求最大公约数_刘兵马俑的博客-CSDN博客_辗转相除法c语言代码
最小公倍数;两数相乘再除以最大公约数
https://jingyan.baidu.com/article/2d5afd69f5bdb585a2e28e88.html
设:9 15
15=9+6 即:6和9的最大公约数;——6和3的
20.二维数组的定义初始化:
数组的定义不可以有变量,未知数,n。
行数可以省略,列数不行
二维数组用大括号确定是哪一行的;
Int a[3][4]={ {1 2},{5},{ 0 8 6}}
1 2 0 0
5 0 0 0
0 8 6 0
21.输入输出相关;
1. gets与scanf的区别:
scanf("%s",s)如果输入了空格会认为字符串结束空格后的字符将作为下一个输入项处理
gets()函数将接收输入的整个字符串直到遇到换行为止
scanf遇到输入数字后输入字母,数字后的回车键会被误认为字符,被当成字母——回车干扰问题
2.printf(指针,需要输出的数值1,数值2,数值3)
1.这种输出形式:数值分别对应,指针中从首地址开始的输出格式符,多余的数值无用。
例1:
char *f="%s,a=%d,b=%d\n";
printf(f,"a+=b",a,b);
%s "a+=b"
%d a
%d b
例2:若f的地址发生变化,则数值对应首地址之后要显示出来的地址。
char *p="%d,a=%d,b=%d\n"; printf(p,c,a,b);
原本对应关系: c a b 显示 : 1,a=10,b=100;
p+=3;后 c, a
首地址为a ,此时第一个%d不显示,第二个对应c,第三个对应a,最后的b忽略。
22. 实参和形参都占用独立的存储单元,各不相关
实参可以是常量、变量、表达式、函数等任意类型,
形参只能是变量
实参————形参 ,方式:单向值传递
如果形参与实参的类型不一致,以形参类型为准
如果函数的类型与返回值类型不一致,以函数类型为准
例子: 实参: a[3][4]———形参 :a[][6]或者a[1][2]或a[6][8]
实参传入的是数组地址,形参接收地址。然后按照自己的范围输出。这里输出6列/1-1/6行-8列,从左到右排列,不足的用随机数补足。
23.函数:
Int 可以缺省定义 是隐含的类型
auto: 凡是函数中未指定存储类别的局部变量,其隐含的存储类别为:auto
static: 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是static
24. 如果在一个复合语句中定义了一个变量 ,只能在复合语句中作用
25.常用函数:
Extern :在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字 extern 对该变量作“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。
26.计算长度 strlen sizeof
Sizeof: 一般用于数字数组的计算,包括 \0 只算 占用空间大小
a=sizeof(a)/sizeof(int)
Strlen: 用于字符数组的计算,不包括 \0, 只算数据个数
char *a=“acn”;strlen(a);
指针的存储用的是长整型,所以为 sizeof(a)=4. sizeof(*a)=1
27. 一般我们用 %p输出地址,但地址其实也是个数值,可以用%d的输出,进行整数化。
printf("%d",&a) ;输出地址为10进制
printf("%p“,&a); 输出地址为16进制
28.