前言:接下來篇文章主要來複習下C語言相關知識點!!堅持!
C語言
一、編輯C語言程序的工具
1、 在linux系統下編輯? ---- 使用vi編輯工具
首先使用vi指定文件的名字,通過模式切換對文件進行編輯。
1)在家目錄下指定一個新的文件名字叫test.c。
gec@ubuntu:~$ vi test.c
2)進入vi工具後,首先是"一般模式"。
一般模式的特點:不能夠對文本進行編輯,只能通過方向鍵查看文件內容。
3)按"i"鍵,切換到"編輯"模式。
編輯模式特點:在底行會出現一個字符串"-INSERT-",在該模式下,隨意編輯文本,但是不能夠保存文本!
4)想保存退出,只能先按"Esc"切換到一般模式,再按":"切換到底行模式。
w(write) -> 保存
q(quit) -> 退出
底行模式特點: 在底行出現一個":",可以保存退出文本!
練習:使用vi來編輯程序
#include <stdio.h>
int main()
{
printf("helloworld!\n");
return 0;
}
2、 在linux系統下編輯? — 使用gedit編輯工具
1)使用gedit指定一個文件的名字。
2)直接編輯,按退出即可!
3、 在windows系統下編輯? --> 使用notepad++編輯工具。
因爲在windows編輯完工程之後,需要將文件放置linux下處理,所以需要設置linux與windows的共享目錄。
1)確保共享目錄路徑在windows下存在。
D:\share
2)告訴linux,共享目錄在哪裏?
虛擬機 -> 設置 -> 選項 -> 共享文件夾 -> 總是啓用 -> 添加 -> 下一步 -> 瀏覽 -> 主機路徑:D:\share
–> 下一步 -> 完成 -> 確定
3)使用命令切換到共享目錄下路徑
cd /mnt/hgfs/
ls -> 看到share,說明共享成功!
ls -> 沒有看到任何,重啓虛擬機!
練習1: 成功設置共享目錄
練習2: 在02/code/test.c -> 編輯一下
練習3: 在linux與windows刪除/創建東西,另外一個系統還在不在!
結論: linux與windows是互通,在linux下操作共享目錄下內容,不需要sudo
思考題:
1)能不能在/mnt/hgfs下創建任何東西?
答案:不能,因爲這個目錄下的內容通過共享設置的,不是通過命令來創建!
2)能不能在共享目錄中創建?
答案:能,用戶隨意創建。
二、分析linux C語言大綱
1、main函數使用事項、基本數據類型、變量定義/賦值、生命週期作用域、運算符,程序編譯過程分析。
2、ASCII碼,語句/表達式,逗號表達式/三目運算,控制流循環與分支結構。
3、函數定義、調用、聲明、函數形式參數與實參之間關係,函數返回值,函數書寫規則,函數運行規則。
4、一些特殊函數調用:遞歸函數、回調函數、變參函數,內聯函數
5、數組定義/賦值,數組元素,一維數組、二維數組、整型數組、字符數組,指針數組。
6、指針定義/賦值,指針的數據類型,整型指針,字符指針,數組指針,函數指針,二級指針。
7、結構體定義,結構體變量、結構體指針、結構體變量與指針如何訪問結構體的成員,如何計算結構體的空間。
8、聯合體、枚舉類型、typedef、宏定義、頭文件、條件編譯、拆分多個.c文件
9、如何申請堆空間?如何釋放?
10、字符串函數,計算字符串長度,拷貝字符串到另一塊內存空間,追加字符串,比較兩個字符串。
三、linux C語言基本框架
C語言程序入口: main函數 -> main() -> 每一個程序都必須有main函數。
1、main函數有什麼特點?
1)程序必須以main作爲主函數命名。
2)程序不是從第一個函數開始執行,而是從main函數開始。
3)main函數在程序中有且僅有一個。
2、main函數基本框架?
main() -> 函數頭
{ -> 函數體
}
3、linux函數屬於一個任務,每一個任務都會一個返回值,返回值就會返回給調用函數的地方。
返回值類型寫在函數頭前面。
返回值類型 main()
{
…;
…;
return 返回值結果;
}
注意事項:
1)返回值類型可以是基本數據類型,也可以是自定義數據類型。
2)main執行return代表程序的退出,子函數執行了return代表子函數返回,返回到調用的地方。
3)返回值結果必須與返回值類型匹配。
例子:
int fun()
{
…;
return 1; -> 返回到main函數中
}
int main()
{
fun();
return 0; -> 代表程序結果
}
4、頭文件
1)程序中一定要添加頭文件嗎?
不是。如果程序沒有調用到任何的函數,則不需要添加頭文件,只有當程序調用了函數,才需要添加對應的頭文件。
例子:以下例子不需要添加頭文件
int main()
{
return 0;
}
2)頭文件有什麼作用?
對函數進行聲明,函數在調用前必須聲明,否則就會編譯警告!
3)函數對應的頭文件是什麼?
例子: printf() -> 在Ubuntu終端輸入: man 3 printf(按’q’退出) -> 得到對應的頭文件: #include <stdio.h>
例子:
#include <stdio.h>
int main()
{
printf(“helloworld!\n”);
return 0;
}
4)頭文件不加會有什麼問題?
warning: incompatible implicit declaration of built-in function ‘xxxxx’ -> xxxxx這個函數的頭文件沒有添加!
5、 linux在運行程序時,需要給程序傳遞一些命令行參數
1)怎麼樣才能實現命令行傳參?
int main() / int main(void) -> main函數不需要命令傳遞參數
int main(int argc,char *argv[]) -> main函數可以進行命令行傳參
argc -> argument count 參數個數
argv -> argument value 參數的值
./a.out -> argc = 1 argv[0] = “./a.out”
./a.out aaa -> argc = 2 argv[0] ="./a.out" argv[1] = “aaa”
./a.out aaa bbb -> argc = 3 argv[0] = “./a.out” argv[1] = “aaa” argv[2] = “bbb”
./a.out aaabbb -> argc = 2 argv[0] = “./a.out” argv[1] = “aaabbb”
2)printf()如何輸出命令行參數內容?
%d -> 以十進制形式輸出內容
%s -> 輸出字符串
3)命令行傳遞參數有什麼作用?
使用命令行傳遞參數,argv數組中值就可以每一個執行結果都不一樣,並不需要每一個修改都要重新編譯。
練習4:無論輸入多少個參數,程序都可以將所有的參數都打印出來!
./a.out
./a.out aaa
./a.out aaa bbb
#include <stdio.h>
// argv[0] argv[1] argv[2] argv[3]
int main(int argc,char *argv[]) // ./a.out aaa bbb ccc
{
int i;
for(i=0;i<argc;i++)
{
printf("argv[%d] = %s\n",i,argv[i]);
}
return 0;
}
6、註釋 -> 對代碼進行解析,需要添加對應的註釋。
單行註釋: //註釋內容
多行註釋: /註釋內容/
7、縮進與空行
當有複合語句{}時,需要將複合語句中所有表達式進行縮進。
代碼中每一個模塊使用空行進行分隔,複合語句{}需要獨立出來一行。
8、編譯程序
編譯器: gcc
用法: gcc + [需要編譯文件的路徑]
1)爲什麼需要進行編譯?
因爲C語言屬於高級語法,機器只能看懂二進制程序,所以需要將C語言編譯爲二進制文件,才能在機器上運行。
2)如何編譯?
如果不指定新的二進制文件名字是什麼,那麼編譯器默認在當前目錄下生成一個a.out二進制文件。
編譯命令: gcc test.c -> 默認在當前目錄下生成a.out二進制文件。
gcc test. -o test -> 默認在當前目錄下生成test二進制文件。
3)執行二進制程序
執行命令: ./a.out
執行命令: ./test
a.out與test除了名字不一樣,其他都一樣!
四、基本數據類型與變量
1、 linux C語言中基本數據類型有哪些?
char、short、int、long、float、double。
2、 這些數據類型在內存中佔用多少個字節?
使用sizeof()進行計算。
char、short、int、long、float、double。
1 2 4 4 4 8 -> 基本數據類型佔用空間大小由C語言編譯系統決定!
3、 如何定義變量?
公式: 數據類型 + 變量名
數據類型? -> 從基本數據類型中選擇一個。
變量名定義規則?
1)只能由數字、字母,下劃線組成。
2)不能以數字開頭。
3)不可以與系統的關鍵字重名。
例子: 定義一個整型變量?
int a; -> 在內存空間連續申請4個字節,使用變量a間接訪問這片內存空間。
4、 程序運行時,會佔用內存空間?
test.c
int main()
{
int a;
return 0;
}
./test -> 將你的程序加載內存中
int a; -> 在內存空間連續申請4個字節,使用變量a間接訪問這片內存空間。
return 0; -> 釋放空間
5、內存如何分配空間? -> 原則: 連續空閒不確定
1)分配空間時,內存一定是連續的。
2)分配的空間,一定是空閒的(之前沒有變量申請過的)
3)分配空間時,位置是不確定的。
五、運算符號
+ - * / % == != | || & &&
+ - *
/ -> 結果看兩邊符號
5/3 = 1
5.0/3 = 1.666667
5/3.0 = 1.666667
5.0/3.0 = 1.666667
% -> 取餘,兩邊不能出現小數點
5.0%3
5%3.0
5.0%3.0
5%3 -> 正確
== 判斷等於
!= 判斷不等於
| -> 位或運算
|| -> 邏輯或運算
& -> 位與運算
&& -> 邏輯與運算
5&6 = 0101 & 0110 = 4
5&&6 = 1 (非0即真)
5|6 = 0101 | 0110 = 7
5||0 = 1 (非0即真)
六、在程序如何定義個變量?定義變量在內存中代表什麼意思?
1、 變量的定義?
格式:數據類型 + 變量
數據類型 -> 決定在內存中佔用字節的大小。
變量名字 -> 決定如何訪問到這片內存的空間。
2、初始化變量的值?
1)定義的同時初始化
int a = 100;
2)先定義,後初始化。
int a; -> 局部變量a = 隨機值
-> 全局變量a = 0
a = 100;
注意:
“左值=右值” -> 把右值(變量/常量)賦值給左值(只能是變量)。
“左值==右值” -> 判斷左值是否等於右值?
3、 變量的生命週期以及作用域?
生命週期: 這個變量從什麼時候出現在內存中到什麼時候在內存中釋放。
作用域:變量能夠作用的地方。
局部變量 Vs 全局變量
1)在函數體內部定義的變量,就是局部變量,在函數體外部定義的變量,就是全局變量。
2)兩者在內存中佔用的空間位置?
局部變量都在存在於棧區,全局變量都是存在於數據段(已初始化->data段,未初始化->bss段)
3)變量不初始化,則局部爲隨機值,全局爲0。
4)局部變量作用域是函數內部,全局變量作用域整個程序。
5)局部變量在棧區申請空間,在定義該變量的函數結束時,這個局部變量的空間就會釋放。
全局變量在數據段申請空間,程序結束時,全局變量的空間纔會被釋放。
4、形式參數屬於局部變量還是全局變量?
局部變量,在棧區申請空間。
5、不同函數中能不能定義相同名字變量。
可以,因爲它們在棧區佔用不同的空間。
6、 全局變量的作用域?
只能往下,不能往上。
練習1: 以下程序在內存空間中是如何變化的?結果是多少?
#include <stdio.h>
int fun2(int c)
{
c = 20;
return 0;
}
int fun1(int b)
{
int c = 10;
fun2(c);
return 0;
}
int main(int argc,char *argv[])
{
int a,b = 5;
fun1(b);
printf("b = %d\n",b);
return 0;
}
七、ASCII碼
1、 在Ubuntu中可以查看ASCII碼錶
man ASCII(按’q’退出)
2、 什麼是ASCII碼?
其實ASCII表就是字符、八進制、十進制、十六進制轉換。
八進制 十進制 十六進制 字符
Oct Dec Hex Char
060 48 30 0
101 65 41 A
141 97 61 a
int a = 65;
%d -> 以十進制形式輸出內容 printf("%d\n",a); //65
%o -> 以八進制形式輸出內容 printf("%o\n",a); //101
%x -> 以十六進制形式輸出內容 printf("%x\n",a); //41
%c -> 以字符形式輸入內容 printf("%c\n",a); //'A'
%f -> 輸出浮點型數據,保留小數點後6位。
%s -> 輸出字符串
%p -> 輸出指針地址
結論: 其實字符類型也是整型數據。
八、語句與表達式?
表達式 = 語句;
a = 5 把5賦值給a -> 賦值語句
a = 5; 表達式
1、 逗號表達式?
計算規則:從左到右依次計算,結果以最後一個表達式爲準。
例子:
d = (a=a+b,c=b+c,a+c);
a=1+2=3
c=2+3=5
d=a+c=3+5=8
例子:
int a=1,b=2,c=3,d;
d = (a+b,b-=c,c+=c); -> 6
d = (c=a+b,b-=c,c+=b); -> 2
2、自增自減
a++ 先運算後,再自加1.
++a 先自加1,再運算.
a-- 先運算後,再自減1.
–a 先自減1,再運算.
例子:
int a = 10;
printf("%d\n",a++);//10 a=11
printf("%d\n",++a);//12 a=12
printf("%d\n",a--);//12 a=11
printf("%d\n",--a);//10 a=10
3、 += -= = /= %=
a+=5 等價於 a=a+5
4、 三目運算
形式:
表達式?結果1:結果2;
如果表達式爲真,則結果就是結果1。
如果表達式爲假,則結果就是結果2。
例子1:
int a = 3,b = 2,c;
c = (a >= b ? a : b); -> 求a與b之間的最大值。
例子2:
A ? i : j; 以下哪個表達式與之等價? 假 -> 0 真 -> 1
A==0 ? i:j;
A!=0 ? i:j; -> OK
A==1 ? i:j;
A!=1 ? i:j;
九、IO函數?
頭文件:#include <stdio.h>
printf() -> 輸出帶格式內容到屏幕上
scanf() -> 從鍵盤中輸入帶格式內容
int a;
a -> 代表這整片內存空間
&a -> 代表這整片內存空間的地址
例子:
#include <stdio.h>
int main(int argc,char *argv[])
{
int a;
scanf("%d",&a);
printf("%d\n",a);
return 0;
}
十、linux C語言控制流
控制流有兩大塊,分別是分支、循環。
分支: if else switch
循環: for while do-while
1、 while循環
1)基本框架
while(判定條件)
{
-> 複合語句:循環體
表達式;
}
-> 循環體之外
2)處理流程
判定條件 -> 真 -> 執行循環體內容 -> 判定條件 -> 假 -> 跳出循環
3)死循環
死循環就是判定條件恆爲真,無法通過判斷判定條件爲假來跳出循環。
while(1)
{
xxxx; -> 一直執行!
}
4)省略{}寫法
while(1)
xxxx; -> 緊跟while(1)語句的表達式就是循環體的內容
yyyy; -> 不屬於循環體的內容
等價於
while(1)
{
xxxx;
}
yyyy;
----------
while(1); -> 有分號,有循環,但是循環體沒有內容。
xxxx;
yyyy;
等價於
while(1)
{
}
xxxx;
yyyy;
結論: 當循環體表達式大於2個時,複合語句{}不能省略!
當循環體表達式只有1個,則{}可以省略!
練習2: 使用while循環實現將所有的參數都打印出來!
#include <stdio.h>
int main(int argc,char *argv[]) // ./xxx aaa bbb argc=3 argv[0]="./xxx" argv[1]="aaa"
{
int i = 0; //初始化語句
while(i < argc) //0~2 判定條件
{
printf("argv[%d] = %s\n",i,argv[i]);
i++; //條件修改
}
return 0;
}
練習3: 從鍵盤中獲取整型數,存放到x中,並計算出1+2+3+4+…+x
#include <stdio.h>
int main(int argc,char *argv[])
{
int x,i=1,sum=0;
scanf("%d",&x);
while(i<=x)
{
sum += i;
i++;
}
printf("sum = %d\n",sum);
return 0;
}
2、for循環
1)基本框架
for(初始化語句;判定條件;變量操作) -> 裏面三個語句不一定要填,可以空白!
{ -> 循環體
}
循環體之外。
2)處理流程
1
for(2;3;4)
{
5;
}
6;
1->2->3->真->5->4->3->假->6 (初始化語句,只會執行一次)
3)死循環
for(;;); 等價於 while(1);
等價於 等價於
for(;;) 等價於 while(1)
{ {
} }
4)省略{}寫法
for(;;)
xxxx; -> 緊跟語句纔是循環體的內容
yyyy; -> 不屬於循環體的內容
等價於
for(;;)
{
xxxx;
}
yyyy;
練習4: 從鍵盤中獲取整型數,存放到x中,並計算出1+2+3+4+…+x,要求使用for循環。
#include <stdio.h>
int main(int argc,char *argv[])
{
int x,i,sum=0;
scanf("%d",&x);
for(i=1;i<=x;i++)
{
sum += i;
}
printf("sum = %d\n",sum);
return 0;
}
3、 do-while循環
1)基本框架
do{ -> 循環體
}while(判定條件); -> 注意: 沒有分號是語法出錯!
2)處理流程
先執行一遍循環體 -> 判定條件 -> 真 -> 執行循環體 -> 判斷條件 -> 假 -> 跳出循環
3)死循環
do{
}while(1);
4)省略{}寫法
例子1:
do
xxxx;
while(1);
等價於
do{
xxxx;
}while(1);
例子2:
do
xxx;
yyy; -> 編譯出錯: error: expected ‘while’ before ‘printf’
while(1);
結論: 當表達式只有一條時,則複合語句可以省略,如果大於1條表達式,則必須添加,否則編譯出錯。
while(1)
xxxx;
yyyy;
等價於
do
xxxx;
while(1);
yyyy;
練習5:使用do-while循環實現將所有的參數都打印出來!
int i = 0;
do{
printf("argv[%d] = %s\n",i,argv[i]);
i++;
}while(i<argc);
練習6:從鍵盤中獲取整型數,存放到x中,並計算出1+2+3+4+…+x,要求使用do-while循環。
int x,i=1,sum=0;
scanf("%d",&x);
do{
sum+=i;
i++;
}while(i<=x);
printf("sum = %d\n",sum);
4、if分支
用法一: if單獨使用
1)基本框架
if(判定條件) -> 如果判定條件爲真,則執行復合語句,否則不執行復合語句!
{ //複合語句
}
2)省略{}寫法
if(判定條件)
xxxx; -> 如果條件爲真,則執行xxxx;如果爲假,就不執行xxxx;
yyyy; -> yyyy;不是if語句的判定範圍,所以無論條件真假,這個yyyy都會被執行。
等價於
if(判定條件)
{
xxxx;
}
yyyy;
-----
if(判定條件);
xxxx;
yyyy;
等價於
if(判定條件)
{
}
xxxx;
yyyy;
用法二: if與else配合使用
1)基本框架
if(判定條件) -> 如果判定條件爲真,就執行復合語句1
{ //複合語句1
}
else -> 不滿足判定條件的情況,就會執行復合語句2
{ //複合語句2
}
2)省略{}寫法
if(判定條件)
xxxx;
else
yyyy; --> 可以!
若:-----
if(判定條件) xxxx else yyyy; -> 編譯出錯: expected ‘;’ before ‘else’
if(判定條件)
xxxx;
else
yyyy;
else
zzzz; --> 編譯出錯: error: ‘else’ without a previous ‘if
改:------
if(判定條件1)
xxxx;
if(判定條件2)
yyyy;
else
zzzz; -> 編譯通過,else受到最近的if語句的影響!
用法三: 多個情況判斷 else if
1)基本框架
if(判定條件1) -> 如果判定條件1是真,則執行復合語句1
{ //複合語句1
}
else if(判定條件2) -> 如果判定條件1爲假,則進行判斷判定條件2,如果爲真,則執行復合語句2
{ 複合語句2
}
else -> 不滿足以上所有的判定條件,則執行復合語句3。
{ 複合語句3
}
練習7: 分別使用以上三種辦法,完成該題。
從鍵盤中獲取一個數字
0~100 -> 打印small
101~200 -> 打印middle
201~300 -> 打印large
完成:<練習>
#include <stdio.h>
int main(int argc,char *argv[])
{
int a=0;
printf("Please enter the number:\n");
scanf("%d",&a);//輸入數字
if(a >= 0 && a <= 100)//0~100 -> 打印small
printf("small\n");
if(a >= 101 && a <= 200)//101~200 -> 打印middle
printf("middle\n");
if(a >= 201 && a <= 300)//201~300 -> 打印large
printf("large\n");
if(a < 0 || a > 300)//不在上訴範圍輸出error
printf("error\n");
return 0;
}
#include <stdio.h>
int main(int argc,char *argv[])
{
int a=0;
printf("Please enter the number:\n");
scanf("%d",&a);//輸入數字
if(a >= 0 && a <= 100)//0~100 -> 打印small
printf("small\n");
else
{
if(a >= 101 && a <= 200)//101~200 -> 打印middle
printf("middle\n");
else
{
if(a >= 201 && a <= 300)//201~300 -> 打印large
printf("large\n");
else//不在上訴範圍輸出error
printf("error\n");
}
}
return 0;
}
#include <stdio.h>
int main(int argc,char *argv[])
{
int a=0;
printf("Please enter the number:\n");
scanf("%d",&a);//輸入數字
if(a >= 0 && a <= 100)//0~100 -> 打印small
printf("small\n");
else if(a >= 101 && a <= 200)//101~200 -> 打印middle
printf("middle\n");
else if(a >= 201 && a <= 300)//201~300 -> 打印large
printf("large\n");
else //不在上訴範圍輸出error
printf("error\n");
return 0;
}
5、switch語句
**1)對多種情況判斷,特別else if使用比較麻煩!
2) 基本框架
switch(需要判定的值) -> 值類型限制:整型、字符型、枚舉類型
{
case x: -> 如果需要判定的值與x相等的,那麼執行xxxx;這個表示式。
xxxx;
break;
case y: -> 如果需要判定的值與y相等的,那麼執行yyyy;這個表示式。
yyyy;
break;
default: -> 如果判定的值與上面的情況都不符合,則執行kkkk;
kkkk;
break;
}
zzzz; -> 執行break語句後,就會執行zzzz;
例題:輸入1個數字,1->one 10->ten 都不是->error
#include <stdio.h>
int main(int argc,char *argv[])
{
int x;
scanf("%d",&x);
switch(x)
{
case 1:
printf("one!\n");
break;
case 10:
printf("ten!\n");
break;
default:
printf("error!\n");
break;
}
return 0;
}
例題:使用switch語句完成,從鍵盤中獲取一個數字
0~100 -> 打印small
101~200 -> 打印middle
201~300 -> 打印large
#include <stdio.h>
int main(int argc,char *argv[])
{
int x;
scanf("%d",&x);
switch(x)
{
case 0 ... 100:
printf("small!\n");
break;
case 101 ... 200:
printf("middle!\n");
break;
case 201 ... 300:
printf("large!\n");
break;
default:
printf("error!\n");
break;
}
return 0;
}
3) switch結論
1)判定的值必須是整型。
2)每一個case語句後面必須添加break語句,除非有意執行後面語句。
3)記得一定要寫default,即使default永遠都不會執行。
4)break語句跳出的是swtich語句。
5)進行範圍判斷時,“…”兩邊必須有空格,包括兩邊的值 0 … 100 x>=0 && x<=100
6、break語句/continue語句
影響控制流的兩個語句
1、 break語句
1)作用對象: for循環,while循環,do-while循環,switch分支
2)作用:跳出循環/跳出switch語句
作用對象決定作用!
3)基本框架
當break語句作用循環時,立即跳出循環,一般與if語句連用。
while(1)
{
xxxx;
if(滿足跳出循環的條件)
break; -> break語句跳出的是while循環,不是if語句。 -> 繼續執行xxx; 而不是yyy;
yyy;
}
xxx;
當break語句作用switch時,立即跳出switch。
switch(需要判定的值) -> 值類型限制:整型、字符型、枚舉類型
{
case x: -> 如果需要判定的值與x相等的,那麼執行xxxx;這個表示式。
xxxx;
break;
case y: -> 如果需要判定的值與y相等的,那麼執行yyyy;這個表示式。
yyyy;
break;
default: -> 如果判定的值與上面的情況都不符合,則執行kkkk;
kkkk;
break;
}
zzzz; -> 執行break語句後,就會執行zzzz;
4)幾個特殊的例子
例子1:
while()
{
switch()
{
break;
xxx;
}
yyy; -> 跳到這裏。
}
zzz;
例子2:
while()
{
while()
{
while()
{
break;
}
xxxx; -> 跳到這裏!
}
yyyy;
}
zzzz;
練習1: 在全校1000名學生中徵集捐款,當總數到達10萬塊就結束捐款,統計此時捐款的人數,以及平均每人捐款的金額。
#include <stdio.h>
int main(int argc,char *argv[])
{
float money,total=0,aver; //個人捐款數量,總捐款數,平均。
int i; //人數
for(i=1;i<=1000;i++)
{
scanf("%f",&money);
total += money;
if(total >= 100000)
break;
}
aver=total/i;
printf("i = %d\n",i);
printf("aver = %f\n",aver);
return 0;
}
2、 continue
1)作用對象: for循環、while循環、do-while循環。
2)作用: 立即結束當次循環,馬上繼續開始執行下一次循環。
3)基本框架:
while(1)
{
xxxx;
if(判定條件)
continue;
yyyy;
}
xxxx; -> 判定條件 -> 假 -> yyyy; -> xxxx; -> 判定條件 -> 真 -> continue; -> xxxx;
練習2: 要求輸出100~200之間不能被3整除的數,要求使用continue語句完成。
#include <stdio.h>
int main(int argc,char *argv[])
{
int num;
for(num=100;num<=200;num++)
{
if(num%3==0)
continue;
printf("%d\n",num);
}
return 0;
}