鹏哥手把手带我刷好题 · 编程练习 · I
Posted 安然无虞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鹏哥手把手带我刷好题 · 编程练习 · I相关的知识,希望对你有一定的参考价值。
大家好,我是安然无虞。
目录
【前言】
其实这个在大一下学期的时候就已经刷完了,但是最近看鹏哥讲解的时候发现自己很多答案写的都很繁琐,再加上有段时间没写代码了,所以趁着假期利用几天时间二刷调整一下状态,再将每一道题整理在博客中,可能前面会很简单,后面会慢慢提升难度的哦,废话不多说,直接进入主题。
【声明】
前面题目很简单,非初学者勿看。
在线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_牛客题霸_牛客网
题目描述:
代码执行:
代码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.缩短二进制
原题链接:缩短二进制_牛客题霸_牛客网
题目描述:
代码执行:
代码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最后加上一个\\n
printf("请确认密码:(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;
这样就可以了,注意实现上面清理缓冲区的功能哦。 好,那么现在开始讲解本题。
题目描述:
示例:
输入:
A
B
输出:
a
b
代码执行:
#include<stdio.h>
int main()
//EOF - end of file - 文件结束标志 - 通常是放在文件的末尾
int ch = 0;
while((ch=getchar())!=EOF)
printf("%c\\n", ch+32);//小写字母的ASCII值比大写字母的大32
getchar();//读取输入缓冲区中的\\n
return 0;
7.小飞机
原题链接:小飞机_牛客题霸_牛客网
题目描述:
代码执行:
//本题考查的是printf()
#include<stdio.h>
int main()
printf(" ** \\n");
printf(" ** \\n");
printf("************\\n");
printf("************\\n");
printf(" * * \\n");
printf(" * * \\n");
return 0;
8.十六进制转十进制
原题链接:十六进制转十进制_牛客题霸_牛客网
题目描述:
注意:
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.学生基本信息输入输出
原题链接:学生基本信息输入输出_牛客题霸_牛客网
题目描述:
示例:
输入: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的主要内容,如果未能解决你的问题,请参考以下文章