㈠ 如何用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語言的普適較強,在許多計算機操作系統中都能夠得到適用,且效率顯著。