【vb源码导入导出】【winer指标源码】【香河溯源码】sizeof实现源码

时间:2024-12-28 22:43:55 来源:wcs仓库系统源码 分类:知识

1.用C语言写的实现计算器源代码
2.输入一个数字,输出一个数字,源码实现这个功能的实现C语言源代码是什么?
3.c语言冒泡排序从大到**姐1.3.2.8.0.6?
4.cout<<sizeof(vector<int>);输出是32,为什么?

sizeof实现源码

用C语言写的计算器源代码

       #include<stdio.h>

       #include<iostream.h>

       #include<stdlib.h>

       #include<string.h>

       #include<ctype.h>

       typedef float DataType;

       typedef struct

       {

        DataType *data;

        int max;

        int top;

       }Stack;

       void SetStack(Stack *S,int n)

       {

        S->data=(DataType*)malloc(n*sizeof(DataType));

        if(S->data==NULL)

        {

        printf("overflow");

        exit(1);

        }

        S->max=n;

        S->top=-1;

       }

       void FreeStack(Stack *S)

       {

        free(S->data);

       }

       int StackEmpty(Stack *S)

       {

        if(S->top==-1)

        return(1);

        return(0);

       }

       DataType Peek(Stack *S)

       {

        if(S->top==S->max-1)

        {

        printf("Stack is empty!\n");

        exit(1);

        }

        return(S->data[S->top]);

       }

       void Push(Stack *S,DataType item)

       {

        if(S->top==S->max-1)

        {

        printf("Stack is full!\n");

        exit(1);

        }

        S->top++;

        S->data[S->top]=item;

       }

       DataType Pop(Stack *S)

       {

        if(S->top==-1)

        {

        printf("Pop an empty stack!\n");

        exit(1);

        }

        S->top--;

        return(S->data[S->top+1]);

       }

       typedef struct

       {

        char op;

        int inputprecedence;

        int stackprecedence;

       }DataType1;

       typedef struct

       {

        DataType1 *data;

        int max;

        int top;

       }Stack1;

       void SetStack1(Stack1 *S,int n)

       {

        S->data=(DataType1*)malloc(n*sizeof(DataType1));

        if(S->data==NULL)

        {

        printf("overflow");

        exit(1);

        }

        S->max=n;

        S->top=-1;

       }

       void FreeStack1(Stack1 *S)

       {

        free(S->data);

       }

       int StackEmpty1(Stack1 *S)

       {

        if(S->top==-1)

        return(1);

        return(0);

       }

       DataType1 Peek1(Stack1 *S)

       {

        if(S->top==S->max-1)

        {

        printf("Stack1 is empty!\n");

        exit(1);

        }

        return(S->data[S->top]);

       }

       void Push1(Stack1 *S,DataType1 item)

       {

        if(S->top==S->max-1)

        {

        printf("Stack is full!\n");

        exit(1);

        }

        S->top++;

        S->data[S->top]=item;

       }

       DataType1 Pop1(Stack1 *S)

       {

        if(S->top==-1)

        {

        printf("Pop an empty stack!\n");

        exit(1);

        }

        S->top--;

        return(S->data[S->top+1]);

       }

       DataType1 MathOptr(char ch)

       {

        DataType1 optr;

        optr.op=ch;

        switch(optr.op)

        {

        case'+':

        case'-':

        optr.inputprecedence=1;

        optr.stackprecedence=1;

        break;

        case'*':

        case'/':

        optr.inputprecedence=2;

        optr.stackprecedence=2;

        break;

        case'(':

        optr.inputprecedence=3;

        optr.stackprecedence=-1;

        break;

        case')':

        optr.inputprecedence=0;

        optr.stackprecedence=0;

        break;

        }

        return(optr);

       }

       void Evaluate(Stack *OpndStack,DataType1 optr)

       {

        DataType opnd1,opnd2;

        opnd1=Pop(OpndStack);

        opnd2=Pop(OpndStack);

        switch(optr.op)

        {

        case'+':

        Push(OpndStack,opnd2+opnd1);

        break;

        case'-':

        Push(OpndStack,opnd2-opnd1);

        break;

        case'*':

        Push(OpndStack,opnd2*opnd1);

        break;

        case'/':

        Push(OpndStack,opnd2/opnd1);

        break;

        }

       }

       int isoptr(char ch)

       {

        if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')

        return(1);

        return(0);

       }

       void Infix(char *str)

       {

        int i,k,n=strlen(str);

        char ch,numstr[];

        DataType opnd;

        DataType1 optr;

        Stack OpndStack;

        Stack1 OptrStack;

        SetStack(&OpndStack,n);

        SetStack1(&OptrStack,n);

        k=0;

        ch=str[k];

        while(ch!='=')

        if(isdigit(ch)||ch=='.')

        {

        for(i=0;isdigit(ch)||ch=='.';i++)

        {

        numstr[i]=ch;

        k++;

        ch=str[k];

        }

        numstr[i]='\0';

        opnd= atof(numstr);

        Push(&OpndStack,opnd);

        }

        else

        if(isoptr(ch))

        {

        optr=MathOptr(ch);

        while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)

        Evaluate(&OpndStack,Pop1(&OptrStack));

        Push1(&OptrStack,optr);

        k++;

        ch=str[k];

        }

        else if(ch==')')

        {

        optr=MathOptr(ch);

        while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)

        Evaluate(&OpndStack,Pop1(&OptrStack));

        Pop1(&OptrStack);

        k++;

        ch=str[k];

        }

        while(!StackEmpty1(&OptrStack))

        Evaluate(&OpndStack,Pop1(&OptrStack));

        opnd=Pop(&OpndStack);

        cout<<"你输入表达式的计算结果为"<<endl;

        printf("%-6.2f\n",opnd);

        FreeStack(&OpndStack);

        FreeStack1(&OptrStack);

       }

       void main()

       {

        cout<<"请输入你要计算的表达式,并以“=”号结束。"<<endl;

        char str[];

        gets(str);

        Infix(str);

       =================================================================

       哈哈!源码给分吧!实现

输入一个数字,源码vb源码导入导出输出一个数字,实现实现这个功能的源码C语言源代码是什么?

       输入文件input.dat内容为:(数字以空格或换行符隔开)

       运行程序后,输出文件output.dat内容为:

       可见实现了数字从大到小排列

       C语言源代码为:

#include <stdio.h>

#include <stdlib.h>

#define N

int cmp(const void *a,实现 const void *b) {

    return *(int *)b - *(int *)a;

}

int main() {

    int arr[N], n = 0;

    FILE *fin = fopen("input.dat", "r");

    for (n = 0; n < N; ++n) {

        if (fscanf(fin, "%d", &arr[n]) == EOF)

            break;

    }

    qsort(arr, n, sizeof(int), cmp);

    FILE *fout = fopen("output.dat", "w");

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

        fprintf(fout, "%d ", arr[i]);

    fprintf(fout, "\n");

    fclose(fin);

    fclose(fout);

    return 0;

}

c语言冒泡排序从大到**姐1.3.2.8.0.6?

       C语言代码和运行结果如下:

       可见成功按从大到小排序,望采纳~

       附源码:

#include <stdio.h>

void sort(int a[],源码 int n) {  

    int i, j, t;

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

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

            if (a[j] < a[j + 1]) { // 将小数交换到后面

                t = a[j]; 

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

                a[j + 1] = t;

            }

    }

}

void display(int a[], int n) {

    int i;

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

        printf("%d ", a[i]);

    printf("\n");

}

int main() {

    int a[] = { 1,3,2,8,0,6};

    int n = sizeof(a) / sizeof(a[0]);

    printf("从大到小冒泡排序:\n");

    sort(a, n);

    display(a, n);

    return 0;

}

cout<<sizeof(vector<int>);输出是,为什么?

       在探讨`sizeof(vector)`为何输出为时,关键在于理解`vector`在不同平台和编译器上的实现实现细节。通常,源码输出大小取决于`vector`底层数据结构和内存布局。实现winer指标源码在某些环境中,源码输出为字节,实现而在文中测试的环境下,输出为字节。此差异源于平台和编译器对`vector`类的实现。

       首先,香河溯源码明确`sizeof(vector)`的输出受到机器(硬件)和库设计的影响。在文中,作者通过在MacBook和Linux(使用不同的编译器)上执行测试,得到了不同结果。这一观察促使对`vector`内部实现进行深入探究。

       为了解开这一谜团,欣源码头作者提供了具体的代码路径和步骤。通过使用`gdb`调试器,可以跟踪`vector`的实现细节。作者指出,`vector`实际上继承自`_Vector_base`类,并且仅包含一个数据成员`_Vector_impl`。uniapp源码任务`_Vector_impl`继承自`_Tp_alloc_type`,而`_Tp_alloc_type`的定义则包含了`pointer`类型,其大小通常为8字节。

       为了验证`pointer`类型的大小,作者使用`gdb`直接查询,证实其大小为8字节。进一步探究`_Tp_alloc_type`中,作者发现其定义涉及类型萃取,并最终指向了`std::allocator_traits`。通过跟踪这一路径,作者逐步揭示了`vector`和`allocator`之间的关联,最终指向了`new_allocator`类模板,确认了`_Tp_alloc_type`与`new_allocator`之间的联系。

       在这一过程中,作者展示了从问题出发深入源码分析的方法,强调了阅读源码的重要性。尽管`vector`在不同编译器下的实现可能有所不同,但通过理解其底层设计和实现逻辑,可以清晰地解释为何`sizeof(vector)`的输出存在差异。

       总结而言,`vector`的大小输出取决于其底层数据结构、内存布局以及编译器的实现。通过源码分析,可以揭示这一复杂问题背后的细节,进一步理解C++标准库的设计和实现方式。