printf
函數printf
函數稱爲格式輸出函數,其關鍵字最末一個字母f
即爲"格式"(format)
之意。其功能是按用戶指定的格式,把指定的數據顯示到顯示器屏幕上。編程
printf
函數調用的通常格式。函數
printf
函數是一個標準庫函數,它的函數原型在頭文件"stdio.h"
中。printf
函數調用的通常形式爲:printf(「格式控制字符串」, 輸出表列)
。其中格式控制字符串用於指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%後面跟有各類格式字符,以說明輸出數據的類型、形式、長度、小數位數等。
#include <stdio.h> int main(void) { int a=88,b=89; printf("%d %d\n",a,b); printf("%d,%d\n",a,b); printf("%c,%c\n",a,b); printf("a=%d,b=%d",a,b); return 0; } /* * 經過上面的代碼能夠看出printf的格式,因爲格式控制串不一樣,輸出的結果也不相同。 * 第1行的輸出語句格式控制串中,兩格式串%d之間加了一個非格式字符(空格),所以輸出的a、b值之間有一個空格。 * 第2行的printf語句格式控制串中加入的是非格式字符(逗號),所以輸出的a、b值之間加了一個逗號。 * 第3行的格式串要求按字符型輸出a、b值。 * 第4行中爲了提示輸出結果又增長了非格式字符串。 */
printf
函數格式中的格式字符串。3d
格式字符串的通常形式爲: [標誌][輸出最小寬度][.精度][長度]類型。
code
/* 當轉換值的字符數(含前綴)小於最小寬度說明時,則使用填充符(空格)將數值填充到最小寬度. 當轉換值的字符數(含前綴)大於最小寬度說明時,最小寬度說明失效。 */ #include<stdio.h> int main(void) { int x=45,y=-45678; printf("%9d,%3d",x,y);// return 0; }
"."
開頭,後跟十進制整數。本項的意義是: 1. 若是輸出數字,則表示小數的位數;例如.4表示保留4位有效數字 2. 若是輸出的是字符,則表示輸出字符的個數;若實際位數大於所定義的精度數,則截去超過的部分。
h、l
兩種,h
表示按短整型量輸出,l
表示按長整型量輸出。#include<stdio.h> int main(void) { int x=34,y=-34; printf("x=%8d,y=%8d\n",x,y);//代表最小寬度爲8,用空格進行填充 printf("x=%08d,y=%08d\n",x,y);//用0而不是用空格進行填充 printf("x=% 08d,y=% 08d\n",x,y);//空格老是產生一個-號或者是空格 printf("x=%-8d,y=%-8d\n",x,y);//-號表示的是左對齊 printf("x=%- 8d,y=%- 8d\n",x,y); printf("x=%-+8d,y=%-+8d\n",x,y);//+老是產生一個+或-號 printf("x=%8.4d,y=%8.4d\n",x,y);//精度.4表示是四位有效數字 printf("x=%-8.4d,y=%-8.4d\n",x,y); return 0; } /* 輸出結果: x= 34,y= -34 x=00000034,y=-0000034 x= 0000034,y=-0000034 x=34 ,y=-34 x= 34 ,y=-34 x=+34 ,y=-34 x= 0034,y= -0034 x=0034 ,y=-0034 */
格式字符 | 意義 |
---|---|
d | 以十進制形式輸出帶符號整數(正數不輸出符號) |
o | 以八進制形式輸出無符號整數(不輸出前綴0) |
x,X | 以十六進制形式輸出無符號整數(不輸出前綴0x) |
u | 以十進制形式輸出無符號整數 |
f | 以小數形式輸出單、雙精度實數 |
e,E | 以指數形式輸出單、雙精度實數 |
g,G | 以%f或%e中較短的輸出寬度輸出單、雙精度實數 |
c | 輸出單個字符 |
s | 輸出字符串 |
#include<stdio.h> int main(void) { int x=31; float f=0.1; char a[10]="abcde"; printf("%7.3d\n",x); printf("%7.3x\n",x);//進行無符號十六進制的轉換 printf("%7.3o\n",x);//進行無符號八進制的轉換 printf("%7.1E\n",f); printf("%7.3f\n",f); printf("%7.3s\n",a); return 0; } /* 輸出結果: 031 01f 037 1.0E-001 0.100 abc */
綜合實例orm
#include <stdio.h> int main(void) { int a=15; long float b=123.1234567; double c=12345678.1234567; char d='p'; printf("a=%d\n", a); printf("a(%%d)=%d, a(%%5d)=%5d, a(%%o)=%o, a(%%x)=%x\n\n",a,a,a,a);// %% 能夠輸出 % printf("a=%f\n", b); printf("b(%%f)=%f, b(%%lf)=%lf, b(%%5.4lf)=%5.4lf, b(%%e)=%e\n\n",b,b,b,b); printf("c=%f\n", c); printf("c(%%lf)=%lf, c(%%f)=%f, c(%%8.4lf)=%8.4lf\n\n",c,c,c); printf("d=%c\n", d); printf("d(%%c)=%c, d(%%8c)=%8c\n",d,d); return 0; } /* 輸出結果: a=15 a(%d)=15, a(%5d)= 15, a(%o)=17, a(%x)=f a=123.123457 b(%f)=123.123457, b(%lf)=123.123457, b(%5.4lf)=123.1235, b(%e)=1.231235e+002 c=12345678.123457 c(%lf)=12345678.123457, c(%f)=12345678.123457, c(%8.4lf)=12345678.1235 d=p d(%c)=p, d(%8c)= p */
scanf
函數scanf
函數稱爲格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變量之中。scanf
函數是一個標準庫函數,它的函數原型在頭文件"stdio.h"
中。scanf
函數的通常形式爲:scanf(「格式控制字符串」, 地址表列)
scanf
函數格式控制字符串內存
格式字符串的通常形式爲: %[*][輸入數據寬度][長度]類型
字符串
格式 | 字符意義 |
---|---|
d | 輸入十進制整數 |
o | 輸入八進制整數 |
x | 輸入十六進制整數 |
u | 輸入無符號十進制整數 |
f或e | 輸入實型數(用小數形式或指數形式) |
c | 輸入單個字符 |
s | 輸入字符串 |
*
符:用以表示該輸入項,讀入後不賦予相應的變量,即跳過該輸入值。#include<stdio.h> int main(void) { int a,b; scanf("%d %*d %d",&a,&b);//當輸入爲:1 2 3時,把1賦予a,2被跳過,3賦予b。 printf("%d %d",a,b); return 0; } /* 執行結果: 2 4 5 2 5 */
#include<stdio.h> int main(void) { int a,b; scanf("%5d",&a);//輸入12345678只把12345賦予變量a,其他部分被截去。 printf("%d",a); scanf("%4d%4d",&a,&b);//輸入12345678將把1234賦予a,而把5678賦予b。 printf("%d %d",a,b); return 0; }
h
表示按短整型量輸出,l
表示按長整型量輸出。地址列表input
&a、&b
分別表示變量a
和變量b
的地址。這個地址就是編譯系統在內存中給a、b變量分配的地址。scanf
函數在本質上是給變量賦值,但要求寫變量的地址,如&a
。&
是一個取地址運算符,&a
是一個表達式,其功能是求變量的地址。注意事項原型
scanf
函數中沒有精度控制,如:scanf("%5.2f",&a);是非法的
。不能企圖用此語句輸入小數爲2位的實數。scanf
中要求給出變量地址,如給出變量名則會出錯。如 scanf("%d",a);是非法的
,應改成scnaf("%d",&a);纔是合法的
。空格,TAB或回車
做間隔。C編譯在碰到空格,TAB,回車或非法數據(如對"%d"輸入"12A"時,A即爲非法數據)時即認爲該數據結束。
#include <stdio.h> int main(void) { char a,b; printf("input character a,b\n"); scanf("%c%c",&a,&b); printf("%c%c\n",a,b); return 0; } /* 因爲scanf函數"%c%c"中沒有空格,輸入M N,結果輸出只有M。而輸入改成MN時則可輸出MN兩字符。 */
二進制轉換爲十進制io
#include<stdio.h> #include<math.h> int main(void) { int x,a,result=0,i=0; printf("請輸入僅有4位的二進制數:"); scanf("%d",&x); while(x!=0) { a = x%10; result += a*pow(2.0,i); i++; x/=10; } printf("對應的十進制數是:%d\n",result); return 0; }
字符轉換:大小寫轉換
#include<stdio.h> int main(void) { char a,b,c; printf("請用戶輸入三個小寫字母,輸入時字母之間使用空格隔開:"); scanf("%c %c %c",&a,&b,&c); printf("%c %c %c相對應的ASCII碼值爲:%d %d %d\n",a,b,c,a,b,c); printf("%c %c %c相對應大寫字母爲:%c %c %c\n",a,b,c,a-32,b-32,c-32); return 0; }
求三個數裏面的最大值
int max(int x,int y,int z){ if(x>=y && x>=z) return x; else if(y>=x && y>=z) return y; else return z; }