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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...