当前位置:首页 » 编程语言 » c语言比较交换耗时
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言比较交换耗时

发布时间: 2022-04-02 21:00:27

c语言程序问题,这个不是要比较大小然后交换位置么,我觉得是5 3 4啊,

函数要改变变量的值,得传递变量的地址,也就是参数是指针类型的,否则不会改变变量的值

⑵ C语言的计算耗时问题

#include "stdio.h"
#include <time.h>

void hannota(int n,char ta1,char ta2,char ta3);
void main()
{
int n;
clock_t begin, ration;

printf("input the number of diskes:");
scanf("%d",&n);

begin = clock();
hannota(n,'1','2','3');
ration = clock() - begin;

printf( "用时约: %d毫秒", ration*1000 / CLOCKS_PER_SEC );
printf("\n");
}

void hannota(int n,char ta1,char ta2,char ta3)
{
if(n==1)
printf("%c--->%c",ta1 ,ta2);
else
{
hannota(n-1,ta1,ta3,ta2);
printf("%c---->%c",ta1,ta2);
hannota(n-1,ta3,ta2,ta1);
}
}

⑶ c语言中纯粹的if语句耗时吗

要算机器周期的话,还取决于实际的软硬件环境的,
给你一个程序实验一下:
#include <stdio.h>

__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 开始时间
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停时间

void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
int a;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式开始
//测试程序段 Start
//这里写你要计算耗时的程序段!!!!!!!!!!!!!!!!!!!!!!!!
//测试程序段 End
N = Stop(m_start,m_overhead); // 获取耗时.
printf("Time:%I64d us\n", N);
}

我VC6+win7环境测试了一下:
#include <stdio.h>

__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 开始时间
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停时间

void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
int a;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式开始
//测试程序段 Start
if(a>7) a=1;
//测试程序段 End
N = Stop(m_start,m_overhead); // 获取耗时.
printf("Time:%I64d us\n", N);
}
耗时10us左右

下面这句呢?
if(a>7)
{
if(a>10)
{
if(a>15)
{
a=1;
}
}
}

#include <stdio.h>

__forceinline unsigned _int64 My_clock(void)
{
_asm _emit 0x0F
_asm _emit 0x31
}
unsigned _int64 Start(void) { return My_clock();} // 开始时间
unsigned _int64 Stop(unsigned _int64 m_start, unsigned _int64 m_overhead)
{return My_clock()-m_start - m_overhead; } // 停时间

void main()
{
unsigned _int64 m_start=0, m_overhead=0;
unsigned int N;
int a;
m_start = My_clock();
m_overhead = My_clock() - m_start - m_overhead;
m_start = My_clock(); // 正式开始
//测试程序段 Start
if(a>7)
{
if(a>10)
{
if(a>15)
{
a=1;
}
}
}
//测试程序段 End
N = Stop(m_start,m_overhead); // 获取耗时.
printf("Time:%I64d us\n", N);
}
耗时30us左右。

⑷ 比较交换 C语言程序问题

#include<stdio.h>
voidswap(int,int);
intmain()
{
inta,b;
scanf("%d,%d",&a,&b);//你在键盘输入时要按照标准输入函数里的双引号的格//式输入:比如12,10要输入逗号
//尽可能把逗号去掉,改为scanf("%d%d",&a,&b);
swap(a,b);

return0;
}

voidswap(intm,intn)
{
inttemp;
if(m>n)
{
temp=n;
n=m;
m=temp;
}
printf("%d.%d",m,n);
}

⑸ C语言效率问题-两个整型数的交换

说到交换效率,就必须涉及到硬件。在32位机器中,数据寄存器(AX,BC,CX,DX,EX等)都是32位的,在这类机器中,int类型的数据也是32位的,这就是int类型操作最为简洁方便的原因。

加法的操作是,取数到寄存器(两次,一次是被加数,另一次是加数),实施加法运算,并将结果存储到指定地址单元,减法操作于此类似。
赋值操作是,取数,存数。
通常,取存数操作的时间消耗高于寄存器操作,故假定,寄存器加、减操作的时间消耗为1,存储器取存操作的时间消耗为2,依次累计以上三种交换操作来比较优劣,注意这里用的是int类型数据的操作,浮点型数据操作校友区别。
方法1:int c = a; a = b; b = c;
2 + 2 + 2 = 8
方法2:a = a + b; b = a - b; a = a - b;
3 × (2 + 2 + 1) = 15
方法3:a = a + b - (b = a); // 貌似不能完成交换操作?

2 + 2 + 2 + 2 + 1 + 1 = 10
由此可见,方法1最为高效。

⑹ C语言 比较交换

函数是单向的值传递,在分函数中交换的数不可能返回到主函数。
一种方法是把输出放到分函数中,如果要在主函数中输出,可以把两个数的地址传入到分函数里,就是用指针实现交换。

⑺ c语言哪些语句耗时比较多

这题很简单intn,i,a[105],max=-99999,tol=0;printf("请输入数据的个数:");scanf("%d",&n);printf("请依次输入%d个数:",n);for(i=0;i

⑻ c语言比较两个值,交换两个值

别听下面的那人说,这跟返回值一点关系都没有!


另外提醒一下,龙__凤 说的引用是C++的特性,C语言没有的,C语言只能用指针。


首先,你要在另一个函数中改变一个变量的值,你需要使用“指针”,修改你这个程序,只需要3个地方:

//函数定义改成这样:
voidjiaohuan(int*x,int*y)
{intt;
if(*x<*y)
{
t=*x;
*x=*y;
*y=t;
}
}
//函数声明:
voidjiaohuan(int*x,int*y);
//函数调用:
jiaohuan(&a,&b);
jiaohuan(&a,&c);

⑼ C语言求指点,程序执行判断语句与赋值语句时,哪个耗时更长 比如:if(a>b) a=b; 是if

你好,判断语句耗时长,因为a=b就只有一次指令,前者有多次。

⑽ C语言 交换地址秘交换值哪个快

关键要看是什么类型的变量。
如果是简单变量(short、int……)那么交换值会快些,交换地址的话要多读一个指针的时间;
如果是复合变量(类class、结构struct……),可能交换地址要快,因为变量的数据量很大的话,移动需要更多的时间。