當前位置:首頁 » 編程語言 » c語言高精度計算為何要逆置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言高精度計算為何要逆置

發布時間: 2022-04-25 15:58:32

⑴ 用c語言實現單鏈表的逆置,能將此程序詳細的解釋一下嗎

演算法的核心就是reverse函數,其它的都是輔助建立鏈表和輸出鏈表的。
從數據結構的定義來看這是一個帶頭節點的鏈表。要弄的十分明白你要耐心點畫圖看看。我簡單的說下思路:
【head是指向頭結點的】
p=head; //p最開始指向頭結點
s=p->next; //s最開始指向第一個節點
while(s->next!=NULL)//只要沒有到最後一個元素就繼續。最後一個元素的next肯定為NULL
{ //進入核心了樓主
t=s->next; //用t指向s後面的那個元素
s->next=p; //把s指向她前面那個,這個時候就實現了逆向了。而且是就地逆向。元素都沒有動的
p=s; //然後p向後移動s
s=t; //s向後移動到p
這樣到下一輪的時候又可以講下下個再指向剛才那個下一個。一次內推
}
s->next=p; //當最後一個的時候,還是要指向她的前一個。
head->next->next=NULL;//頭指針的下一個是指向原來的第一個。逆向後肯定是最後的那個了。所以最後的一個的next=NULL就明了了。
head->next=s;//s是逆序前的最後一個,逆序後是第一個,所以用頭指向他

畫個圖好好體會下,樓主!

⑵ c語言大數,高精度,怎麼從鍵盤輸入,因為用數組存放是逆序的,,

1)不固定長度高精度,順序輸入,然後逆序
2)固定長度高精度,直接逆序輸入

⑶ C語言字元串逆置程序不懂!~

Reverse Reverse()
功能顛倒字元串中字元次序。
語法Reverse ( string )
參數string:要顛倒字元次序的字元串返回值String。函數執行成功時返回顛倒字元次序後的字元串,如果發生錯誤,那麼返回空字元串("")。用法Reverse()函數將一個字元串中最後一個字元放置到另一個字元串的第一個字元位置、倒數第二個字元放置在另一個字元串的第二個字元位置,以此類推。Reverse()系統中就有的;這里的的確不是調用系統的! #include<stdio.h>
①void reverse()
{
char ch; //定義chif((ch=getchar())!='\n') //從鍵盤接受一個字元,如果不是換行符條件為真,執行②,否則執行③
②reverse(); //返回①遞歸接收字元
③if(ch!='\n') //判斷ch是否為換行符,條件為真到④執行
④putchar(ch); //輸出字元 return;
} main()
{
reverse();
}

⑷ 關於c語言中數組逆置的問題

#include<stdio.h>

void Iverse(int *a,int n)

{

int i,j,t;

for(i=0,j=n-1;i<j;++i,--j)

{

t=a[i];//這句改了

a[i]=a[j];

a[j]=t;

}

return;

}

int main (void)

{

int a[5]={2,3,4,5,6},k;

Iverse(a,5);

for(k=0;k<=4;k++)

printf("%d ",a[k]);

return 0;

}

⑸ C語言中的數組元素逆置。這個程序為什麼要輸入兩遍呢

#include "conio.h"
#include<stdio.h>
#include<stdlib.h>
void fun(int *p,int n)
{int *q,i,t;<br> q=p+n-1 ;<br>for (i=0;i<n/2;i++)<br>{t=*p;<br>*p=*q;<br>*q=t;<br>p++;<br>q--;}

}
void main()
{ int i,a[100],n;
scanf("%d",&n);
printf("Input %d number: ",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
fun(a,n);
printf("The array after modified:");
for(i=0;i<n;i++)
printf("%3d",a[i]);
getch();
}
這次試試,scanf("%d",&a[i]);
這里 以後在雙引號里不要隨便加東西,希望對LZ有幫助,希望能夠採納

⑹ c語言,將一個整數逆置。要求高效,移位思想解決。

他那個反轉位元組,其實就是反轉一個位元組的各個位
例如:
十進制 二進制
61 0110 0001
86 1000 0110
其實二進制數跟十進制是完全無關的,只跟八進制,十六進制有關,這些都能夠用移位,異或,與,或等來解決
如果樓主給出的int a=789是十六進制的,就可以通過以為來轉。代碼如下:
void main()
{
unsigned short a = 0x4567;
unsigned short b = 0;
b = (a << 12);
b = b | ((a << 4) & 0x0F00);
b = b | ((a >> 4) & 0x00F0);
b = b | (a >> 12);
printf("%X", b);
}
如果執著要十進制的,我表示無能為力

⑺ 用C語言編寫高精度計算器遇到了一個問題,求解答

#include<stdio.h>
#include<conio.h>

void main()
{
float jisuan(float *a,char *c,float*b);
/* 對jisuan函數進行聲明 */
float a,b;
float jieguo,i;
char c,d;
while(1)
{
printf("請輸入計算式\n");

for(i=1;i<10000;i++)
{

scanf("%f%c%f",&a,&c,&b);
jieguo=jisuan(&a,&c,&b);
/* 調用jisuan函數 */
printf("計算結果為:%g%c%g=%f\n",a,c,b,jieguo);
printf("是否要繼續計算? 直接輸入算式:繼續; N:退出;\n");
d=getch();
if(d=='n'||d=='N')
break;
fflush(stdin); /*清除可能錯誤的輸入!!*/
}
break;
}
}

float jisuan(float*a,char *c,float *b)
/* 定義jisuan函數 */
{

float jieguo=0;
switch(*c)
{
case '+':jieguo=*a+*b;
break;
case '-':jieguo=*a-*b;
break;
case '*':jieguo=*a**b;
break;
case '/':
if(*b==0)
printf("error");
/* 如果被除數為零,則輸出「error」 */
else jieguo=*a/(*b);
break;
default:printf("error");
/* 如果輸入算式有誤,則輸出「error」 */
}
return(jieguo);
/* 將計算值返回主函數 */
}

⑻ C語言中高精度數轉換為低精度數的規則是什麼,要舉例

高精度轉化為低精度,截掉多餘高位信息。例如float是有效數字7位,double是16位,如果double a=33333.33333333333轉化為float側為a=33333.33

⑼ C語言實現線性表的逆置問題,順序和單鏈表。在線等高手

逆置有兩種方法,第一是把所有節點反過來。還有一種就是改變節點中的值。
第一種情況,其實可以考慮用頭插法,來實現逆置。
下面的演算法是基於頭插法的思想,逆置鏈表的,僅供參考。
LinkList anti_linklist(LinkList demo)
{
LInkList *p,*q;//work pointer
LinkList head;
head=new LinkList();
head->next=null;//init head pointer
p=demo->head->next;//make p points to the first node
if(p==null)
return null;//the linklist is null
while(p!=null)
{
q=p;
q->next=head->next;
head->next=q;
p=p->next;
}
}

這個是我回答之前的一個問題的答案。供你參考。

⑽ c語言高精度計算

不是我寫的,,幫你找到的。。
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include"stdlib.h"

voidmain()
{
intn=0,i=0,j=0,k=0,b=0;
chara[3][500]={0};
intn1=0,n2=0;
chars[500]={0};
intn3=0;
intc=0,c1=0;
inttemp=0;
charop;
charstr[1001]={0};
char*result;

scanf("%d",&n);
result=(char*)malloc(501*n);//根據輸入的n申請內存空間
*result='';

/*每次循環都要初始化*/
for(;i<n;i++)
{
//gets(str);
for(j=0;j<500;j++)
{
a[0][j]='';a[1][j]='';a[2][j]='';
s[j]='';
str[j]='';
str[1000-j]='';
}
c=0;c1=0;
k=0;
n1=0;n2=0;n3=0;

/*分離輸入的字元串*/
scanf("%s",&str);
for(j=0;str[j];j++)
{
if(str[j]!='+'&&str[j]!='-')
a[k][j-n1]=str[j];
else
{
op=str[j];
k=1;
n1=strlen(a[0])+1;
}
}//forj
n1-=2;
n2=strlen(a[1])-1;
n3=n1>n2?n1:n2;

/*計算加法*/
if(op=='+')
{
for(;n1>=0&&n2>=0;n1--,n2--,n3--)
{
temp=a[0][n1]+a[1][n2]-96;
temp+=c;
if(temp>=10)
{
s[n3]=temp%10+48;
c=1;
}
else
{
s[n3]=temp+48;
c=0;
}
}//for
while(n1>=0)
{
temp=a[0][n1]-48;
temp+=c;
if(temp==10)
{
s[n3]=48;
c=1;
}
else
{
s[n3]=temp+48;
c=0;
}
n1--;
n3--;
}//whilen1
while(n2>=0)
{
temp=a[1][n2]-48;
temp+=c;
if(temp==10)
{
s[n3]=48;
c=1;
}
else
{
s[n3]=temp+48;
c=0;
}
n2--;
n3--;
}//whilen2
if(c)
strcat(result,"1");
strcat(result,s);
strcat(result," ");
}//ifop

/*計算減法*/
else
{/*保證減數大於被減數
*如果被減數大於減數,則交換2數,並設置變數
*/
if(strcmp(a[0],a[1])<0)
{
//a[2]=a[0];a[0]=a[1];a[1]=a[2];
for(b=0;b<3;b++)
{
j=(b+2)%3;
for(k=0;k<=n2;k++)
a[j][k]=a[b][k];
}
n2=n1;n1=n3;
c1=1;//正為0,負為1
}

/*計算減法*/
for(;n2>=0;n1--,n2--,n3--)
{
temp=a[0][n1]-a[1][n2];
temp-=c;
if(temp>=0)
{
s[n3]=temp+48;
c=0;
}
else
{
s[n3]=temp+58;
c=1;
}
}//for
while(n1>=0)
{
temp=a[0][n1]-48;
temp-=c;
if(temp>=0)
{
s[n3]=temp+48;
c=0;
}
else
{
s[n3]=temp+58;
c=1;
}
n1--;
n3--;
}

if(c1)
strcat(result,"-");

/*消除減法結果高位的0*/
j=0;
while(s[j]==48)
j++;
strcat(result,s+j);
strcat(result," ");
}//elseop
}//fori
printf("%s",result);
getch()();
}