• 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 等可以用来转换大小写。

  • 相关阅读:
    WWDC2014苹果的“软件”发布会
    那些好用的iOS开发工具
    40个国人iOS技术博客
    深度解析开发项目之 05
    深度解析开发项目之 04
    深度解析开发项目之 03
    深度解析开发项目之 02
    成长为 iOS 大 V 的秘密
    理解 iOS 的内存管理
    峰回路转的提权08r2服务器
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/12984894.html
Copyright © 2020-2023  润新知