1. 請問怎麼用c語言程序編寫輸入任意數字進行四則運算呢
#include<stdio.h>
struct
{
int op;
double num;
}ret[200];
int topa,topb;
int opstk[200];
int level[200];
double cal(double a,double b,char op)
{
if(op=='+')
return a+b;
if(op=='-')
return a-b;
if(op=='*')
return a*b;
if(op=='/')
return a/b;
}
int main()
{
int i,temp,sign,j,x,y;
char s[200];
level['+']=level['-']=0;
level['*']=level['/']=1;
level['(']=level[')']=2;
while(scanf("%s",s)!=EOF)
{
topa=topb=0;
for(i=0;s[i];i++)
{
if(s[i]=='(')
{
opstk[topa++]='(';
}
else if(s[i]==')')
{
while(topa>0&&opstk[topa-1]!='(')
{
topa--;
ret[topb++].op=opstk[topa];
}
topa--;
}
else if(s[i]=='+'||s[i]=='*'||s[i]=='/')
{
while(topa>0&&opstk[topa-1]!='('&&level[opstk[topa-1]]>=level[s[i]])
{
topa--;
ret[topb++].op=opstk[topa];
}
opstk[topa++]=s[i];
}
else if(s[i]=='-')
{
if((i>0&&s[i-1]=='(')||i==0)
{
sign=-1;
temp=0;
for(j=i+1;s[j]&&s[j]>='0'&&s[j]<='9';j++)
temp=temp*10+s[j]-'0';
ret[topb].op=-1;
ret[topb++].num=sign*temp;
i=j-1;
}
else
{
while(topa>0&&opstk[topa-1]!='('&&level[opstk[topa-1]]>=level['-'])
{
topa--;
ret[topb++].op=opstk[topa];
}
opstk[topa++]='-';
}
}
else if(s[i]>='0'&&s[i]<='9')
{
temp=0;
for(j=i;s[j]&&s[j]>='0'&&s[j]<='9';j++)
temp=temp*10+s[j]-'0';
ret[topb].op=-1;
ret[topb++].num=temp;
i=j-1;
}
}
while(topa>0)
{
topa--;
ret[topb++].op=opstk[topa];
}
for(i=0;i<topb;i++)
{
if(ret[i].op=='+'||ret[i].op=='-'||ret[i].op=='*'||ret[i].op=='/')
{
for(y=i-1;y>=0;y--)
if(ret[y].op==-1)
break;
for(x=y-1;x>=0;x--)
if(ret[x].op==-1)
break;
ret[i].num=cal(ret[x].num,ret[y].num,ret[i].op);
ret[i].op=-1;
ret[x].op=0;
ret[y].op=0;
}
}
printf("%.4lf\n",ret[topb-1].num);
}
return 0;
}
2. 用c語言編寫程序,輸入一個非負整數(小於10位),計算該數各位數字的和
您好,很高興回答您的問題。
您這個題目本身並不復雜,只要掌握了對一個數據分離其各個位置上的數據的方法即可。您可以定義一個一維數組,用來存放各個位置上數據。首先從鍵盤輸入一個數,最好設置為實型數據。首先通過循環判斷是幾位數,然後再用循環分解每一位置上的數字,這里要學會使用%和/號。還要定義一個產量,用來存放各位數字的和,記住其初始值一定設置為0。每分解一位就加到放和的變數中。
以上就是我的回答,希望能幫助到您。你可以自己試一試,有問題我們再討論哦。
3. c語言中用for表示一個數字非整數應如何表示
#include <stdio.h>
int main( )
{
int sum = 0,n;
for( ;scanf("%d", &n)==1; ) //當輸入非數字時(不包括回車),返回0結束循環,如a b等
sum += n;
printf("sum = %d\n", sum);
return 0;
}
4. 寫出c語言的表達式:a是非正的整數
運算符優先順序與結合性問題。一步一步來就行了。優先順序運算符名稱或含義使用形式結合方向說明1[]數組下標數組名[常量表達式]左到右()圓括弧(表達式)/函數名(形參表).成員選擇(對象)對象.成員名->成員選擇(指針)對象指針->成員名2-負號運算符-表達式右到左單目運算符(類型)強制類型轉換(數據類型)表達式++自增運算符++變數名/變數名++單目運算符--自減運算符--變數名/變數名--單目運算符*取值運算符*指針變數單目運算符&取地址運算符&變數名單目運算符!邏輯非運算符!表達式單目運算符~按位取反運算符~表達式單目運算符sizeof長度運算符sizeof(表達式)3/除表達式/表達式左到右雙目運算符*乘表達式*表達式雙目運算符%余數(取模)整型表達式/整型表達式雙目運算符4+加表達式+表達式左到右雙目運算符-減表達式-表達式雙目運算符5>右移變數>>表達式雙目運算符6>大於表達式>表達式左到右雙目運算符>=大於等於表達式>=表達式雙目運算符>=右移後賦值變數>>=表達式&=按位與後賦值變數&=表達式^=按位異或後賦值變數^=表達式|=按位或後賦值變數|=表達式15,逗號運算符表達式,表達式,…左到右從左向右順序運算
5. 在c語言中如何表示輸入一個非0整數x
#include<stdio.h>
int main()
{
int x;
printf("Enter your number: ");
scanf("%d",&x);
if(x==0)
{
printf("error\n");
return 0;
}
else
printf("Your number is: %d\n",x);
}
6. C語言中按位或,與,非是怎麼用的,怎麼運算
位運算符
C提供了六種位運算運算符;這些運算符可能只允許整型操作數,即char、short、int和long,無論signed或者unsigned。
&
按位AND
|
按位OR
^
按位異或
<<
左移
>>
右移
~
求反(一元運算)
按位與操作&通常用於掩去某些位,比如
n
=
n
&
0177;
使得n中除了低7位的各位為0。
按位或操作|用於打開某些位:
x
=
x
|
SET_ON;
使得x的某些SET_ON與相對的位變為1。
按位異或操作^使得當兩個操作數的某位不一樣時置該位為1,相同時置0。
應該區分位操作符&、|與邏輯操作符&&、||,後者從左到右的評價一個真值。比如,如果x為1、y為2,那麼x
&
y為0,而x
&&
y為1。
移位運算符<<和>>將左側的操作數左移或者右移右操作數給定的數目,右操作數必須非負。因此x
<<
2將x的值向左移動兩位,用0填充空位;這相當於乘4。右移一個無符號數會用0進行填充。右移一個帶符號數在某些機器上會用符號位進行填充(「算數移位」)而在其他機器上會用0進行填充(「邏輯移位」)。
單目運算符~對一個整數求反;即將每一個1的位變為0,或者相反。比如
x
=
x
&
~077
將x的後六位置0。注意x
&
~077的值取決於字長,因此比如如果假設x是16位數那麼就是x
&
0177700。這種簡易型式並不會造成額外開銷,因為~077是一個常數表達式,可以在編譯階段被計算。
作為一個使用位操作的實例,考慮函數getbits(x,p,n)。它返回以p位置開始的n位x值。我們假設0位在最右邊,n和p是正數。例如,getbits(x,4,3)返回右面的4、3、2位。
/*
getbits:
返回從位置p開始的n位
*/
unsigned
getbits(unsigned
x,
int
p,
int
n)
{
return
(x
>>
(p+1-n))
&
~(~0
<<
n);
}
表達式x
>>
(p+1-n)將需要的域移動到字的右側。~0是全1;將其左移n為並在最右側填入0;用~使得最右側n個1成為掩碼。