主頁 > 軟體設計 > c生萬物之初識c語言

c生萬物之初識c語言

2021-07-24 08:28:45 軟體設計

c生萬物之初識c語言

  • 前言:
        • 1.初學習了c語言,感徑訓是很不錯的,哈哈~~,下面讓我來分享下我目前對c的認識
        • 題外:后面有關于c語言風格培養的《高質量的c-c++編程》PDF版鏈接,有需要自拿,哈哈~~,
  • 一.初識c語言
    • 1.1計算機語言的發展程序:由需求促進發展,由不成熟逐漸成為流行,
    • 1.2什么是c語言?
    • 選擇C語言的理由:==流行性,高效性,可移植性高,強大而靈活,面向程式員,==
  • 簡單的c程式
  • 三.c語言的語法規則
      • 3.1.2 每種資料型別的在記憶體中的大小
    • ==補充:==
      • 3.位元組(byte)
        • 計算機的單位:
        • 而對于資料型別我們規定:
    • 3.2變數,常量
      • 3.2.1.變數:可以隨時改變的量(資料).如:年齡,身高等;
      • 3.2.2.常量:不能改變的量(資料),如:圓周率,血型等,
      • 3. 2.3定義變數的方式:
        • 資料型別+自定義資料名稱+初始化+陳述句結束標志“;”(分號)
        • ==初始化依據條件可以不進行初始化,==
        • 如 年齡是==整形==資料
        • 身高是==浮點型==資料
        • 字母是==字符型==資料
      • 3.2.4變數的使用:
      • 3.2.5變數的分類
        • 區域變數:
        • 全域變數:
      • ==注意==
      • 3.2.6變數的作用域與生命周期————==有效使用變數==
        • 區域變數:
        • ==right:==
        • ==error==
        • ==思考==
      • 3.2.7常量:
        • 1.字面常量:血型,名字等
        • 2.const修飾常變數(==一旦const就不可更改==):
        • 3.#define定義的識別符號常量
      • ==注意==
        • image-20210718154601516
        • ==分析==:
      • 4.列舉常量
    • 3.3字符與字串+轉義字符+注釋;
      • 3.3.1.字符與字串:
        • 字符:‘w’像這種由一對==‘ ’==所參考的字符,
        • 字串:”name“像這種用一對” “所參考的連續字符,稱為字串,
    • 因為c語言中沒有字串型資料,因此我們用字符陣列定義字串;![image-20210718161734039](https://img.uj5u.com/2021/07/24/2492812408224610.png)
      • 3.3.2.轉義字符:
        • 補充:
    • ==注意==
    • ==注意==
      • 3.3.3.注釋
    • ==注意==
    • 3.4 c語言的3種結構:順序,選擇,回圈,
      • 3.4.1順序:一步一步執行代碼,
      • 3.4.2選擇結構(分支陳述句):
    • ==注意==
        • 3.4.2.1 if陳述句
          • 1.if陳述句的==2種==形式
          • 第一種
          • if(運算式){陳述句體}
          • else 陳述句體
          • 第二種
          • if(運算式){陳述句體}
          • else if(運算式) {陳述句體}
          • ....
          • else 陳述句體
    • ==注意==
        • ==看題==
          • 思考這題的輸出結果
          • ==答案:
    • 2 .switch陳述句:
      • 1.switch陳述句的形式
        • switch(整形運算式)
        • {
        • case 整形常量運算式:陳述句;
        • ....
        • }
    • ==注意==
      • ==看圖——>==
          • 圖一
          • 圖二
          • 圖三
      • ==問題==
        • 答案:
        • 分析:(1)-》(2)-》(3)-》(4)-》(5)
    • 3.4.3回圈結構:while,do while,for回圈;
        • 1.while陳述句形式
          • ==while(運算式){陳述句體}==
          • 當==運算式====為真==是,執行陳述句體.
        • 2.do ..while陳述句形式
          • do{陳述句體}while(運算式)==;==
          • ==先==執行==陳述句體==,后判斷==運算式==
        • 3.for陳述句形式
          • ==for(運算式1,運算式2,運算式3)==
          • 運算式1:
          • 運算式1為==初始化部分==,用于初始化回圈==變數==的,
          • 運算式2:
          • 運算式2為條件==判斷部分==,用于判斷回圈時候==終止==,
          • 運算式3:
          • 運算式3為==調整部分==,用于回圈條件的==調整==,
    • ==注意==
      • ==練一練==
        • 列印9*9乘法表
        • for()形式
        • 分析:通過i控制行,j控制列.
        • while形式
        • 分析:外層回圈控制行,層控制列
        • do while形式
        • 分析:外層回圈控制行,層控制列
    • 3.5函式
      • 函式形式:
        • 回傳值型別+函式名+(形參1,形參2,..)
      • 函式宣告形式:
        • 回傳值型別+函式名+形式型別+”;“
      • ==注意==
    • 3.7陣列
      • 3.7.1陣列的定義:
        • 陣列元素型別+陣列名+【資料數量】;
      • 3.7.2陣列下標:
        • 陣列長度是10,下標從==0~9==;
      • 3.7.3陣列的使用
      • ==注意==
      • ==看題==
        • 下面程式有問題嗎?
        • ==分析:==
    • 3.8運算子
      • 3.8.1算術運算子:
      • ==注意==
      • 3.8.2位移運算子:
        • <<,左位移運算子
        • >>右位移運算子
        • 它們移動的是補碼
      • ==補碼補充==
      • ==題目==
      • 3.8.3位運算子:&,|,^
      • ==注意==
      • 3.8.4賦值運算子:=,+=,-=,*=,/=,&=,|=,<<=,>>=
      • 3.8.5單目運算子:
      • ==單目運算子表==
      • 3.8.6關系運算子:
        • >,,>=,<,<=,==,!=;
      • 3.8.7邏輯運算子(==雙目運算子==):
      • 3.8.8條件運算子
      • 3.8.9逗號運算式:
        • exp1,exp2,exp3....
      • ==注意==
        • 逗號運算式的==運算結果==以最后一項為準,
      • ==看圖==
      • 3.8.10下標參考[],函式呼叫(),結構體成員->.
    • 3.9關鍵字
      • ==注意==
        • 在定義變數,函式名時不能使用關鍵字
      • 3.9.1static:
        • 圖一
        • 圖二
        • 圖三
    • 3.10#define定義宏常量和宏
    • 3.11指標
      • 3.11.1記憶體:
        • 3.11.2記憶體是怎么被編號的?
        • 3.11.3地址的存盤
        • 3.11.4指標變數:
        • 3.11.5指標的大小:
      • 3.11.6==補充==
    • 3.12結構體
      • 前言
      • 3.12.1結構體定義:
        • struct+結構體名
        • {
        • };
      • ==注意==
      • 3.12.2結構體陣列:
  • 感言:
    • 1.對目前c語言的有些地方學的不深,不敢過多描述,哈哈,
    • 2.在這段學習中,我會了一些小游戲,由其是關機程式,賊有意思!哈哈,后面會補上的,
      • 3.《高質量的c-c++編程》PDF版鏈接:鏈接:https://pan.baidu.com/s/1yW6FgsZDqeOtVzePrdZk_Q

前言:

1.初學習了c語言,感徑訓是很不錯的,哈哈~~,下面讓我來分享下我目前對c的認識

題外:后面有關于c語言風格培養的《高質量的c-c++編程》PDF版鏈接,有需要自拿,哈哈~~,

一.初識c語言

1.1計算機語言的發展程序:由需求促進發展,由不成熟逐漸成為流行,

早期的科學家通過數字1和0的組合控制硬體計算機的運行,后來在需求下,人們創建了助記符(匯編語言).但還是不能滿足需求,于是B語言出現,再后來高級語言C,c++,java等相繼出現,但不同地方語言規范不同,為消除這種交流障礙,促進語言的融洽,1989年,ANSI(美國國家標準協會)制定了一套c語言規定(c89),1990年,國際標準化組織(IOS)也制定了一套規定(c90).1999年,ANSI/IOS(C9X委員會)聯合委員會共同制定了c99;2011年,C9x發布了(C11)標準,至此C語言成為世界流行語言,目前使用較多的是c89/c90(2個幾乎等同),

1.2什么是c語言?

c語言是一種面向程序的計算機編程語言,廣泛用于底層C語言的設計目標 是提供一種 能簡易編譯,處理低級存盤器,產生少量機器碼以及不需要任何運行環境支持便能運行的編程語言,

選擇C語言的理由:流行性,高效性,可移植性高,強大而靈活,面向程式員,

1.流行性:c是一門流行語言,其融合了計算機科學理論和實踐的控制特性,便于用戶完成自頂向下的規劃,結構化編程和模塊化設計,使得c語言撰寫的程式更易懂,更可靠,
2.高效性:c是高效的語言,c語言具有通常匯編語言才有的微調控控能力,可以根據具體情況一獲得最大運行速度,最有效的使用記憶體
3.可移植性高:c是可移植的語言,我們知道不同作業系統其運行方式不同,而我們想在不同系統運行c程式,需要我們在少量更改程式的條件下,仍能運行c程式,這必然要求我們的語言可移植性高,而在這些語言中,c語言嶄露頭角,其可移植性非常高
4.強大而靈活:許多作業系統,如UNIX系統大部分也是通過c語言撰寫的,另外很多程式編譯器,解釋器也是用c語言撰寫的,
5.面向程式員:c語言的強大,可以清晰的讓程式員簡潔的表達自己的想法與意圖,

簡單的c程式

#include<stdio.h>
int main()
{

printf("helloworld!");
return 0;
}

image-20210718085659275

據說在業界能這句話能給你的編程之旅帶來好運!你好世界!

三.c語言的語法規則

3.1 c中的資料型別:整形,浮點型,字符型及其所占空間大小

整型名字
int(普通整形),
short (int)可以省略(int)短整形
long長整形
long long更長的整形
unsigned int無符號(—)整形(只能為正)
signed int有符號整型(可正可負)
浮點型:名字
float單精度浮點數型
double雙精度浮點型
char字符型

3.1.2 每種資料型別的在記憶體中的大小

image-20210718095315310

補充:

1.sizeof(型別)
1.它是運算運算子,不是函式
2.它用于測定資料在記憶體中的位元組(byte)大小,字串結束標志‘\0’也要被計算記憶體,
2.strlen(字符陣列名)
1.它是函式,不是運算子,
2.它用于測定字符陣列長度,在測定長度時以==‘\0’==為字串結束標志,

3.位元組(byte)

計算機的單位:

記憶體單位名字補充
bit位元計算機最小記憶體單元
byte位元組1byte=8bit
kb1kb=1024byte
mb1kb=1024kb
gb1kb=1024mb
tb1kb=1024gb
pb1kb=1024tb
我們知道計算機能識別的機器語言(二進制語言)(一定順序的1/0),而對于每個二進制1/0在記憶體中都要占有一定的空間,我們規定每個這樣的1/0所占的空間為1bit(計算機中的最小記憶體空間),而計算機中的資料是按位元組,分配空間的,即認為1byte為運行時的記憶體單元,
01000100 占用8個記憶體空間(8個bite位)

而對于資料型別我們規定:

型別記憶體大小
整型(int)4個位元組(32bite位)
短整形(short)2個位元組(16個bite位)
long long型8個位元組,
型別記憶體大小
字符型一個位元組(8個bite位),
型別記憶體大小
單精度型(float)4個位元組(32個bite位)
雙精度型(double)8個位元組(64個bite位),
==另外c語言規定:sizeof(long)>=======sizeof(int)=4;具體long型所占位元組大小,依據不同編譯器結果不同,

3.2變數,常量

3.2.1.變數:可以隨時改變的量(資料).如:年齡,身高等;

3.2.2.常量:不能改變的量(資料),如:圓周率,血型等,

3. 2.3定義變數的方式:

資料型別+自定義資料名稱+初始化+陳述句結束標志“;”(分號)

初始化依據條件可以不進行初始化,

如 年齡是整形資料

身高是浮點型資料

字母是字符型資料

int age=19;
float length=170f;
char a='w';

3.2.4變數的使用:

#include<stdio.h>
int main()
{
int age=19;
float length=170f;//c默認浮點型資料為double型,如果非要float,只需要在后面加f;
char name[]="***";//名字是由多個字符組合成的,因此在c中我們定義字符陣列來表示字串;
printf("年齡=%d\n",age);
printf("長度=%f\n",length)printf("名字=%s",name);//以字串的形式列印字符陣列name中的每個元素;
return 0;
}

3.2.5變數的分類

區域變數:

定義在==**一對{}**內的變數都是區域變數==,無論是main函式還是普通函式,

全域變數:

==不定義==在main函式和其它函式內的都是**全域變數,**

注意

當全域變數與區域變數沖突時,遵從“區域變數優先原則

3.2.6變數的作用域與生命周期————有效使用變數

區域變數:

1.作用域:在所創建位置的一對**{}內**的==任何地方==都可以使用:
2.生命周期:
區域變數自創建的一對{}始,到出這對{}為止,這段時間為其生命周期;**

right:

image-20210718145758136

a創建于最外面的{},所以main函式內的任何地方都可以使用,

image-20210718150004939

a創建于里面的{},所以里面{}內的任何地方都可以使用,

error

image-20210718150314601

超出了a的作用域,printf無法呼叫a;

思考

#include<stdio.h>
int main()
{
    {
        int a=1;
        printf("%d\n", a);
    }
    printf("%d\n", a);
    return 0;
}
#include<stdio.h>
int main()
{
    int a = 1;
    {
        int a=1;
        printf("%d\n", a);
    }
    printf("%d\n", a);
    return 0;
}
全域變數:
1.作用域:自創建到程式結束的任何地方都可以使用,
2.生命周期:自創建到程式結束為其生命周期,

3.2.7常量:

1.字面常量:血型,名字等

2.const修飾常變數(一旦const就不可更改):

#include<stdio.h>
int main()
{
const int a=19;
a=22;//變數一旦const就不可更改,重新賦值,
printf("%d",a);
return 0;

}

3.#define定義的識別符號常量

注意

1.define定義的宏常量不占用記憶體,它只會傻瓜式的語言替換,

image-20210718154601516

分析

結果并不是20,而是12的原因是:t=x+2*2;

4.列舉常量

當一個變數的所有可能可知的情況下,我們常定義列舉常量;如性別,資料型別等

image-20210718155806841

====c語言規定:列舉常量中的第一個常量在數值上是0,其它依次加1,如果人為的初始化第一個常量,其它常量任然依次加1.*

image-20210718160620143

3.3字符與字串+轉義字符+注釋;

3.3.1.字符與字串:

字符:‘w’像這種由一對==‘ ’==所參考的字符,

字串:”name“像這種用一對” “所參考的連續字符,稱為字串,

因為c語言中沒有字串型資料,因此我們用字符陣列定義字串;image-20210718161734039

3.3.2.轉義字符:

補充:

1.在計算機中,為了方便字符型與實型資料間的運算,我們人為的規定每個字符對應的一個十進制數,為此我們制定了ASII表

注意

常用轉義字符:‘\n’,’\t’,’\ddd’,’\xdd’;

image-20210718162612966

注意

c語言規定一個漢字是2個位元組,算2個長度,**

image-20210718165013546

image-20210718164745807

3.3.3.注釋

1.在c程式中我們想解釋自己的程式時,我們常使用“//”;
2.在c程式中我們想保留部分程式,不讓其起作用時,

注意

c的缺點:不能嵌套注釋;

image-20210718172413204

3.4 c語言的3種結構:順序,選擇,回圈,

3.4.1順序:一步一步執行代碼,

3.4.2選擇結構(分支陳述句):

注意

c語言規定,運算式在邏輯上為0為假,非0為真,

3.4.2.1 if陳述句

1.if陳述句的2種形式
第一種
if(運算式){陳述句體}
else 陳述句體
第二種
if(運算式){陳述句體}
else if(運算式) {陳述句體}
else 陳述句體

注意

1.我們規定else最近的if匹配.
2.注意if陳述句體中的關鍵字break,continue;

看題

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 2;
  if(a == 1)
        if(b == 2)
         printf("hehe\n");
    else
        printf("haha\n");
return 0;
}
思考這題的輸出結果
==答案:

什么都不輸出思考注意中的第一點

2 .switch陳述句:

1.switch陳述句的形式

switch(整形運算式)

{

case 整形常量運算式:陳述句;

}

注意

1.switch中的整形運算式不可以浮點型資料,但可以為,列舉型別(可以當作是整形常量),字符型資料(計算機在碰到字符新資料時會將它自動轉化為整形進行運算)(圖一
2.case 中的必須為整形常量,或者是列舉型別(列舉也看以看作是一種特殊常量)
3.switch中的關鍵字break是用于分開陳述句塊的,且不能使用關鍵字continue;(圖二
4.當執行的case沒有break作為跳出switch時,其會==,默認==繼續執行下面的case,直到再次遇到break;(圖三)
5…雖然switch中的default默認選項的意思,但使用時多留意其前面是否有break;再次體現第三點重要性(圖四)
6.default 可以放在switch陳述句體內的任意位置

看圖——>

圖一

image-20210719232840650

圖二

image-20210719233713420

圖三

**image-20210721091522206

圖四

image-20210719234517389

問題

#include<stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)
		{//switch允許嵌套使用
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default:
		break;
	}
				printf("m = %d, n = %d\n", m, n);
	return 0;
}

答案:

image-20210721092529211

分析:(1)-》(2)-》(3)-》(4)-》(5)

(1)先執行外面的swtich,n為1,執行case 1,后m=3.因為其后無break,進行執行case,
(2)執行case 2-》m=3,n=2.
(3)執行case 3->,執行內嵌的switch中的case 2-》m=4,n=3,遇到break,跳出內部switch
(4)執行case 4-》m=5.遇到break,跳出外部switch;
(5)m=5,n=3;

3.4.3回圈結構:while,do while,for回圈;

1.while陳述句形式

while(運算式){陳述句體}
運算式為真是,執行陳述句體.

2.do …while陳述句形式

do{陳述句體}while(運算式);
執行陳述句體,后判斷運算式

3.for陳述句形式

for(運算式1,運算式2,運算式3)
運算式1:
運算式1為初始化部分,用于初始化回圈變數的,
運算式2:
運算式2為條件判斷部分,用于判斷回圈時候終止
運算式3:
運算式3為調整部分,用于回圈條件的調整

注意

1.while的執行條件始終比回圈體多一次
2.do while陳述句注意陳述句結束要有分號"";“,且其回圈體始終與運算式執行次數一致,
3.brake只能跳出一層回圈(當內回圈結構時,只能跳出內部一層回圈結構)
4.continue只能跳出本次回圈,

練一練

列印9*9乘法表

for()形式

int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
        for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%-2d", i, j, i * j);
            if (j == i)printf("\n");
		}
	return 0;

}

分析:通過i控制行,j控制列.

while形式

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{

	int i = 1;
	int j = 0;
	while (i < 10)
	{
		j = 1;
		while (j <= i) 
		{
			printf("%d*%d=%-3d", i, j, i * j);
			j++;
		}
		printf("\n");
		i++;
	}
	
	
	
	return 0;
}

分析:外層回圈控制行,層控制列

do while形式

int main()
{

	int i = 1;
	int j = 0;
	do
	{
		j = 1;
		do
		{
			printf("%d*%d=%-3d", i, j, i * j);
			j++;
		} while (j <= i);	
		printf("\n");
		i++;
	} while (i<10);
	
	
	return 0;
}

分析:外層回圈控制行,層控制列

3.5函式

背景:在一個main函式中,我們可以通過代碼的形式完成某些目的,但是這樣,main函式就會變得很長,為了盡可能的減少main函式的代碼長度,我們創建函式來完成這部分作業,

函式形式:

回傳值型別+函式名+(形參1,形參2,…)

#include<stdio.h>
int add(int x,int y)
{

return x+y;
}
int main()
{

  int a = 0;
  int b = 0;
  int c = 0;
  scanf("%d%d",&a,&b);
  c=add(a,b);
  printf("%d\n",c);
    
  return 0;
}

函式宣告形式:

回傳值型別+函式名+形式型別+”;“

#include<stdio.h>

int main()
{
int add(int x,int y);//函式宣告

  int a = 0;
  int b = 0;
  int c = 0;
  scanf("%d%d",&a,&b);
  c=add(a,b);
  printf("%d\n",c);
  
  return 0;
}
int add(int x,int y)
{

return x+y;

}

注意

1.自定義的函式要有回傳值.
2.自定義的函式可以放在main函式的前面,或者后面(在后面的時候,要在main函式中提前宣告),
3.實參傳遞資料到形參時,引數型別要相同,不然會丟失部分資料,

3.7陣列

背景:如果我們想存盤一組數,我們一個怎么辦呢?這時候即需要c中的陣列;

3.7.1陣列的定義:

陣列元素型別+陣列名+【資料數量】;

int arr[10]={1,2,3,4,5,6,7,8,9,10};

3.7.2陣列下標:

int arr[10]={1,2,3,4,5,6,7,8,9,10};

陣列長度是10,下標從0~9

3.7.3陣列的使用

#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}

注意

1.陣列下標小于陣列長度,且其最大值為陣列長度-1;
2.陣列名是陣列的首地址;

看題

下面程式有問題嗎?

#include<stdio.h>
int main()
{ 
    int i = 0;
    int arr1[10]={0};
    char arr2{10}={0};
    char arr3[10]={'0'};
    printf("%d\n",arr1[0]);
    printf("%c\n",arr2[0]);
    printf("%c\n",arr3[0]);
    
  return 0}

image-20210721172234931

分析:

**arr1[0]被初始化為0;****arr2[0]被初始化為0;**arr3[0]被初始化為字符’0’;
0 對于int 型 就是數字 0,但對char ,在ASII表中是 的意思,即沒有任何意義,
字符=='0’對于char 型是字串結束標志==,

3.8運算子

3.8.1算術運算子:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WAlUqaiO-1626946061239)(初識c語言.assets/image-20210721180222696.png)]

注意

除法的2種情況:
/的前后都是整形資料時,對結果取整
/的前后存在浮點數時,結果就是浮點數,(圖一)
% 取余
%的前后必須是整形資料
#include<stdio.h>
int main()
{
int a =0;
int b =0;
int c2 =0;
float c2 =0;
scanf("%d%d",&a,&b);
c1=a/b;
c2=a/b;
printf("%d\n",c1);
printf("%f\n",c2);

return 0;
}

image-20210721181102475**

3.8.2位移運算子:

<<,左位移運算子

>>右位移運算子

它們移動的是補碼

補碼補充

1.計算機在記憶體中處理資料,都是按資料的補碼形式進行運算的,最后以原碼的形式表現資料,
2.正數與0的,原碼,反碼,補碼是一樣的,
3.負數的原碼按正數編時的二進制原碼反碼是原碼除符號位,其它位取反補碼反碼+1

題目

#include<stdio.h>
int main()
{
  int a=-1;
  int b=-1;
  printf("%d\n",a<<2);
  printf("%d\n",b>>2);

  return 0;
}

image-20210721184143358

image-20210721191836386

3.8.3位運算子:&,|,^

注意

運算子功能運算規則
&按位與對應位均為1時,才位1,否則為0
|按位或對應位存在1時就為1
^按位與或對應位相同為0,相異為1
<<左移補碼左移若干位,超出丟棄(不包括1),剩下補0,每左移一位,相當于多乘2;
>>右移補碼右移若干位,正數左補0,負數左補1,右邊溢位丟,

3.8.4賦值運算子:=,+=,-=,*=,/=,&=,|=,<<=,>>=

3.8.5單目運算子:

單目運算子表

單目操作福功能
邏輯反操作
-負值
+正值
&取地址
sizeof就型別長度(以位元組為單位)
~對一個數的補碼按位取反
前置:先自減,后應用;后置:先應用,后自鍵
++前置:先自增,后應用;后置:先應用,后自增
*間接訪問運算子(解應用運算子)
(型別)強制型別轉換

3.8.6關系運算子:

>,>=,<,<=,==,!=;

3.8.7邏輯運算子(雙目運算子):

邏輯運算子功能
&&且,只有當2邊邏輯都為真是才為真
||或,一邊為真即為真

3.8.8條件運算子

exp1?exp1:exp2

3.8.9逗號運算式:

exp1,exp2,exp3…

注意

逗號運算式的運算結果以最后一項為準,

看圖

image-20210721195412928

3.8.10下標參考[],函式呼叫(),結構體成員->.

3.9關鍵字

關鍵字功能
auto存盤類別說明關鍵字(區域變數)
break終止一層回圈
caseswtich陳述句中的case
char字符資料型別說明關鍵字
const將變數定義為長量
continue結束本次回圈,直接執行下次回圈
defaultswitch陳述句中,當沒有滿足case的情況,默認執行default陳述句
dodo {}while();陳述句中的關鍵字
double雙精度資料型別說明關鍵字
else與最近if匹配的else分支陳述句
enum列舉變數的說明關鍵字
extern提前告知變數,函式等出現在別的檔案中
float單精度資料型別說明關鍵字
forfor的說明關鍵字
gotoC語言中提供了可以隨意濫用的 goto陳述句和標記跳轉的標號,
if分支陳述句說明關鍵字
int整形資料說明關鍵字
long更大整形說明關鍵字
return回傳某種型別的值,結束函式
short短整形說明關鍵字
signed有符號型說明關鍵字
sizeof測定資料占記憶體空間的大小,單位位元組
static靜態成員說明關鍵字(具體說明看下面)
struct結構體說明關鍵字
switchswtich分支陳述句關鍵字
typedef重新定義資料型別別名:typedef unint unsigned int
union聯合說明關鍵字
unsigned無符號整形說明關鍵字
void空型別說明關鍵字
whilewhile陳述句說明關鍵字
register
volatile

注意

在定義變數,函式名時不能使用關鍵字

3.9.1static:

1.修飾區域變數:延長區域變數生命周期不改變作用域(圖一)
2.修飾全域變數:改變全域變數的外聯性(可被其它檔案使用,extern),使全域變數只能被本模塊使用,
3.修飾函式:改變函式的外聯性(可被其它檔案使用,extern),使函式只能被本模塊使用,

圖一

image-20210721202905771

圖二

image-20210721210951825

圖三

image-20210721211544673

3.10#define定義宏常量和宏

#define+“空格”+宏常量名+常量
#define+“空格”+宏名+運算式
image-20210721212115049

3.11指標

3.11.1記憶體:

記憶體是電腦上特別重要的存盤器,計算機中程式的運行都是在記憶體中進行的 ,所以為了有效的使用記憶體,就把記憶體劃分成一個個小的記憶體單元,每個記憶體單元的大小是1個位元組,為了能夠有效的訪問到記憶體的每個單元,就給記憶體單元進行了編號,這些編號被稱為該記憶體單元的地址,

3.11.2記憶體是怎么被編號的?

我們知道32位計算機有32根物理地址線(通過地址線,尋找相應地址的資料),在通電時,每根電信號被轉化為1/0,而這樣的32跟地址線,可形參232種不同的32為位二進制編碼,二232位元組換算成G時為4G,在32為系統4G記憶體足夠了,因此以這 232種二進制(其實是將二進制轉化為16進制,編號記憶體的)為編號剛好,(另外通過增加地址線的方法,可以增加記憶體)

3.11.3地址的存盤

通過指標變數,我們能存放地址,

3.11.4指標變數:

定義:要存地址的型別+指標變數名+=地址;
指標的作用:通過所存盤的地址,尋找其資料
image-20210721215527444

3.11.5指標的大小:

前面我們知道,32系統下的32為地址線,通過32位二進制編號記憶體,所以在記憶體中我們存盤一個地址時需要4個位元組的記憶體單元,即32位下指標大小為4位元組,同理64位系統下,指標大小為8位元組
image-20210721220123770

3.11.6補充

我們在定義變數時,隨機存盤在記憶體中,當程式結束時,變數記憶體釋放,每次運行,變數都隨機存盤于記憶體中,

3.12結構體

前言

生活中我們經常遇到具有共同屬性的一類事物,如:人
對于人這個抽象概念,我們很模糊,但我們具體到某個人時,他的名字,性別等,做為他的具體屬性被我們知道,
因此我們定義結構體,用于對具有共同屬性的一類事物的抽象

3.12.1結構體定義:

struct+結構體名

{

屬性1;

屬性2;

};

注意

1.定義結構體不可丟關鍵字struct
2.結構結尾的分號不能丟

3.12.2結構體陣列:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ODXlbe3k-1626946061259)(https://gitee.com/wonderland-nordlin/photo/raw/master/照片/.keep/image-20210721222910635.png)]

感言:

1.對目前c語言的有些地方學的不深,不敢過多描述,哈哈,

2.在這段學習中,我會了一些小游戲,由其是關機程式,賊有意思!哈哈,后面會補上的,

3.《高質量的c-c++編程》PDF版鏈接:鏈接:https://pan.baidu.com/s/1yW6FgsZDqeOtVzePrdZk_Q

提取碼:2021

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289746.html

標籤:其他

上一篇:第七屆工程訓練大賽---物流搬運小車

下一篇:阿里云與 IPIP.NET 聯合宣告

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more