日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

C语言基本快速入门教程

發(fā)布時間:2023/12/15 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 C语言基本快速入门教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

計算機協(xié)會招新課01

第一部分:一門基礎(chǔ)的編程語言

走計算機行業(yè)不管哪個方向,會一兩門編程語言都是必須的,第一部分講一下如何快速的掌握一門基礎(chǔ)的編程語言。

這里以c語言作為講解對象

首先我們要明晰一個基本的概念,就是模塊化
c語言是一個模塊化了的語言,這個模塊化體現(xiàn)在很多方面,比如函數(shù),比如結(jié)構(gòu)體,比如多文件。

首先說一下函數(shù)

函數(shù)是c語言的基本單位

一個c語言程序,就是由一個個變量拼成結(jié)構(gòu)體,一個個結(jié)構(gòu)體與函數(shù)拼成文件,最后再由一個個文件拼成最后的整個程序

那么函數(shù)是怎么樣的呢?

void main()
{    
    //代碼內(nèi)容    
}

這就是一個最簡化的函數(shù)(當(dāng)然我們通常不用void)

這個函數(shù)的結(jié)構(gòu)是這樣的

void main()    //函數(shù)聲明      簡單理解為表示創(chuàng)建一個函數(shù)
    {    //代碼塊開始
    	//代碼塊可以簡單理解為我們要運行的一段代碼
	}	//代碼塊結(jié)束

這里的void是指返回值的類型,void表示沒有返回值,為什么函數(shù)需要返回值呢?因為我們在執(zhí)行一個函數(shù)的時候通常是需要它來實現(xiàn)某個功能的,如果沒有返回值我們就不知道它有沒有成功執(zhí)行,或者不知道它的執(zhí)行結(jié)果了(譬如執(zhí)行開平方以后我們沒有收到返回值,平方是開完了,但是結(jié)果捏?????)

而且有些時候我們的系統(tǒng)在執(zhí)行函數(shù)的時候也強制要求返回值(一些系統(tǒng),不是所有系統(tǒng))

綜上,我們的程序最好提供一個返回值

因此在事實上我們的一個函數(shù)表達出來其實是這樣的

typename main(){
    //函數(shù)內(nèi)容    
    return volue;
}

這里的typename常用的有 int char double long short float

分別對應(yīng)為整數(shù),字符,雙精度浮點數(shù),長數(shù),短數(shù),浮點數(shù),浮點數(shù)就是帶小數(shù)點的數(shù),計算機處理浮點數(shù)有誤差,double比float精準一些

這里我們所寫的函數(shù)名字叫main

main函數(shù)也就是程序的主函數(shù),主函數(shù)就是程序開始執(zhí)行的地方,也就說不管在主函數(shù)前面后面寫多少函數(shù)都沒有用,計算機只有找到主函數(shù)才能開始執(zhí)行

由于是主函數(shù),所以我們的返回值自己是沒有辦法用到了,但是有的計算機系統(tǒng)可能會要求,因此通常的要求是返回一個0,告訴系統(tǒng)程序正確執(zhí)行完成,也就是

int main()
{
    //函數(shù)內(nèi)容 
    return 0;
}

這里我們運行一下這個程序給大家看看結(jié)果

(展示)因為我們什么都沒有執(zhí)行,所以也什么都沒有顯示

那么怎么證明我們的程序真的執(zhí)行成功了呢?這里我們再增加一行用于顯示的指令

printf("hello world")

printf是c語言里的打印(顯示到屏幕)語句,這句話的意思是顯示hello world

加上之后我們再來運行一下

如左下角,加上以后我們的命令行就顯示出了我們要顯示的內(nèi)容,這證明本喵剛才認真講了沒有胡說八道(驕傲)

可能剛才有銀還意識到一個問題,就是剛才的程序比上面說的多了一行

#include <stdio.h>

這一句的意思又是蝦米捏?

后面加的字符是c語言里的預(yù)處理指令,就是編譯器程序執(zhí)行前預(yù)先處理的指令,用來補足程序運行中需要的一些東西

這個#include就是包含頭文件的意思

include <stdio,h>

的意思就是這個程序要包含頭文件stdio.h里面的內(nèi)容,stdio.h是c語言編譯器自帶的一個頭文件,包含了輸入輸出的函數(shù)之類的一些常用的功能函數(shù),printf()其實就是一個函數(shù),它在stdio文件里面,我們使用的printf就是調(diào)用了程序外部頭文件stdio.h里面的print函數(shù)。

剛才咱們已經(jīng)說了,c語言由很多函數(shù)構(gòu)成,下面咱們再定義一下別的函數(shù)來個多函數(shù)的程序

#include 

int dnlm()
{
    printf(" pass your mother" );	
    return 0;
}


int main()
{
    dnlm();
    return 0;
}


由于這個不是主函數(shù)了所以函數(shù)名就可以自己起了,不過這里要注意,函數(shù)名不能和關(guān)鍵字(c語言里面已經(jīng)被占用的詞)同名

這里我們起名(dnlm)

吶,這里左下角就正確顯示了

這里是先定義了dnlm函數(shù)然后在主函數(shù)里面用=調(diào)用了它

dnlm();

就醬,我們寫了一個多個函數(shù)的c語言程序,(在學(xué)習(xí)編程的初期可以先不用考慮多文件,先從一個文件寫起)

然后下面我們講一坨選擇分支結(jié)構(gòu)

這個選擇分支結(jié)構(gòu)它是這個樣子的

if()
{
    //如果條件成立執(zhí)行
}
else
{
    //如果條件不成立執(zhí)行
}

這里我們添加一個dnlf并且聲明母親父親兩個整數(shù)來測試一下

#include 

int dnlm()
{	
    int mother=30;//聲明整數(shù)mother等于30	
    int father=20;    //聲明整數(shù)father等于20	
    if (mother>father)    //如果mother大于father	
    {
        printf(" pass your mother" );    //顯示	
    }
    else    //否則
    {
        printf(" pass your father" );    //顯示
    }	
    return 0;
}

int main()
{
    dnlm();
    return 0;
}


運行結(jié)果正確的顯示在了左下角。

這樣一來證明我們的選擇結(jié)構(gòu)發(fā)揮了它應(yīng)有的效果

剛才講完了選擇分支結(jié)構(gòu),這次我們從循環(huán)結(jié)構(gòu)開始講,一課時之內(nèi)把c語言入門講完,然后看看時間能不能夠講一些其他的東西。

循環(huán)結(jié)構(gòu)

首先是while循環(huán),這是平常會經(jīng)常用到的一個循環(huán)

while(循環(huán)條件){    //代碼內(nèi)容}

while循環(huán)的結(jié)構(gòu)是這樣的,首先判斷循環(huán)條件是不是成立,例如循環(huán)條件是變量a>=2,那么當(dāng)a大于等于2的時候,就會執(zhí)行代碼內(nèi)容一次,然后再次判斷a是不是還大于等于2,如果是的話再執(zhí)行一次。直到有一次發(fā)現(xiàn)a不再大于等于2了,才結(jié)束循環(huán)開始執(zhí)行循環(huán)外面的內(nèi)容。

這樣一來的話,實際上也就是說,我們在寫這種循環(huán)的時候,里面一定要寫改變循環(huán)條件的代碼,否則循環(huán)條件一直不變就變成死循環(huán)了。

while循環(huán)是先判斷然后才決定執(zhí)不執(zhí)行的,所以while循環(huán)最少會執(zhí)行0次,也就是說如果一開始條件就不成立的話就一次都不執(zhí)行。

與之相對的是do。。。while循環(huán)

do{    //代碼內(nèi)容}while()

do。。。while和while相反,dowhile是先做了再說,做一遍到做完以后再判斷,是不是條件成立 ,條件成立的話繼續(xù)循環(huán),條件不成立的話到此為止,繼續(xù)往下執(zhí)行,do while循環(huán)是至少會執(zhí)行一次的循環(huán)。

與while系列循環(huán)用的同樣多的就是for循環(huán)了

for(i=100;i>=0;i--){    //代碼內(nèi)容}

for循環(huán)的條件分為三部分,第一部分是聲明控制循環(huán)的變量,比如聲明個i=100,第二個部分和while的控制條件一樣是用來判斷循環(huán)執(zhí)不執(zhí)行,最后一個部分是用來聲明控制變量的變化,就和while一樣,for也需要改變控制條件來防止死循環(huán),不過for直接在控制條件里就可以寫好改變控制變量的語句。

以上是循環(huán)結(jié)構(gòu)的三種語句。

跳轉(zhuǎn)語句

下面進行今天的第二部分,跳轉(zhuǎn)語句

c語言里的跳轉(zhuǎn)語句其實就是goto

語法也很簡單,在任意一個地方立下flag,然后就可以隨時goto到這個地方了

:lable1
  //此處省略兩百萬億行
goto lable1

就可以直接飛回flag

goto用的好的話不僅可以跳轉(zhuǎn)還可以實現(xiàn)各種循環(huán),不過goto很容易出現(xiàn)不知道飛到了哪里去但是編譯器不報錯導(dǎo)致查錯人員頭比地球還大的現(xiàn)象,因此一般的來說,不建議使用goto語句。

數(shù)組

數(shù)組部分也很簡單,

我們平常聲明一個變量a,可以儲存一個數(shù)據(jù)。

我們現(xiàn)在聲明一個數(shù)組a[100],就可以儲存100個數(shù)據(jù)

數(shù)據(jù)類型 數(shù)組名[數(shù)組長度]

可以通過a[0-99]來分別使用這100個數(shù)據(jù),就不用寫100遍聲明變量了,而且如果我們要查找的數(shù)有好幾個特點,還可以使用二維或者多維數(shù)組。

比如a[1][2][3][4][5][6][7]就是七維數(shù)組里第二組的第三小組的第四小組的第五小組的第六小組的第七小組的第八個數(shù)

這里要注意數(shù)組里面排序序號是從零開始的,第一個內(nèi)容的編號是0,所以數(shù)組名加數(shù)字實際訪問到位置是數(shù)字加一的位置存的數(shù)據(jù)。

從本質(zhì)上而言,數(shù)組其實就是一種指針的應(yīng)用方式。

指針

語言里面指針是核心精髓所在,所謂指針,就是畫一個箭頭指向數(shù)據(jù)儲存的地方

我們平常聲明一個變量,a=100,大概就相當(dāng)于在白紙上劃了一部分叫做a區(qū),然后往里面記錄了一個數(shù)字100,100寫在a這個地方。

這塊a區(qū)所在的位置就叫做a的地址

c語言里面和地址有關(guān)的有兩個符號,一個是&,取地址符,一個是*,是指針的標記

我們平常創(chuàng)建變量的時候是這樣的

int a;

我們創(chuàng)建指針時候是這樣的

int* p;

標上一個*

表示這個變量p存儲的是int變量的地址。

我們平常給變量賦值的方法是這樣的

a=100;

我們給指針賦值的時候是這樣的

p=&a;

這里的&a的意思就是取得a的地址

看到這里大家可能會有所疑惑,這個指針和變量到底有什么區(qū)別呢?

這里舉一個簡單的例子來說明指針和直接調(diào)用變量的區(qū)別

坐在隔壁的小明想要抄你的試卷,他看了一下a區(qū),把數(shù)字抄走了,這是b=a,

坐在隔壁的小明想要抄你的試卷,他拿走了你的試卷,這是b=&a

前者只是拿走了數(shù)據(jù),后者拿走的數(shù)據(jù)的地址,那么這會導(dǎo)致什么呢?

當(dāng)小明想要修改卷子的時候——

前者,b修改了卷子上的數(shù)值,a的卷子沒事,因為b只是抄走了一個數(shù)據(jù)

后者,b修改了卷子上的數(shù)值,a驚叫一聲:臥槽你把我卷子改了干啥!!!

這就是使用變量的值和使用變量的指針的區(qū)別

BUT!!!為什么我們需要使用指針呢????

當(dāng)然是因為有些時候我們必須使用指針!

舉個糖炒栗子!比如我們想要在某個函數(shù)里修改函數(shù)外的值的時候,我們就必須得使用指針。

這里我們就需要一點關(guān)于函數(shù)調(diào)用、形參與實參的知識。

有些時候我們要用的函數(shù)會需要傳入一些數(shù)值,比如我們寫一個求和的函數(shù)

int sum(int a,int b)  //聲明一個返回值是整數(shù)的函數(shù),使用時需要傳入整數(shù)a和整數(shù)b
{
	return a+b; //返回a+b的值
}

然后我們在使用的時候就需要傳入兩個值

sum(x,y) //x和y是之前已經(jīng)弄好的存了值的變量
sum(10,20)//或者這樣直接給兩個數(shù)值

這里面的a和b就叫形參,也可以簡單粗略地理解為參數(shù)所需的形式,x和y就是實參,可以簡單粗略的理解為實際傳入的參數(shù)。

在程序運行到調(diào)用sum函數(shù)的時候就會創(chuàng)建兩個臨時的變量a和b,然后把x和y的值傳給a和b。

這里就出現(xiàn)了不使用指針無法解決的問題——如果我們想要把存儲的結(jié)果還存在x里呢?

當(dāng)然,這樣其實還能解決,x=sum(x,y)就行了,但是如果我們要存到的地方不確定呢?比如根據(jù)sum計算結(jié)果的不同存到不同的地方,是不是沒有辦法啦!

而使用指針就可以很方便(才怪)的解決這個問題,我們不傳入值,而是把地址傳過去,小明不久可以直接修改你的試卷了嗎?

#include <stdio.h>
int main(int argc, char const *argv[])
{
	int x=1;
	int y=2;
	sum (&x,&y);
	return 0;
}

int sum(int* a,int* b)
{
	*a=*a+*b;
	return 0;
}

這樣就完美的解決了這個問題。

那么這里出一道小題,如果想要修改指針變量int* a的值應(yīng)該怎么辦呢?

int sum(int** a,int** b)
{
	*a=*a+*b;
	return 0;
}

當(dāng)然是傳入指針的指針!

指針是可以一層套一層的,int************************************************ a都可以!

回到剛才,講指針的時候我們有說數(shù)組是指針的一種應(yīng)用,是什么意思呢?現(xiàn)在我們就可以解答這個問題了,數(shù)組就是根據(jù)你的需求創(chuàng)建了好多挨在 一起的空間,然后數(shù)組的名字就是一個指針,指向第一塊地方,然后數(shù)組[]里跟不同的數(shù)字就是把指針往后移不同的長度,指到不同的地方。

比如a[3],其實也就是*(a+3)的意思,你把a[3]寫成*(a+3),*(3+a),3[a]都可以的,都是一樣的東西。

這里也解答了為什么數(shù)組前面要加int double之類的類型的問題,因為聲明數(shù)組的時候需要創(chuàng)建出一些地方來存數(shù)據(jù),數(shù)組前面的數(shù)據(jù)類型是用來標識每一塊地方多大的。

很高興大家能聽我說這么多,今天我要講的東西就這么多。

大家有興趣的話也可以自己寫點東西練習(xí)一下,比如寫個學(xué)生信息管理系統(tǒng)什么的,這節(jié)課提供的知識是足夠的。這里也宣傳一下我們的協(xié)會,

追求技術(shù)是一場漫長的旅程,很高興在這里與你們相逢。

總結(jié)

以上是生活随笔為你收集整理的C语言基本快速入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。