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