在最开始先简单说下为什么刷题,可能大家在刚开始学的时候认识不到动手或者认识到但并不知道刷题的重要性。简单来说即十分巩固当前知识,让学到脑子里的知识学以致用。其次一点就是在最开始不再担心写代码的恐惧,认为其反而是一种乐趣。
链接我发不出来,这里步骤给大家:进入牛客网主页->登录之后找到上方题库->中间偏上的在线编程->彩色的编程初学者模块
写在前面:题解可能就没知识那么有趣了(个人认为),槽点太少哈哈哈哈。
这个我打算分模块解,少就全说,多就经典。感谢大家观看,评论区轻喷谢谢。
目录
简单输出
基本类型
输出格式化
基本运算符
运算
分支控制
循环控制
循环输出图形
一维数组
二维数组
字符/字符数组
函数
递归函数
简单输出
1.输出"Hello Nowcoder!"。开始你的编程之旅吧。
这个家人们,没什么好说的昂
#include
int main()
{
printf("Hello Nowcoder!");
return 0;
}
2.KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。
无
前两道题就这样吧,咱要是看不懂也不能挺着,评论区直接说,小白嘛,该问问,但不能做“伸手党”
#include
int main()
{
printf(" ** \n");
printf(" ** \n");
printf("************\n");
printf("************\n");
printf(" * * \n");
printf(" * * \n");
return 0;
}
基本类型
前十三道题考验输入和输出函数的掌握程度昂,需要注意的是输出时,如果需要控制浮点数,也就是小数,在小数点后面有几位时,在 f\lf 前面加上位数。比如我想输出3.14,就这样。
%.2lf \ %.2f
要是想四舍五入就直接 .0 就好。这里提倡一点,最好不要去深究float和double的区别,不知道用哪个就double就行,如果钻牛角尖的话可能会打消学习积极性(纯个人看法),后期可以了解下,我也会出相应文章供大家观赏。
整形的输入和输出有着属于他自己特殊的地方,输入时在 d 前面加上正整数表示读取几个数,输出时也是在 d 前面加上零和正整数表示输出几个数,不够用零补齐,如下
scanf("%4d",&a); printf("%06d",a);
还有一个可以加的地方就是 %d 前面(这里用%d举例,适用于全部)比如这样
("体重是:%d",a);
这样输出的内容就是:体重是:a 了,比较自由,大家自行体会。
第十四题有一个点就比较有意思哈哈哈哈,他是一个数字交换,就像把一瓶醋和一瓶酱油交换一下里面的液体一样,但是我当初想的是直接 a=b,b=a 不就行了吗,后来实践才知道,所以实践还是很重要的,哈哈哈哈还很单纯。
第十五题就要重点讲下了
1.题目要求多数输入,什么意思呢?就是要一直输入,出对应结果,不是输入一次就完事了。这里一般都是用while循环,如下
//第一种写法
while(~scanf("%d",&a))
//第二种写法
while(scanf("%d",&a) != EOF)
这里解释下为什么
while这个函数是在括号里的数非零或者满足括号内条件时执行,而scanf这个函数也是有返回值的,返回值为 0 表示未分配任何字段。对于错误,或者在第一次尝试读取字符时遇到文件结尾字符或字符串结尾字符,则返回值为 EOF,相信读到这个,大家已经明白了第二个,这里再说下第一个,~ 这个符号:按位补集(或按位补码)运算符生成其操作数的按位补集。操作数必须是整数类型。此运算符执行常规的算术转换;结果具有转换后操作数的类型。咱们想要他停下来,所以必须要输入,这里告诉大家EOF就是 -1 :
原码是10000000000000000000000000000001
反码是11111111111111111111111111111110
补码是11111111111111111111111111111111
按位取反之后就是全零,全零就是十进制零,返回给while就停止了
(vs想要停下来是输入一个ctrl+z换行,持续三次)
部分节选自MSDN
2.既然知道,那怎么大小写转换呢,还是需要借助ASCII表(表请大家自行查阅),通过观察我们发现,大写字母于小写字母之间相差32,所以直接加上32(大转小)或者减32(小转大)就行,在输出的时候。
3.好,我上面的都做到了,怎么还是错啊,输出的时候总是带个 * ???新机词挖一此莫禾多此!
那就是我们一直忽略的回车,回车是 \n 对应ASCII表里26,加上32是58,正好就是 * !那要怎么办呢,这里介绍一个新函数:getchar()和putchar() 他们分别对应读取数据和输出数据,所以如下,大家自行感悟,欢迎评论区讨论
#include
int main()
{
int a = 0;
while((a = getchar()) != EOF)
{
getchar();
putchar(a+32);
printf("\n");
}
return 0;
}
输出格式化
总共五道题。一道一道来。
第一道:我忘了说没说过进制,这里再说下。二进制只有数字0和1,八进制用的少,十进制是0到9,十六进制是0到9再往后是a到f,二进制是逢二进一,就是一旦有一位超过二,就往前在加一位,以此类推(这里就是通俗说下,大概明白就能做这道题,想了解更细致一点在本网站直接搜“进制”就ok了)。他想把十六进制整数ABCDEF转换成十进制数,然而十六进制数通常写法是在前面加上0x 注意看输出要求,要求15域宽,域宽就是输出时的间隔(为了好看点),控制域宽是在d前面加上对应要求,总结后应输出:
printf("%15d",0xABCDEF);
第二道:大家看到字多的千万不要慌啊,我门大意都下题之后知道,也是一个简简单单的进制转换,牛客网也很贴心,备注了想要输出他想要的应该怎么做,所以就简洁明了了。
printf("%#o %#X",1234,1234);
第三道:这道题没啥难点,好好理解过基础知识的应该都能做出来。
第四道:只需要输出时注意空格个数就好。
第五道:只需要把输入时的d改成他备注的x和o就行,加的时候不要多想,他还是以十进制输出(%d)。
基本运算符
敬请期待~
运算
敬请期待~
分支控制
敬请期待~
循环控制
敬请期待~
循环输出图形
敬请期待~
一维数组
敬请期待~
二维数组
敬请期待~
字符/字符数组
敬请期待~
函数
敬请期待~
递归函数
敬请期待~