C语言注意事项

个人学习笔记,若有错误请指正

 

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);

  1. 输入 %d 之后,输入流中有 回车符,%c吸收了回车,输入的字符无效
  2. %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.

             

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言编程注意事项 1. 每个程序中一定包含main()函数, 尽管C语言中对函数命名没有限制。 2. printf函数永远不会自动换行, 只能用\n来实现, 回车键进行的换行在编译中会出现错误信息。 3. 在vs2008等平台中编译、测试要加 system("pause"); 来暂停dos自动退出引起的printf无法显示。 4. 所有自定义变量必须声明才能使用。 5. 每行一般只写一条语句, 在运算符两边加一个空格, 便于阅读。 6. 整数除法将会自动舍位, 不进行四舍五入的操作。 7. for(初始化部分;条件部分;增长部分) 比while 更适用于初始化和增长步长都是单条语句的情况。 8. 使用 #define 名字替换文本对部分"幻数" 赋予意义便于阅读 #define结尾无需;号来结束。 9. EOF(end of file)表示没有字符输入时定义在stdio.h 头文件中 EOF不等于\n 换行等。 10. 由于!= 的优先级大于 = ,因此如果对判断中存在变量赋值时 应对赋值加() 例如: while((c = getchar()) != EOF)。 11. getchar() 用于用户输入直至键入回车键。 12. 变量名以字母和数字组成, (下划线"_"被默认为字符, 以下划线为首写字母的为库类变量名), 变量常以小写字母开头,内部变量名前31位有效, 外部变量名至少前6位保持唯一性。 13.在C语言中是区分字母大小写的。 14. 一个字符常量为一个整数, 用''单引号括起来。例如: '0' 为48, 它与0没有任何关系。 15. ANSI C语言的转义符: \a 响铃符; \b 回退符; \f 换页符; \n 换行符; \r 回车符; \t 横向制表符 ; \v 纵向制表符; \\ 反斜杠; \? 问号; \' 单引号; \" 双引号; \ooo 八进制数; \xhh 十六进制数; '\0' 表示0, 即(null)。 16. 'x'与"x"的区别: 'x'表示一个整数, 字母x在其字符集中对应的数值, "x"表示包含一个字符x 以及一个结束符'\0'。 17. const在声明变量中起限制作用, 该限定变量的值不能被修改。 18. %运算符不能应用于float或double类型。 19. char类型转换为int型时, 因为无法判断它是signed还是unsigned,这样其结果有可能为负数, 所以转换时尽量指定signed和unsigned限制符。 20. ++i与i++ 的不同之处: ++i是先 +1再使用i, i++ 是先使用i再 +1。 21. 三元运算符"?:" 第一个表达式的括号不是必须的, 但是由于三元表达式的优先级非常低, 因此我们还是将第一个表达式用()括起来以便于阅读和理解。 22. C语言中可以使用递归 (即函数调用自身函数), 这样做并不节省储存空间也不加快执行速度, 只是使程序紧凑便于理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值