C語言學習第二課:資料處理與互動式輸入
阿新 • • 發佈:2019-02-04
先上一張知識結構圖
一:型別轉換
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);