首页 > 其他分享 >C语言笔记

C语言笔记

时间:2023-01-30 11:55:42浏览次数:41  
标签:node 10 return struct int 笔记 C语言 char

11月13日

c语言自带的qsort

#include<stdio.h>
#include<stdlib.h>
int comp(const void *a,const void *b)//用来做比较的函数。
{
return *(int*)a-*(int*)b;
}
int main()
{
int a[10] = {2,4,1,5,5,3,7,4,1,5};//乱序的数组。
int i;
qsort(a,10,sizeof(int),comp);//调用qsort排序
return 0;
}

从小到大排 b-a就是从大到小了


memset函数

# include <stdio.h>
# include <string.h>
int main(void)
{
    int i;  //循环变量
    char str[10];
    char *p = str;
    memset(str, 0, sizeof(str));  //只能写sizeof(str), 不能写sizeof(p)
    for (i=0; i<10; ++i)
    {
        printf("%d\x20", str[i]);
    }
    printf("\n");
    return 0;
}

11月16日

输出最后多个换行一般会影响结果吗?否。


多组字符串输入一般还是用二维数组比较好。
但也不是绝对的,比如内存分配器那道题


数组实现栈

char contents[SIZE];
int top=0;
void push(char i){
    contents[top++]=i;
}
char pop(void){
    if(top==0){
        printf("Empty\n");
    }
    else{
        return contents[--top];
    }
}

11月18日
寻找比大的2的幂

int two(int x){
    int ans=-1;
    for(int i=1;;i*=2){
        ans++;
        if(i>=x){break;}
    }
    return ans;
}

计算2的幂
1<<n就行了


11月19日
malloc函数的使用

    char *b;
    a=malloc(N);
    b=malloc(N);

————————————————————————————————————————
IEEE754 十六进制转十进制 单精度浮点

#include <math.h>
float f(int number)
{
    int sign = (number & 0x80000000) ? -1 : 1;//这里的&是按位与运算符。这里是判断符号位
    int exponent = ((number >> 23) & 0xff) - 127;//先右移操作,再按位与计算,出来结果是30到23位对应的e
    float m = 1 + ((float)(number & 0x7fffff) / 0x7fffff);//将22~0转化为10进制,得到对应的x
    return sign * m * pow(2, exponent);
}
int main()
{

    int a;
    scanf("%x",&a);
    float result = f(a);
    printf("%f", result);
    return 0;
}

如果只是为了输出正确的值,请见内存解释器
————————————————————————————————————————————
11月20日

int search(int x){
    int l=0,r=n-1;//范围是k[l]到k[r]
    while(r>=0&&l<n&&l<=r){
        int i = (l+r+1)/2;
        if(k[i]==x){
            return 1;
        }
        else if(k[i]<x){
            l=i+1;
        }
        else{
            r=i-1;
        }
    }
    return 0;

}

此为二分法搜索,在此之前必须从小到大排序
——————————————————————————————

void swap(int *a,int *b){
    int x=*a;
    *a=*b;
    *b=x;
}

void sort(int l,int a[]){
    for(int i=0;i<l-1;i++){
        for(int j=0;j<l-i-1;j++){
            if(a[j]>a[j+1]){
                swap(&a[j],&a[j+1]);
            }
        }
    }
}

此为冒泡排序


几个string.h里面的函数

char *strcpy(char *s1,const char *s2){
    char *p=s1;
    while (*s1++ = *s2++);
    return p;
}
char *strcat(char *s1,const char *s2){
    char *p = s1;
    while(*p){
        p++;
    }
    //这个地方不应该写为while(*p++)因为这会导致p多走一位
    //正如数学中开闭区间容易出错,编程中的端点位置也是很容易出问题的
    while(*p++ = *s2++)
        ;
    return s1;
}

在倒水那道题里一直用的比较
#define min(a, b) ((a) < (b) ? (a) : (b))
既不需要反复写又不需要定义函数
宏是很简洁的写法


字符反转和素数检验两个函数太常用了。

    int ans = 0;
    while (n) {   翻转数字
        ans = ans * 10 + n % 10;
        n/=10;
    }
    return ans;
}

这个的想法是什么呢?
1234换为4321,实际是个什么过程?
4321=(410+3)10+2)*10+1
课本上提到,这种方法可以用在一切多项式函数身上。

int check(int n) {
    for (int i = 2; i * i  n; i)
        if (n % i  0)  如果有因式,直接返回 “非素数”
            return 0;
    return 1;
}

while(scanf("%s",&s)!=EOF){
...
}

是个很好的读入方式
clion请在调试时键入ctrl+D以输入EOF


#include <stdlib.h>
struct node{
    int n;
    struct node* next;
};
struct node* addtolist(int n,struct node*list){
    struct node*newnode= malloc(sizeof(struct node));
    newnode->n=n;
    newnode->next=list;
    return newnode;
}
struct node* deletefromlist(int n,struct node*list){
    struct node* cur,*prev;
    for(cur=list,prev=NULL;cur!=NULL&&cur->n!=n;prev=cur,cur=cur->next){

    }
    if(cur==NULL)return list;
    if(prev==NULL)list=list->next;
    else
        prev->next=cur->next;
    free(cur);
    return list;
}
int main(){
    struct node* p;
    struct node* first = NULL;
    first = addtolist(114514,first);
    first = addtolist(1919810,first);
    for(p=first;p!=NULL;p=p->next){
        printf("%d\n",p->n);
    }
    first = deletefromlist(1919810,first);
    for(p=first;p!=NULL;p=p->next){
        printf("%d\n",p->n);
    }
    return 0;
}


//链表最基本的操作,这里的addtolist使用的是头插法

今天学的有点多。。。
有序链表,函数指针,函数数组,太妙辣

受限指针。指针的指针。都是特殊情况下的妙计。


int (*p) [10] = malloc(sizeof(int)*200);
这种一般都是对二维数组的某一列进行操作。p是一个指针,指向一个10元数组,也就是每一行有10个元素,共有20列
p++就会到下一行的同一列。


位运算系统讲解

i&(1<<j):读取i的第j位
i &= ~(1<<j):把i的第j位设为0
i |= (1<<j):把i的第j位设为1


期末冲刺

1.复习过往的oj,并且回忆、思考当时遇到的问题
2.回忆经典算法
3.回顾经典函数(准备笔试)

标签:node,10,return,struct,int,笔记,C语言,char
From: https://www.cnblogs.com/tengjun12/p/17075031.html

相关文章

  • lucas定理学习笔记
    lucas学习笔记小蒟蒻的第一篇学术文章,对lucas理解不够透彻,如有错误,望指正,同时望支持注:下文定义\(\binom{a}{b}\)为\(\frac{b!}{a!(b-a)!}\quad\)(即组合数)定理内容:......
  • 随堂笔记1-spring底层原理解析.md
    userServce->无参构造方法->普通对象->依赖注入->初始化前(postStruct)->初始化(initializationBean)->初始化后(aop)->代理对象->bean通过无参构造方法创建普通bean如......
  • vim 配置写c语言
    .vimrcsetnocompatiblesetbackspace=2setautoindentsetnumbersyntaxenable'enablesyntaxfirstsyntaxon'turnonsyntaxsetts=4'settabsize:setrulerset......
  • C语言高级部分总结
    一、内存大话题1.0、内存就是程序的立足之地,体现内存重要性。1.1、内存理解:内存物理看是有很多个Bank(就是行列阵式的存储芯片),每一个Bank的列就是位宽,每一行就是Words,则......
  • 读Java8函数式编程笔记05_数据并行化
    1. 并发1.1. 两个任务共享时间段1.2. 一个程序要运行两个任务,并且只有一个CPU给它们分配了不同的时间片,那么这就是并发,而不是并行2. 并行2.1. 两个任务在同一时......
  • CAP 笔记20230130
     C一致:主写_从读锁A可用:主写_从读P分区容错:主写_从读备区网络分区.子网.异步.备节点.分布必备 ......
  • 机器学习 吴恩达 第九章 笔记
    九、应用机器学习的建议(AdviceforApplyingMachineLearning)9.1决定下一步做什么  确保你在设计机器学习的系统时,你能够明白怎样选择一条最合适、最正确的道路。......
  • [概率论与数理统计]笔记:5.2 参数的最大似然估计与矩估计
    5.2参数的最大似然估计与矩估计估计其实就是猜数。最大似然估计基本思想概率大的事件比概率小的事件更易发生。将使事件\(A\)发生的概率最大的参数\(\theta\)作为......
  • [概率论与数理统计]笔记:5.2 参数的最大似然估计与矩估计
    5.2参数的最大似然估计与矩估计估计其实就是猜数。最大似然估计基本思想概率大的事件比概率小的事件更易发生。将使事件\(A\)发生的概率最大的参数\(\theta\)作为......
  • [概率论与数理统计]笔记:5.2 参数的最大似然估计与矩估计
    5.2参数的最大似然估计与矩估计估计其实就是猜数。最大似然估计基本思想概率大的事件比概率小的事件更易发生。将使事件\(A\)发生的概率最大的参数\(\theta\)作为......