當前位置:首頁 » 編程語言 » 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……),可能交換地址要快,因為變數的數據量很大的話,移動需要更多的時間。