学习C的一些笔记(一)

来源:互联网 发布:大数据挖掘系统 编辑:程序博客网 时间:2024/06/08 08:40

    总结下很早以前的笔记,温故而知新。

  1.    
    printf("%-2d*%2d=%3d ", index_i + 1, index_j + 1, (index_i + 1) * (index_j + 1) ); 

    在输入一长串数,但需要单个读入的时候,就需要指定宽度 即%1d(如身份证系统scanf(”%1d“, &a[i]))其中“-”代表左对齐,2,3代表显示几个字符,不足,用空格代替。
  2. 当需要使用getch()时,头文件为#include<conio.h>
  3. C/C++中“<”应该用“!=”表示。
  4. C/C++中中“*2”应该用"<<1"即左移一位来表示
  5. register 请求编译器优化它定义的变量,并且通常这种优化比人工优化的好.无需多次访问内存,只需要在寄存器中调用。
  6. 在有指针的情况下,一定要先验证指针是否为空
  7. scanf,printf与sscanf,sprintf和fscanf, fprintf的区别:sscanf是从缓冲区里读取,scanf是从标准输入读取,fscanf从文件流中读取信息。printf是打印到标准输出,sprintf是输出到缓冲区里,返回值是输入的字符数量,fprintf将信息写入到文件流中
  8. strlen函数表示测定字符串长度,但是会算上\0。所以对于字符串长度要-1
  9. union 与struct的区别:union ( 共用体):构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖)。struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据类型

  10. 随机生成数字 rand()%100(表示随机产生0~100之间的数)但产生随机数为一次性,因为与srand()函数有关。srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数之前,必须先利用srand()设好随机数种子(seed),如未设置则回自动设置成1。通常可以利用getpid()(将系统返回的进程ID作为随机数种子(进程ID每次都不一样))或time(0)(以系统时间作为种子)的返回值来当作seed。(srand((int)time(0));或者srand((int)getpid()))(mac algorithm test)注:getpid在windows下头文件是#include<process.h>,在linux/unix下是#include<unistd.h>如果要生成一个范围内的随机数,例如,60—100,则是:rand()%41+60
  11. int main(int argc, char* argv[])main为函数,int为函数返回值类型,argc跟*argv[]为参数,这两个参数为系统所传,即系统调用时会给程序传参数,(传入argc和argv[])13.#代表预处理。 一般预处理命令有三个,宏定义,头文件包涵,条件编译(在编译时判断)
  12. 头文件用<>,程序在安装目录下寻找,用""时先在源程序目录下找函数申明是给连接器使用,int main(int argc, char* argv[])就是一个函数申明,是告诉编译器该函数在其他地方已经定义过了,会交给连接器处理。申明不占任何空间
  13. .当为输入时,double为%lf,当为输出时%f
  14. scanf返回值为成功赋值的变量数量,发生错误时返回EOF
  15. a[j] = !a[j]代表将其值的相反值赋予当前元素。非零值即真例如,如果a[j] = 0,那赋值后结果为1,如果不为0,那赋值后的结果为0
  16. 如果在c中要输出\那么,要\\,如printf("\\")
  17. c中可以通过头文件ctype.h 中的isalpha,isdigit,isprint来判定字符属性
  18. continue跳出循环体中剩余部分,从下次循环开始判断,break是直接跳出循环
  19. 为什么不能连续等于大于小于,如“‘a’ <= ch <= ‘z’” 
    因为机器把’a’ <=看成一个表达式,若成立则最后值为1,若不成立为0,所以此表达式永远为真。注:编译器每次只算一个操作符。
  20. assert函数,若错误会报错,abort错误直接退出

原创粉丝点击