《C語言學習筆記》數據的輸入和輸出

數據的輸入和輸出

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;
}
相關文章
相關標籤/搜索