c-方法总结版

哦吼,记住了就无敌了

1.运算符顺序

C语言的运算符包括单目运算符、双目运算符、三目运算符,优先级如下:
image
image
image
image
image
image
image
image
image

2.用数组代替栈

1.栈为空时入栈,栈不空判断

#include <stdio.h>
#include <string.h>
int main(){
  int s[100];//栈
  int top=-1;//栈的标志

  char str[100];
  scanf("%s", str);
  int len = strlen(str);
  //栈处理
  int i;
  for(i=0;i<len;i++){
    if(top==-1){
      top++;
      s[top]=str[i];
    }else{
      if(str[i]==')'){
        if(s[top]=='(')
          top--;
      }else 
        return 0;
    }
  }
  if(top==-1){
    return 1;
  }
  return 0;
}

3.排序(冒泡排序)

从小到大排序

    int i,j,min,temp;
    for(i=0;i<n-1;i++){
        min=i;
        for(j=i+1;j<n;j++){
            if(a[min]>a[j])
                min=j;
        }
        temp=a[i];
        a[i]=a[min];
        a[min]=temp;
    }

4.读取文件

使用 p[i]

    char p[100];
    FILE *fp=fopen("number.txt","r");
    if(!fp){
        printf("can't open file\n");
        return -1;
    }
    while(!feof(fp)){
        fscanf(fp,"%s",p);
    }
    fclose(fp);

5.质数

返回值为0 表示是质数
返回值为1 表示不是质数

int isPrime(int n){
    int i,flag=1;
    if(n==1)
        return 1;
    for(i=2;i<=n-1;i++){
        if(n%i==0){
            flag=0;
            break;
        }
    }
    if(flag==1)
        return 0;//是质数
    else
        return 1;//不是质数
}

->一个正偶数可以分解成两个素数之和

正偶数为i

for(n=2;n<i;n++){//将偶数i分解为两个整数 
    if(isPrime(n)==0&&isPrime(i-n)==0){
        printf("%d=%d+%d\n",i,n,i-n);
    }
}

6.递归

实现n的阶乘

int Fac(int n){
    if(n==0||n==1){
        return 1;
    }else
        return n*Fac(n-1);
 }

7.链表法

struct ListNode{
    int val;
    struct ListNode *next;
};
//链1
p1=(struct ListNode *)malloc(sizeof(struct ListNode ));
p1->val=n[0];
p1->next=NULL;
q=p1;
for(i=1;i<3;i++){
    p=(struct ListNode *)malloc(sizeof(struct ListNode ));
    p->val=n[i];//当前的值
    q->next=p;
    p->next=NULL;
    q=p;
}
//输出链表数列
for(i=0;i<len;i++){
    printf("%d",p->val);
    p=p->next;
}

8.对字母串排序

结果>0就是前面的值大,结果<0就是后面的值大。

strcmp(ar2[min],ar2[j])>0

9.switch case语句

switch (a/10) {
    case 9:
        return "优";
    case 8:
        return "良"; 
}

10.结构体嵌套

//结构体嵌套
struct point{
    int	year;
    int	month;
    int	day;
};
struct stu{
    char name[1000];
    char sex;
    struct point y;
};
int main(){
    struct stu a;
    fgets(a.name,1000,stdin);
    scanf("%c",&a.sex);
    scanf("%d%d%d",&a.y.year,&a.y.month,&a.y.day);
    printf("%s",a.name);
    printf("%c\n",a.sex);
    printf("%d %d %d\n",a.y.year,a.y.month,a.y.day);
}

11.闰年判定

闰年判定:可以被4整除,但不可以被100整除或者可以被400整除

for(i=2000;i<=2000+x;i++){
    if(i%4==0&&i%100!=0||i%400==0){
        printf("%d\n",i);
    }
}

12.约瑟夫问题

#include<stdio.h>
#include <string.h>
int main(){
  int n,i,j;
  scanf("%d",&n);
  int num[n+1];
  for(i=1;i<=n;i++){
    num[i]=1;//1表示人活着
  }
  j=1;
  i=1;
  int n1=n;//当前还活着的人数
  while(n1>1){
    if(num[i]==1){//这个人活着
      if(j==3){
        num[i]=0;
        n1=n1-1;
        j=1;
      }else
        j++;
    }
    i=i+1;
    if(i%n!=0)
      i=i%n;
  }
  for(i=1;i<=n;i++){
    if(num[i]==1)
      printf("%d",i);
  }
}

13.三点定顺逆

/*
设 p1=(x1,y1), p2=(x2,y2), p3=(x3,y3)
求向量
p12=(x2-x1,y2-y1)
p23=(x3-x2,y3-y2)
则当 p12 与 p23 的叉乘(向量积)
*/

int x1,y1,x2,y2,x3,y3,result=0;
scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
result= (x2-x1)*(y3-y2)-(y2-y1)*(x3-x2) ;
if(result>0)
  printf("Counterclockwise\n");
else if(result<0)
  printf("Clockwise\n");
posted @ 2023-03-29 14:07  太好了还有脑子可以用  阅读(84)  评论(0编辑  收藏  举报