当前位置:首页 » 编程语言 » c语言特别适合科学计算
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言特别适合科学计算

发布时间: 2023-05-19 20:31:51

㈠ 如何用c语言进行科学计算,如同fortran那样

C语言的计算能力不逊于Fortran的,只要你认真学。

㈡ 如何用C语言编写一个科学计算器

用栈 就可以办到了。。。这个很详细的, lz 随便输入一个表达式,中间的计算过程全部输出了,lz试两个 就知道怎么回事了。 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 4000;
typedef struct
{
char data[10];
int top;//头地址

int base;//基地址

int length;//长度

}Stack;

void init(Stack *st)//初始化栈

{
st->base=0;
st->top=0;
st->length=0;
}

int isEmpty(Stack *st)
{
int n=0,top,base;
top =st->top;
base =st->base;
if(top==base)
{
return 1;
}
return n;
}

int isFull(Stack *st)
{
int n=0,top,base;
top =st->top;
if(top>=4000)
{
return 1;
}
return n;
}

char getTop(Stack *st)// 返回top值,不改变栈的结构

{
char n;
if(isEmpty(st))
{
printf("栈为空\n");
return 0;
}
int positon= st->top-1;
n= st->data[positon];//取出数据;

return n;
}

char pop(Stack *st)// 出栈,返回

{
char n;
if(isEmpty(st))
{
printf("栈为空\n");
return 0;
}
int positon= st->top-1;
n= st->data[positon];//取出数据;

st->top--;
st->length--;
st->data[positon]='\0';//消除数据

return n;
}

void push(char n,Stack *st)//入栈

{
int positon ;
if(isFull(st))
{
printf("栈满\n");

}
else
{
positon= st->top;//获取位置

st->data[positon]=n;//存入数据

st->top++;//改变位置

}

}

void show(Stack *m1)//输出栈中的数据

{
int top,base;
top=m1->top;
base=m1->base;
while(top>base)
{
printf("%c,",m1->data[--top]);
}
printf("\n");
}

int isOperate(char temp)//是否是操作符

{
if(temp=='+'||temp=='-'||temp=='*'||temp=='/'||temp=='('||temp==')'||temp=='#')
{
return 1;
}
return 0;
}

int isValue(char temp)//是否是数值

{
if(temp>='0'&&temp<='9')//

{
return 1;
}
else
{
return 0;
}
}

int isAvail(char temp)//是否有效字符

{
if(isOperate(temp)||isValue(temp))//如果temp既不是操作符和数值的话,则它是非法的

{
return 1;
}
return 0;
}

int detect(char temp)//搜索矩阵位置

{
int i=0;
char oper[7]={'+','-','*','/','(',')','#'};
for(i=0;i<7;i++)
{
if(temp==oper[i])
{
return i;
}
}
}

char Priority(char temp,char optr)//判断优先级

{
/**//*
+ - * / ( ) #
1 2 3 4 5 6 7
+ 1 < < < < > > >
- 2 < < < < > > >
* 3 > > < < > > >
/ 4 > > < < > > >
( 5 > > > > > = 0
) 6 < < < < = 0 >
# 7 < < < < > 0 =
*/
int row ,col;
char priority[7][7]={/**//* + - * / ( ) # */
{'<','<','<','<','>','>','>'},

{'<','<','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','<','<','>','>','>'},

{'>','>','>','>','>','=','>'},

{'<','<','<','<','=','0','>'},

{'<','<','<','<','>','<','='},
};

row = detect(temp);//找出对应的矩阵下标;

col = detect(optr);
// printf("%d,%d",row,col);

//优先级存储在一个7x7的矩阵中,对应关系上图;

return priority[row][col];

}
char evaluate(int a,int b,char oper)
{
switch(oper)
{
case '+': return a+b+'0';
case '-': return a-b+'0';
case '*': return a*b+'0';
case '/': return a/b+'0';
default : return 0+'0';
}
}
int calculateExpress(char *express)//计算表达式

{
int result=0;
int a,b;
// char oper,result;

Stack OPTR,OPND;//OPTR存储操作符,OPND操作数值

init(&OPTR);
init(&OPND);
push('#',&OPTR);//默认第一个位'#'

////////////////////-算法-////////////////////////////

while(*express!='\0')
{
char temp;
temp= *(express);
printf("---------------------------------\n");
printf("当前的符号为%c\n",temp);
if(isAvail(temp))//是否是有效字符

{
if(isOperate(temp) )//输入的是操作符

{
char oper,result;
char optr = getTop(&OPTR);//栈中top位的操作符

printf("栈顶操作符位:%c\n",optr);
char prior = Priority(temp,optr);//判断优先级

switch(prior)
{
case '>':
push(temp,&OPTR);
printf("将符号位%c入栈\n",temp);
express++;
break;
case '<':
//int a,b;

//char oper,result;

a=pop(&OPND)-'0';//存在栈中的都是char字符

b=pop(&OPND)-'0';
oper=pop(&OPTR);

result=evaluate(b,a,oper);//出栈一个操作符,计算结果

//printf("%d",result-'0');

push(result,&OPND);//结果入OPND

printf("%d%c%d结果为:%d\n",b,oper,a,result-'0');
break;

case '=':
//消除括号

pop(&OPTR);
printf("消除括号\n");
express++;
break;

}

}
if(isValue(temp))//输入的是数值

{
push(temp,&OPND);//将数值位入栈;

express++;
printf("将数值%c压入栈\n",temp);
//show(&OPND);

}
}
else //表达式中有非法字符

{
printf("表达式中有非法字符\n");
exit(-1);//退出程序

}

}
// show(&OPND);

// show(&OPTR);

return getTop(&OPND)-'0';
}

void inputExpress(char *express)//输入表达式

{
int length=0;
printf("请输入一个表达式:");
scanf("%s",express);
int len =strlen(express);
express[len]='#';//表达式最后一位默认为'#';

express[len+1]='\0';

}

void output(char *express,int result)//输出表达式

{
int i=0;
printf("----------------------------------------\n表达式:");
while(express[i]!='#')
{
printf("%c",express[i]);
i++;
}
printf("=%d\n",result);

}

int main()
{

char express[100];//表达式

int result =0;

inputExpress(express);//输入表达式

result = calculateExpress(express);//计算表达式;

output(express,result); //输出表达式

//、、、、、、、、、、、、、测试优先级。

/**//*
char m='7' ;
m=Priority('+','*');
printf("优先级为%c",m);

int m=evaluate(5,6,'m');
printf("%d",m);
*/
return 0;
}

㈢ C语言能开发什么

1.多平台通用软件

所谓多平台通用软件,就是指这个软件可以在很多系统上使用。例如,如果想让你写的同一个程序很好地运行在DOS、Windows98、WindowsXP、WindowsCE、Linux、UNIX等多个操作系统上,C语言确实是个不错的选择。知道Apache吗?它是一个开源Web服务器工程,其中的HTTP服务器可以运空乎行于很多平台,Windows、Linux和UNIX都是可以的,这个服务器就是用C语言开发的。

2.操作系统

由于C语言可以很自然地与汇编语言斗余悉结合,又比汇编语言好用,能够很灵活地控制计算机硬件,因此很适合开发操作系统。Windows很老的版本都是用C语言写的,之后改用C了,不过C是兼容C语言的。Linux和UNIX系列的操作系统内核几乎都是用C语言写的,而且很多运行在板子上的嵌入式操作系统基本都是用C语言结合汇编写的。如果你真想做个操作系统,C语言绝对可以胜任。

3.复杂运算软件

之所以说C语言适合进行复杂计算软件的开发,是因为:(毁埋1)复杂计算软件本身很单纯,只需要计算机进行计算就可以了;(2)C语言本身有丰富的运算功能,完全可以实现复杂计算功能;(3)因为C语言是一种接近底层语言的高级语言,所以它写出来的程序在计算机上的运行效率很高。所以,要想做一个需要复杂而高效计算功能的软件,选择C语言绝对不会令你失望的。如果你经常做科学计算,用过MATLAB软件,它其中一部分也是用C语言写的。

㈣ 怎么样用C语言编写一个科学计算器呢

#include <stdio.h>void main (){float a,b,e;char f;scanf ("%c",&f);scanf ("%f,%f",&a,&b);switch (f){case '+': e=a+b; printf("%f",d); break;case '-'橘慧: e=a-b; printf("%f",d); break;case '*': e = a*b; printf("%f"腊宽,d); break;case '圆局答/': e=a/b; printf("%f",d); break;default: printf("Error!"); break;}}

㈤ C语言计算器 功能要求: 可以输入0-9数字、小数点、正负数 可以进行加减乘除运算及简单的数学函数运算

下面是使用 C 语言设计简易科学计算器的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char op;
double num1, num2;
printf("请输入数学表达式(如:1 + 2):");
scanf("%lf %c %lf", &num1, &op, &num2);
switch (op)
{
case '+':
printf("结果为:%.2lf\n", num1 + num2);
break;
case '-':
printf("结果为:%.2lf\n", num1 - num2);
break;
case '*':
printf("结果为:%.2lf\n", num1 * num2);
break;
case '/':
if (num2 == 0)
{
printf("除数不能为 0!\n");
}
else
{
printf("结果为:%.2lf\n", num1 / num2);
}
break;
case '^':
printf("结果为亩茄:%.2lf\n", pow(num1, num2));
break;
case 's':
printf("结果为:%.2lf\n", sin(num1));
break;
case 'c':
printf("结果为:%.2lf\n", cos(num1));
break;
case 't':
printf("结果为:%.2lf\n", tan(num1));
break;
case 'l':
printf("结果为:%.2lf\n", log(num1));
break;
case 'e':
printf("结果为:%.2lf\n", exp(num1));
break;
default:
printf("山哪无效的运算符!逗耐码\n");
break;
}
return 0;
}

㈥ 用c语言实现科学计算器要求有计算器界面 可以加减乘除平方开方

#include "stdafx.h"

#define STACK_INIT_SIZE 10
#define STACKINCRESIZE 5

typedef struct
{
SElemType *base;
SElemType *top;
int stack_size;
}SqStack;
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stack_size=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if((S.top-S.base)>=STACK_INIT_SIZE){
S.base=(ElemType*)realloc(S.base,(S.stack_size+STACKINCRESIZE)*(sizeof(SqStack)));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stack_size;
S.stack_size+=STACK_INIT_SIZE;

}
*(S.top)++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)return ERROR;

e=*--S.top;

return OK;
}
Status StackEmpty(SqStack &S)
{
if(S.top==S.base)
return TRUE;
else return FALSE;
}
int GetTop(SqStack S,ElemType &e)
{
if(S.top >S.base )
{
e=*(S.top-1) ;
return OK;
}
else return ERROR;
}
/*#include "stdafx.h"
#include "MyStack.h"

int InitStack(SqStack &S)
{
S.base =(ElemType *)malloc(STACKSIZE*sizeof(ElemType));
S.top =S.base ;
S.stacksize =STACKSIZE;
return OK;
}

int GetTop(SqStack S,ElemType &e)
{
if(S.top >S.base )
{
e=*(S.top-1) ;
return OK;
}
else return ERROR;
}
int Push(SqStack &S,Elemtype e)
{
if(S.top -S.base >=S.stacksize )
{
S.base=(ElemType *)realloc(S.base ,(S.stacksize +ADDSIZE)sizeof(ElemType));
S.top =S.stacksize +S.base ;
S.stacksize =S.stacksize +ADDSIZE;
}
*(S.top)++=e;
return OK;
}
int Pop(SqStack &S,ElemType &e)
{
if(S.base !=S.top )
{
e=*(--S.top );
return OK;
}
else return ERROR;
}*/

#include "stdafx.h"
#include "stdafx.h"
#include "MyStack.h"
//#include "MyStack.cpp"

ElemType Precede(ElemType t1,ElemType t2)
{
ElemType f='0';
switch(t2)
{
case '+':
case '-':
if(t1=='('||t1=='=')
f='<';
else f='>';
break;
case '*':
case '/':
if(t1=='*'||t1=='/'||t1==')')
f='>';
else f='<';
break;
case '(':
if(t1==')')
{
cout<<"ERROR"<<endl;
exit(ERROR);
}
else f='<';
break;
case ')':switch(t1)
{
case '(':f='=';
break;
case '=':printf("ERROR2\n");
exit(ERROR);
default: f='>';
}
break;
case'=':switch(t1)
{
case '=':f='=';
break;
case '(':cout<<"ERROR"<<endl;
default:f='>';
}
break;
}
return f;
}

int In(ElemType e)
{
switch(e)
{
case'+':
case'-':
case'*':
case'/':
case'(':
case')':
case'=':return TRUE;
default:return FALSE;
}
}
ElemType Operate(ElemType a,ElemType theta,ElemType b)
{
ElemType re=0;
switch(theta)
{
case'+':re=a+b;
break;
case'-':re=a-b;
break;
case'*':re=a*b;
break;
case'/':re=a/b;
break;
}
return re;
}
ElemType EvaluateExpression()
{
ElemType x,a,b,theta,d;
char c;
char z[6];
SqStack OPTR,OPND;
InitStack(OPTR);Push(OPTR,'=');
InitStack(OPND);
c=getchar();
GetTop(OPTR,x);
while(c!='='||x!='=')
{
if(In(c)) // 是7种运算符之一
switch(Precede(x,c))
{
case'<':Push(OPTR,c); // 栈顶元素优先权低
c=getchar();
break;
case'=':Pop(OPTR,x); // 脱括号并接收下一字符
c=getchar();
break;
case'>':Pop(OPTR,theta); // 退栈并将运算结果入栈
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
else if(c>='0'&&c<='9') // c是操作数
{
int i=0;
do
{
z[i]=c;
i++;
c=getchar();

}while(c>='0'&&c<='9');
z[i]=0;
d=atoi(z);
Push(OPND,d);
}
else // c是非法字符
{
printf("ERROR4\n");
exit(ERROR);
}
GetTop(OPTR,x);
}
GetTop(OPND,x);
return x;
}

// Calculator.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "Calculator.h"

int _tmain(int argc, _TCHAR* argv[])
{
printf("请输入算术表达式,负数要用(0-正数)表示,并以=结束\n");
printf("%d\n",EvaluateExpression());

getchar();
system("pause");
return 0;
}

㈦ 求C语言编写的科学计算器,如加减乘除,正弦余弦,平方,指数对数,最好加注释,谢谢了 [email protected]

chare;//存储等号floatd;//结果数}AA;voidmain(){FILE*fp;//用文件永久式储蓄计算式及结果AAnum[100];floata,b;//a,b分别存储两个数charch;//ch用于选择是否继续进行计算chart='1';//t用于选择操作类型inti=0,j;//i为结构体数组下标,j应用于输出结构体元素printf("\t*********************欢迎使用本计算器!*********************\n");printf("\t使用说明:数字+enter+运算符+enter+数字+enter,才可得正确结果\n");delay();//仅起延时作用do{system("cls");//清除屏幕loop:printf("\t请选择需操作的类型:\n\t1、计算式子2、输出并查看计算式及其结果3、退出计算器\n\t\t\t\t");//定位在这里可避免查看计算式时清除屏幕scanf("\n%c",&t);//特别注意这里的\n,我始终不明白,但又必须加这\ngetchar();switch(t)//选择操作类型{case'1'://输入计算式及中御计算和存储{ch='1';}while(ch=='1')/*用于循环操作*/{printf("\t************************************************************\n\t");printf("输入的数字是:");scanf("%f",&a);num[i].a=a;num[i].e='=';printf("\t输入的计算符是:");getchar();scanf("%c",&ch);num[i].c=ch;printf("\t");switch(ch)/*用于选择算术类型*/{case'+':printf("输入的数字是:");scanf("%f",&b);num[i].b=b;num[i].d=add(a,b);printf("\t************************************************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;case'-':printf("输入的数字是:");scanf("%f",&b);num[i].b=b;num[i].d=sub(a,b);printf("\t************************************************************\n\t"搏闹);printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;case'*':printf("输入的数字是:");scanf("%f",&b);num[i].b=b;num[i].d=mul(a,b);printf("\t************************************************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;case'/':printf("输入的数字是:");scanf("%f",&b);{if(b==0){printf("\tError,dividedbyzero.\n");break;}else{num[i].b=b;num[i].d=dv(a,b);printf("\t***********************************************************\n\t");printf("\t%f%c%f=%f\n",num[i].a,num[i].c,num[i].b,num[i].d);break;}}default:printf("卖银岩输入有误\n");}}}}while(1);}

㈧ 计算机C语言有什么用啊

用处:C语言是一种计算机程序设计语言。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

特征:

1、C语言是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2、C语言是结构式语言。结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

3、C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

4、C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大。

5、C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX、LINUX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型应用软件也是用C语言编写的。

(8)c语言特别适合科学计算扩展阅读:

优点:

1、简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2、运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

3、数据类型丰富

C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。

㈨ c语言特点

1、简洁紧凑、灵活方便。

C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2、运算符丰富。

C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

3、数据结构丰富。

C的数据类型有:整型、实型、字符型、数组类型、指陪含针类型、结构体类型、共用芦前笑体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。

4、C是结构式语言。

结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

5、C语法限制不太严格、悔灶程序设计自由度大。

一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。

6、C语言允许直接访问物理地址,可以直接对硬件进行操作。

因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。

7、C语言程序生成代码质量高,程序执行效率高。

一般只比汇编程序生成的目标代码效率低10へ20%。

c语言的内容和应用

C语言包括:数据类型、运算符与表达式、程序结构、顺序、选择、循环、数组、函数、预处理命令、指针、结构体与共用体、文件、位运算。

在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显着。