1.getchar和putchar
1.1getchar()
函數原型:
1 int getchar(void);
?getchar()函數返回用戶從鍵盤輸入的字符,使用時不帶有任何參數。
程序運行到這個命令就會暫停,等待用戶從鍵盤輸入,等同于使用cin或scanf()方法讀取一個字符。
getchar()函數原型定義在頭文件<cstdio>。
#include"cstdio"
#include"iostream"
using namespace std;int main()
{int ch;ch=getchar();cout << ch << endl;cout << (char)ch << endl;return 0;
}
因為getchar()返回的是字符類型,所以不會忽略起首的空白字符,總是返回當前讀取的第一個字符。
如果讀取失敗,返回常量EOF,由于EOF通常是-1,所以返回值的類型要設為int,而不是char。
我們可以直接按Ctrl+z來實現讀取失敗。
1.2putchar()
函數原型:
1 int putchar(int character);
putchar()函數將它的參數字符輸出到屏幕,它的原型定義在頭文件<cstdio>。
#include"cstdio"int main()
{int ch=0;ch=getchar();putchar(ch);return 0;
}
當操作成功時,putchar()返回輸出的字符,否則返回EOF。
2.scanf和printf
2.1printf
printf()函數原型:
1 int printf(const char* format,……);
2.1.1基本用法
printf()的作用是將參數文本輸出到屏幕上。
#include <cstdio>int main()
{printf("Hello World");return 0;
}
printf()本身是不會在結尾處換行的,所以我們可以在結尾處增加一個\n,從而實現換行。
2.1.2占位符
printf()可以在輸出文本中指定占位符。
#include <cstdio>int main()
{printf("There are %d apples\n", 3);return 0;
}
在上面我們能夠看出%d就是占位符,表示這個位置要用其他值來替換。
同時在使用中,我們也可以使用多個占位符,使用順序也是和占位符的順序是一致的。
常見的占位符:
占位符 | 介紹 |
%d | 十進制整數 |
%lld | 十進制long long int類型 |
%f | 小數(包含float和double) |
%Lf | long double類型浮點數 |
%c | 字符 |
%s | 字符串 |
2.1.3格式化輸出
2.1.3.1限定寬度
printf()允許限定占位符的最小寬度。
#include"cstdio"int main()
{printf("%5d",123);return 0;
}
上面示例中,%5d表示這個占位符的寬度至少為5位。如果不滿5位,對應的值的前面會添加空格。
輸出端值默認是右對齊,即輸出內容前面會有空格;如果希望改成左對齊,在輸出內容后面添加空格,我們可以在%后面插入一個-號。
2.1.3.2限定小數位數
輸出小數時,有時希望限定小數位數。
#include"cstdio"int main(){printf("%.2f",12.345);return 0;
}
當我們希望小數點后面只保留兩位,占位符可以寫成%.2f。
最小寬度和小數位數這兩個限定值,都可以用*代替,通過printf()的參數傳入。
#include"cstdio"int main(){printf("%*.*f",6,2,12.345);return 0;
}
上面%*.*f的兩個星號通過printf()的兩個參數6和2傳入。
2.2scanf
scanf()函數原型:
1 int scanf( const char* format,……);
2.2.1基本用法
scanf()函數用于讀取用戶的鍵盤輸入。
程序運行到scanf()這個語句時,會停下來,等待用戶從鍵盤輸入。
#include"cstdio"int main()
{int i=0;scanf("%d",&i);printf("%d\n",i);return 0;
}
注:
- scanf函數的占位符后面一般不會加\n,\n是換行,一般在輸出的時候才使用。?
- scanf函數中存儲數據的變量前面必須加上&運算符,因為scanf()需要的是地址,必須將變量的地址取出來傳給scanf函數。
- scanf函數中指定的格式和給程序輸入的數據格式要嚴格的匹配,否則可能不能得到想要的值。
- scanf()處理數值占位符時,會自動過濾空白字符,包括空格、制表符、換行符等。
2.2.2scanf的返回值
scanf()的返回是一個整數,表示成功讀取的變量個數。
如果沒有讀取任何項,或者匹配失敗,則返回0.如果在成功讀取任何數據之前,發生了讀取錯誤或者讀取到文件結尾,則返回常量EOF(-1)。
#include"cstdio"int main()
{int a=0,b=0;float f=0;int r=scanf("%d %d %f",&a,&b,&f);printf("a=%d,b=%d,f=%f\n",a,b,f);printf("%d\n",r);return 0;
}
如果輸入兩個數后,按ctrl+z,提前結束輸入。
如果輸入的數據都不能匹配成功的話,則輸出的r是0。
如果一個數字都不輸入,直接按ctrl+z,輸出的r是-1,也就是EOF。
2.3練習
練習1:浮點除法
#include"cstdio"
#include"iostream"
using namespace std;int main()
{int a=0;int b=0;cin >> a >> b;printf("%.3f",a*1.0/b);return 0;
}
?練習2:B2012 甲流疫情死亡率 - 洛谷
#include"cstdio"int main()
{int a=0,b=0;scanf("%d %d",&a,&b);printf("%.3f%%\n",b*100.0/a);return 0;
}
練習3:?B2013 溫度表達轉化 - 洛谷
#include"cstdio"int main()
{double F=0;scanf("%lf",&F);double C=5*(F-32)/9.0;printf("%.5lf",C);return 0;
}
練習4:B2015 計算并聯電阻的阻值 - 洛谷?
#include"cstdio"int main()
{float r1=0,r2=0;scanf("%f %f",&r1,&r2);printf("%.2f",r1*r2*1.0/(r1+r2));return 0;
}
練習5:B2014 與圓相關的計算 - 洛谷?
#include"cstdio"
#include"iostream"
using namespace std;double p=3.14159;
double r;int main()
{cin >> r ;printf("%.4lf %.4lf %.4lf",r*2,r*2*p,r*r*p);return 0;
}
練習6:B2004 對齊輸出 - 洛谷?
#include"cstdio"int main()
{int a=0,b=0,c=0;scanf("%d %d %d",&a,&b,&c);printf("%8d %8d %8d",a,b,c);return 0;
}
練習7:信息學奧賽一本通(C++版)在線評測系統?
#include"iostream"
#include"cstdio"
using namespace std;int a,b,c,d,e;int main()
{cin >> a >> b >> c >> d >> e;a/=3;e+=a;b+=a;b/=3;a+=b;c+=b;c/=3;b+=c;d+=c;d/=3;c+=d;e+=d;e/=3;d+=e;a+=e;printf("%5d%5d%5d%5d%5d",a,b,c,d,e);return 0;
}
3.cin和cout
- cin是C++中提供的標準輸入流對象
- cout是C++中提供的標準輸出流對象
- cin和cout的輸入輸出非常方便,不需手動控制格式,能夠自動識別變量類型
3.1基本用法?
#include <iostream>
using namespace std;int main()
{int a;char c;float f;cin >> a; // 讀取?個整數cin >> c; // 讀取?個字符cin >> f; // 讀取取?個浮點數cout << "打印結果:"<<endl;cout << a << endl;cout << c << endl;cout << f << endl;return 0;
}
練習:
練習1:P5705 【深基2.例7】數字反轉 - 洛谷
#include"iostream"
using namespace std;int main()
{char a,b,c,d,e;cin >> a >> b >> c >> d >> e;cout << e << d << c << b << a << endl;return 0;
}
練習2:P5708 【深基2.習2】三角形面積 - 洛谷
#include"cstdio"
#include"cmath"
#include"iostream"
using namespace std;int main()
{double a,b,c;cin >> a >> b >> c;double p=(a+b+c)/2;printf("%.1f",sqrt(p*(p-a)*(p-b)*(p-c)));return 0;
}