最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C/C++編程筆記:大一C語言案例《簡單計算器》,遲早用上!

2020-09-05 16:17 作者:C語言編程__Plus  | 我要投稿

大一學了C語言老師肯定會要求你們做一個這個課后作業(yè)!所以,先收藏是關(guān)鍵~


本文案例用C語言做一個簡單的計算器,進行加、減、乘、除操作。本程序涉及的所有數(shù)學知識都很簡單,但輸入過程會增加復(fù)雜性。都是C語言很基礎(chǔ)的東西(輸入輸出),學了之后能寫出一個完整的C語言程序。適合涉及C語言的基本語法,與輸入與輸出。適合初學者學習。

代碼如下:

/*===============================================*\

** 設(shè)計目的:簡單計算器,計算形如10*(20.2-30.6)+5.0/2的表達式值

** 簡要原理:中綴式轉(zhuǎn)逆波蘭式(后綴式)

** IDE:Dev-Cpp 4.9.9.2

** 注意事項:括號必須是英文狀態(tài)的

** 時間: 2020-9-05

\*===============================================*/

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define maxn 1000

char buf[maxn], str[maxn], signStack[maxn], ch[2];

int len, id, idSign, idAns, i, n;

double ans[maxn];

void checkSign(char sign){

if(sign == '(') signStack[idSign++] = sign;

else if(sign == '*' || sign == '/'){

while(idSign && (signStack[idSign-1] == '*' || signStack[idSign-1] == '/'))

str[id++] = signStack[--idSign];

signStack[idSign++] = sign;

}else if(sign == ')'){

while(signStack[idSign-1] != '(') str[id++] = signStack[--idSign];

--idSign;

}else{

while(idSign && signStack[idSign-1] != '(') str[id++] = signStack[--idSign];

signStack[idSign++] = sign;

}

str[id++] = ' ';

}

int check(double a, char sign){

if(a == 0 && sign == '/'){

printf("除數(shù)不能為0!,程序結(jié)束。\n");

system("pause");

exit(EXIT_FAILURE);

}

return 1;

}

double cal(double a, double b, char sign){

switch(sign){

case '+': return a + b;

case '-': return a - b;

case '*': return a * b;

case '/': return a / b;

}

}

int main(){

printf("\t\t\t\t簡單計算器\n\n");

printf("\t\t? ======================================\n");

printf("\t\t? ||? 支持+ - * / ( ) 等符號和負數(shù)輸入? ||\n");

printf("\t\t? ======================================\n");

printf("\t\t\t\t\t\t\n");

printf("\t\t\t\t\t\t完成時間:2020年9月5日\n");

printf("\t\t\t\t\t\tUP編制\n");

printf("請輸入一個表達式,如 -10*(20.2-30.6)+5.0/2\n以回車結(jié)束:\n");

do{

gets(buf); id = idSign = idAns = 0;

if((len = strlen(buf)) == 0) continue;

int flag = 0; //這個是用來判斷'-'字符是負號還是減號的。1表示數(shù)字,0表示 +*/(

/*判斷原理:如果第一次讀取就碰到-,那么一定是負號,若最近一次讀取是+*-/(那么

也一定是負號,如果是右括號或數(shù)字那么是減號*/

for(i = 0; i < len; ++i){

if(buf[i] == ' ') continue;

if(buf[i] >= '0' && buf[i] <= '9' || buf[i] == '.' || buf[i] == '-' && !flag){

str[id++] = buf[i]; flag = 1;

}

else {

str[id++] = ' '; checkSign(buf[i]);

if(buf[i] != ')') flag = 0;

else flag = 1;

}

}

while(idSign) str[id++] = signStack[--idSign];

for(i = 0, n = 0; i < id; ++i){

if(str[i] == ' ') continue;

/*用增加空格的方式判斷‘-’字符是負號還是減號,若‘-’后面挨著數(shù)字或小數(shù)點,那么一定是負號*/

if(str[i] >= '0' && str[i] <= '9' || str[i] == '.' || str[i] == '-'

&& (str[i+1] >= '0' && str[i+1] <= '9' || str[i+1] == '.')){

sscanf(str + i, "%lf%n", &ans[idAns++], &n);

i += n - 1;? continue;

}else if(check(ans[idAns-1], str[i])){

ans[idAns-2] = cal(ans[idAns-2], ans[idAns-1], str[i]);

--idAns;

}

}

printf("結(jié)果是 %.2lf\n", ans[0]);

printf("輸入Y 繼續(xù), N 退出: ");

scanf("%s", ch);

}while(ch[0] == 'Y' || ch[0] == 'y');

printf("感謝您的使用!再見\n");

system("pause");

return 0;

}

遲早你會使用到的一個C語言案例,如果你是剛剛開學的小學弟,還沒有開始學習C語言,那么你可以收藏一下!如果你是已經(jīng)開始學了C語言的小伙伴,那么就希望本案例能夠?qū)δ阌袔椭鷡

自學C/C++編程難度很大,如果你想更快提升自己的編程能力和編寫項目的水平,歡迎一起共同成長!

分享(源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!

學習C/C++編程知識,提升C/C++編程能力,歡迎關(guān)注UP一起來成長!
另外,UP在主頁上傳了一些學習C/C++編程的視頻教程(含C語言入門教程),有興趣或者正在學習的小伙伴一定要去看一看哦!會對你有幫助的~

C/C++編程筆記:大一C語言案例《簡單計算器》,遲早用上!的評論 (共 條)

分享到微博請遵守國家法律
商水县| 东阿县| 乐东| 永新县| 潜江市| 龙州县| 建瓯市| 萍乡市| 天全县| 偏关县| 福鼎市| 伊吾县| 荣成市| 浪卡子县| 铅山县| 澄江县| 左云县| 简阳市| 万宁市| 蓬溪县| 美姑县| 宝丰县| 崇仁县| 弋阳县| 长治市| 凯里市| 安塞县| 汝城县| 麻城市| 合作市| 永吉县| 望城县| 萨迦县| 白银市| 英吉沙县| 常宁市| 宜宾市| 东明县| 娄底市| 西昌市| 贵溪市|