藍橋杯之c++入門(二)【輸入輸出(上)】

目錄

  • 前言
    • 1.getchar和 putchar
      • 1.1 getchar()
      • 1.2 putchar()
    • 2.scanf和 printf
      • 2.1 printf
        • 2.1.1基本用法
        • 2.1.2占位符
        • 2.1.3格式化輸出
          • 2.1.3.1 限定寬度
          • 2.1.3.2 限定小數位數
      • 2.2 scanf
        • 2.2.1基本用法
        • 2.2.2 占位符
        • 2.2.3 scanf的返回值
      • 2.3練習
        • 練習1:浮點除法
        • 練習2:甲流疫情死亡率
        • 練習3:溫度表達轉化
        • 練習4:計算并聯電阻的阻值
        • 練習5:與圓相關的計算
        • 練習6:對齊輸出
        • 練習7:糖果游戲
    • 3.cin和 cout
      • 3.1基本用法
      • 3.2 連續輸入輸出
      • 3.3 cout的格式輸出(加餐)
        • 3.3.1 控制寬度和填充(加餐)
        • 3.3.2 控制數值格式 (加餐)
        • 3.3.3 控制整數格式(加餐)
        • 3.3.4 控制對齊方式(加餐)
      • 3.4 練習
        • 練習1:數字反轉
        • 練習2:三?形?積
  • 總結


前言

編程的世界里,輸入與輸出是程序與用戶交互的橋梁。無論是簡單的數據處理,還是復雜的算法實現,輸入輸出始終是不可或缺的環節。本章將深入探討C/C++語言中輸入輸出的多種方式,從基礎的getchar和putchar函數,到功能強大的scanf和printf,再到C++特有的cin和cout流對象,我們將逐步剖析它們的使用方法、特點以及適用場景。


正文開始

1.getchar和 putchar

getchar()getchar()和 putchar() 是屬于C語言的庫函數,C++是兼容C語言的,所以C++中只要正確包含頭文件也可以正常使用這兩個函數。

1.1 getchar()

函數原型如下:

int getchar ( void);

在這里插入圖片描述

**getchar()**函數返回用戶從鍵盤輸入的一個字符,使用時不帶有任何參數。

程序運行到這個命令就會暫停,等待用戶從鍵盤輸入,等同于使用cin或scanf() 方法讀取一個字符。

它的原型定義在頭文件<cstdio>

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{int ch;ch = getchar();cout << ch << endl;cout << (char)ch << endl;return 0;
}

getchar()不會忽略起首的空白字符,總是返回當前讀取的第一個字符,無論是否為空格。

換行算不算字符呢?答案是肯定的;

我們來看下面的代碼:

#include <iostream>
using namespace std;
int main()
{int ch = getchar();cout << (char)ch << endl;cout << ch << endl;ch = getchar();cout << (char)ch;cout << ch << endl;cout << "xxxxx" << endl;return 0;
}

運行結果:
在這里插入圖片描述
上面的代碼我們輸入了一個a回車,getchar先讀取一個字符a打印a和其的ASCII碼值97,再讀取換行,打印換行,和其ASCII碼值10;

如果讀取失敗,返回常量EOF,由于EOF通常是-1,所以返回值的類型要設為int,而不是char。

如何讓getchar()函數讀取失敗,返回-1呢?其實需要在輸入字符之前,直接按Ctrl+z就可以。

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{int ch;ch = getchar();cout << ch << endl;return 0;
}

getchar() 通常和 putchar() 是一對兒,配合使用的

1.2 putchar()

函數原型如下:

int putchar( int character );

putchar()函數將它的參數字符輸出到屏幕,它的原型定義在頭文件<cstdio>

#include <cstdio>
int main()
{int ch = 0;ch = getchar();putchar(ch);return 0;
}

操作成功時, putchar()返回輸出的字符,否則返回常量 EOF。

小提示:

當用到快速讀寫,就會用到這兩個函數。

2.scanf和 printf

scanf() 和 printf()是屬于C語言的庫函數,C++是兼容C語言的,所以C++中只要正確包含頭文件也可以正常使用這兩個函數。而且這兩個函數在算法競賽題目中使用的非常頻繁,尤其是在輸出格式控制中,所以接下來我們這里認真學習一下。

對printf和scanf有更深入的了解可以看看小編的這篇文章:
C語言的 printf 與 scanf

2.1 printf

printf() 函數原型如下:

int printf ( const char * format, ... );
2.1.1基本用法

printf()的作用是將參數文本輸出到屏幕。

它名字里面的f代表format(格式化),表示可以定制輸出文本的格式。

#include <cstdio>
int main() 
{printf("Hello World");return 0;
}

上面命令會在屏幕上輸出一行文字“Hello World”。

printf() 不會在行尾自動添加換行符,運行結束后,光標就停留在輸出結束的地方,不會自動換行。

為了讓光標移到下一行的開頭,可以在輸出文本的結尾,添加一個換行符\n。

#include <cstdio>
int main() 
{printf("Hello World\n");return 0;
}

如果文本內部有換行,也是通過插入換行符來實現,如下方代碼:

#include <cstdio>
int main() 
{printf("Hello\nWorld");return 0;
}
2.1.2占位符

printf() 可以在輸出文本中指定占位符。

所謂“占位符”,就是這個位置可以用其他值代入。

#include <cstdio>
// 輸出 There are 3 apples
int main()
{printf("There are %d apples\n", 3);return 0;
}

上面示例中,There are %d apples\n是輸出文本,里面的%d就是占位符,表示這個位置要用其他值來替換。占位符的第一個字符一律為百分號%,第二個字符表示占位符的類型,%d表示這里代入的值必須是一個整數。

printf() 的第二個參數就是替換占位符的值,上面的例子是整數3替換%d。執行后的輸出結果就是 There are 3 apples。

常用的占位符除了%d,還有%s表示代入的是字符串。

#include <cstdio>
int main()
{printf("%s will come tonight\n", "zhangsan");return 0;
}

上面示例中,%s表示代入的是一個字符串,所以printf() 的第二個參數就必須是字符串,這個例子是zhangsan。執行后的輸出就是zhangsan will come tonight。

輸出文本里面可以使用多個占位符。

#include <cstdio>
int main()
{printf("%s says it is %d o'clock\n", "lisi", 21);return 0;
}

上面示例中,輸出文本%s says it is %d o'clock 有兩個占位符,第一個是字符串占位符%s,第二個是整數占位符%d,分別對應printf()的第二個參數(lisi)和第三個參數(21)。執行后的輸出就是lisi says it is 21 o'clock。

printf()參數與占位符是一一對應關系,如果有n個占位符,printf()的參數就應該有n+1個。如果參數個數少于對應的占位符,printf() 可能會輸出內存中的任意值。

占位符列舉:

printf() 的占位符有許多種類,與數據類型相對應。

下面列出常用的占位符,方便查找,具體含義在后面章節介紹。

占位符介紹
%d十進制整數。
%lld十進制long long int類型。
%f小數(包含float類型和double類型)。
%Lflong double 類型浮點數。
%c字符。
%S字符串。
%a十六進制浮點數,字母輸出為小寫。
%A十六進制浮點數,字母輸出為大寫。
%e使用科學計數法的浮點數,指數部分的e為小寫。
%E使用科學計數法的浮點數,指數部分的E為大寫。
%i整數,基本等同于%d。
%g6個有效數字的浮點數。整數部分一旦超過6位,就會自動轉為科學計數法,指數部分的e 為小寫。
%G等同于%g,唯一的區別是指數部分的E為大寫。
%hd十進制short int類型。
%ho八進制short int類型。
%hx十六進制short int類型。
%huunsigned short int類型。
%ld十進制 long int類型。
%lo八進制long int類型。
%lx十六進制long int類型。
%luunsigned long int 類型。
%llo八進制long long int類型。
%llx十六進制 long long int類型。
%lluunsigned long long int 類型。
%Le科學計數法表示的long double類型浮點數。
%n已輸出的字符串數量。該占位符本身不輸出,只將值存儲在指定變量之中。
八進制整數。
%p指針。
%u無符號整數(unsigned int)。
%x十六進制整數。
%zdsize_t類型。
%%輸出一個百分號。
2.1.3格式化輸出

printf() 可以定制占位符的輸出格式。

2.1.3.1 限定寬度

printf()允許限定占位符的最小寬度。

#include <cstdio>
int main()
{printf("%5d\n", 123); // 輸出為 " 123"return 0;
}

上面示例中,%5d表示這個占位符的寬度至少為5位。如果不滿5位,對應的值的前面會添加空格。輸出的值默認是右對齊,即輸出內容前面會有空格
在這里插入圖片描述

如果希望改成左對齊,在輸出內容后面添加空格,可以在占位符的%的后面插入一個’-'號。

int main()
{printf("%-5d\n", 123); // 輸出為 " 123"return 0;
}

在這里插入圖片描述

上面示例中,輸出內容123的后面添加了空格。

對于小數,這個限定符會限制所有數字的最小顯示寬度。

#include <cstdio>
// 輸出 " 123.450000"
int main()
{printf("%12f\n", 123.45);return 0;
}

上面示例中,%12f表示輸出的浮點數最少要占據12位。由于小數的默認顯示精度是小數點后6位,所以123.45輸出結果的頭部會添加2個空格。

2.1.3.2 限定小數位數

輸出小數時,有時希望限定小數的位數。舉例來說,希望小數點后面只保留兩位,占位符可以寫成%.2f。

#include <cstdio>
// 輸出 Number is 0.50
int main()
{printf("Number is %.2f\n", 0.5);return 0;}

上面示例中,如果希望小數點后面輸出3位(0.500),占位符就要寫成%.3f。

這種寫法可以與限定寬度占位符,結合使用。


// 輸出為 "  0.50"
int main()
{printf("%6.2f\n", 0.5);return 0;
}

上面示例中,%6.2f表示輸出字符串最小寬度為6,小數位數為2。所以,輸出字符串的頭部有兩個空格。

最小寬度和小數位數這兩個限定值,都可以用*代替,通過printf() 的參數傳入。

#include <cstdio>
int main()
{printf("%*.*f\n", 6, 2, 0.5);return 0;
}
// 等同于printf("%6.2f\n", 0.5);

在這里插入圖片描述

上面示例中, %★.★f的兩個星號通過printf() 的兩個參數6和2傳入。

2.2 scanf

scanf() 函數原型如下:

int scanf ( const char * format,...);
2.2.1基本用法

scanf() 函數用于讀取用戶的鍵盤輸入。

程序運行到scanf() 這個語句時,會停下來,等待用戶從鍵盤輸入。

用戶輸入數據、按下回車鍵后,scanf() 就會處理用戶的輸入,將其存入變量。

scanf()的語法跟printf() 類似。

請看下面的代碼:

#include <cstdio>
int main()
{int i = 0;scanf("%d", &i);printf("%d\n", i);return 0;
}

小提示:

特別注意,scanf函數的占位符后面一般不會加\n,\n是換行,一般在輸出的時候才使用

它的第一個參數是一個格式字符串,里面會放置占位符(與printf()的占位符基本一致),告訴編譯器如何解讀用戶的輸入,需要提取的數據是什么類型。這是因為C語言的數據都是有類型的,scanf() 必須提前知道用戶輸入的數據類型,才能處理數據。

它的其余參數就是存放用戶輸入的變量,格式字符串里面有多少個占位符,就有多少個變量。

上面示例中,scanf()的第一個參數%d,表示用戶輸入的應該是一個整數。%d就是一個占位符,%是占位符的標志,d表示整數。第二個參數&i表示,將用戶從鍵盤輸入的整數存入變量i。

小提示:

scanf函數中存儲數據的變量前面必須加上&運算符(指針變量除外),因為scanf()需要的是地址,必須將變量i的地址取出來傳給scanf函數。

如果這里的變量i是數組,那就不用加&運算符。(后期慢慢介紹)

下面是一次從鍵盤讀取多個變量的例子:

先來一個簡單的:

#include <cstdio>
int main()
{int a, b, c, d;scanf("%d%d%d%d", &a, &b, &c, &d);printf("%d %d %d %d\n", a, b, c, d);return 0;
}

小提示:

scanf 函數中指定的格式和給程序輸入的數據格式要嚴格的匹配,否則可能不能得到想要的值。

再換一個例子:

#include <cstdio>
int main()
{int i = 0;int j = 0;float x = 0;float y = 0;scanf("%d%d%f%f", &i, &j, &x, &y);printf("i = %d\n", i);printf("j = %d\n", j);printf("x = %f\n", x);printf("y = %f\n", y);return 0;
}

上面示例中,格式字符串%d%d%f%f,表示用戶輸入的前兩個是整數,后兩個是浮點數。

比如鍵盤輸入1-20 3.4-4.0e3,這四個值依次放入i、j、x、y四個變量。

scanf()處理數值占位符時,會自動過濾空白字符,包括空格、制表符、換行符等。

所以,用戶輸入的數據之間,有一個或多個空格不影響scanf()解讀數據。另外,用戶使用回車鍵,將輸入分成幾行,也不影響解讀。

1
-20
3.4
-4.0e3

上面示例中,用戶分成四行輸入,得到的結果與一行輸入是完全一樣的。每次按下回車鍵以后,scanf()就會開始解讀,如果第一行匹配第一個占位符,那么下次按下回車鍵時,就會從第二個占位符開始解讀。

scanf() 處理用戶輸入的原理是:

用戶的輸入先放入緩存,等到按下回車鍵后,按照占位符對緩存進行解讀。解讀用戶輸入時,會從上一次解讀遺留的第一個字符開始,直到讀完緩存,或者遇到第一個不符合條件的字符為止。

#include <cstdio>
int main()
{int x = 0;float y = 0;// 用戶輸入 " -13.45e12# 0"scanf("%d", &x);printf("%d\n", x);scanf("%f", &y);printf("%f\n", y);return 0;
}

上面示例中,scanf() 讀取用戶輸入時,%d占位符會忽略起首的空格,從-處開始獲取數據,讀取到-13停下來,因為后面的.不屬于整數的有效字符。這就是說,占位符%d會讀到-13。

第二次調用scanf() 時,就會從上一次停止解讀的地方,繼續往下讀取。這一次讀取的首字符是.,由于對應的占位符是%f,會讀取到.45e12,這是采用科學計數法的浮點數格式。后面的#不屬于浮點數的有效字符,所以會停在這里。

由于scanf() 可以連續處理多個占位符,所以上面的例子也可以寫成下面這樣。

#include <stdio.h>
int main()
{int x = 0;float y = 0;// ??輸? " -13.45e12# 0"scanf("%d%f", &x, &y);printf("%d %f\n", x, y);return 0;
}
2.2.2 占位符

scanf() 常用的占位符如下,與 printf()的占位符基本一致。

占位符介紹
%c字符。
%d整數。
%ffloat類型浮點數。
%lfdouble類型浮點數。
%Lflong double類型浮點數。
%s字符串。
%[]在方括號中指定一組匹配的字符(比如%[0-9]),遇到不在集合之中的字符,匹配將會停止。

上面所有占位符之中,除了%c以外,都會自動忽略起首的空白字符。%c不忽略空白字符,總是返回當前第一個字符,無論該字符是否為空格。

如果要強制跳過字符前的空白字符,可以寫成scanf(" %c", &ch) ,即%c前加上一個空格,表示跳過零個或多個空白字符。

#include <cstdio>
int main()
{char ch = 0;scanf("%c", &ch);printf("--%c--\n", ch);return 0; 
}

結果演示:

在這里插入圖片描述

為了避免在讀取這些空?字符,可以換?種?式:

 #include <cstdio>
int main()
{char ch = 0;scanf(" %c", &ch);//%c前的空格會讓scanf強制跳過空白字符,去讀取非空白字符printf("--%c--\n", ch);return 0; 
}

結果演?:
在這里插入圖片描述

了解這一點后,當‰c和%d等占位符連續使用的時候,也要注意,%c默認不會跳過空白字符的,所以在輸入的時候,要非常小心,比如:

#include <cstdio>
int main() 
{ int a;char ch;scanf("%d%c", &a, &ch);printf("%d %c\n", a, ch);return 0; 
}

在這里插入圖片描述

如果在輸入的時候,就是想在整數和字符之間加上空格,那么scanf中的格式串中%c的前面就要加上空格。

#include <cstdio>
int main() 
{ int a;char ch;scanf("%d %c", &a, &ch);printf("%d %c\n", a, ch);return 0; 
}

正確的輸入:

在這里插入圖片描述

總之要注意,scanf中規定的輸入格式和控制臺輸入數據的格式要保持一致才可能得到正確的結果。

2.2.3 scanf的返回值

scanf() 的返回值是一個整數,表示成功讀取的變量個數。

如果沒有讀取任何項,或者匹配失敗,則返回0。如果在成功讀取任何數據之前,發生了讀取錯誤或者遇到讀取到文件結尾,則返回常量EOF(-1)。

#include <cstdio>
int main()
{int a = 0;int b = 0;float f = 0.0f;int r = scanf("%d %d %f", &a, &b, &f);printf("a=%d b=%d f=%f\n", a, b, f);printf("r = %d\n", r);return 0;
}

輸入輸出測試:
在這里插入圖片描述
如果輸?2個數后,按 ctrl+z ,提前結束輸?:
在這里插入圖片描述

在Dev-C++中按下ctrl+z,才結束了輸入,我們可以看到r是2,表示正確讀取了2個數值。

如果輸入的數據一個都不能匹配成功的話,則輸出的r是0.

在這里插入圖片描述

如果一個數字都不輸入,直接按ctrl+z ,輸出的r是-1,也就是EOF.

在這里插入圖片描述

掌握了scanf的返回值,我們一般會通過scanf的返回值來處理多組數據輸入的競賽題目,在后期的課程中大家都會一一見到的。

2.3練習

練習1:浮點除法

在這里插入圖片描述

#include <iostream>
using namespace std;
int main()
{int a,b;cin >> a >> b;float  c = (float)a/b;printf("%.3f",c);return 0;
}
練習2:甲流疫情死亡率

在這里插入圖片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{int a,b;cin >> a >> b;float c = b*1.0/a*100.0;printf("%.3f%%", c);return 0;
}

小提示:

1.百分號%可以這樣輸出:printf("%%");

2.注意a和b的取值范圍

3.百分比不是直接b/a,是需要乘以100.0的,因為需要得到小數,所以要是小數除法

4.有時候:先乘100再除a,還是先除a再乘100是有差異的。

比如:4/8*100和4*100/8的結果就有差異的。

練習3:溫度表達轉化

在這里插入圖片描述

#include <cstdio>
int main()
{double f = 0;scanf("%lf", &f);double c = 5 * (f - 32) / 9.0;printf("%.5lf\n", c);return 0;
}
練習4:計算并聯電阻的阻值

在這里插入圖片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{double r1,r2;cin >> r1 >> r2;printf("%.2lf", 1/((1/r1)+(1/r2)));return 0;
}
練習5:與圓相關的計算

在這里插入圖片描述

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{double r = 0;double p = 3.14159;cin >> r;printf("%.4lf %.4lf %.4lf",2*r,2*p*r,r*r*p);return 0;
}
練習6:對齊輸出

在這里插入圖片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{int a, b, c;cin >> a >> b >> c;printf("%8d %8d %8d",a,b,c);return 0;
}
練習7:糖果游戲

在這里插入圖片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{int a, b, c, d, e;cin >> a >> b >> c >> d >> e;//1號a /= 3;b += a;e += a;//2號b /= 3;c += b;a += b;//3號c /= 3;b += c;d += c;//4號d /= 3;c += d;e += d;//5號e /= 3;d += e;a += e;printf("%5d%5d%5d%5d%5d\n", a, b, c, d, e);return 0;} 

3.cin和 cout

前面我們已經提到過在C++中提供了:cin和cout兩個流對象。

cin是C++中提供的標準輸入流對象,一般針對的是鍵盤,也就是從鍵盤上輸入的字符流,使用cin來進行數據的提取,cin一般是和>>(流提取運算符)配合使用的。cin的功能和scanf 是類似的。

cout是C++中提供的標準輸出流對象,一般針對的控制臺的窗口,也就是將數據以字符流的形式輸出到控制臺窗口上顯示。cout 一般是和<<(流插入運算符)配合使用。cout的功能和printf|是類似的。

我們在寫程序的時候,經常需要處理數據,不管什么類型的數據都是以字符流的形式輸入和輸出的,也就是不管在鍵盤上輸入什么類型的數據,還是將程序中的各種類型的數據輸出顯示到控制臺屏幕上,都是以字符流的形式處理的。

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;
}

在這里插入圖片描述

當我們在鍵盤輸入數據的時候,輸入的數據不能被cin解讀為對應類型的數據,那么讀取也就結束了。

比如:

在這里插入圖片描述

cin 使用細節:

  • cin 在讀取的時候是根據用戶的輸入,從前往后,從上往下依次掃描。

  • cin在讀取的過程中遇到空格,自動會跳過,所以不要擔心在想要的字符前輸入空白字符。

  • 當一行讀取結束的時候,會自動換行,讀取下一行的內容。

  • cin后面不可以跟換行endl

3.2 連續輸入輸出

如果我們一次要輸入/輸出多個數據,那cin和cout能做到嗎?可以!

在上面的代碼中,使用cout 進行變量的輸出,實質上是將變量插入到cout 對象里,并以cout 對象作為返回值返回,因此我們還可以用<<在后面連續輸出多個內容,通過連續輸入輸出的方式對代碼進行編寫,效果如下:

cin舉例:

#include <iostream>
using namespace std;
int main()
{int a = 0;int b = 0;//同類型變量連續輸?cin >> a >> b; //以最后?次輸?為準//添加換?endlcin >> a >> endl; //代碼編譯報錯return 0;
}
#include <iostream>
using namespace std;
int main()
{//不同類型變量的連續輸?int a = 0;char ch = 0;float f = 0;cin >> a >> ch >> f;return 0;
}

cout舉例:

#include <iostream>
using namespace std;
int main()
{//對同?類型變量連續輸出int a = 10;int b = 20cout << a << " " << b << endl;return 0;
}
#include <iostream>
using namespace std;
int main()
{//?持相同/不同類型變量的連續輸?char ch = 0;float f = 0.1;cout << ch << f << endl;//格式化輸出:添加(任意)空格和字符串cout << "ch:" << ch << " f:" << f << endl;//格式化輸出:多次換?cout << ch << endl << endl;return 0;
}

cin 的好處:

當輸入若干個變量(也就是數據量很少)的時候,我們就可以通過>>把所有的數據用一行代碼完成接收,而且無需關心數據的類型,和scanf函數比起來代碼的書寫非常簡潔明了。

cout的好處:

cout 也可以用來連續輸出多個數值,而且無需考慮數值的類型,因為它本身會做類型處理,和printf比起來比較方便。

3.3 cout的格式輸出(加餐)

printf 函數在輸出數據的時候,可以指定格式來輸出,比如:指定寬度,比如指定小數點后的位數,對齊方式等等。那么cout 在數據的時候能否指定格式呢?答案是可以的!cout 結合<iomanip>(I0 manipulators)頭文件中的操縱符,可以靈活控制輸出格式,從而滿足各種格式化需求。

3.3.1 控制寬度和填充(加餐)
  • setw:設置字段寬度(只對緊接著的輸出項有效)。

  • setfill:設置填充字符。

#include <iostream>
using namespace std;
#include <iomanip>
int main()
{int a = 123;cout << "默認寬度: " << a << endl;cout << "寬度設置為10: " << setw(10) << a << endl;cout << "寬度為10,不夠時填充*: " << setw(10) << setfill('*') << a << endl;return 0;
}

結果演示:
在這里插入圖片描述

3.3.2 控制數值格式 (加餐)
  • fixed :以固定?數點表?浮點數,設置后就不會以科學計數法展示了。
  • scientific :以科學計數法表?浮點數。
  • setprecision :設置浮點數的精度,以控制?數點后的數字位數,?般先固定?數點,再設置精度。
#include <iomanip>
int main()
{float a = 12.349584521314;cout << "默認:" << a << endl;cout << "固定小數點方式: " <<fixed << a << endl;cout << "科學計數法方式: " << scientific << a << endl;cout << "固定小數點,小數點后2位有效數字: " << fixed << setprecision(2) << a << endl;return 0;
}

在這里插入圖片描述

3.3.3 控制整數格式(加餐)
  • dec :以?進制格式顯示整數(默認)。
  • hex :以?六進制格式顯示整數。
  • oct :以?進制格式顯示整數。
#include <iostream>
using namespace std; 
#include <iomanip>
int main() {int n = 255;cout << "十進制 : " << dec << n << endl;cout << "十六進制: " << hex << n << endl;cout << "十進制 : " << oct << n << endl;return 0;
}

在這里插入圖片描述

3.3.4 控制對齊方式(加餐)
  • left :左對?。
  • right :右對?(默認)。
#include <iostream>
using namespace std; 
#include <iomanip>
int main() 
{int n = 123;cout << "右對齊: " << setw(10) << right << n << endl;cout << "左對齊: " << setw(10) << left << n << endl;return 0;
}

在這里插入圖片描述

3.4 練習

練習1:數字反轉

在這里插入圖片描述

#include <iostream>
using namespace std;
#include <cstdio>
int main()
{char a,b,c,d,e;cin >> a >> b >> c >> d >> e;cout << e << d << c << b << a << endl;return 0;
}

?提?:

從題?的中可以看出,想要輸??數,然后反轉輸出,如果真按照這樣的思路往下?,也能解決問題,但是可能就復雜了。其實在不管什么類型的數據都是以字符流的形式輸?和輸出的,那我們就可以把輸?的這個?數和?數點,都當做字符依次讀取,然后再按照想要的順 序輸出就?。
如果使? scanf 和 printf函數要指定好占位符,如果使? cin/cout 要指定好變量的類型;

練習2:三?形?積

在這里插入圖片描述

#include <iostream>
using namespace std;
#include <cstdio>
#include <cmath>
#include <iomanip>
int main()
{double a, b, c;cin >> a >> b >> c;double p = (a + b + c)/2;double s = sqrt(p*(p - a)*(p - b)*(p - c));cout << fixed << setprecision(1) << s << endl;return 0;
}

總結

本章對C/C++中的輸入輸出進行了全面而深入的講解。從基礎的字符輸入輸出函數getchar和putchar,到功能強大的格式化輸入輸出函數scanf和printf,再到C++中靈活的流對象cin和cout,我們不僅學習了它們的使用方法,還通過大量實例展示了如何在實際編程中靈活運用這些工具。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我的鴻蒙學習之旅:探索萬物互聯的新宇宙

在科技飛速發展的今天&#xff0c;操作系統領域的創新層出不窮。華為鴻蒙系統的出現&#xff0c;猶如一顆璀璨的新星&#xff0c;照亮了萬物互聯的未來之路。懷著對新技術的好奇與渴望&#xff0c;我踏上了學習鴻蒙的征程&#xff0c;這段經歷充滿了挑戰與驚喜&#xff0c;也讓…

Docker數據卷管理及優化

一、基礎概念 1.docker數據卷是一個可供容器使用的特殊目錄&#xff0c;它繞過了容器的文件系統&#xff0c;直接將數據存在宿主機上。 2.docker數據卷的作用&#xff1a; 數據持久化&#xff1a;即使容器被刪除或重建數據卷中的數據仍然存在 數據共享&#xff1a;多個容器可以…

java:mysql切換達夢數據庫(五分鐘適配完成)

背景 因為項目需要國產數據庫的支持&#xff0c;選擇了達夢數據庫&#xff0c;由于我們之前使用的是MySQL今天我們就來說一說&#xff0c;如何快速的切換到達夢數據庫&#xff0c;原本這一章我打算寫VIP章節的后續想想&#xff0c;就純分享。畢竟是國產數據庫遷移數據庫 這里…

在游戲本(6G顯存)上本地部署Deepseek,運行一個14B大語言模型,并使用API訪問

在游戲本6G顯存上本地部署Deepseek&#xff0c;運行一個14B大語言模型&#xff0c;并使用API訪問 環境說明環境準備下載lmstudio運行lmstudio 下載模型從huggingface.co下載模型 配置模型加載模型測試模型API啟動API服務代碼測試 deepseek在大語言模型上的進步確實不錯&#xf…

[leetcode]兩數之和等于target

源代碼 #include <iostream> #include <list> #include <iterator> // for std::prev using namespace std; int main() { int target 9; list<int> l{ 2, 3, 4, 6, 8 }; l.sort(); // 確保列表是排序的&#xff0c;因為雙指針法要求輸入是…

C# OpenCV機器視覺:學生注意力監測

小王是一位充滿活力的年輕教師&#xff0c;剛接手了一個新班級。他滿心歡喜地準備在課堂上大顯身手&#xff0c;把自己的知識毫無保留地傳授給學生。可沒上幾節課&#xff0c;他就發現了一個讓人頭疼的問題&#xff1a;課堂上總有那么幾個學生注意力不集中&#xff0c;要么偷偷…

DeepSeek R1技術報告關鍵解析(6/10):DeepSeek-R1 vs. OpenAI-o1-1217:性能對比分析

1. 為什么要對比 DeepSeek-R1 和 OpenAI-o1-1217&#xff1f; 在當前的大模型競爭中&#xff0c;OpenAI 的 o1-1217 被認為是推理能力較強的模型之一。 而 DeepSeek-R1 作為一個采用強化學習優化推理能力的開源模型&#xff0c;其性能是否能夠與 OpenAI-o1-1217 競爭&#xf…

PyQt6/PySide6 的 QTableView 類

QTableView 是 PyQt6 或 PySide6 庫中用于顯示二維表格數據的控件。它是一個非常強大且靈活的控件&#xff0c;適用于展示和編輯表格數據。QTableView 通常與 QAbstractItemModel 的子類&#xff08;如 QStandardItemModel 或自定義模型&#xff09;一起使用&#xff0c;以提供…

【嵌入式】C語言多文件編程與內聯函數

文章目錄 0 前言1 從C語言編譯說起2 重復定義錯誤&#xff08;ODR violation&#xff09;和條件編譯3 內聯函數inline和static inline4 總結 0 前言 最近在研究ARM內核代碼時&#xff0c;看到core_cm3.h中有大量的內聯函數&#xff0c;為此查閱了很多資料&#xff0c;也和朋友討…

10分鐘本地部署Deepseek-R1

10分鐘本地部署DeepSeek-R1 什么是DeepSeek-R1快速本地部署DeepSeek-R1Ollama下載Ollama安裝檢查是否安裝成功 安裝DeepSeek-R1模型模型使用測試 什么是DeepSeek-R1 DeepSeek-R1是中國的深度求索&#xff08;DeepSeek&#xff09;公司開發的智能助手。其具有極佳的語義理解和生…

Office / WPS 公式、Mathtype 公式輸入花體字、空心字

注&#xff1a;引文主要看注意事項。 1、Office / WPS 公式中字體轉換 花體字 字體選擇 “Eulid Math One” 空心字 字體選擇 “Eulid Math Two” 2、Mathtype 公式輸入花體字、空心字 2.1 直接輸入 花體字 在 mathtype 中直接輸入 \mathcal{L} L \Large \mathcal{L} L…

Python小游戲29乒乓球

import pygame import sys # 初始化pygame pygame.init() # 屏幕大小 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("打乒乓球") # 顏色定義 WHITE (255, 255, 255) BLACK (…

【C++】STL——vector底層實現

目錄 &#x1f495; 1.vector三個核心 &#x1f495;2.begin函數&#xff0c;end函數的實現&#xff08;簡單略講&#xff09; &#x1f495;3.size函數&#xff0c;capacity函數的實現 &#xff08;簡單略講&#xff09; &#x1f495;4.reserve函數實現 &#xff08;細節…

7、怎么定義一個簡單的自動化測試框架?

定義一個簡單的自動化測試框架可以從需求理解、框架設計、核心模塊實現、測試用例編寫和集成執行等方面入手&#xff0c;以下為你詳細介紹&#xff1a; 1. 明確框架需求和范圍 確定測試類型&#xff1a;明確框架要支持的測試類型&#xff0c;如單元測試、接口測試、UI 測試等…

安卓(android)讀取手機通訊錄【Android移動開發基礎案例教程(第2版)黑馬程序員】

一、實驗目的&#xff08;如果代碼有錯漏&#xff0c;可在代碼地址查看&#xff09; 1.熟悉內容提供者(Content Provider)的概念和作用。 2.掌握內容提供者的創建和使用方法。 4.掌握內容URI的結構和用途。 二、實驗條件 1.熟悉內容提供者的工作原理。 2.掌握內容提供者訪問其…

AI取代人類?

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

C語言-----數據結構從門到精通

1.數據結構基本概念 數據結構是計算機中存儲、組織數據的方式&#xff0c;旨在提高數據的訪問和操作效率。它是實現高效算法和程序設計的基石。 目標:通過思維導圖了解數據結構的知識點,并掌握。 1.1邏輯結構 邏輯結構主要四種類型: 集合&#xff1a;結構中的數據元素之…

華為小米vivo向上,蘋果榮耀OPPO向下

日前&#xff0c;Counterpoint發布的手機銷量月度報告顯示&#xff0c;中國智能手機銷量在2024年第四季度同比下降3.2%&#xff0c;成為2024年唯一出現同比下滑的季度。而對于各大智能手機品牌來說&#xff0c;他們的市場份額和格局也在悄然發生變化。 華為逆勢向上 在2024年第…

每日一博 - 三高系統架構設計:高性能、高并發、高可用性解析

文章目錄 引言一、高性能篇1.1 高性能的核心意義1.2 影響系統性能的因素1.3 高性能優化方法論1.3.1 讀優化&#xff1a;緩存與數據庫的結合1.3.2 寫優化&#xff1a;異步化處理 1.4 高性能優化實踐1.4.1 本地緩存 vs 分布式緩存1.4.2 數據庫優化 二、高并發篇2.1 高并發的核心意…

吳恩達深度學習——有效運作神經網絡

內容來自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;僅為本人學習所用。 文章目錄 訓練集、驗證集、測試集偏差、方差正則化正則化參數為什么正則化可以減少過擬合Dropout正則化Inverted Dropout其他的正則化方法數據增廣Early stopping 歸一化梯度消失與梯度爆…