C語言基礎

来源:https://www.cnblogs.com/joe-zhang/archive/2019/03/04/10468768.html
-Advertisement-
Play Games

概論: '/*'註釋內容的開始,'*/'註釋內容的結束 預處理指令 # include "studio.h" “studio.h”文件定義了很多輸入輸出功能 *.h 頭文件 *.c c源程式文件 main 函數 void mian() void代表函數不需要返回值,不需要將結果遞交給上一級程式 每個 ...


概論:
  • '/*'註釋內容的開始,'*/'註釋內容的結束
  • 預處理指令
# include "studio.h"
  • “studio.h”文件定義了很多輸入輸出功能
  • *.h 頭文件
  • *.c c源程式文件
  • main 函數
             void mian()         void代表函數不需要返回值,不需要將結果遞交給上一級程式
  •    每個C語言程式中必須只能有一個命名為main的函數,這是唯一的起點,是所有函數的上級函數
  • C語言中規定每條語句都必須以“;”作為結束標誌
  • “\n”換行
  • C語言編譯過程: 編譯預處理,編譯,優化,彙編,鏈接並生成可執行的機器語言程式文件
  • 運行和調試:1, 程式文檔讀入記憶體,分配記憶體空間
                               2,操作系統為此程式創建進程                                3,操作系統執行進程                                4,完畢,釋放記憶體空間等資源  
  • 一般錯誤;
    • 語法錯誤
    • 邏輯錯誤
    • 運行錯誤
  數據:
  • 基本數據類型:
  • 整形
    • 有無符號
      • 無符號整數(保存形式:二進位原碼)
      • 有符號整數(保存形似:最高位為符號位,0+,1-, 正數以原碼保存,負數以補碼保存)
    • 範圍大小
      • 字元型     (1位元組 )
      • 短整型     (2位元組)
      • 標準整型
      • 長整型     (4位元組)
  • 浮點型
    • 有無符號
      • 有符號浮點數
      • 無符號浮點數
    • 精度
      • 單精度浮點型 float
      • 雙精度浮點型 double
      • 高精度浮點型 long double
  • 指針型
  • 常量
    • 字面常量
      • 整型常量
        • 十進位
        • 八進位    (整數開頭假0)
        • 十六進位  (整數開頭加0x或0X)
      • 實型常量
        • 十進位小數
        • 指數形式  0.5e3
      • 字元常量(單引號  char型)
        • 普通字元常量  ‘a’  'b'
        • 轉義字元常量 ‘\’
      • 字元串常量 (雙引號)      remark: C語言中存儲的字元串常量都以'\0'作為字元串的結束標誌:  ‘A’占一個位元組“A”占兩個位元組
    • 符號常量   用符號對常量命名:
                    # define 符號常量名(大寫字母)   常量  
\n 換行
\t 水平製表,跳到下一個tab
\v 垂直製表
\b 退格,當前位置移到前一列
\r 回車,將當前位置移到本行開頭
\f 換頁,將當前位置移到下一頁開頭
\a 響鈴報警
\0 空字元,字元串結束符
\\ 代表反斜杠
\' 字元'''
\" 字元“
\ddd 1~3位八進位數字
\xhh ‘hh’1~2位十六進位數字
 
  • 變數
    • 標誌符(字母,數字下劃線組成,並且第一個字母不能由數字組成,大小寫有別,不建議長度超過8個字元)
      • 關鍵字(if...)
      • 預定義標誌符:define
      • 用戶標識符:day..
    • 規則:類型名 變數1,變數2;
void main()
{    
    int a,b;
    char ch1,ch2;
}
    • 變數的初始化
      • int a=12,b-3;
      • char *p=0; 將指針變數初始化為0是一個好習慣?
    • 變數的引用
      • & 對應存儲單元的地址
      • 賦值運算
  • 輸入輸出
    • 需要有預編譯命令:
#include <stdio.h>
  •    基本輸出
    • 單個字元輸出 putchar()
    • 格式化輸出函數 printf()   printf(格式控制,輸出表列)
        • c 字元
        • d 整數
        • u 無符號十進位
        • x 無符號十六進位
        • f 小數
        • e 指數
        • s 字元串
        • % %
      • 附加修飾符
        • - 左對齊標誌,預設為右對齊
        • + 正數輸出帶有正號
        • 數字 輸出寬度
        • .數字 小數位數
        • H 短整數
        • l 或者L 長整數或者浮點數
  • 基本輸入
    • 單個字元輸入getchar() getchar();
  • 格式化輸入scanf();
運算與表達式
  • 單雙目運算
  • 優先順序與結合性
  • 數據類型轉換
  • 強制類型轉換
  • 自增,自減運算: ++a: 變數先自增,然後將值傳給表達式
                                        a++:先將值傳給表達式,然後進行自增
  •   關係運算:
    • 優先順序較高: >, >=,<=,<
    • 優先順序較低:==,!=
  • 邏輯運算
    • !非
    • &&與
    • || 或
  • 位運算
    • 按位邏輯運算
    • 移位運算
      • x = x>>2
      • 左移一位相當於乘以2,右移一位相當於除以2
    • 指針運算
      • 取地址計算
        • 通過指針變數或地址常量獲得地址
        • 通過標準函數獲得地址值
        • 不允許給一個指針變數直接賦給一個整數值   int *p    p=2009 (錯)     int *p  p= NULL, p為空指針
        • (NULL是stdio.h頭文件中定義的符號常量,值為0)
      • 操作指針變數
        • 指針變數的使用必須是先賦值後使用
        • “&”和“*”優先順序相同,右結合
      • 移動指針
      • 比較指針
  • 其他運算
    • sizeof運算
      • 代表長度,右結合,結果是一個無符號的整形
      • 指針型占空間為4位元組
    • 逗號運算
      • 左結合,自左向右
    • 條件運算
      • 三目運算:max=(x>y)?x:y;
      • 表達式一?表達式二:表達式三;
      • 表達式為非0,則結果為表達式二,如果,表達式一為0,則結果是表達式三
# include <stdio.h>
#include <string.h>
void main()
{
    int a,b,c,t;
    printf("please input 3 numbers:");
    scanf("%d%d%d",&a,&b,&c);
    t=(a>b)?a:b;
    t=(t>c)?t:c;
    printf("%d",t);
}
  • 賦值運算
    • = 右側賦值給左側
    • 複合賦值運算
      • a+=b    a=a+b
      • a-=b    a=a-b
      • a*=b    a=a*b
      • a/=b   a=a/b
      • a%=b  a=a%b。。。
      • 註意,運算時需要將運算符右側的表達式用括弧括起來如x*=y-3     應該等於X=x*(y-3)
  程式控制結構 順序結構、分支結構、迴圈結構
  • 順序結構(正常結構)
  • 選擇結構
    • if語句
      • if (a>100)     printf("hello");
      • if條件語句後面不跟隨;, 在之後的語句後面跟隨;
      • if (表達式)   語句一;   else    語句二;
# include <stdio.h>
#include <string.h>
void main()
{
    int a,b,c;
    printf("please input 3 numbers:");
    scanf("%d%d%d",&a,&b,&c);
    if (a>b)
    printf("a is begger than b");
    else
    printf("a is small than b");
}
switch語句
switch(grade)
(
    case 'A':
    printf("1");break;
    case 'B':
        printf("2");break;
    default:
    printf("error");break;
)
# include <stdio.h>
void main()
{
float data1,data2,result;
char op;
scanf("inpurt 2 numbers %f and %f",&data1,&data2);
scanf("inpurt operation %c", &op);
switch(op)
(
    case'+':
        result = data1 + data2;
        break;
    case'-':
        result = data1 - data2;
        break;
    case'*':
        result = data1 * data2;
        break;
    case'/':
        result = data1 / data2;
        break;
    
)
    printf("result is %f", result);
}
  
  • 迴圈結構
    • while 迴圈
    • while 和if 的唯一區別就是if在在執行完語句後直接結束,而while 在執行完後需要再進行一次判定
# include <stdio.h>
void main()
{
int i=1,total=0;
while (i<100)
{
total = total +i;
i++;
}
printf("total is %d",total);
}
 
    • do while 迴圈, 當進行到哪一步的時候自動退出
do  迴圈體 while(表達式)  
do
{
fact = fact +i;
i++;
}
while(i<=10);
printf("nnn")
    • for迴圈
      • 語法: for(i=1;i<=100;i++)
                                    sum = sum+i
      • for(表達式1;表達式2;表達式3)        計算表達式1,計算表達式二,如果非0,則執行迴圈語句,然後執行表達式三;  如果表達式二的結果為0,則直接跳出迴圈
    • 其他控制語句
      • break語句
        • break; 只能用於switch和迴圈語句中,終止迴圈
      • continue語句
        • 一般用於滿足特定條件後跳出本次迴圈。
        • if (1%5!=0)  continue;     相當於: if(1%5==0) ...
      • goto語句:結構化程式
      • 迴圈的嵌套
# include <stdio.h>
void main()
{
int i,j,n;
printf("pls enter th n value");
scanf("%d", &n);
for (i=1;i<=n;i++)
    {
        for (j=1;j<=n-i;j++)
        {
            printf(" ");
        }
        for (j=1;j<=2*i-1;j++)
        {
            printf("*");
        }
        printf("\n");
    }
}
數組
  • 一維數組  int a[10];
    • 數組裡面必須是常量,數組是一個指針型常量
    • 一個整形占用四個位元組
    • C語言編譯器不會檢查數組元素下標是否越界
  • 下標法引用一維數組
            一個數組不能整體引用
  • 指針法引用數組元素
 
  • 一維數組的初始化
  找出數組裡的最大值
# include <stdio.h>
# define N 10
void main()
{
int i,max,a[N];
printf("pls key in 10 numbers");
for(i=0;i<N;i++)
    scanf("%d",&a[i]);
max=0;
for(i=1;i<N;i++)
    if(a[i]>a[max])
        max = i;
printf("%d",a[max]);
}
冒泡排序:
# include <stdio.h>
# define N 10
void main()
{
int i,a[N],j,k,t;
printf("pls key in 10 numbers");
for (i=0;i<N;i++)
    scanf("%d",&a[i]);
for (i=0;i<N-1;i++)
    for (j=0;j<N-i-1;j++)
        if (a[j]>a[j+1])
            {
            t=a[j];
            a[j]                   =a[j+1];
            a[j+1]=t;
            }
for(i=0;i<N;i++)
    printf("%d ",a[i]);
}     Z

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 彈性容器單行:主軸居中,交叉軸居中。 彈性容器單行;主軸兩端對齊;交叉軸一個為起點邊緣;一個為終點邊緣; 單選;主軸兩端對齊;交叉軸一個為起點邊緣;一個為居中對齊;一個為終點邊緣; 1:彈性視窗設置為多行,交叉軸為兩端對齊 2:每行基礎大小設置為100%,然後每個子行主軸為兩端對齊 在4的基礎上增加 ...
  • align-content 和 align-items : 1:共同點:它們對齊方向為交叉軸 2:不同點:align-content 應用於為 多行 而 align-items:應用於單行。 單行對齊例子: 多行對齊例子 ...
  • js中有三個改變this指針的方法,分別是 apply,call,bind。很多人只知道能改變的this,但是具體的適用場景不是太清楚。我也是遇到坑後不斷的實踐發現了區別。 call ,apply方法: 在Food類中,因為使用了call改變類Product的類的this執向。所以這個時候在Prod ...
  • 高可用 負載均衡(負載均衡演算法) 反向代理 服務隔離 服務限流 服務降級(自動優雅降級) 失效轉移 超時重試(代理超時、容器超時、前端超時、中間件超時、資料庫超時、NoSql超時) 回滾機制(上線回滾、資料庫版本回滾、事務回滾) 高併發 應用緩存 HTTP緩存 多級緩存 分散式緩存 連接池 非同步併發 ...
  • 在上一篇的-負載均衡Robbin中,我們簡單講解到負債均衡的演算法和策略。負載均衡就是分發請求流量到不同的伺服器,以減小伺服器的壓力和訪問效率,但是當負載均衡的某個伺服器或是服務掛掉之後,那麼程式會出現問題麽?接下來Hystrix將會講解 1.1.簡介 Hystix,即熔斷器。 主頁:https:// ...
  • 前幾天刷朋友圈的時候,看到一段話: 如果現在我是傻逼,那麼我現在不管怎麼努力,也還是傻逼,因為我現在的傻逼是由以前決定的,現在努力,是為了讓以後的自己不再傻逼 。話糙理不糙,如果妄想現在努力一下,馬上就不再傻逼,那是不可能的,需要積累,需要沉澱,才能慢慢的不再傻逼。 好了,雞湯喝完。 今天我們的內容 ...
  • 定義:在基類中定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 可以理解為將不變的行為放在父類中,會發生變化的行為在子類中實現,這樣可以避免子類中出現大量重覆的代碼。也就是說當子類中的方法混合了不變和可變的行為,我們通過模 ...
  • 1. 第二款抓包工具Charles安裝與使用 Charles和Fiddler一樣,也是一款抓包工具,比Fiddler界面更加清晰,支持多平臺 1.1 官方網址 https://www.charlesproxy.com/ 1.2 下載地址 Charles工具下載地址:https://www.charl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...