程序設計入門-C語言基礎知識-翁愷-第一週:簡單的計算程序-詳細筆記(一)

第一週:簡單的計算程序

1.1 第一個程序 Hello World!

集成開發環境(IDE)windows

下載Dev C++的地方是:
http://sourceforge.net/projects/orwelldevcpp/?source=directory
提示:Dev C++只能在windows操做系統下安裝框架

因爲作c語言的編譯軟件的廠家不少,不一樣的廠家又有不一樣的方言。
所以咱們統一用Dev C++軟件(集成開發環境),在上面的地址下載默認安裝便可。編輯器

提示:Dev C+= 是一款集成開發環境的軟件,包括編輯器、編譯器、調試器和圖形用戶界面等功能。函數

程序框架測試

#include <stdio.h>

int main(){
     //你的代碼
     return 0;   
}

輸出操作系統

  • printf("Hello World!\n");
  • ""裏面的內容叫作字符串,printf會把其中的內容原封不動的輸出
  • \n表示須要在輸出的結果後面換一行

第一個Hello World程序.net

#include <stdio.h>
int main(){
    printf("Hello World!\n");
    return 0;
}

執行結果:設計

Hello World!

程序語句及符號3d

  • c語言每條語句以英文輸入狀態下的分號結束
  • 大括號、小括號等其餘的符號也是須要在英文狀態下輸入,換句話說只有雙引號裏能夠輸入中文或中文狀態下的各類符號。
  • 分號和語句間能夠隔空格字符或者換行等空白字符,編譯器同樣能夠識別,可是不能缺乏分號,不然程序就會報錯。

1.2 變量

如何輸入

  • 輸入也在終端窗口中
  • 輸入是以行爲單位進行的,行的結束標誌就是按下了回車鍵。在按下回車以前程序不會讀到任何東西。

變量賦值和初始化

  • int price = 0;
  • 這一行,定義了一個變量。變量的名字是price,類型是int,初始值是0.
  • 變量是一個保存數據的地方,當咱們須要在程序裏保存數據時,就須要一個變量來保存它。
  • price = 0 是一個式子,這個的"="是一個賦值運算符,表示將"="右邊的值賦給左邊的變量。

變量定義

  • 變量定義的通常形式:
    • <類型名> <變量名> ;
  • 例如
    • int price;
    • int amout;
    • int price,amount; //等價於int price; int amount;

變量的名字

  • 變量須要一個名字,變量的名字是一種「標識符」,意思是它是用來識別這個和那個的不一樣的名字。
  • 標識符有標識符構造的規則,基本的原則是:
    • 標識符只能由字母、數字和下劃線組成
    • 數字不能夠出如今第一個位置上
    • C語言的關鍵字(有的地方叫他們保留字)不能夠用做標識符

賦值運算符"="和數學的'"="'差別

  • 和數學不一樣,a=b在數學中表示關係,即a和b的值同樣
  • 而在程序設計中,a=b表示要求計算機作一個動做:將b的值賦給a
  • 關係是靜態的,而動做是動態的。
  • 在數學中,a=b和b=a是等價的,而在程序設計中,二者的意思徹底相反。

初始化

  • 定義:當賦值發生在程序定義變量的時候就是變量的初始化。(定義變量並賦值)
  • 全部變量在第一次使用以前都應該被賦值一次。
  • 在c語言中若是變量沒有作初始化,變量會隨機指向內存中的某一個值,所以建議在聲明變量時就先初始化,不然可能致使程序運行出意外的結果。

變量初始化

  • <類型名稱> <變量名稱> = <初始值> ;
    • int price = 0;
    • int amount = 100;
  • 組合變量定義的時候,也能夠在這個定義中單獨給單個變量賦初值,如:
    • int price = 0,amount = 100;

變量類型

  • C語言是一種有類型的語言,全部的變量在使用以前必須定義或聲明,全部的變量必須具備肯定的數據類型。
  • 數據類型表示在變量中能夠存放什麼樣的數據,變量中也只能存放指定類型的數據,程序運行過程當中也不能改變變量的類型。

ANSI C標準和C99標準的定義變量的區別

  • ANSI C只能在代碼開頭的地方定義變量。
  • C99在使用變量前定義變量便可。

讀取整數

  • scanf("%d",&price);
  • 要求scanf這個函數讀入下一個整數,讀到的結果賦值給變量price

常量

  • int change = 100 - price;
  • 固定不變的數,是常數。直接寫在程序裏,咱們稱做直接量(literal)
  • 更好的方式,是定義一個常量:
    • const int AMOUNT = 100; //C99
    • 常量的命名一般使用全大寫的方式命名,便於區分。
    • 常量能夠增長程序可讀性(見名知義)
    • 常量便於修改,好比咱們要修改上面的100就只須要修改初始化的地方就能夠,而寫成直接量就須要修改每個用到的地方。
  • const是一個修飾符,加在int的前面,用來給這個變量加上一個const(不變的)的屬性。這個const的數學表示這個變量的值一旦初始化,就不能再修改了。
  • 若是你試圖對常量作修改,把它放在賦值運算符的左邊,就會被編譯器發現,指出爲一個錯誤。

找零程序
假設有一個雜貨鋪,顧客有一張面額100的鈔票,要求設計一個程序給店主,輸入購買商品的總額並,而且計算出應該找零給顧客多少錢。
(假設金額都爲整數且商品總額小於100)

#include <stdio.h>

int main(int argc, char *argv[]) {
 const int AMOUNT = 100;
 int change = 0;
 int price = 0;

 printf("請輸入金額(元):");
 scanf("%d",&price);
 change = AMOUNT - price;
 printf("找您%d元。\n",change);
 return change;
}

執行結果:

請輸入金額(元):98
找您2元。

附錄:C語言常見的保留字

auto,break,case,char,const,
continue,default,do,double,
else,enum,extern,float,for,
goto,if,int,long,register,return,
short,signed,sizeof,static,
struct,switch,typedef,union,
unsigned,void,volatile,while,
inline,restrict

1.3 計算

整數之間的運算

  • 兩個整數的運算結果只能是整數
    • 例如10/3在c語言中的運行結果爲3,c語言會自動抹掉小數後的部分(.3333...)。
  • 1010.0在C中是徹底不一樣的數
  • 10.0是浮點數,10是整數

浮點數

  • 帶小數點的數值
  • 浮點這個詞的本意就是指小數點是浮動的(小數點在數字中出現的位置是可變的),是計算機內部表達非整數(包含分數和無理數)的一種方式。與浮點對應的計算機內部表達非整數的方式還有一種稱做定點數。
  • 當浮點數和整數放到一塊兒運算時,C會先將整數轉換成浮點數,而後再進行浮點數的運算

double

  • double的意思是"雙",它原本是「雙精度浮點數」的第一個單詞,人們用來表示浮點數類型。
  • 除了double,還有float(意思就是浮點!)表示單精度浮點數

整數和小數的輸入輸出

  • 整數
    • int
    • printf("%d",...);
    • scanf("%d",...);
  • 帶小數點的數
    • double
    • printf("%f",...);
    • scanf("%lf",...);

身高轉換程序
設計一個程序將英尺和英寸表達的升高轉換爲米表達,例如5英尺7英寸表示1.701800米。

#include <stdio.h>
int main(int argc, char *argv[]) {
 
 printf("請分別輸入身高的英尺和英寸,"
 "如輸入\"5 7\"表示5英尺7英寸:");
    
 double foot = 0;
 double inch = 0;
    
 scanf("%lf %lf",&foot,&inch); 
 printf("身高是%f米。\n",((foot + inch / 12) * 0.3048));
 return 0;
}

執行結果:

請分別輸入身高的英尺和英寸,如輸入"5 7"表示5英尺7英寸:5 7
身高是1.701800米。

表達式

  • 一個表達式是一系列運算符和算子的組合,用來計算一個值。
  • 運算符(operator)是指進行運算的動做,好比加法運算符"+",減法運算符"-"
  • 算子(operand)是指參與運算的值,這個值多是常數,也多是變量,還多是一個方法的返回值。
  • 例如在表達式: change = AMOUNT - price; 中,change、AMOUNT和price全都是算子,"="和"-"則是算子。

時間差計算程序

#include <stdio.h>
// 計算第一個時間段和第二個時間以前的時間差,例如3點10分和1點30分 的時間差爲1個小時40分鐘 
int main(int argc, char *argv[]) {
 int hour1, minute1;
 int hour2, minute2;
    
 printf("請輸入第一個時間,分別輸入小時和分鐘."
   "輸入\"3 10\"表示3點10分:");
 scanf("%d %d", &hour1, &minute1);
 printf("請輸入第二個時間,分別輸入小時和分鐘."
   "輸入\"1 30\"表示1點30分:");
 scanf("%d %d", &hour2, &minute2);
    
 int t1 = hour1 * 60 + minute1;
 int t2 = hour2 * 60 + minute2;
    
 int t= t1 - t2;
    
 printf("時間差是%d小時%d分。",t / 60, t % 60);
 return 0;
}

執行結果:

請輸入第一個時間,分別輸入小時和分鐘.輸入"3 10"表示3點10分:3 10
請輸入第二個時間,分別輸入小時和分鐘.輸入"1 30"表示1點30分:1 30
時間差是1小時40分。

算術符優先級

賦值運算符

  • 賦值也是運算,也有結果
  • a=6的結果是a被賦予的值,也就是6
  • a=b=6 等價於 a=(b=6) 單目自右向左計算

嵌入式賦值
int a = 6;
int b;
int c = 1 + (b = a);
不建議使用嵌入式賦值,由於嵌入式賦值有如下兩個缺點:

  • 不利於閱讀
  • 容易產生錯誤

結合關係

  • 通常自左向右
  • 單目"+""-"和賦值"="自右向左

1.4 編程做業及課後討論

題目內容:
程序每次讀入一個正三位數,而後輸出逆序的數字。注意,當輸入的數字含有結尾的 0 時,
輸出不該帶有前導的 0。好比輸入 700,輸出應該是 7。

輸入格式:
每一個測試是一個 3 位的正整數。

輸出格式:
輸出逆序的數。

輸入樣例:
123

輸出樣例:
321

解題思路:

  1. 首先咱們須要兩個變量A和B,A存儲用戶的輸入數字,B存儲逆序的數字。(固然也能夠只要一個變量A,逆序的數字直接輸出便可,這裏爲了便於理解聲明瞭兩個變量)
  2. 獲取用戶輸入的整數放入變量A
  3. 將變量A逆序放入變量B
  4. 輸出變量B

進一步分析,步驟三還須要作拆分。咱們知道一個三位數由個位、十位和百位組成,所以咱們須要作的就是將A的百位放到B的個位再將A的個位放到B的百位,最後獲得的就是A的倒序的一個三位數了,列如123將百位和十位互調的結果就是321

3.將變量A逆序放入變量B
3.1 取A的百位放到B的個位。
3.2 取A的十位放到B的十位。
3.3 取A的個位放到B的百位。

反轉數字

#include <stdio.h>

int main(int argc, char *argv[]) {
 int a;
 int b; 
    
 printf("請輸入一個三位的整數:");
 scanf("%d",&a);
 // 個位 + 十位 + 百位 
 b = a / 100 + a % 100 / 10 * 10 + a % 10 * 100;
 printf("%d\n",b);
 return 0;
}

執行結果:

請輸入一個三位的整數:123
321

擴展思考:到這裏咱們的程序算是符號題目要求了,但它還不是一個健壯的、好的程序。試想當用戶輸入的不是整數而是小數結果會怎麼樣呢? 又或者用戶輸入的根本就不是數字呢? 而且咱們的程序只能反轉三位數,如何反轉四位數、五位數甚至n位數呢?




討論題
標題:很差的表達式
內容:
看看如何分析這個表達式:
a=5;
b=0;
c = (b=a+2) - (a=2);
看看這個表達式的結果,會使得 c 是什麼?爲何說這是個很差的表達式?

題目分析:

單目和賦值運算符自右向左,加、減、乘、除和取餘運算符自左向右。
所以c = (b=a+2) - (a=2) 表達式的計算順序爲:

  1. (b=a+2) -> 7
  2. (a=2) -> 2
  3. (b=a+2) -(a=2) -> 5
  4. c = (b=a+2) - (a=2) -> 5
    經過計算咱們知道最後的結果是5,

爲何說嵌套賦值是不要的表達式呢?

  • 表達式不容易理解,一眼看不出這個表達式的計算順序,須要仔細的分析。
  • 因爲是嵌套表達式,a和b的值在運算的過程當中是會發生變化的,好比咱們要搞清楚b被咱們賦值的那個值最後是不是咱們但願的那個值就要格外當心,稍不留神就容易出錯。

咱們能夠試着把以上表達式拆分紅下面的表達式。

a = 5;
b = a + 2;
a = 2;
c = b - a;

這樣是否是一目瞭然了呢?

相關文章
相關標籤/搜索