當前位置:首頁 » 編程語言 » c語言實現二分頻
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言實現二分頻

發布時間: 2022-07-07 00:29:45

① 如何用c語言編寫單詞分頻程序

可以啊,我以前寫過,明天給你發!

② C語言delay函數延時計算

C語言delay函數延時計算源代碼如下:

#include "stdlib.h"

void delay()

{

time_t start,end;

start=time(null);

unchar i;

while(z--)

{

for(i=0;i<121;i++);

}

end=time(null);

printf("%f",difftime(end,start));

}

(2)c語言實現二分頻擴展閱讀

1、對於要求精確延時時間更長,這時就要採用循環嵌套的方法來實現,因此,循環嵌套的方法常用於達到ms級的延時。

對於循環語句同樣可以採用for,do…while,while結構來完成,每個循環體內的變數仍然採用無符號字元變數。

③ 關於STC單片機內部RC時鍾分頻的C語言設計的問題

在程序中是可以修改分頻系數的,
不過我一般很少修改,
也就是在延時函數偶爾用用

順便問問樓主:
你的STC15F00系列單片機是A版本,還是B版本啊?
A版是不是除了外部中斷有問題,是不是還有上電復位P3.3會默認低電平(程序中如果不初始化P3.3=1的情況下)?

④ C語言遞歸函數如何實現二分搜索演算法

折半查找法也稱為二分查找法,它充分利用了元素間的次序關系,採用分治策略,可在最壞的情況下用O(log n)完成搜索任務。它的基本思想是,已知一個有n個元素的有序序列, 將n個元素分成個數大致相同的兩半,取a[n/2]與欲查找的x作比較,如果x=a[n/2]則找到x,演算法終止。如果x<a[n/2],則我們只要在數組a的左半部繼續搜索x(這里假設數組元素呈升序排列)。如果x>a[n/2],則我們只要在數組a的右半部繼續搜索x, 直到找到x或者是沒有找到!

如果是常規的方法的話那麼我們可以通過循環的方式, 按照上面說的演算法, 找到則退出循環, 否則繼續循環直到左下標位置小於或者等於右下標的位置.

按兄弟你的意思是要用遞歸方法進行搜索, 那麼大概還是上面的演算法, 只是把循環的方式改成遞歸方式: 如果沒找到,則確定新的搜索范圍, 即左右下標新位置, 然後把新的參數傳給函數繼續調用函數進行遞歸搜索!!

遞歸方式實現詳細代碼如下:

#include <stdio.h>

#define ARRAY_SIZE 10
#define NOT_FOUND -1

int BinarySearch(int array[], int left, int right, int NumToSearch)
{
int mid = (left + right) / 2;

if (left <= right)
{
if (NumToSearch == array[mid])
{
return mid;
}
else if (NumToSearch < array[mid])
{
right = mid - 1;
return BinarySearch(array, left, right, NumToSearch);
}
else
{
left = mid + 1;
return BinarySearch(array, left, right, NumToSearch);
}
}

return NOT_FOUND;
}

int main()
{
int a[ARRAY_SIZE] = {2, 5, 6, 7, 13, 20, 22, 27, 112, 222};//假設一個已知的有序且是升序數列
int result = 0;//查找的結果
int x = 13;//假設我們要查找的數是13
int left = 0;//序列開始下標
int right = ARRAY_SIZE - 1;//序列結尾下標

result = BinarySearch(a, left, right, x);
if (result == NOT_FOUND)
{
printf("Not Found!\n");
}
else
{
printf("Found %d in array a, it is a[%d]\n", x, result);
}

return 0;

}

希望對兄弟你有幫助!

⑤ C語言 二分查找演算法 用遞歸實現 我改動了一下

本人直接打出來的,並未在平台上編譯運行過,所以可能會有語法錯位,還請自行調試更改
#include<stdio.h>

int RecorBinarySearch(int a[], int, int, int);
int main(void)
{
int i=0, n, m, key;
int a[10000], c[10000];

scanf("%d", &n);
scanf("%d", &m);

printf("提示:輸入%d個整數且必須按升序排列。\n", n);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
printf("提示:輸入%d個預查找的數。\n", m);
for(i=0; i<m; i++){
scanf("%d", &key);
c[i] = RecorBinarySearch(a, key, 0, n-1);
}
printf("提示:輸出預查找的數在數組中的位置。(-1代表未找到)\n");
for(i=0; i<m; i++) {
printf("%d ", c[i]);
}
return 0;
}

int RecorBinarySearch(int a[], int key, int low, int high)
{
int nRet;
if(low > high)
nRet = -1;
else {
int mid = (high + low) / 2;
if(key == a[mid])
nRet = mid;
else if(key > a[mid])
nRet = RecorBinarySearch(a, key, mid+1, high);
else if(key < a[mid])
nRet = RecorBinarySearch(a, key, low, mid-1);
}
return nRet;
}

⑥ 如何用C語言實現對圖像的二值化

/*************************************************************************
* 該函數用於對圖像進行閾值分割運算
* 參數:
* LPSTR lpDIBBits - 指向源DIB圖像指針
* LONG lWidth - 源圖像寬度(象素數)
* LONG lHeight - 源圖像高度(象素數)
************************************************************************/

BOOL ImageChangeProc::ThresholdDIB(LPSTR lpDIBBits,LONG lWidth, LONG lHeight)
{

// 指向源圖像的指針
LPSTR lpSrc;

// 指向緩存圖像的指針
LPSTR lpDst;

// 指向緩存DIB圖像的指針
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;

//循環變數
long i;
long j;

unsigned char pixel;
long lHistogram[256];

//閾值,最大灰度值與最小灰度值,兩個區域的平均灰度值
unsigned char Threshold,NewThreshold,MaxGrayValue,MinGrayValue,Temp1GrayValue,Temp2GrayValue;

//用於計算區域灰度平均值的中間變數
long lP1,lP2,lS1,lS2;

//迭代次數
int IterationTimes;

LONG lLineBytes;
hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);

if (hNewDIBBits == NULL)
{
// 分配內存失敗
return FALSE;
}

// 鎖定內存
lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

// 初始化新分配的內存
lpDst = (char *)lpNewDIBBits;
memset(lpDst, (BYTE)255, lWidth * lHeight);

lLineBytes = WIDTHBYTES(lWidth * 8);

for (i = 0; i < 256;i++)
{
lHistogram[i]=0;
}

//獲得直方圖
MaxGrayValue = 0;
MinGrayValue = 255;
for (i = 0;i < lWidth ;i++)
{
for(j = 0;j < lHeight ;j++)
{
lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

pixel = (unsigned char)*lpSrc;

lHistogram[pixel]++;
//修改最大,最小灰度值
if(MinGrayValue > pixel)
{
MinGrayValue = pixel;
}
if(MaxGrayValue < pixel)
{
MaxGrayValue = pixel;
}
}
}

//迭代求最佳閾值
NewThreshold = (MinGrayValue + MaxGrayValue)/2;
Threshold = 0;

for(IterationTimes = 0; Threshold != NewThreshold && IterationTimes < 1000;IterationTimes ++)
{
Threshold = NewThreshold;
lP1 =0;
lP2 =0;
lS1 = 0;
lS2 = 0;
//求兩個區域的灰度平均值
for (i = MinGrayValue;i <=Threshold;i++)
{
lP1 += lHistogram[i]*i;
lS1 += lHistogram[i];
}

for (i = Threshold+1;i<MaxGrayValue;i++)
{
lP2 += lHistogram[i]*i;
lS2 += lHistogram[i];
}
if(lS1==0||lS2==0)
{
// 釋放內存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
return FALSE;
}
Temp1GrayValue = (unsigned char)(lP1 / lS1);
Temp2GrayValue = (unsigned char)(lP2 / lS2);
NewThreshold = (Temp1GrayValue + Temp2GrayValue)/2;
}

//根據閾值將圖像二值化
for (i = 0;i < lWidth ;i++)
{
for(j = 0;j < lHeight ;j++)
{
lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;
pixel = (unsigned char)*lpSrc;

if(pixel <= Threshold)
{
*lpDst = (unsigned char)0;
}
else
{
*lpDst = (unsigned char)255;
}
}
}

// 復制圖像
memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

// 釋放內存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);

// 返回
return TRUE;
}

參考:http://topic.csdn.net/t/20030909/13/2240079.html

⑦ c語言如何實現二分查找,問題描述看圖,我的源代碼如下:

#include<stdio.h>
intnumbers[1000001];//全局變數,數組numbers太大,必須放在這里定義
intBsearch(intnumbers[],intleft,intright,intk);
intmain()
{
inti,j,k,m,n;
//數組numbers太大,不能放在main函數里,而要放在函數外定義,
//不然的話,會導致函數堆棧溢出.
//原代碼intnumbers[1000001];
//反復讀入數字和查找數字的數量
while(scanf("%d%d",&n,&k)!=EOF)
{
//讀入給定的數字
for(i=0;i<n;i++)
{
scanf("%d",&numbers[i]);
}
for(j=0;j<k;j++)
{
//讀入待查找的數字,
scanf("%d",&m);
//請在下面完成查找讀入數字的功能
intret;
ret=Bsearch(numbers,0,n-1,m);
printf("%d",ret);
if(j!=k-1)
{
printf("");
}
}
printf(" ");
}
return0;
}

intBsearch(intnumbers[],intleft,intright,intm)
{
intmid;
while(left<=right)//原代碼while(left<right)
{
mid=(left+right)/2;
if(numbers[mid]==m)
{
returnmid+1;
}
elseif(numbers[mid]>m)
{
right=mid-1;
}
else
{
left=mid+1;
}
}
return0;
}

⑧ 那位大哥幫忙給我寫個分頻器的程序,要C語言或者VERILOG語言的,謝謝!!

always@(*) begin
if(rst_n==0) begin
ena<=1;
end
else begin
if (ena_cnt==您需要的分頻等級) begin
ena<=1;
end
end