zoukankan      html  css  js  c++  java
  • C基础系列(一)

    这里做一些C语言的语法的总结。

    1.输出数字类型

    printf("%d
    ",2);

    2.保留小数点后一位,示例为1 不是 L

    printf("%.1f
    ",8.0/5.0);

    3.整数值用 %d,实数用 %f 输出。

    4.开平方,需要引入 #include<math.h>

    sqrt(3)

    5.scanf中的占位符和变量的数据类型应一一对应,且每个变量前都需要加&符号。

    6.输入两个实数(含小数):这里是两个L,即为 lf , 这里要注意,输入实数采用的是 “%lf ” 而不会 “ %f ”

    scanf("%lf%lf",&r,&h);

    7.用const关键字声明常数

    const double pi = acos(-1.0);

    8.要把25输出为025,可以使用 %03d 即可。

    printf("%03d
    ", m);

    9.在C99中,double的输出必须用 %f , 而输入需要用 %lf 

    10. 怎么输出 , 可以 用“\n”

    11.怎么输出 %d , 可以用 “%%d”

    12. 在定义变量时,最好尽量缩小变量定义的范围。

    13. 浮点数的运算有可能存在误差。那么怎么避免呢?

    为了减小误差的影响,一般改成四舍五入,即 floor(x+0.5)。

    14. 浮点运算可能存在误差。在进行浮点数比较时,应考虑到浮点误差。

    15. 在大多数平台中,int都是32位整数,范围是 -2147483648 ~ 2147483647 。要注意int类型溢出问题。

    16. 要计算只包含加法,减法和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。

    17. 可以使用time.h和clock()函数获得程序运行时间。常数CLOCKS_PER_SEC 和 操作系统,

    请不要直接使用clock()的返回值,而应总是除以CLOCK_PER_SEC。

    printf("Time used = %.2f
    ", (double)clock()/CLOCKS_PER_SEC);

    18.变量在未赋值之前的值是不确定的。

    19. 使用文件最简单的方法是使用输入输出重定向

    freopen("input.txt","r", stdin);
    freopen("output.txt","w",stdout);

    20.#ifdef 和 #endif 如果怎样就执行

    #define LOCAL
    ...
    
    int main()
    {
       #ifdef LOCAL
         printf("test");
      #endif  
    }

    21.如果要求用文件输入输出,但是禁止使用重定向的方式,可以如下

    #include<stdio.h>
    #define INF 100000000
    int main()
    {
        FILE *fin,*fout;
        fin = fopen("data.in","rb");
        fout = fopen("data.out","wb");
        int x,n=0,min = INF,max=-INF,s=0;
        while(fscanf(fin,"%d",&x)==1){
            s += x;
            if(x<min) min=x;
            if(x>max) max = x;
            n++;
        }
        fprintf(fout,"%d %d %.3f
    ",min,max,(double)s/n);
        fclose(fin);
        fclose(fout);
        return 0;
    }

    可以看出,先声明变量 fin 和 fout, 把 scanf 改成 fscanf ,第一个参数为 fin ; 

    把 printf 改成 fprintf,第一个参数为 fout ,最后执行 fclose,关闭两个文件。

    22.输出精确到小数点c为的实数。

    printf("%.*lf
    ",c,(double)a/(double)b);

    而对下面用法,前面的*定义的是总的宽度,后面定义的是输出个数,分别对应外面的参数m,n

    printf("%*.*s
    ",m,n,ch);

    23.一维数组定义

    int a[maxn]

    24.数组a可以被声明在main里面也可以在外面。只有在外面时,数组a才可以开的很大;放在main函数里面,数组稍大就会异常退出。

    25. 数组不能够进行赋值操作,如果要从数组a复制k个元素到数组b,可以这样做:

    memcpy(b,a,sizeof(int)*k)

    当然,如果数组a和b是浮点型的,复制时要写成 

    memcpy(b,a,sizeof(double)*k)

    使用memcpy函数,需要包含头文件 string.h。

    如果要把数组a全部复制到数组b中,可以这样

    memcpy(b,a,sizeof(a))

    26. 把数组清零

    memset(a,0,sizeof(a));

    27.二维数组

    int a[maxn][maxn];

    28. 读入一个不含空格、TAB和回车符的字符串,存入字符数组s

    scanf("%s",s);

    它遇到空白字符会停下来。

     29.把数字输入到字符数组中

    sprintf(buf, "%d%d%d%d%d",abc,de,x,y,z);

    30.判断buf中的指定位置的字符是否包含在字符数组s中,如果不包含则为NULL

    if(strchr(s,buf[i])==NULL) ok = 0;

    31.在一个字符串中查找单个字符: strchr 

    32. strlen(s) 返回的是结束标记之前的字符个数。

    33. 由于字符串的本质是数组,它也不是一等公民,只能用strcpy(a,b),strcmp(a,b), strcat(a,b)来执行赋值,比较,和连接操作。

    34. 对于由空格的字符串输入,可以使用 fgetc(fin), 它读取一个打开的文件 fin,读取一个字符,然后返回一个 int值。

    如果要从标准输入读取一个字符,可以用getchar,它等价于 fgetc(stdin)。

    第二种方法是使用 fgets(buf, maxn,fin) 读取完整的一行。

    fgets(buf,maxn,fin) 将读取完整的一行放在字符数组 buf 中。应该保证 buf 能够存放下文件的一行内容。

    fgets的标准输入版 gets , gets没有指明读取的最大字符数。

    gets已经被废除了。

    C语言中的 gets(s) 存在缓冲区溢出漏洞,不推荐使用。

    while((c=getchar()) != EOF){
    ...
    }

    35. 常量数组

    char s[] = "1234567890"

    36.找字符在常量数组中的位置

    while((c=getchar()) != EOF )
    {
        for (i=1;s[i] && s[i] != c ; i++);
    }

    37. isalpha 判断字符是否是字母,类似的 isdigit , isprint 等,都是定义在头文件 ctype.h

    而 toupper, tolower 等可以用来转换大小写。

  • 相关阅读:
    LeetCode 242. Valid Anagram (验证变位词)
    LeetCode 205. Isomorphic Strings (同构字符串)
    LeetCode 204. Count Primes (质数的个数)
    LeetCode 202. Happy Number (快乐数字)
    LeetCode 170. Two Sum III
    LeetCode 136. Single Number (落单的数)
    LeetCode 697. Degree of an Array (数组的度)
    LeetCode 695. Max Area of Island (岛的最大区域)
    Spark中的键值对操作
    各种排序算法总结
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/12984894.html
Copyright © 2011-2022 走看看