C语言自我查漏补缺

1.合法标识符只包括字母或数字(下划线"_"被看做字母),字母开头(一般小写),不涉及保留字

2.%10d为右对齐,包括数据和数据左侧空格共占10列;%-10d为左对齐

3.scanf("%5d",&a); 若输入12345678,则a=12345; 

4.scanf("%d %*d %d",&a,&b); 若输入1 2 3,则a=1,b=3; //可用于输入身份证号时读取生日

   如:scanf("%*6d%4d%2d%2d%*d",&year,&month,&day);

5.scanf("%lf",&a); lf读入双精度浮点数  f读入单精度  scanf("%lld",&a); 读入long long类型

6.printf("%.2f",a); 数字用于控制精度。printf("%lld",a"); 输出long long类型

7.#define PI 3.1415

8.两操作数类型不同时,低精度会向高精度转换 char<int<float<double;

9.一直不太熟的switch用法:

switch(op)

{          

        case '+': printf("=%.2f",x+y); break;

        case '-':    printf("=%.2f",x-y); break;

        default:    printf("运算符错误"); break;

}

10.浮点常量12.34表示:12.34/12.34e0/1.234E1/0.1234E2/123.4e-1等

11.#include<limits.h>包括INT_MAX/INT_MIN等

12.逗号运算符优先级低于赋值运算符

a=(3+5,4*9);则a=36

a=3+5,4*9; 则a=8

b=(a=3+5,4*9);则a=8,b=36

13.(int)(pow(10,i))会截断取整,建议改成(int)(pow(10,i)+0.000001);

14.while(scanf("%lf",&score),score>=0) 连续输入直到输入负数

     while(scanf("%d",&n)!=EOF) 连续输入直到ctrl+z

15.判断素(质)数:i从2到(int)sqrt(m)中有一个能整除m就不是素数  //0,1既不是素数也不是合数

16. return a>b?a:b; 返回a,b中最大值

17.求阶乘函数

double fact(int n)

{

        int i;

        double res=1;

        for(i=2;i<=n;i++)

                res*=i;

        return res;

}

可用于求组合数,如m个元素中任取k个元素

p=fact(m)/(fact(k)*fact(m-k));

18.递归求阶乘函数

int fact(int n)

{

        if(n<=1)

                return 1;

        else        

                return n*fact(n-1);

}

 19.递归求最大公约数

int gcd(int a,int b)

{

        if(a%b==0)

                return b;

        else

                return gcd(b,a%b);

}

20.冒泡排序

for(int i=0;i<n;i++)

for(int j=0;j<n-i-1;j++)

        if(a[j+1]<a[j])

       {

               int temp=a[j+1];

               a[j+1]=a[j];

               a[j]=temp;

        }

21.有序数组去重只需比较当前元素与前一项是否相同

22.大小写字母转换 大写转小写:+32;小转大:-32

23.有序集合a[m]和有序集合b[n]合并为有序集合c[o],o不一定等于m+n,因为要去重。

int i=0,j=0,k=0;

while(i<m&&j<n)

{

        if(a[i]<b[j])

                c[k++]=a[i++];

        else if(a[i]>b[j])

                c[k++]=b[j++];

        else

         {

                c[k++]=a[i];

                i++;

                j++;

        }

}

while(i<m) c[k++]=a[i++];

while(j<n) c[k++]=b[j++];

24.二分搜索(递归版)

int  BS(int a[],int x,int low,int high)

{

        if(low>high)

                return -1;

        else

        {

                int mid=(low+high)/2;

                if(x==a[mid])

                        return mid;

                else if(x<a[mid])

                        return BS(a,x,low,mid-1);

                else

                        return BS(a,x,mid+1,high);

        }

}

25.二分搜索(非递归版)

int mid;

while(low<=high)

{        

        mid=(low+high)/2;

        if(a[mid]==x)

                return mid;

        else if(a[mid]<x)

                low=mid+1;

        else

                high=mid-1;

}

26.二维数组按先行后列存储 int a[3][2] 三行二列 共6个元素

初始化可 int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};//与int a[3][3]={1,2,3,4,5,6,7,8,9};等价

123
456
789

也可 int b[4][3]={{1,2,3},{4},{5,6}};  //与int b[4][3]={1,2,3,4,0,0,5,6};等价

123
400
560
000

27.字符串函数及字符函数及数学函数

ctype.h
isalnum判是否数字或字母,是返回1,否返回0
isalpha判是否字母,是1否0
iscntrl判是否控制字符(ASCII码0-31),是1否0
isdigit判是否数字,是1否0
isgraph判是否可打印字符(ASCII码33-126),是1否0
islower判是否小写字母,是1否0
isprint判是否可打印字符(ASCII码32-126),是1否0
ispunct判是否标点字符,是1否0
isspace判是否空格、跳格符或换行符,是1否0
isupper判是否大写字母,是1否0
isxdigit判是否十六进制数字字符,是1否0
tolower转换为小写字母
toupper转换为大写字母
string.h
char *strcat(char *str1,char *str2)把str2接到str1后面,str1最后的'\0'被取消返回str1
char *strchr(char *str,int ch)找出str指向的字符串中第一次出现字符ch的位置返回指向该位置的指针,若找不到则返回空指针
int strcmp(char *str1,char *str2)比较str1,str2

str1<str2,返回负数

str1==str2,返回0

str1>str2,返回正数

int strcpy(char *str1,char *str2)把str2指向的字符串复制到str1中去返回str1
int strlen(char *str)统计字符串中字符个数,不包括'\0';返回字符个数
int strstr(char *str1,char *str2)找出str2字符串在str1字符串中第一次出现的位置,不包括str2的串结束符返回该位置的指针,若找不到则返回空指针
math.h
log(x)求lnx
log10(x)求lg(x)

注:想求以2为底的对数不要忘记换底公式

abs(x)求整数x绝对值
fabs(x)求浮点数x绝对值
cos(x)求cos(x)
acos(x)求arccos(x)
注:其他三角函数同上
exp(x)求e的x次方
floor(x)求不超过x的最大整数
fmod(x,y)x%y
double modf(double val,int *iptr)把双精度数val分解成整数部分和小数部分,把整数部分存在iptr指向的单元,返回小数部分
pow(x,y)求x的y次方
sqrt(x)根号x,需x>=0

28.K进制转换为10进制

int KtoD(char s[],int k)

{

        int d=0;

        for(int i=0;s[i]!='\0';i++)

                d=d*k+(s[i]-'0');

        return d;

}

29.整数十进制转二进制 “除2取余,逆向排序”,小数十进制转二进制“乘2取整,正向排序”

void DtoB(char s[],int n)

{

        int len=0;

        while(n>0)

        {

                s[len++]=n%2+'0';

                n=n/2;

        }

        s[len]='\0';

        strrev(s);

}

十进制转r进制  p208

30.对n个字符串排序

void Sort(char str[][LEN],int n)

{

        int i,j;

        char temp[LEN];

        for(i=0;i<n-1;i++)

                for(j=i+1;j<n;j++)

                {

                        if(strcmp(str[i],str[j])>0)

                        {

                                strcpy(temp,str[i]);

                                strcpy(str[i],str[j]);

                                strcpy(str[j],temp);

                        }

                }

}

31.指针   int count=5,*cntptr=&count;

32.内存分配  int *p=(int *)malloc(sizeof(int)*n);   //p[n]

33.结构体 

struct date{

        int year;

        int month;

        int day;

}

struct student{

        char ID[16];

        char name[16];

        char sex;

        struct date birthday;

        float score;

}stu;

struct student stu={"2024","JLU",'M',(2002,01,01),98);

typedef struct LNode{

        int data;

        struct LNode *next;

}LNode;

LNode *p;

34.文件相关处理  p284-p307 ☆重点

FILE *fp;

fp=fopen("f1.txt","w");

fprintf(fp,"Hello World!");

fclose(fp);

35.模拟  p310-p340 ☆重点

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值