c语言圆周率计算_C语言入门这一篇就够了
c語言入門
C語言一經出現就以其功能豐富、表達能力強、靈活方便、應用面廣等特點迅速在全世界普及和推廣。C語言不但執行效率高而且可移植性好,可以用來開發應用軟件、驅動、操作系統等。C語言也是其它眾多高級語言的鼻祖語言,所以說學習C語言是進入編程世界的必修課。
hello,world
#include<stdio.h> int main() {/*在雙引號中間輸入Hello World*/ printf("Hello World");return 0; }注:在最新的C標準中,main函數前的類型為int而不是void
c語言的具體結構
簡單來說,一個C程序就是由若干頭文件和函數組成。
- #include <stdio.h>就是一條預處理命令, 它的作用是通知C語言編譯系統在對C程序進行正式編譯之前需做一些預處理工作。
- 函數就是實現代碼邏輯的一個小的單元。
必不可少之主函數
一個C程序有且只有一個主函數,即main函數。
- C程序就是執行主函數里的代碼,也可以說這個主函數就是C語言中的唯一入口。
- 而main前面的int就是主函數的類型.
- printf()是格式輸出函數,這里就記住它的功能就是在屏幕上輸出指定的信息
- return是函數的返回值,根據函數類型的不同,返回的值也是不同的。
- n是轉義字符中的換行符。(注意:C程序一定是從主函數開始執行的)
良好習慣之規范
程序解釋——注釋
注釋是寫給程序員看的,不是寫給電腦看的。
C語言注釋方法有兩種:
多行注釋: /* 注釋內容 */單行注釋: //注釋一行
有名有姓的C(標識符)
C語言規定,標識符可以是字母(A~Z,a~z)、數字(0~9)、下劃線_組成的字符串,并且第一個字符必須是字母或下劃線。在使用標識符時還有注意以下幾點:
變量及賦值
變量就是可以變化的量,而每個變量都會有一個名字(標識符)。變量占據內存中一定的存儲單元。使用變量之前必須先定義變量,要區分變量名和變量值是兩個不同的概念。
變量定義的一般形式為:數據類型 變量名;多個類型相同的變量:數據類型 變量名, 變量名, 變量名...;
注意:在定義中不允許連續賦值,如int a=b=c=5;是不合法的。
變量的賦值分為兩種方式:
基本數據類型
C語言中,數據類型可分為:
最常用的整型, 實型與字符型(char,int,float,double):
整型數據是指不帶小數的數字(int,short int,long int, unsigned int, unsigned short int,unsigned long int):
注:
- int short int long int是根據編譯環境的不同,所取范圍不同。
- 而其中short int和long int至少是表中所寫范圍, 但是int在表中是以16位編譯環境寫的取值范圍。
- 另外 c語言int的取值范圍在于他占用的字節數 ,不同的編譯器,規定是不一樣。
- ANSI標準定義int是占2個字節,TC是按ANSI標準的,它的int是占2個字節的。但是在VC里,一個int是占4個字節的。
浮點數據是指帶小數的數字。
生活中有很多信息適合使用浮點型數據來表示,比如:人的體重(單位:公斤)、商品價格、圓周率等等。因為精度的不同又分為3種(float,double,long double):
注:C語言中不存在字符串變量,字符串只能存在字符數組中,這個后面會講。
格式化輸出語句
格式化輸出語句,也可以說是占位輸出,是將各種類型的數據按照格式化后的類型及指定的位置從計算機上顯示。
其格式為:printf("輸出格式符",輸出項);
當輸出語句中包含普通字符時,可以采用一下格式:
printf("普通字符輸出格式符", 輸出項);注意:格式符的個數要與變量、常量或者表達式的個數一一對應
不可改變的常量
在程序執行過程中,值不發生改變的量稱為常量。
mtianyan: C語言的常量可以分為直接常量和符號常量。
- 直接常量也稱為字面量,是可以直接拿來使用,無需說明的量,比如:
- 整型常量:13、0、-13;
- 實型常量:13.33、-24.4;
- 字符常量:‘a’、‘M’
- 字符串常量:”I love imooc!”
在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:
#define 標識符 常量值 #include <stdio.h> #define POCKETMONEY 10 //定義常量及常量值 int main() {// POCKETMONEY = 12; //小明私自增加零花錢對嗎?printf("小明今天又得到%d元零花錢n", POCKETMONEY);return 0; }符號常量不可以被改變。
自動類型轉換
數據類型存在自動轉換的情況.
自動轉換發生在不同數據類型運算時,在編譯的時候自動完成。
char類型數據轉換為int類型數據遵循ASCII碼中的對應值.
注:
字節小的可以向字節大的自動轉換,但字節大的不能向字節小的自動轉換char可以轉換為int,int可以轉換為double,char可以轉換為double。但是不可以反向。
強制類型轉換
強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為:
(數據類型) (表達式)其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型
在使用強制轉換時應注意以下問題:
運算符號
C語言中運算符:
※ 算術運算符 ※ 賦值運算符 ※ 關系運算符 ※ 邏輯運算符 ※ 三目運算符算術運算符
c語言基本運算符:
除法運算中注意:
如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。
mtianyan: 取余運算中注意:
該運算只適合用兩個整數進行取余運算,如:10%3 = 1;mtianyan: notes: 而10.0%3則是錯誤的;運算后的符號取決于被模數的符號,如(-10)%3 = -1;而10%(-3) = 1;
mtianyan: %%表示這里就是一個%符.
注:C語言中沒有乘方這個運算符,也不能用×, ÷等算術符號。
自增與自減運算符
- 自增運算符為++,其功能是使變量的值自增1
- 自減運算符為--,其功能是使變量值自減1。
它們經常使用在循環中。自增自減運算符有以下幾種形式:
賦值運算符
C語言中賦值運算符分為簡單賦值運算符和復合賦值運算符
簡單賦值運算符=號了,下面講一下復合賦值運算符:
復合賦值運算符就是在簡單賦值符=之前加上其它運算符構成.
例如+=、-=、*=、/=、%=分析:定義整型變量a并賦值為3,a += 5;這個算式就等價于a = a+5; 將變量a和5相加之后再賦值給a
注意:復合運算符中運算符和等號之間是不存在空格的。
關系運算符
C語言中的關系運算符:
關系表達式的值是真和假,在C程序用整數1和0表示。
注意:>=, <=, ==, !=這種符號之間不能存在空格。
邏輯運算符
C語言中的邏輯運算符:
邏輯運算的值也是有兩種分別為真和假,C語言中用整型的1和0來表示。其求值規則如下:
- 與運算 &&
- 或運算 ||
- 非運算!
三目運算符
C語言中的三目運算符:?:,其格式為:
表達式1 ? 表達式2 : 表達式3;執行過程是:
先判斷表達式1的值是否為真,如果是真的話執行表達式2;如果是假的話執行表達式3。#include <stdio.h> int main() {//定義小編兜里的錢double money =12.0 ; //定義打車回家的費用double cost =11.5 ; printf("小編能不能打車回家呢:"); //輸出y小編就打車回家了,輸出n小編就不能打車回家printf("%cn",money>=cost?'y':'n' );return 0; }運算符大比拼之優先級比較
各種運算符號的順序:
優先級別為1的優先級最高,優先級別為10的優先級別最低。
分支結構之簡單if語句
C語言中的分支結構語句中的if條件語句。
簡單if語句的基本結構如下:
if(表達式) { 執行代碼塊; }其語義是:如果表達式的值為真,則執行其后的語句,否則不執行該語句。
注意:if()后面沒有分號,直接寫{}
分支結構之簡單if-else語句
簡單的if-else語句的基本結構:
語義是: 如果表達式的值為真,則執行代碼塊1,否則執行代碼塊2。
注意:
if()后面沒有分號,直接寫{},else后面也沒有分號,直接寫{}分支結構之多重if-else語句
C語言中多重if-else語句,其結構如下:
語義是:依次判斷表達式的值,當出現某個值為真時,則執行對應代碼塊,否則執行代碼塊n。
注意:當某一條件為真的時候,則不會向下執行該分支結構的其他語句。
分支結構之嵌套if-else語句
C語言中嵌套if-else語句。嵌套if-else語句的意思,就是在if-else語句中,再寫if-else語句。其一般形式為:
循環結構之while循環
反復不停的執行某個動作就是江湖人稱的循環 。
C語言中有三種循環結構,先看一下C語言while循環的結構
其中表達式表示循環條件,執行代碼塊為循環體。
while語句的語義是:計算表達式的值,當值為真(非0)時, 執行循環體代碼塊。循環結構之do-while循環
C語言中的do-while循環,一般形式如下:
do-while循環語句的語義是:
它先執行循環中的執行代碼塊,然后再判斷while中表達式是否為真,如果為真則繼續循環;如果為假,則終止循環。因此,do-while循環至少要執行一次循環語句。注意:mtianyan: 使用do-while結構語句時,while括號后必須有分號。
循環結構之for循環(一)
c語言中for循環一般形式:
它的執行過程如下:
注意:for循環中的兩個分號一定要寫
循環結構之for循環(二)
在for循環中:
- 表達式1是一個或多個賦值語句,它用來控制變量的初始值;
- 表達式2是一個關系表達式,它決定什么時候退出循環;
- 表達式3是循環變量的步進值,定義控制循環變量每循環一次后按什么方式變化。
- 這三部分之間用分號 ; 分開。
使用for語句應該注意:
怎么獲得一個數的百位,十位和個位
- 百位數:num/100 可以獲得,因為 int 是整數型,小數部分會省略。比如 765/100 的結果是7
- 十位數:num%100/10 。比如765%100先得到65,65/10得到6
- 個位數:num%10。765%10得到5
循環結構之三種循環比較
while, do-while和for三種循環在具體的使用場合上是有區別的,如下:
- 如果有可能一次都不循環應考慮使用while循環
- 如果至少循環一次應考慮使用do-while循環。
但是從本質上講,while,do-while和for循環之間是可以相互轉換的。
循環結構之多重循環
多重循環就是在循環結構的循環體中又出現循環結構。
在實際開發中一般最多用到三層重循環。
因為循環層數越多,運行時間越長,程序越復雜,所以一般用2-3層多重循環就可以了。另外不同循環之間也是可以嵌套的。多重循環在執行的過程中,外層循環為父循環,內層循環為子循環,
父循環一次,子循環需要全部執行完,直到跳出循環。父循環再進入下一次,子循環繼續執行...mtianyan: 打印三角形星星堆
#include <stdio.h> int main() {int i, j, k;for(i=1; i<5; i++){/* 觀察每行的空格數量,補全循環條件 */for(j=i; j<5; j++) {printf(" "); //輸出空格}/* 觀察每行*號的數量,補全循環條件 */for( k=0;k<2*i-1;k++) {printf("*"); //每行輸出的*號}printf("n"); //每次循環換行}return 0; }使用for循環打印9×9乘法表
#include <stdio.h> int main() { // 定義相乘數字i,j以及結果resultint i, j, result;for(i=9;i>=1;i--){for(j=1;j<=i;j++){printf("%d*%d=%d ",i,j,result=i*j);}printf("n");}return 0; }結束語句之break語句
那么循環5次的時候,需要中斷不繼續訓練。在C語言中,可以使用break語句進行該操作.
使用break語句時注意以下幾點:
結束語句之continue語句
那么循環5次的時候,需要中斷后繼續訓練。在C語言中,可以使用continue語句進行該操作
continue語句的作用是結束本次循環開始執行下一次循環。break語句與continue語句的區別是:
break是跳出當前整個循環,continue是結束本次循環開始下一次循環。分支結構之switch語句
switch語句結構如下:
mtianyan: switch語句時還應注意以下幾點:
mtianyan: switch與if語句的應用(計算是該年的第幾天)
#include <stdio.h>int main() { /* 定義需要計算的日期 */int date = 0;int year = 2008;int month = 8;int day = 8;switch(month){case 12:date+=30;case 11:date+=31;case 10:date+=30;case 9:date+=31;case 8:date+=31;case 7:date+=30;case 6:date+=31;case 5:date+=30;case 4:date+=31;case 3:if((year%4==0&&year%100!=0)||year%400==0){date+=29;}else{date+=28;}case 2:date+=31;case 1:date+=day;printf("%d年%d月%d日是該年的第%d天",year,month,day,date);break;default:printf("error");break;}return 0;}正確: continue只能用在循環體內
臭名遠揚之goto語句
C語言中也有這樣的語句,就是goto語句,goto語句是一種無條件分支語句.
goto 語句的使用格式為:goto 語句標號;自創函數
C語言提供了大量的庫函數: 比如stdio.h提供輸出函數
自定義函數的一般形式:
注意:
函數調用
我們需要用到自定義的函數的時候,就得調用它,那么在調用的時候就稱之為函數調用。
在C語言中,函數調用的一般形式為:
函數名([參數]);注意:
有參與無參
在函數中不需要函數參數的稱之為無參函數,在函數中需要函數參數的稱之為有參函數。
有參和無參函數的一般形式如下:
有參函數和無參函數的唯一區別在于:函數 () 中多了一個參數列表。
- 有參函數更為靈活,輸出的內容可以隨著n的改變而隨意變動,只要在main函數中傳遞一個參數就可以了
- 而在無參函數中輸出的相對就比較固定,當需要改動的時候還需要到自定義的方法內改變循環變量的值。
mtianyan: 形參與實參
函數的參數分為形參和實參兩種。
- 形參是在定義函數名和函數體的時候使用的參數,目的是用來接收調用該函數時傳入的參數。
- 實參是在調用時傳遞該函數的參數。
函數的形參和實參具有以下特點:
- 形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只有在函數內部有效。
- 實參可以是常量、變量、表達式、函數等。
- 在參數傳遞時,實參和形參在數量上,類型上,順序上應嚴格一致,否則會發生類型不匹配的錯誤。
函數的返回值
函數的返回值是指函數被調用之后,執行函數體中的程序段所取得的并返回給主調函數的值。
函數的返回值要注意以下幾點:
- 函數的值只能通過return語句返回主調函數。
- 函數值的類型和函數定義中函數的類型應保持一致。
- 沒有返回值的函數,返回類型為 void。
注意:
void 函數中可以有執行代碼塊,但是不能有返回值.mtianyan: void函數中如果有return語句,該語句只能起到結束函數運行的功能。其格式為: return;
遞歸函數(一)
遞歸就是一個函數在它的函數體內調用它自身。
執行遞歸函數將反復調用其自身,每調用一次就進入新的一層。
注意遞歸函數必須有結束條件遞歸函數(二)
5的階乘這個例子進行一下剖析,看一看他的運算過程:
程序在計算5的階乘的時候,先執行遞推,當n=1或者n=0的時候返回1,再回推將計算并返回。由此可以看出遞歸函數必須有結束條件。
遞歸函數特點:
一句話總結遞歸:自我調用且有完成狀態
任務猴子第一天摘下N個桃子,當時就吃了一半,還不過癮,就又多吃了一個。第二天又將剩下的桃子吃掉一半,又多吃了一個。以后每天都吃前一天剩下的一半零一個。到第10天在想吃的時候就剩一個桃子了,問第一天共摘下來多少個桃子?并反向打印每天所剩桃子數。#include <stdio.h> int getPeachNumber(int n) {int num; if(n==10){return 1; } else{num = (getPeachNumber(n+1)+1)*2; printf("第%d天所剩桃子%d個n", n, num); }return num; } int main() {int num = getPeachNumber(1);printf("猴子第一天摘了:%d個桃子。n", num);return 0; }
遞歸demo。
有5個人坐在一起,問第5個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第3個人,又說比第2人大兩歲。問第2個人,說比第1個人大兩歲。最后 問第1個人,他說是10歲。請問第5個人多大?
程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第5個人歲數,需知道第4人的歲數,依次類推,推到第1人(10歲),再往回推。#include <stdio.h> int dfs(int n) {return n == 1 ? 10 : dfs(n - 1) + 2; } int main() {printf("第5個人的年齡是%d歲", dfs(5)); return 0; }
局部與全局
C語言中的變量,按作用域范圍可分為兩種,即局部變量和全局變量。
- 局部變量也稱為內部變量。局部變量是在函數內作定義說明的。其作用域僅限于函數內, 離開該函數后再使用這種變量是非法的。在復合語句中也可定義變量,其作用域只在復合語句范圍內。
- 全局變量也稱為外部變量,它是在函數外部定義的變量。它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。
變量存儲類別
mtianyan: C語言根據變量的生存周期來劃分,可以分為靜態存儲方式和動態存儲方式。
- 靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。靜態存儲區中存放了在整個程序執行過程中都存在的變量,如全局變量。
- 動態存儲方式:是指在程序運行期間根據需要進行動態的分配存儲空間的方式。動態存儲區中存放的變量是根據程序運行的需要而建立和釋放的,通常包括:函數形式參數;自動變量;函數調用時的現場保護和返回地址等。
C語言中存儲類別又分為四類:
- 自動(auto)、
- 靜態(static)、
- 寄存器的(register)
- 外部的(extern)。
1、用關鍵字auto定義的變量為自動變量,auto可以省略,auto不寫則隱含定為“自動存儲類別”,屬于動態存儲方式。如:
2、用static修飾的為靜態變量,如果定義在函數內部的,稱之為靜態局部變量;如果定義在函數外部,稱之為靜態外部變量。如下為靜態局部變量:
注意:靜態局部變量屬于靜態存儲類別,在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放;靜態局部變量在編譯時賦初值,即只賦初值一次;如果在定義局部變量時不賦初值的話,則對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。
3、為了提高效率,C語言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關鍵字register作聲明。例如:
mtianyan: 注意:只有局部自動變量和形式參數可以作為寄存器變量;一個計算機系統中的寄存器數目有限,不能定義任意多個寄存器變量;局部靜態變量不能定義為寄存器變量。
4、用extern聲明的的變量是外部變量,外部變量的意義是某函數可以調用在該函數之后定義的變量。如:
內部函數與外部函數
- 在C語言中不能被其他源文件調用的函數稱謂內部函數 ,內部函數由static關鍵字來定義,因此又被稱謂靜態函數,形式為:
static [數據類型] 函數名([參數]) - 這里的static是對函數的作用范圍的一個限定,限定該函數只能在其所處的源文件中使用,因此在不同文件中出現相同的函數名稱的內部函數是沒有問題的。
- 在C語言中能被其他源文件調用的函數稱謂外部函數 ,外部函數由extern關鍵字來定義,形式為:
extern [數據類型] 函數名([參數]) - C語言規定,在沒有指定函數的作用范圍時,系統會默認認為是外部函數,因此當需要定義外部函數時extern也可以省略。
靜態變量只賦值一次
外部函數練習
hello.c
#include <stdio.h> #include "test.c" //引用test.c文件 extern void printLine() //這里定義的方法對嗎? {printf("**************n"); } int main() {say();return 0; }test.c
#include <stdio.h> void printLine(); static void say(){ printLine(); printf("I love imoocn"); printf("good good study!n"); printf("day day up!n"); printLine(); }對于hello.c來說,直接引入了test.c文件。那么就可以調用testc中的static方法say()
而對于test.c并沒有引入,可以通過聲明來調用另一個源文件中暴露出來的方法。
綜合練習
北京市出租車打車計費規則如下:小明每天上下班都要打車,公司和家的距離為12公里,上午上班時間為9點,下午下班時間為6點。
請編寫一個小程序計算小明每天打車的總費用。
數組初體驗
程序中也需要容器,只不過該容器有點特殊,它在程序中是一塊連續的,大小固定并且里面的數據類型一致的內存空間,它還有個好聽的名字叫數組。可以將數組理解為大小固定,所放物品為同類的一個購物袋,在該購
物袋中的物品是按一定順序放置的。
我們來看一下如何聲明一個數組:
數據類型 數組名稱[長度];數組只聲明也不行啊,看一下數組是如何初始化的。說到初始化,C語言中的數組初始化是有三種形式的,分別是:
我們將數據放到數組中之后又如何獲取數組中的元素呢?
獲取數組元素時: 數組名稱[元素所對應下標];如:初始化一個數組 int arr[3] = {1,2,3}; 那么arr[0]就是元素1。
注意:
數組的遍歷
數組就可以采用循環的方式將每個元素遍歷出來,而不用人為的每次獲取指定某個位置上的元素,例如我們用for循環遍歷一個數組:
注意以下幾點:
由于C語言是沒有檢查數組長度改變或者數組越界的這個機制,可能會在編輯器中編譯并通過,但是結果就不能肯定了,因此還是不要越界或者改變數組的長度
c語言獲取數組長度
int length = sizeof(arr)/sizeof(arr[0]);數組作為函數參數
數組可以由整個數組當作函數的參數,也可以由數組中的某個元素當作函數的參數:
數組作為函數參數時注意以下事項:
mtianyan: 數組的應用(一)[冒泡排序]
以升序排序為例冒泡排序的思想:相鄰元素兩兩比較,將較大的數字放在后面,直到將所有數字全部排序。就像小學排隊時按大小個排一樣,將一個同學拉出來和后面的比比,如果高就放后面,一直把隊伍排好。
#include <stdio.h> int main() {double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};int i,j;printf("n************排隊前*************n");for(i=0;i<10;i++){if(i != 9) printf("%1.2f, ", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位elseprintf("%1.2f", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位}for(i=8; i>=0; i--){for(j=0;j<=i;j++){if( arr[j]>arr[j+1]) //當前面的數比后面的數大時{double temp; //定義臨時變量temptemp=arr[j];//將前面的數賦值給temparr[j]=arr[j+1]; //前后之數顛倒位置arr[j+1]=temp;//將較大的數放在后面 } } }printf("n************排隊后*************n");for(i=0;i<10;i++){if(i != 9) printf("%1.2f, ", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位 elseprintf("%1.2f", arr[i]); //%1.2f表示小數點前一位,小數點后精確到兩位}return 0; }數組的應用(二)[數組查找功能]
當我們購物之后,拎著購物袋回到家,會一一檢查購物袋中的物品看是否缺少或者都是想購之物。
那么應用到程序中,可以使用數組查找功能,看看是否存在該數據,如果存在并返回該元素的下標。
#include <stdio.h> int getIndex(int arr[5],int value) {int i;int index;for(i=0;i<5;i++){/* 請完善數組查詢功能 */if(arr[i]==value){index=i;break;} index=-1;}return index; }int main() {int arr[5]={3,12,9,8,6};int value = 8;int index = getIndex(arr,value); //這里應該傳什么參數呢?if(index!=-1){printf("%d在數組中存在,下標為:%dn",value,index); }else{printf("%d在數組中不存在。n",value); }return 0; }字符串與數組
C語言中,是沒有辦法直接定義字符串數據類型的,但是我們可以使用數組來定義我們所要的字符串。一般有以下兩種格式:
注意:
在輸出字符串的時候要使用:printf(“%s”,字符數組名字);或者puts(字符數組名字);。
mtianyan:字符串函數
常用的字符串函數如下(strlen,strcmp,strcpy,strcat,atoi):
使用字符串函數注意以下事項:
多維數組
多維數組的定義格式是:
數據類型 數組名稱[常量表達式1][常量表達式2]...[常量表達式n];
定義了一個名稱為num,數據類型為int的二維數組。其中第一個[3]表示第一維下標的長度,就像購物時分類存放的購物;第二個[3]表示第二維下標的長度,就像每個購物袋中的元素。
多維數組的初始化與一維數組的初始化類似也是分兩種:
多維數組初始化要注意以下事項:
二維數組定義的時候,可以不指定行的數量,但是必須指定列的數量
二維數組定義的時候,可以不指定行的數量,但是必須指定列的數量。多維數組的遍歷
多維數組也是存在遍歷的,和一維數組遍歷一樣,也是需要用到循環。不一樣的就是多維數組需要采用嵌套循環
注意:多維數組的每一維下標均不能越界
綜合練習:
#include <stdio.h> #define N 10 //打印分數 void printScore(int score[]) {int i;printf("n");for(i=0;i<N;i++){printf("%d ",score[i]); }printf("n"); } //計算考試總分 int getTotalScore(int score[]) {int sum = 0;int i;for(i=0;i<N;i++){sum+=score[i]; } return sum; } //計算平均分 int getAvgScore(int score[]) {return getTotalScore(score)/N; } //計算最高分 int getMax(int score[]) {int max = -1;int i;for(i=0;i<N;i++){if(score[i]>max){max = score[i]; } } return max; } //計算最低分 int getMin(int score[]) {int min =100;int i;for(i=0;i<N;i++){if(score[i]< min){min = score[i]; } } return min; } //分數降序排序 void sort(int score[]) {int i,j;for(i=N-2;i>=0;i--){for(j=0;j<=i;j++){if(score[j]<score[j+1]){int temp;temp = score[j];score[j] = score[j+1]; score[j+1]=temp; } } }printScore(score); }int main() {int score[N]={67,98,75,63,82,79,81,91,66,84};int sum,avg,max,min;sum = getTotalScore(score);avg = getAvgScore(score);max = getMax(score);min = getMin(score);printf("總分是:%dn",sum);printf("平均分是:%dn",avg);printf("最高分是:%dn",max);printf("最低分是:%dn",min);printf("----------成績排名---------n");sort(score);return 0; }推薦大家一個嵌入式物聯網資料分享交流群:1093794364 入群有全套學習視頻資料電子書免費贈送!參考資料:
物聯網開發入門直播課 - 嵌入式/物聯網-C語言編程基礎?www.makeru.com.cnC語言_嵌入式?www.makeru.com.cn嵌入式開發直播課 - 帶你提升C編程能力?www.makeru.com.cn嵌入式底層開發 - 夯實C語言,從小白到大牛的進階之路!?www.makeru.com.cn總結
以上是生活随笔為你收集整理的c语言圆周率计算_C语言入门这一篇就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unofficial Windows B
- 下一篇: 国内首家!腾讯云密钥管理系统通过密码应用