1. 程式人生 > >C語言學習第二課:資料處理與互動式輸入

C語言學習第二課:資料處理與互動式輸入

先上一張知識結構圖

這裡寫圖片描述

一:型別轉換

1、隱式型別轉換(系統自動進行型別轉換)

當賦值發生時,如果兩邊資料型別不一致,C語言中會將等號右邊的資料自動轉換為等號左邊變數的資料型別
double d = 40; 
//整型資料賦給雙精度浮點型變數
//C系統將整型資料轉變為double型資料然後賦值給變數
int i = 3.14;
 //double型資料賦給int型變數
//C系統將double資料轉變為int型資料然後賦值給變數
//這個轉變過程會造成double型資料小數部分的丟失

2、顯式型別轉換(強制轉換)

強制型別轉換也叫顯式轉換
需要轉換的資料前面,新增一個括號,括號裡面填寫目標資料型別
(轉換後型別) 表示式 
    printf(”%d”,(int) 3.5); 
    printf("%d\n",(int)(3.5+2+4.5));

3、型別轉換注意點

(1)從較高精度資料型別轉換為較低精度資料型別時,一般會發生資料的丟失
 如:int a = 3.14  結果:a 為 3;
(2)低精度資料轉化為高精度資料不會發生資料的丟失
 如:double d = 3   結果:d 為 3.000000;
(3)多個不同型別精度相結合。結果為最高精度值
如:
    int a1 = 10;
    float b1 = 20;
    double c1 = 30;
    char d1 = 40;
    printf
("%f",a1+b1+c1+d1);

二、複合賦值運算子

sum = sum + 20; 
等價與
sum += 20; 
+=就是一個複合賦值運算子,含義為使用sum原來的值加上20然後再賦值給sum變數
另外還有-=、*=、/=、%= 複合賦值運算子
a *= b + 20; //等價於a = a * (b + 20); 

三、自增自減運算子

i++;
表示變數i在原有基礎上增加1
i --; 
表示變數i在原有基礎上減去1
另一個寫法:
++i,--i;

1、前(左)自增自減與後(右)自增自減區別點

(1)符號在變數左邊表示先將變數自增或自減1之後再使用其自增1或自減1後的值
(2)符號在變數右邊表示首先使用變數中已有的值,然後再對變數進行自增1或自減1

    int i=10,j=10;
    i++; printf("%d\n", i);//11
    ++i; printf("%d\n", i);//12
    j--; printf("%d\n", j);//9
    --j; printf("%d\n", j);//8
   int i=10,j=10,w,x,y,z;
    w = i++; printf("%d\n", w);//w=10,i=11
    x = ++i; printf("%d\n", x);//x=12,i=12
    y = j--; printf("%d\n", y);//y=10,j=9
    z = --j; printf("%d\n", z);//z=8, j=8;

2、括號無法改變自增自減優先順序

i = 10;
m = (i++); printf(“m = %d\n”, m);
n = (++i); printf(“n = %d\n”, n);
m = (i++) + 10; printf(“m = %d\n”, m);
n = (++i) + 10; printf(“n = %d\n", n);

結果為:
m = 10
n = 12
m = 22
n = 24 

四:scanf() 輸入函式

scanf(“控制字串”,&變數1,&變數2,…&變數n);
— 注意接收資料的變數需要使用&號,表示該變數的地址
控制字串:
%d int
%f float
%lf double
%c char

1、多個輸入情況

(1)數字輸入

一次輸入多個數字時,控制字串有無空格均可,但輸入時需要空格隔開每個數字

scanf("%f %f", &f1,&f2);
scanf("%d%d%d%d%d", &d1,&d2,&d3,&d4,&d5);  
(2)字元輸入

(1)c語言中,使用scanf()進行字元資料的輸入時,回車、Control、Escape等控制字元都被當做字元被放入緩衝區
連續使用scanf()時下一次的輸入會直接從緩衝區讀入字元型資料

(2)輸入字元資料時,控制字串和實際輸入都需要使用空格隔開每個字元

scanf("%c %c %c", &c1, &c2, &c3);

程式碼練習示例:

/**
 *  某一個星期,週一到週日氣溫分別為:30℃、32℃、29℃、34℃、31℃、27℃、31℃
 為了研究天氣情況,需要得到這個星期的平均氣溫
 */
    int t1=30,t2=32,t3=29,t4=34,t5=31,t6=27,t7=31;
    int sum = 0;
    double avg;//平均溫度
    int day = 7;
    sum += t1;
    sum += t2;
    sum += t3;
    sum += t4;
    sum += t5;
    sum += t6;
    sum += t7;
    avg = sum * 1.0 / day;
    printf("sum == %d\navg == %g\n",sum,avg);
//互動式輸入
/**
 *  輸入購買數量及單價,然後計算出總金額
 */
    int count;//數量
    double price;//單價
    double sum;//總價
    printf("請輸入商品數量\n");
    //做輸入操作
    scanf("%d",&count);
    printf("請輸入商品單價\n");
    scanf("%lf",&price);
    sum = count * price;
    printf("總價格為:%g",sum);
幻影回車符
    char firstChar;
    char secondChar;
    printf("請輸入第一個字元\n");
    //先用第二個字元,接收回車字元
    scanf("%c%c",&firstChar,&secondChar);
    printf("請輸入第二個字元\n");
    scanf("%c",&secondChar);
    printf("firstChar = %c--secondChar = %c\n",firstChar,secondChar);
    printf("firstChar = %d--secondChar = %d",firstChar,secondChar);
/**
 *  編寫一個C程式,輸入兩個點的座標(x座標以及y座標),計算並且列印兩個連線點的中點座標。假設兩個連線點座標為(x1,y2)和(x2,y2),兩個點的連線線中點座標為(x1+x2)/2和(y1+y2)/2
 */
    double x1,x2,y1,y2,x3,y3;
    printf("請輸入第一個點:\n");
    scanf("%lf%lf",&x1,&y1);
    printf("請輸入第二個點:\n");
    scanf("%lf%lf",&x2,&y2);
    x3 = (x1+x2) / 2;
    y3 = (y1+y2) / 2;
    printf("兩點的中點座標為(%g,%g)",x3,y3);