PAT C语言基础知识

虽然说都知道,但是有些东西还是不清晰。在这里写一写,日后慢慢更新。

变量相关

  1. 变量的第一个字符:字母或下划线,其他字符:字母,下划线,数字。
  2. int整型范围:32位(32位整数,10^9以内),-2^31~~+2^31-1。绝对值在10^9以内的都可以定义成int。
    long long范围:(64位整数,10^18以内)2的63次方。超过2147483647的就要用long long。后面要加LL标识符。
  3. 浮点型:遇见浮点型直接用double就可以,float精度低不必考虑。%lf输入,%f输出。
  4. 字符型:记住几个ASCII码:'0'->48;    'A'->65;    'a'->97;
    小写字母比大写字母大32;
  5. 开 char s[] 字符数组的时候一定要多申请一个来存放  '\0'  结束标志。
    比如存10个char的动态数组:char* s = (char*) malloc(sizeof(char)*11)应该是这样吧

函数相关

 

 

  1. 关于scanf():
    long long n;           scanf("%lld",&n);
    double n;               scanf("%lf",&n);        //double的输入占位符是%lf
    scanf("%c",&c);     //是可以读入空格字符的,因为是%c

     

  2. printf():
    double n;      print("%f",n);     double的输出占位符是%f
    %2d、%02d、%.2f:超出的会直接输出而并不是格式化的2位
  3. round(double x)
      四舍五入,返回double型变量,需要强转取整一下。
  4. memset(数组名,值,sizeof(数组名))
    为数组中的元素按字节赋值。需要包括string.h。只建议初学者赋值0或-1,因为涉及到补码问题。
  5. 只有scanf和gets会在字符数组最后加 '\0' 结束标志,其他的(比如getchar)不会添加需要手动加。
  6. string.h中常用函数
    #include<string.h>
    
    int strlen(字符数组);        \\得到字符数组中'\0'前的字符的个数
        例如:"memeda\0muadarling"得到的长度是6
    
    int strcmp(字符数组1,字符数组2);   \\字符串比较大小,比较字典序,a<b,无关长度
        返回值:  s1<s2,返回负整数;  s1==s2,返回0;  s1>s2,返回正整数
    
    strcpy(字符数组1,字符数组2);    \\字符串复制,2复制给1
    
    strcat(字符数组1,字符数组2);    \\字符串连接,2连到1后面
  7. sscanf()与sprintf()
    int n = 223;
    char str[100] = 123;
    
        sscanf(str,"%d",&n);
            从左到右,将str以%d形式输入到n里,n=123
    
        sprintf(str,"%d",n);
            从右到左,将n以%d形式输入到str里,str=223

     

  8.  qsort()排序函数

    引用自大佬博客:https://blog.csdn.net/zhaozicang/article/details/24174965

    快速排序是一种用的最多的排序算法,在C语言的标准库中也有快速排序的函数,下面说一下详细用法。

    qsort函数包含在<stdlib.h>中

    qsort函数声明如下:

    void qsort(void * base,size_t nmemb,size_t size ,int(*compar)(const void *,const void *));

    参数说明:

    base,要排序的数组

    nmemb,数组中元素的数目

    size,每个数组元素占用的内存空间,可使用sizeof函数获得

    compar,指向函数的指针也即函数指针。这个函数用来比较两个数组元素,第一个参数大于,等于,小于第二个参数时,分别显示正值,零,负值。

    下面看几个例子:

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
     
    void main(void)
    {
        int i;
        int a[10]={0,1,2,3,4,5,6,7,8,9};
        char b[10]={'a','b','c','d','e','f','g','h','i','j'};
        double c[10]={0.1,0.2,0.9,0.5,0.3,0.6,0.7,0.8,1.1,1.2};
        int cmp1(const void * a,const void * b)
        {
            return (*(int*)a-*(int*)b);//a>b 返回正值
        }
     
        int cmp2(const void * a,const void *b)
        {
            return(*(char*)a-*(char*)b);
        }
        int cmp3(const void * a,const void * b)
        {
            if(fabs(*(double*)a-*(double *)b)<1*exp(-20))
                return 0;
            else
                return(((*(double*)a-*(double*)b)>0)?1:-1);
        }
     
        qsort(a,10,sizeof(int),&cmp1);//对于函数指针(指向函数的指针),直接传入函数名和函数名进行&
                                      //运算都是可以的,因为在调用函数时也是取的函数的地址
        qsort(b,10,sizeof(char),cmp2);
        qsort(c,10,sizeof(double),cmp3);
        for(i=0;i<10;i++)
            printf("%d ",a[i]);
        for(i=0;i<10;i++)
            printf("%c ",b[i]);
        for(i=0;i<10;i++)
            printf("%lf ",c[i]);
    }
    
    
    

     

为啥用Chrome窄窗口写完CSDN还错版了呢。。。这么不行的么

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务