鹏哥手把手带我刷好题 · 编程练习 · I
大家好,我是安然無虞。?
目錄
在線OJ
<1>.什么是在線OJ
<2>.為什么訓練在線OJ
1.實踐出真知
2.我是大V
3.有容乃大
4.縮短二進制
5.反向輸出一個四位數
6.大小寫轉換
補充1:getchar()
補充2:輸入緩沖區
7.小飛機
8.十六進制轉十進制
9.printf的返回值
10.學生基本信息輸入輸出
結語:遇見安然遇見你,不負代碼不負卿。
【前言】
其實這個在大一下學期的時候就已經刷完了,但是最近看鵬哥講解的時候發現自己很多答案寫的都很繁瑣,再加上有段時間沒寫代碼了,所以趁著假期利用幾天時間二刷調整一下狀態,再將每一道題整理在博客中,可能前面會很簡單,后面會慢慢提升難度的哦,廢話不多說,直接進入主題。
【聲明】
前面題目很簡單,非初學者勿看。?
在線OJ
<1>.什么是在線OJ
OJ-在線判題系統(英語:online Judge,縮寫OJ)是一種在編程競賽中用來測試競賽程序的在線系統,也可以用于平時練習。
<2>.為什么訓練在線OJ
a.有一些比賽,比如:NOI、NOIP、ACM之類的編程競賽都是采用在線OJ的方式進行;
b.現在IT大學生就業找工作的筆試環節也采用在線OJ的方式進行(筆試OJ化,這是未來的趨勢)
好了,想必大家或多或少都接觸過一些,在這里就不過多介紹咯,直接進入題目啦。
1.實踐出真知
原題鏈接:實踐出真知_??皖}霸_牛客網
題目描述:?
代碼執行:
//寫主函數 //main函數是程序的入口 - 代碼是從main函數的第一行開始執行的! //一個工程中有且僅有一個main函數 #include<stdio.h> int main() {printf("Practice makes perfect!\n");return 0; }2.我是大V
原題鏈接:我是大V_??皖}霸_??途W?
題目描述:
代碼執行:
代碼1:
#include<stdio.h>int main() {printf("v v\n");//'\n'- 換行printf(" v v\n");printf(" v\n");return 0; }代碼2:
#include<stdio.h>int main() {printf("v v\n v v\n v\n");//'\n'- 換行return 0; }3.有容乃大
原題鏈接:有容乃大_??皖}霸_牛客網
題目描述:?
代碼執行:
#include<stdio.h> int main() {printf("The size of short is %d bytes.\n", sizeof(short));printf("The size of int is %d bytes.\n", sizeof(int));printf("The size of long is %d bytes.\n", sizeof(long));printf("The size of long long is %d bytes.\n", sizeof(long long));return 0; }//sizeof是一個C語言中的操作符,是用來計算變量或者類型所占空間類型大小的,單位是字節 //C語言標準規定:sizeof(long long)>=sizeof(long)>=sizeof(int)4.縮短二進制
原題鏈接:縮短二進制_??皖}霸_??途W?
題目描述:
代碼執行:
代碼1:
#include<stdio.h> int main() {printf("0%o 0X%X",1234,1234);return 0; }?注意:
printf可以使用使用格式控制串“%o”、“%X”分別輸出八進制整數和十六進制整數,并使用修飾符“#”控制前導顯示代碼2:
#include<stdio.h> int main() {printf("%#o %#X",1234,1234);return 0; }5.反向輸出一個四位數
原題鏈接:反向輸出一個四位數_??皖}霸_牛客網
題目描述:
示例:
輸入:1234 輸出:4321代碼執行:
#include<stdio.h>int main() {int n = 0;//輸入scanf("%d", &n);//1234//輸出//1234%10=4//1234/10=123//123%10=3//123/10=12//12%10=2//12/10=1//1%10=1//1/10=0//從上面步驟可知:重復模10除10的操作,所以可以寫成循環的形式while (n){printf("%d", n % 10);n /= 10;}return 0; }6.大小寫轉換
原題鏈接:大小寫轉換_??皖}霸_牛客網
在講解本題之前先補充兩個概念:
補充1:getchar()
函數原型:
int getchar(void)功能:?
在標準輸入緩沖區中讀取一個字符,返回讀到的字符的ASCII碼值,如果讀取失敗,則返回EOF(-1)
問:為什么getchar()返回的是字符的ASCII碼值?函數返回值為什么要放到一個int類型的變量中呢?不是應該放在一個char類型的變量中嗎?
如:
int ch = 0; ch = getchar();答:?
- getchar()返回了字符的ASCII碼值,ASCII碼值是整數,存放在整型變量中沒有任何問題;
- 這一點也是最重要的一點,getchar()讀取失敗的時候返回EOF,EOF本質是-1(#define EOF -1),是一個整型值,在一個char類型中,是存儲不下的;
- 再結合getchat()函數的原型,getchar()的返回類型被定義為int, 那么返回數據應該被存放在int變量中
getchar(): 獲取/輸入一個字符;
putchar(): 輸出一個字符
注意哦,這兩個函數一次只能操作一個字符,沒有scanf(),printf()功能齊全?
補充2:輸入緩沖區
引入:
#include<stdio.h>int main() {char input[20] = { 0 };printf("請輸入密碼:>");scanf("%s", input);//輸入abcdef最后加上一個\nprintf("請確認密碼:(Y / N):>");int ch = getchar();if (ch == 'Y'){printf("確認成功\n");}else{printf("確認失敗\n");}return 0; }此時輸入緩沖區中放的是abcdef\n,scanf()函數將abcdef讀走了,留下了一個\n,所以\n直接被getchar()讀取,所以此時ch里面放的是\n,后面不會等到我們確認密碼就直接輸出確認失敗了。?
存在的問題:本題輸入abcdef,然后按回車鍵,還沒有等到我們輸入字符(Y/ N)就直接輸出“確認失敗”了,那怎么改才能成為我們想要的呢?
在scanf()下面加上一條語句:getchar();目的只有一個,拿走回車鍵('\n')
存在的問題:這樣改只能保證輸入“abcdef”時可以正常執行,但如果輸入的是"abcdef hehe"時又會直接輸出“確認失敗”了,不信你看...?
我丟,這什么鬼,怎么又錯了!?
注意:
scanf("%s", ...); //scanf()讀取字符串的時候遇到空格時就停下來不再讀取了?
分析上段代碼:
#include<stdio.h>int main() {char input[20] = { 0 };printf("請輸入密碼:>");scanf("%s", input);//scanf()只讀取了"abcdef"getchar();//getchar()讀取了一個空格,所以這里就有問題了,這里的getchar()只能拿走一個字符,我們想要的是它能將緩沖區//里剩下字符全部拿走,直至拿走'\n'printf("請確認密碼:(Y / N):>");int ch = getchar();if (ch == 'Y'){printf("確認成功\n");}else{printf("確認失敗\n");}return 0; }是呀,這里的getchar()只能拿走一個字符,我們想要的是它能將緩沖區里剩下的全部拿走,直至拿走'\n',該怎么改?
#include<stdio.h>int main() {char input[20] = { 0 };printf("請輸入密碼:>");scanf("%s", input);//scanf()只讀取了"abcdef"//清理緩沖區int tmp = 0;while ((tmp = getchar()) != '\n'){;//空語句,什么事都不干,拿字符就行了}printf("請確認密碼:(Y / N):>");int ch = getchar();if (ch == 'Y'){printf("確認成功\n");}else{printf("確認失敗\n");}return 0; }?
這樣就可以了,注意實現上面清理緩沖區的功能哦。?好,那么現在開始講解本題。
題目描述:
示例:
輸入:AB 輸出:ab代碼執行:
#include<stdio.h>int main() {//EOF - end of file - 文件結束標志 - 通常是放在文件的末尾int ch = 0;while((ch=getchar())!=EOF){printf("%c\n", ch+32);//小寫字母的ASCII值比大寫字母的大32getchar();//讀取輸入緩沖區中的\n}return 0; }7.小飛機
原題鏈接:小飛機_牛客題霸_??途W
題目描述:
代碼執行:
//本題考查的是printf() #include<stdio.h> int main() {printf(" ** \n");printf(" ** \n");printf("************\n");printf("************\n");printf(" * * \n");printf(" * * \n");return 0; }8.十六進制轉十進制
原題鏈接:十六進制轉十進制_??皖}霸_??途W
題目描述:
注意:
printf可以使用使用格式控制串“%md”輸出域寬為m的十進制整數。代碼執行:
#include<stdio.h> int main() {printf("%15d\n",0XABCDEF);return 0; }9.printf的返回值
原題鏈接:printf的返回值_牛客題霸_牛客網
函數原型:
int printf( const char *format [, argument]... );?返回值:
引入一道筆試題:
#include<stdio.h>int main() {printf("%d", printf("%d", printf("%d", 43)));return 0; }屏幕上打印的是:4321
為什么呢?
因為printf()函數的返回值是打印在屏幕上字符的個數。
好,現在進入題目。
題目描述:
代碼執行:
代碼1:
#include<stdio.h> int main() {int ret=printf("Hello world!");putchar('\n');printf("%d",ret);return 0; }其實一行就解決了:
代碼2:
#include<stdio.h>int main() {printf("\n%d\n", printf("Hello world!"));return 0; }10.學生基本信息輸入輸出
原題鏈接:學生基本信息輸入輸出_牛客題霸_??途W
題目描述:
示例:
輸入:17140216;80.845,90.55,100.00 輸出:The each subject score of No. 17140216 is 80.85, 90.55, 100.00.注意:小數在內存中可能不能精確保存,float和double精度不一樣,一旦四舍五入,得到的結果可能就有差異。?
代碼執行:
#include<stdio.h> int main() {int id = 0;//學號float c_score = 0.0;float math_score = 0.0;float eng_score = 0.0;//輸入scanf("%d;%f,%f,%f", &id,&c_score,&math_score,&eng_score);//輸出printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", id,c_score,math_score,eng_score);return 0; }結語:遇見安然遇見你,不負代碼不負卿。
求求了,來個三連吧。總結
以上是生活随笔為你收集整理的鹏哥手把手带我刷好题 · 编程练习 · I的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: /* 商人过河的问题 假如有三个商人各
- 下一篇: 做一款仿打车软件需要多少钱?