c語言數據驅動,c++ 驅動開發

本文目錄一覽:

什麼是linux下的C語言驅動開發?

驅動一般是指硬體驅動,當然也有資料庫驅動程序。

至於為什麼要在Linux下開發,主要是為了在Linux下使用測試。

驅動程序就是Linux內核的一個重要組成部分。

c語言驅動usb

答案是可以。

網上有許多學習板,去淘寶搜索USB學習板就知道了。

單片機一般是STM32或者是silicon公司的C8051F34系列這些自帶USB的單片機或者51單片機加上一塊USB控制器。

使用silicon公司的丹皮納吉,你可以很快做出一個成品,因為silicon公司提供了windows驅動和下位機的驅動。你只需要去調用他提供的API函數就夠了。

使用前者或者是51結合USB控制器,你可以學到很多更詳細的USB知識(很直接的說,USB是個非常複雜的東西)

需要掌握的知識有:

上位機,需要掌握VC或者VB之類的能生成圖形界面的軟體,來調用siliocn的庫實現通過USB向單片機傳遞數據或者是自己去定義USB的那些結構體實現設備的枚舉握手等過程(初學者不建議,有點難,但網上的源碼非常多,肯鑽研,這條路更好。)。

下位機,就需要掌握單片機的使用。

當然所有的這些,需要熟練使用C語言,以及了解C++面向對象的思想。

這東西比較複雜,不是一蹴而就的,慢慢來,相信你會有個好的前景的!

請c語言大神幫忙!

這個題目要點。

1、收費標準必須為可操作修改。

2、收費標準檔位是不確定的,需要動態數組。(當然用常量,每次手改源代碼就不需要了)

3、收費標準的輸入除第一個閥值,其他要求增量(較上一個閥值),不能直接用於運算。

4、輸入範圍需要有驗證。

最簡易做法是將標準定義成常量,然後需要時修改代碼常量,但這樣對用戶夠不友好,所以我這裡把標準定義成結構,定義函數動態申請數組,修改收費標準。

#includestdio.h

#includemalloc.h

typedef struct eq

{

  int tn;//表示共有幾檔

  float **fb;//表示各檔計費標準的二維數組

}EQ;

int newFb(int tn);//構建收費標準數組地址空間,成功返回1,失敗返回2。(成功自動釋放舊地址,無需單獨釋放)

EQ *init();//初始化計費標準

void showEQ();//列印當前收費標準

int setEQ();//修改收費標準,成功返回1,失敗返回0

float ecost(float amount);//計算電費

EQ *eq=NULL;

int main()

{

  int n=0;

  float at;

  eq=init();

  if(!eq)

  {

      printf(“異常終止!\n”);

      return 1;

  }

  while(1)

  {

      printf(“1、列印收費標準;2、修改收費標準;3、計算電費\n”);

      n=0;

      while(n!=1 n!=2 n!=3)

          scanf(“%d”,n);

      switch(n)

      {

          case 1:showEQ();break;

          case 2:

              if(!setEQ())

                  printf(“異常!修改失敗!\n\n”);

              else

                  printf(“修改成功!\n\n”);

              break;

          case 3:printf(“請輸入年度用電量:”);

                 scanf(“%f”,at);

                 printf(“年度用電費用:%.2f\n\n”,ecost(at));

                 break;

      }

  }

  return 0;

}

float ecost(float amount)//計算電費

{

  int i;

  float sum=0;

  if(amount=eq-fb[0][0])

      return 0;

  for(i=eq-tn-1;i=0;i–)

      if(amounteq-fb[i][0])

      {

          sum+=(amount-eq-fb[i][0])*eq-fb[i][1];

          amount=eq-fb[i][0];

      }

  return sum;

}

EQ *init()//初始化計費標準,

{

  if(eq)

      return eq;

  eq=(EQ *)malloc(sizeof(EQ));

  if(!eq)

      return NULL;

  eq-tn=4;

  eq-fb=NULL;

  if(!newFb(4))

  {

      free(eq);

      return NULL;

  }

  eq-fb[0][0]=0,eq-fb[0][1]=0.6;

  eq-fb[1][0]=3000,eq-fb[1][1]=0.7;

  eq-fb[2][0]=5000,eq-fb[2][1]=0.9;

  eq-fb[3][0]=7000,eq-fb[3][1]=1.2;

  return eq;

}

int newFb(int tn)//構建收費標準數組地址空間,成功返回1,失敗返回0。(成功自動釋放舊地址,無需單獨釋放)

{

  int i,flag=1;

  float **fbSave=NULL;

  if(!eq)

      return 0;

  eq-tn=tn;

  if(!eq-fb)//如果有舊地址,保存該地址,用於還原

      fbSave=eq-fb;

  eq-fb=(float **)malloc(sizeof(float *)*tn);

  if(!eq-fb)

      flag=2;

  for(i=0;flag itn;i++)

  {

      eq-fb[i]=(float *)malloc(sizeof(float)*2);

      if(!eq-fb)

          flag=3;

  }

  if(flag==3)//內存申請失敗,釋放已申請的新地址,還原舊地址

  {

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

          free(eq-fb[i]);

      free(eq-fb);

      eq-fb=fbSave;

      return 0;

  }

  if(flag==2)

  {

      eq-fb=fbSave;

      return 0;

  }

  return 1;

}

void showEQ()//列印當前收費標準

{

  int i;

  printf(“當前共計%d檔計費標準:\n”,eq-tn);

  for(i=0;ieq-tn;i++)

      printf(“電量超過%.0f,%s%.1f(實際金額%.1f)\n”,eq-fb[i][0],i0?”每度再增加”:”每度”,i0?eq-fb[i][1]-eq-fb[i-1][1]:eq-fb[i][1],eq-fb[i][1]);

  printf(“\n”);

}

int setEQ()//修改收費標準,成功返回1,失敗返回0

{

  int i,tn;

  float money;

  printf(“請輸入新的計費檔數(輸入0退出修改):”);

  scanf(“%d”,tn);

  if(!tn)

      return 0;

  if(newFb(tn))

  {

      for(i=0;ieq-tn;i++)

      {

          printf(“請輸入第%d檔電量閥值(%s%.0f),及%s(單位元)”,i+1,i0?”必須大於”:”大於等於”,i0?eq-fb[i-1][0]:0,i0?”每度增加收費”:”每度收費”);

          scanf(“%f%f”,eq-fb[i][0],money);

          if(i==0 eq-fb[i][0]0)

          {

              printf(“輸入錯誤!起始閥值不能小於0!請重新輸入\n”);

              i–;

              continue;

          }

          if(i0  eq-fb[i][0]=eq-fb[i-1][0])

          {

              printf(“輸入錯誤!當前閥值不能小於上一次的閥值!請重新輸入\n”);

              i–;

              continue;

          }

          if(i==0)

              eq-fb[i][1]=money;

          else

              eq-fb[i][1]=eq-fb[i-1][1]+money;

      }

  }

  return 1;

}

//PS:你說你代碼運算不對,看看是否把增量當金額來用了。

原創文章,作者:PLLU,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149507.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
PLLU的頭像PLLU
上一篇 2024-11-05 16:52
下一篇 2024-11-05 16:52

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 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統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

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

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

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29

發表回復

登錄後才能評論