当前位置:首页 » 编程语言 » 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()();
}