1.用C语言写的实现计算器源代码
2.输入一个数字,输出一个数字,源码实现这个功能的实现C语言源代码是什么?
3.c语言冒泡排序从大到**姐1.3.2.8.0.6?
4.cout<<sizeof(vector<int>);输出是32,为什么?
用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);
=================================================================
哈哈!源码给分吧!实现
输入一个数字,源码Nike源码输出一个数字,实现实现这个功能的源码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`底层数据结构和内存布局。实现扫雷源码后台密码在某些环境中,源码输出为字节,实现而在文中测试的环境下,输出为字节。此差异源于平台和编译器对`vector`类的实现。
首先,预订源码是什么明确`sizeof(vector)`的输出受到机器(硬件)和库设计的影响。在文中,作者通过在MacBook和Linux(使用不同的编译器)上执行测试,得到了不同结果。这一观察促使对`vector`内部实现进行深入探究。
为了解开这一谜团,外贸订单源源码作者提供了具体的代码路径和步骤。通过使用`gdb`调试器,可以跟踪`vector`的实现细节。作者指出,`vector`实际上继承自`_Vector_base`类,并且仅包含一个数据成员`_Vector_impl`。地铁票源码`_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++标准库的设计和实现方式。