C語言學習筆記5

繼續上次學習的東西往下看,上次看到了C語言程序設計初步,下面我來往下學習其他關於c語言編程軟件書籍上講的初步知識內容。

格式字符串

格式字符串的一般形式爲: %[*][輸入數據寬度][長度]類型 其中有方括號[]的項爲任選項。各項的意義如下:
1.類型
表示輸入數據的類型,其格式符和意義下表所示。
格式    字符意義
d     輸入十進制整數
o     輸入八進制整數
x     輸入十六進制整數
u     輸入無符號十進制整數
f或e    輸入實型數(用小數形式或指數形式)
c     輸入單個字符
s     輸入字符串
2.“*”符
用以表示該輸入項讀入後不賦予相應的變量,即跳過該輸入值。 如 scanf("%d %*d %d",&a,&b);當輸入爲:1 2 3 時,把1賦予a,2被跳過,3賦予b。
3.寬度
用十進制整數指定輸入的寬度(即字符數)。例如: scanf("%5d",&a);
輸入:
12345678
只把12345賦予變量a,其餘部分被截去。又如: scanf("%4d%4d",&a,&b);
輸入:
12345678將把1234賦予a,而把5678賦予b。
4.長度
長度格式符爲l和h,l表示輸入長整型數據(如%ld) 和雙精度浮點數(如%lf)。h表示輸入短整型數據。
使用scanf函數還必須注意以下幾點:
a. scanf函數中沒有精度控制,如: scanf("%5.2f",&a); 是非法的。不能企圖用此語句輸入小數爲2位的實數。
b. scanf中要求給出變量地址,如給出變量名則會出錯。如 scanf("%d",a);是非法的,應改爲scnaf("%d",&a);纔是合法的。
c. 在輸入多個數值數據時,若格式控制串中沒有非格式字符作輸入數據之間的間隔則可用空格,TAB或回車作間隔。C編譯在碰到空格,TAB,回車或非法數據(如對“%d”輸入“12A”時,A即爲非法數據)時即認爲該數據結束。
d. 在輸入字符數據時,若格式控制串中無非格式字符,則認爲所有輸入的字符均爲有效字符。例如:
scanf("%c%c%c",&a,&b,&c);
輸入爲:
d e f
則把'd'賦予a, 'f'賦予b,'e'賦予c。只有當輸入爲:
def
時,才能把'd'賦於a,'e'賦予b,'f'賦予c。 如果在格式控制中加入空格作爲間隔,如 scanf ("%c %c %c",&a,&b,&c);則輸入時各數據之間可加空格。
void main(){
char a,b;
printf("input character a,b\n");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);
}
scanf("'C14F14%c%c",&a,&b);
printf("%c%c\n",a,b); 由於scanf函數"%c%c"中沒有空格,輸入M N,結果輸出只有M。
而輸入改爲MN時則可輸出MN兩字符,見下面的輸入運行情況: input character a,b
MN
MN
void main(){
char a,b;
printf("input character a,b\n");
scanf("%c %c",&a,&b);
printf("\n%c%c\n",a,b);
}
scanf("%c %c",&a,&b); 本例表示scanf格式控制串"%c %c"之間有空格時, 輸入的數據之間可以有空格間隔。e. 如果格式控制串中有非格式字符則輸入時也要輸入該非格式字符。
例如:
scanf("%d,%d,%d",&a,&b,&c); 其中用非格式符“ , ”作間隔符,故輸入時應爲: 5,6,7
又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c);
則輸入應爲
a=5,b=6,c=7g. 如輸入的數據與輸出的類型不一致時,雖然編譯能夠通過,但結果將不正確。
void main(){
int a;
printf("input a number\n");
scanf("%d",&a);
printf("%ld",a);
}
由於輸入數據類型爲整型, 而輸出語句的格式串中說明爲長整型,因此輸出結果和輸入數據不符。如改動程序如下:
void main(){
long a;
printf("input a long integer\n");
scanf("%ld",&a);
printf("%ld",a);
}
運行結果爲:
input a long integer
1234567890
1234567890 當輸入數據改爲長整型後,輸入輸出數據相等。

鍵盤輸入函數
getchar函數getchar函數的功能是從鍵盤上輸入一個字符。其一般形式爲: getchar(); 通常把輸入的字符賦予一個字符變量,構成賦值語句,如:
char c;
c=getchar();
#include<stdio.h>
void main(){
char c;
printf("input a character\n");
c=getchar();
putchar(c);
}
使用getchar函數還應注意幾個問題:
1.getchar函數只能接受單個字符,輸入數字也按字符處理。輸入多於一個字符時,只接收第一個字符。
2.使用本函數前必須包含文件“stdio.h”。
3.在TC屏幕下運行含本函數程序時,將退出TC 屏幕進入用戶屏幕等待用戶輸入。輸入完畢再返回TC屏幕。
void main(){
char a,b,c;
printf("input character a,b,c\n");
scanf("%c %c %c",&a,&b,&c);
printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);
}
輸入三個小寫字母
輸出其ASCII碼和對應的大寫字母。
void main(){
int a;
long b;
float f;
double d;
char c;
printf("%d,%d,%d,%d,%d",sizeof(a),sizeof(b),sizeof(f)
,sizeof(d),sizeof(c));
}
輸出各種數據類型的字節長度。

分支結構程序

關係運算符和表達式

在程序中經常需要比較兩個量的大小關係, 以決定程序下一步的工作。比較兩個量的運算符稱爲關係運算符。 在C語言中有以下關係運算符:
< 小於
<= 小於或等於
> 大於
>= 大於或等於
== 等於
!= 不等於
關係運算符都是雙目運算符,其結合性均爲左結合。 關係運算符的優先級低於算術運算符,高於賦值運算符。 在六個關係運算符中,<,<=,>,>=的優先級相同,高於==和!=,==和!=的優先級相同。
關係表達式
關係表達式的一般形式爲: 表達式 關係運算符 表達式 例如:a+b>c-d,x>3/2,'a'+1<c,-i-5*j==k+1;都是合法的關係表達式。由於表達式也可以又是關係表達式。 因此也允許出現嵌套的情況,例如:a>(b>c),a!=(c==d)等。關係表達式的值是“真”和“假”,用“1”和“0”表示。
如: 5>0的值爲“真”,即爲1。(a=3)>(b=5)由於3>5不成立,故其值爲假,即爲0。
void main(){
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1);
printf("%d,%d\n",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
}
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1);
printf("%d,%d\n",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
在本例中求出了各種關係運算符的值。 字符變量是以它對應的ASCII碼參與運算的。對於含多個關係運算符的表達式,如k==j==i+5,根據運算符的左結合性,先計算k==j,該式不成立,其值爲0,再計算0==i+5,也不成立,故表達式值爲0。

邏輯運算符和表達式

邏輯運算符C語言中提供了三種邏輯運算符 && 與運算 || 或運算 ! 非運算 與運算符&&和或運算符||均爲雙目運算符。具有左結合性。 非
運算符!爲單目運算符,具有右結合性。邏輯運算符和其它運算符優先級的關係可表示如下:
按照運算符的優先順序可以得出:
a>b && c>d等價於(a>b) && (c>d)
!b==c||d<a等價於((!b)==c)||(d<a)
a+b>c && x+y<b等價於((a+b)>c) && ((x+y)<b)
邏輯運算的值
邏輯運算的值也爲“真”和“假”兩種,用“1”和“0 ”來表示。其求值規則如下:
1.與運算&&參與運算的兩個量都爲真時,結果才爲真,否則爲假。例如,5>0 && 4>2,由於5>0爲真,4>2也爲真,相與的結果也爲真。
2.或運算||參與運算的兩個量只要有一個爲真,結果就爲真。 兩個量都爲假時,結果爲假。例如:5>0||5>8,由於5>0爲真,相或的結果也就爲真
3.非運算!參與運算量爲真時,結果爲假;參與運算量爲假時,結果爲真。
例如:!(5>0)的結果爲假。
雖然C編譯在給出邏輯運算值時,以“1”代表“真”,“0 ”代表“假”。 但反過來在判斷一個量是爲“真”還是爲“假”時,以“0”代表“假”,以非“0”的數值作爲“真”。例如:由於5和3均爲非“0”因此5&&3的值爲“真”,即爲1。
又如:5||0的值爲“真”,即爲1。
邏輯表達式邏輯表達式的一般形式爲: 表達式 邏輯運算符 表達式 其中的表達式可以又是邏輯表達式,從而組成了嵌套的情形。例如:(a&&b)&&c根據邏輯運算符的左結合性,上式也可寫爲: a&&b&&c 邏輯表達式的值是式中各種邏輯運算的最後值,以“1”和“0”分別代表“真”和“假”。
void main(){
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
}
本例中!x和!y分別爲0,!x*!y也爲0,故其輸出值爲0。由於x爲非0,故!!!x的邏輯值爲0。對x|| i && j-3式,先計算j-3的值爲非0,再求i && j-3的邏輯值爲1,故x||i&&j-3的邏輯值爲 1。對i<j&&x<y式,由於i<j的值爲1,而x<y爲0故表達式的值爲1,0相與,最後爲0,對i==5&&c&&(j=8)式,由於i==5爲假,即值爲0, 該表達式由兩個與運算組成,所以整個表達式的值爲0。對於式x+ y||i+j+k 由於x+y的值爲非0,故整個或表達式的值爲1。

關於邏輯的問題有一點不太明白,我看我需要逛一下C語言學習網站,找找相關內容多做一下這方面的分析,希望能早點看明白今天學習的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章