用c語言編寫112,用C語言編寫的程序被稱為什麼

本文目錄一覽:

求解C語言編程用do while()語句編寫!Y=1+3+5+7+…111

手寫一下,未經調試

#includestdio.h

main()

{

int Y=0,i=1;

do

{

Y+=i;

i+=2;

}while(Y=111);

printf(“%d”,Y);

}

在C語言中 編寫一個程序實現從小到大排序

#include stdio.h

#include stdlib.h

int cmp(const void *a,const void *b)

{

    return *(int *)a-*(int *)b;

}

int main(int argc,char **argv)

{

    int a[]={1,-2,53,49,144,65,267,98,112};

    int i;

    qsort(a,sizeof(a)/sizeof(int),sizeof(int),cmp);

    for(i=0;i  sizeof(a)/sizeof(int);++i)

        printf(“%d “,a[i]);

    printf(“\n”);

    return 0;

}

如果要自己實現排序函數的話

#include stdio.h

void qsort(int *a,int left,int right)

{

    int p=(left+right)/2; //以中間數作為主元

    int k=a[p];

    int i=left,j=right;

    while(i  j)

    {

        //從左邊開始將大於主元的數放在主元右邊

        while((i = p)  (a[i] = k))

            ++i;

        if(i  p)

        {

            a[p]=a[i];

            p=i;

        }

        //從右邊開始將小於主元的數放在左邊

        while((j = p)  (a[j] = k))

            –j;

        if(j  p)

        {

            a[p]=a[j];

            p=j;

        }

    }

    a[p]=k;

    //如果左邊的數大於1個則遞歸左邊

    if(p-left  1)

        qsort(a,left,p-1);

    //如果右邊的數大於1個則遞歸右邊

    if(right-p  1)

        qsort(a,p+1,right);

}

int main(int argc,char **argv)

{

    int a[]={1,-2,53,49,144,65,267,98,112};

    int i;

    qsort(a,0,sizeof(a)/sizeof(int)-1);

    for(i=0;i  sizeof(a)/sizeof(int);++i)

        printf(“%d “,a[i]);

    printf(“\n”);

    return 0;

}

用c語言編寫一個程序

應該多給幾個例子,n=10的時候如何處理?得到10,110,210,1210等等?

若是這樣的,試試下面程序:

/*

用c語言編寫一個程序:對於一個自然數n(n=50),統計具有下列數字的個數,

並輸出所有符合條件的數字:自然數n,在n的左邊加上一個自然數,

但該自然數不能超過原數的一半;繼續按此規則進行處理,直到不能加自然數為止。

例如當n=6時,符合條件條件的是:6,16,26,36,126,136共6個;

當n=5時,符合條件的是:5,15,25,125.(0也是自然數,所以要加上本身)。。。

*/

#include stdio.h

#include stdlib.h

int g_count=0;

void fun(int n,int d,int b)

{

int i;

printf(“%8d “,d);

g_count++;

if(g_count%8==0) printf(“\n”);

for(i=1;i=n/2;i++)

{

fun(i,i*b+d,b*10);

}

}

void result(int n)

{

int t=n,d=n,b=10;

printf(“result:\n”);

g_count=0;

while(t=10)

{

t/=10;

b*=10;

}

fun(n,d,b);

printf(“\ntotal %d numbers\n\n”,g_count);

}

int main()

{

int n;

printf(“input n(n=50):\n”);

while(scanf(“%d”,n)!=EOF)

{

if(n=0n=50) result(n);

printf(“input n(n=50):\n”);

}

return 0;

}

我這,若是放開n的限制,n=200的時候,計算花掉20多秒吧,總共205658個。

n=300的話,算了幾分鐘都沒結束。估計也得使用long long數據類型了。使用遞歸不是最快的,重複計算多。

百度推薦也不求真相?有誤導了吧。

對於樓主新補充的提升,我的程序是這樣做的,滿足你的要求。

用C語言編寫一段程序,使用查表的方式使單片機控制DAC0832產生一個電壓值在0~5V之間的方波。

#includereg52.h //包含頭文件

#includeintrins.h

#define uchar unsigned char //宏定義

#define uint unsigned int

sbit s1=P3^5; //定義按鍵的接口

sbit s2=P3^6;

sbit s3=P3^7;

sbit s4=P3^4;

sbit s5=P2^3;

sbit led0=P3^0; //定義四個LED,分別表示不同的波形

sbit led1=P3^1;

sbit led2=P3^2;

sbit led3=P3^3;

sbit lcdrs=P2^7; //液晶控制引腳,還有一個控制腳是RW,因為我們只需要向液晶里寫數據系那是就好了,所以,我們直接將RW引腳接地

sbit lcden=P2^6;

char num,boxing,u; //定義全局變量

uchar pinlv=100,bujin=1,bujin1=1; //頻率初始值是10Hz,步進值默認是0.1,顯示步進值變量

uchar code table[]=”0123456789″; //定義顯示的數組

uchar code table1[]=”Fout= Wave form:”; //初始化顯示字符

unsigned int m,pwm=50; //定義變量 m

int a,b,h,num1; //定義全局變量

//自定義字符

uchar code zifu[]={ //此數組內數據為液晶上顯示波形符號的自定義字符

0x0e,0x11,0x11,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x11,0x11,0x0e,0x00, //正弦波 0 1

0x00,0x07,0x04,0x04,0x04,0x04,0x1c,0x00,

0x00,0x1c,0x04,0x04,0x04,0x04,0x07,0x00, //矩形波 2 3

0x00,0x01,0x02,0x04,0x08,0x10,0x00,0x00,

0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00, //三角波 4 5

0x00,0x01,0x03,0x05,0x09,0x11,0x00,0x00, //鋸齒波 6

};

uchar code sin[64]={ //此數組內的數據為,da輸出對應電壓值對應的數字量,0是0V,255是5V

135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,

146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128

}; //正弦波取碼

uchar code juxing[64]={ //一個周期是採樣64個點, 所以數組內是64個數據

255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,

255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

}; //矩形波取碼

uchar code sanjiao[64]={

0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,

248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0

}; //三角波取碼

uchar code juchi[64]={

0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,

146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255

}; //鋸齒波取碼

void delay(uint xms) //延時函數

{

int a,b;

for(a=xms;a0;a–)

for(b=110;b0;b–);

}

void write_com(uchar com) //寫命令函數

{

lcdrs=0;

P0=com;

delay(1);

lcden=0;

delay(1);

lcden=1;

}

void write_date(uchar date) //寫數據函數

{

lcdrs=0;

P0=date;

delay(1);

lcden=0;

delay(1);

lcden=1;

}

//自定義字符集

void Lcd_ram()

{

uint i,j,k=0,temp=0x04;

for(i=0;i7;i++)

{

for(j=0;j8;j++)

{

write_com(temp+j);

write_date(zifu[k]);

k++;

}

temp=temp+8;

}

}

void init_lcd() //初始化函數

{

uchar i;

lcden=0; //默認開始狀態為關使能端,見時序圖

Lcd_ram();

write_com(0x01); //顯示清屏,將上次的內容清除,默認為0x01.

write_com(0x0f);

write_com(0x38); //顯示模式設置,默認為0x38,不用變。

write_com(0x0c); //顯示功能設置0x0f為開顯示,顯示光標,光標閃爍;0x0c為開顯示,不顯光標,光標不閃

write_com(0x06); //設置光標狀態默認0x06,為讀一個字符光標加1.

write_com(0x80); //設置初始化數據指針,是在讀指令的操作里進行的

for(i=10;i20;i++) //顯示初始化

{

write_date(table1[i]); //顯示第一行字符

}

write_com(0x80+40); //選擇第二行

for(i=0;i9;i++)

{

write_date(table1[i]); //顯示第二行字符

}

write_com(0x80+10); //選擇第一行第十個位置

write_date(0);

write_date(1);

write_date(0);

write_date(1);

write_date(0);

write_date(1); //顯示自定義的波形圖案

write_com(0x80+40+9); //選擇第二行第九個位置

write_date(‘ ‘);

write_date(‘1’);

write_date(‘0’);

write_date(‘.’);

write_date(‘0’);

write_date(‘H’);

write_date(‘z’); //顯示初始的頻率值

}

void initclock() //定時器初始化函數

{

TMOD=0x01; //定時器的工作方式

TH0=a;

TL0=b; //定時器賦初值

EA=1; //打開中斷總開關

ET0=1; //打開定時器允許中斷開關

TR0=1; //打開定時器定時開關

}

void display() //顯示函數

{

uchar qian,bai,shi,ge; //定義變量用於顯示

qian=pinlv/1000; //將頻率值拆成一位的數據,將數據除以1000,得到的商是一位數,賦值給qian

bai=pinlv%1000/100; //將頻率除以1000的餘數再除以100就得到了頻率的百位,賦值給bai

shi=pinlv%1000%100/10; //同上,得到頻率的十位

ge=pinlv%1000/100%10;

write_com(0x80+40+9); //選中第二行第九個位置

if(qian==0) //千位如果為0

write_date(‘ ‘); //不顯示

else //千位不為0

write_date(table[qian]); //正常顯示千位

if(qian==0bai==0) //千位和百位都為0

write_date(‘ ‘); //百位不顯示

else //不都為0

write_date(table[bai]); //百位正常顯示

write_date(table[shi]); //顯示十位數

write_date(‘.’); //顯示小數點

write_date(table[ge]); //顯示個位

write_date(‘H’); //顯示頻率的單位Hz

write_date(‘z’);

if(boxing==0) //判斷波形為正弦波

{

write_com(0x80+10); //選中一行頻率圖案位置

write_date(0); //顯示正弦波圖案

write_date(1);

write_date(0);

write_date(1);

write_date(0);

write_date(1);

led3=1;

led0=0; //點亮正弦波指示燈

}

if(boxing==1) //注釋同上

{

write_com(0x80+10);

write_date(2);

write_date(3);

write_date(2);

write_date(3);

write_date(2);

write_date(3);

led0=1;

led1=0;

}

if(boxing==2)

{

write_com(0x80+10);

write_date(4);

write_date(5);

write_date(4);

write_date(5);

write_date(4);

write_date(5);

led1=1;

led2=0;

}

if(boxing==3)

{

write_com(0x80+10);

write_date(6);

write_date(6);

write_date(6);

write_date(6);

write_date(6);

write_date(6);

led2=1;

led3=0;

}

}

void keyscan() //頻率調節鍵盤檢測函數

{

if(s1==0) //加按鍵是否按下

{

EA=0; //關閉中斷

while(!s1); //按鍵鬆開

pinlv+=bujin; //頻率以步進值加

if(pinlv1000) //最大加到100Hz

{

pinlv=100; //100Hz

}

display(); //顯示函數

m=65536-(15000/pinlv);//計算頻率

/*頻率值最小是10Hz,pinlv的值是100(因為要顯示小數點後一位),150000/100=1500,這個1500就是定時器需要計時的,單位是us,65536-1500得到的是定時器的初值,

先不管初值,先看定時時間,1500us,一個波形的周期是由64個定時組成的,所以,一個波形周期就是64*1500us=96000,也就是96ms,約等

於100ms,也就是10Hz的頻率*/

a=m/256; //將定時器的初值賦值給變量

b=m%256;

EA=1; //打開中斷總開關

}

if(s2==0) //減按鍵按下

{

EA=0;

while(!s2);

pinlv-=bujin; //頻率以步進值減

if(pinlv100)

{

pinlv=100;

}

display();

m=65536-(15000/pinlv);

a=m/256;

b=m%256;

EA=1;

}

if(s3==0) //波形切換按鍵

{

EA=0;

while(!s3);

boxing++; //波形切換

if(boxing=4) //4種波形

{

boxing=0;

}

display();

EA=1;

}

if(s5==0) //PWM切換按鍵

{

EA=0;

while(!s5);

pwm+=10;

if(pwm90)

{

pwm=10;

}

// display();

EA=1;

}

}

void bujindisplay() //步進值設置界面顯示程序

{

uint bai,shi,ge; //定義步進值 百十個位

bai=bujin1/100; //將步進值除以100得到百位,也就是頻率值的十位,因為有一個小數位

shi=bujin1%100/10; //將步進值除以100的餘數除以十得到十位

ge=bujin1%100%10; //取餘10後得到個位,也就是頻率步進值的小數點後一位

write_com(0x80+11); //選中液晶第一行第十一列

if(bai==0) //百位是否為0

write_date(‘ ‘); //百位不顯示

else //百位不為0

write_date(table[bai]); //顯示百位數據

write_date(table[shi]); //顯示十位數據

write_date(‘.’); //顯示小數點

write_date(table[ge]); //顯示個位,也就是小數點後一位

}

void bujinjiance() //步進值設置鍵盤程序

{

if(s4==0) //步進設置按鍵按下

{

delay(5); //延時去抖

if(s4==0) //再次判斷按鍵

{

while(!s4); //按鍵釋放,按鍵鬆開才繼續向下執行

h++; //變量加

if(h==1) //進入設置狀態時

{

write_com(0x01); //清屏

write_com(0x80); //初始化顯示步進設置界面

write_date(‘S’);delay(1); //step value

write_date(‘t’);delay(1);

write_date(‘e’);delay(1);

write_date(‘p’);delay(1);

write_date(‘ ‘);delay(1);

write_date(‘v’);delay(1);

write_date(‘a’);delay(1);

write_date(‘l’);delay(1);

write_date(‘u’);delay(1);

write_date(‘e’);delay(1);

write_date(‘:’);delay(1);

bujin1=bujin; //步進值賦值給臨時變量

bujindisplay(); //顯示步進值

}

if(h==2) //退出設置

{

h=0; //清零

bujin=bujin1; //設置好的臨時步進值賦值給步進變量

init_lcd(); //初始化液晶顯示

initclock(); //定時器初始化

display(); //調用顯示程序

}

}

}

if(h==1) //設置步進值時

{

if(s1==0) //加按鍵按下

{

delay(5); //延時去抖

if(s1==0) //再次判斷

{

while(!s1); //按鍵釋放

bujin1++; //步進值加1

if(bujin1=101) //步進值最大100,也就是10.0Hz

{

bujin1=1; //超過最大值就恢復到0.1Hz

}

bujindisplay(); //步進顯示

}

}

if(s2==0) //減按鍵,注釋同上

{

delay(5);

if(s2==0)

{

while(!s2);

bujin1–; //步進減

if(bujin1=0)

{

bujin1=100;

}

bujindisplay();

}

}

}

}

void main() //主函數

{

init_lcd(); //調用初始化程序

m=65536-(15000/pinlv); //定時器初值

a=m/256;

b=m%256;

initclock(); //定時器初始化

led0=0; //點亮第一個波形指示燈

while(1) //進入while循環,括號內為1,一直成立,所以也叫死循環,程序不會跳出,一直在內執行

{

if(h==0) //正常模式不是步進調節

{

keyscan(); //掃描按鍵

// display();

}

bujinjiance(); //掃描步進調節程序

switch(boxing) //選擇波形

{

case 0 : P1=sin[u]; break; //正弦波

case 1 : //矩形波

if(upwm*64/100)P1=255;

else

P1=0;

break;

case 2 : P1=sanjiao[u]; break; //三角波

case 3 : P1=juchi[u]; break; //鋸齒波

}

}

}

void T0_time()interrupt 1 //定時器

{

TH0=a;

TL0=b;

u++; //變量加

if(u=64) //一個周期採樣64個點, 所以加到64就清零

u=0; //u清零

//根據不同的初值,定時器定時時間不同,達到不同頻率的目的

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/307126.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-02 18:06
下一篇 2025-01-02 18:06

相關推薦

  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python購物車程序

    Python購物車程序是一款基於Python編程語言開發的程序,可以實現購物車的相關功能,包括商品的添加、購買、刪除、統計等。 一、添加商品 添加商品是購物車程序的基礎功能之一,用…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • Vb運行程序的三種方法

    VB是一種非常實用的編程工具,它可以被用於開發各種不同的應用程序,從簡單的計算器到更複雜的商業軟件。在VB中,有許多不同的方法可以運行程序,包括編譯器、發佈程序以及命令行。在本文中…

    編程 2025-04-29
  • Python一元二次方程求解程序

    本文將詳細闡述Python一元二次方程求解程序的相關知識,為讀者提供全面的程序設計思路和操作方法。 一、方程求解 首先,我們需要了解一元二次方程的求解方法。一元二次方程可以寫作: …

    編程 2025-04-29

發表回復

登錄後才能評論