當前位置:首頁 » 編程語言 » c語言負數

c語言負數

發布時間: 2022-01-11 05:53:18

c語言問題,為什麼會輸出負數

這個問題有多種可能,不一而足。

  1. 演算法有錯誤,最終計算結果是負數。輸出自然會是負數。

    例如:

    inta=1;
    intb=a-2;
    printf("b=%d",b);
    //輸出結果:b=-1
  2. 超過變數類型的最大取值范圍,發生溢出。

    例如Turbo C里int是16位,取值范圍-32768~32767。如果計算過程當中,數值超過32767,由於補碼的關系。結果就有可能是負數。這種情況,就需要使用取值范圍更大的數據類型。

    常式:

    #include<stdio.h>
    voidmain(){
    inta,b,ch;
    a=32767;
    b=a+1;
    printf("a=%d,b=%d",a,b);
    ch=getch();
    }
    //輸出結果:a=32767,b=-32768

⑵ c語言負數的++等於多少

負數是有符號位的,在計算機中以補碼的形式儲存,最高位為1表示負數,其餘位按位取反再加1,然後你再把二進制轉換成8進制和16進制就可以了。
在c語言中,你可以用printf("%x",-617);輸出16進制
用printf("%o",-617);輸出8進制

⑶ c語言負數可以求余嗎

可以哦,n%m, 結果無論是正數還是負數,值是一樣的,不過符號與n一樣,符號與m無關。只是很少這樣用,我暫時也想不出有什麼要這樣做哦~~

⑷ C語言 !(一個負數)等於啥

可以,但是結果會出錯,負數在計算機中最高位為1,作為符號標志(正數為0),但是如果賦給無符號整型變數,最高位的標志位就會變成數值位,計算時把這個1當成數值。

⑸ C語言 負號問題

只能是在程序里判斷『-』這個字元。你需要能夠判斷出『-』是一個減號還是一個負號。

比較簡單的方法是,輸入計算式時你規定好格式,負數一律用()括起來。這樣比較容易判斷是不是負數。當然你也可以定義其它的格式。

如果不規定格式的話,判斷方法稍微麻煩一點,你要判斷『-』前面是什麼,如果是數字,那麼 『-』為減號,如果是『)』,那麼『-』為減號,如果是『+-*/』號,那麼『-』為負號。如果什麼也沒有,那麼表明是起始數字,那麼『-』為負號。等等,需要考慮周全。
=======下面是一個例子==============
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#define maxlen 100

typedef struct node{
char ch;
int data;
struct node *next;
}LinkList;//保存表達式的鏈表

int func()
{
LinkList *ta,*tb,*tc,*td;

ta = La;
tc = Lb;
for(int n=0;n < i;n++)
{
ta=ta->next;
}
tb = ta;
for(n=0; n < Len; n++)
{
tb=tb->next;
}
ta->next = tb;
for(n=0; n < j; n++)
{
tc=tc->next;
}
td = tc->next;
tc->next =
}

typedef struct{
char stack[maxlen];
int top;
}Stack1;

typedef struct{
int stack[maxlen];
int top;
}Stack2;

int In(char c){
if((c=='+')||(c=='-')||(c=='*')||(c=='/')||(c=='#')||(c=='(')||(c==')')||(c=='A')||(c=='S'))
return 1;
else
return 0;
}

void InitStack1(Stack1 *S){
S->top=-1;
}

void InitStack2(Stack2 *S){
S->top=-1;
}

void Push1(Stack1 *S,char ch){
S->top++;
S->stack[S->top]=ch;
}

void Push2(Stack2 *S,int ch){
S->top++;
S->stack[S->top]=ch;
}

char Precede(char ch1,char ch2){//比較兩個運算符的優先順序
char ch;//當ch為<時表示ch1的優先順序要小於ch2,反之同理
switch(ch1){
case '+':if((ch2=='*')||(ch2=='/')||(ch2=='(')) ch='<';else ch='>';break;
case '-':if((ch2=='*')||(ch2=='/')||(ch2=='(')) ch='<';else ch='>';break;
case '*':if((ch2=='(')) ch='<';else ch='>';break;
case '/':if((ch2=='(')) ch='<';else ch='>';break;
case '#':if(ch2=='#') ch='=';else ch='<';break;
case '(':if(ch2==')') ch='=';else ch='<';break;

}
return ch;
}

void Pop1(Stack1 *S,char *p){
*p=S->stack[S->top];
S->top--;
}

void Pop2(Stack2 *S,int *p){
*p=S->stack[S->top];
S->top--;
}

char GetTop1(Stack1 *S){
return S->stack[S->top];
}

int GetTop2(Stack2 *S){
return S->stack[S->top];
}

void print1(Stack1 *s){
printf("運算符棧: ");
int h=s->top;
while(h!=-1){
printf("%c ",s->stack[h]);
h--;
}
printf("\n");
}

void print2(Stack2 *s){
printf("數字元棧: ");
int h=s->top;
while(h!=-1){
printf("%c ",s->stack[h]);
h--;
}
printf("\n");
}

int Operate(int a,char theta,int b){//對a和b進行運算
int s;
switch(theta){
case '+':s=a+b;break;
case '-':s=a-b;break;
case '*':s=a*b;break;
case '/':s=a/b;break;
}
return s;
}

LinkList *CreatList(){
LinkList *H,*s,*r;
H=(LinkList*)malloc(sizeof(LinkList));
H->next=NULL;
r=H;
char c;
c=getchar();
while(c!='#'){
s=(LinkList*)malloc(sizeof(LinkList));
s->ch=c;s->next=NULL;
r->next=s;r=s;
c=getchar();
}
s=(LinkList*)malloc(sizeof(LinkList));
s->ch=c;s->next=NULL;
r->next=s;r=s;
return H;
}

LinkList *Change(LinkList *H){
LinkList *p,*pre;p=H->next;pre=H;
while(p!=NULL){
if(In(p->ch)){p=p->next;pre=pre->next;}
else{ //將字元轉化成數字
int m=0,n;
while(!In(p->ch)){
n=p->ch-'0';
m=10*m+n;
LinkList *u=p;
p=p->next;
if(!In(p->ch)){ pre->next=p;free(u); }
else{ u->data=m;u->ch='@';pre=pre->next; }//@標志此節點內的符號為數字
}
}
}
return H;
}
LinkList *jisuan(LinkList *H){//對鏈表中的數據進行初步的計算
LinkList *p,*U,*pre;
p=H->next;pre=H;int a;
while(p!=NULL){
if(p->ch!='A'&&p->ch!='S'){
pre=pre->next;
p=p->next;
}
else{
if(p->ch=='A')
a=fabs(p->next->data);
else
a=sqrt(p->next->data);
p->next->data=a;
U=p;
p=U->next;
pre->next=p;
free(U);
}
}
return H;
}

int main(int argc, char* argv[])
{
printf("*******************************************************************************");
printf("\n");
printf(" 歡迎使用模擬計算器程序\n");
printf("*******************************************************************************");
Stack1 OPTR1,*OPTR=&OPTR1;
Stack2 OPTR2,*OPND=&OPTR2;
InitStack1(OPTR);
Push1(OPTR,'#');//將『#』壓入OPTR棧中
InitStack2(OPND);
char c,x,theta;
int a,b,s;
printf("請輸入表達式,以#結束:");
LinkList *H,*p,*q;
H=CreatList();
H=Change(H);
H=jisuan(H);
p=H->next;
c=p->ch;
while((c!='#')||(GetTop1(OPTR)!='#')){//#同時是表達式的截止符
if(c=='@'){
s=p->data;
Push2(OPND,s);
p=p->next;
c=p->ch;
}
else
switch(Precede(GetTop1(OPTR),c)){
case '<':Push1(OPTR,c);p=p->next;c=p->ch; break;
case '=':Pop1(OPTR,&x); p=p->next;c=p->ch; break;
case '>':Pop1(OPTR,&theta); Pop2(OPND,&b); Pop2(OPND,&a);
Push2(OPND,Operate(a,theta,b));break;
//Operate之後,對C繼續判斷,所以不用getchar()
}

}
s=GetTop2(OPND);
printf("結果為:");
printf("%d\n",s);

return 0;
}

⑹ C語言如何把負數轉化為正數

需要准備的材料分別有:電腦、C語言編譯器。

1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。

⑺ C語言,負值運算

第一、 浮點數 不建議用自增 ++ 、自減 -- 運算
第二、你的 f 是從 -1 開始的, 你用 f ++ 之後 f 就是 零, 你不可以除以零哦。

⑻ 請問C語言是怎麼計算負數取余的

C語言計算負數取余:符號內的被除數決定,就是計算式中的-7,7,-7決定:比如-7%5=-2;

7%-5=2;

-7%-5=-2;

負數取余的原理:

任何一個整數n都可以表示成n=k*q+r其中0<=|r|<|q|這里的r就是n除以q的余數,即r==n%q例如:-9=(-2)*4+(-1)則-9除以4的余數為-1。

求余:取整除後的余數。

求模:基本意義和求余相同,不過要求a%b中的b不是負數。

(8)c語言負數擴展閱讀

C語言除法運算符「/」和求余運算符「%」

除法運算符「/」。二元運算符,具有左結合性。參與運算的量均為整型時,結果為整型,捨去小數。如果運算量中有一個為實型,結果為雙精度實型。

例如:

5/2=2,1/2=0

5/2.0=2.5

求余運算符「%」,二元運算符,具有左結合性。參與運算的量均為整型。求余運算的結果等於兩個數相除後的余數。

⑼ C語言負數的表達

和其前後的其他語句有關,沒有代碼說不清。

補充代碼後,繼續回答:
你的程序中
for (c=1;c<=20;++c)
{
k = (float)(a)/b + k;
c = a;
a = a + b;
b = -c;
}
這段循環中,在}前加上printf("%d ", c);,你會發現 C值依次為2,3,1,-2,-3,-1,2,3,1...死循環。
可改成
t=1;
while (c<=20)
{ k = t*(float)(a)/b + k;
c = a;
a = a + b;
b = c;
t=-1*t;
}

⑽ c語言中負數如何表示

c語言中負數表示方法就是在數前加負號「-」,比如:
-5,-10000,等
一個變數賦值為負數也是如此,比如:
x=-1000;

熱點內容
安卓上哪裡下大型游戲 發布:2024-12-23 15:10:58 瀏覽:189
明日之後目前適用於什麼配置 發布:2024-12-23 14:56:09 瀏覽:56
php全形半形 發布:2024-12-23 14:55:17 瀏覽:829
手機上傳助手 發布:2024-12-23 14:55:14 瀏覽:733
什麼樣的主機配置吃雞開全效 發布:2024-12-23 14:55:13 瀏覽:830
安卓我的世界114版本有什麼 發布:2024-12-23 14:42:17 瀏覽:711
vbox源碼 發布:2024-12-23 14:41:32 瀏覽:279
詩經是怎麼存儲 發布:2024-12-23 14:41:29 瀏覽:661
屏蔽視頻廣告腳本 發布:2024-12-23 14:41:24 瀏覽:420
php解析pdf 發布:2024-12-23 14:40:01 瀏覽:819