1. 关于本文章
1.1文章内容:
本文章讲解130道C语言入门OJ题目,旨在带着初学者刷题入门,同时讲解题目涉及的C语言相关语法。 文章使用的教学环境:Win11+VS2022编译器+牛客网 (www.nowcoder.com)
1.2适合人群
C语言的初学者(大一、大二,大三、研一)
1.3 时间安排
本篇文章模板借鉴于比特就业课c语言刷题训练营,
文章将会跟随课程出12篇
1.4你的收获
a. 学习和巩固C语言,加深对C语言的理解和使用,战胜对代码的恐惧。 b. 熟练掌握在线OJ刷题,熟悉互联网公司笔试的方式。
2.在线OJ
2.1什么是在线OJ
在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用来测试参赛程序的在线系统, 也可以用于平时练习。
2.2 为什么训练在线OJ?
a. 有一些比赛,比如:NOI、NOIP、ACM之类的编程竞赛都是采用在线OJ的方式进行。 b. 现在IT大学生就业找工作的笔试环节也采用在线OJ的方式进行。(笔试OJ化,这是未来的趋势)。
参考链接 https://www.nowcoder.com/contestRoom?categories=0&orderByHotValue=2&filter=0
![](https://img-blog.csdnimg.cn/img_convert/f7f44db3559a15c2ecaa7b829f9853a6.png)
注: 全国青少年信息学奥林匹克竞赛(NOI) 全国青少年信息学奥林匹克联赛(NOIP) 国际大学生程序设计竞赛(ACM )
lesson1
题目描述:
于老师经常告诉我们“学习编程最好的办法就是上机实践,因为你要对计算机下指令,想让计算机帮你干活,就得多和计算机‘交流’,实践才能出真知。”
输入描述:
无
输出描述:
Practice makes perfect!
参考代码:
#include<stdio.h>
int main()
{
printf("Practice makes perfect!");
return 0;
}
题目描述:
KiKi学会了printf在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。
输入描述:
无
输出描述:
![](https://img-blog.csdnimg.cn/img_convert/9b30e5ad296180495a17ba7b0df30ecd.jpeg)
参考代码:
#include<stdio.h>
int main()
{
printf(" **\n");
printf(" **\n");
printf("************\n");
printf("************\n");
printf(" * *\n");
printf(" * *\n");
return 0;
}
题目描述:
确定不同整型数据类型在内存中占多大(字节),输出不同整型数据类型在内存中占多大(字节)。
输入描述:
无
输出描述:
不同整型数据类型在内存中占多大(字节),具体格式详见输出样例,输出样例中的?为不同整型数据类型在内存中占的字节数。输出样例如下:
The size of short is ? bytes.
The size of int is ? bytes.
The size of long is ? bytes.
The size of long long is ? bytes.
参考代码:
#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;
}
答案解析:
这类入门的题目基本都是没有输入操作的。 本题的关键是要掌握C语言的 sizeof 这个操作符。 sizeof 是C语言的一个单目操作符,用来计算不同类型数据所占内存空间的大小,单位是字节。
题目描述:
我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。
输入描述:
无
输出描述:
十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。
备注:
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
参考代码:
#include<stdio.h>
int main()
{
printf("%#o %#X",1234,1234);
return 0;
}
答案解析:
这里需要我们掌握对个各种数据的格式控制 比如:
![](https://img-blog.csdnimg.cn/img_convert/cc8e0b2d59880830f9f408b54cc5d944.png)
格式参考:https://zh.cppreference.com/w/c/io/fscanf 注意:注意还是严格按照题目要求的格式输出,才能保证正确性。
题目描述:
将一个四位数,反向输出。
输出描述:
一行,输入一个整数n(1000 <= n <= 9999)。
示例1
输入:1234
输出:4321
参考代码:
#include <stdio.h>
int main()
{
int n=0;
int sum=0;
scanf("%d",&n);
while(n)
{
sum=n%10;
n/=10;
printf("%d",sum);
}
return 0;
}
答案解析: 这里得掌握操作符 % 和 / 的基本使用和特点。其次是循环的使用。
题目描述:
实现字母的大小写转换。多组输入输出。
输出描述:
多组输入,每一行输入大写字母。
输出描述:
针对每组输入输出对应的小写字母。
示例1
输入:A
B
输出:a
b
备注:
多组输入过程中要注意“回车”也是字母,所以要“吸收”(getchar())掉该字母。
参考代码:
#include<stdio.h>
int main()
{
char ch=0;
while (~(ch=getchar()))
{
printf("%c\n",ch+32);
getchar();
}
return 0;
}
答案解析: 1. 多组数据输入的问题。 2. getchar 清理缓冲区的问题,这里得理解 输入缓冲区 的 问题
解释:多组输入及输入一组\个数程序运行后再次输入一组\个数,相当于进入一个循环输入。
多组输入表达:
这里我们拿while循环举例:
while((ch=getchar ( ) ) != EOF)
while (~(ch=getchar ( ) ) )
原理:
方法1:
众所周知,C语言是不自带输入语言的,要想实现输入数据就会常用文件 stdio.h 里的 scanf 函数。而 scanf 函数在正常读入的时候返回成功读入的数据项数,但当读入时遇到了“文件结束”时则会返回 EOF 。(getchar同理)
eg:
![](https://img-blog.csdnimg.cn/img_convert/5ef07a39d0e4bf79869f8c6f64d54f0a.png)
如果 a 和 b 都被成功读入,scanf 函数的返回值就为 2 ;
如果只有 a 或 b 中的一个被成功读入, scanf 函数的返回值为 1 ;
如果 a 和 b 都未被成功读入,返回值就为 0 ;
但是如果遇到 错误 或 文件结束,那么返回值为 EOF (end of file)。
所以,在测试时 scanf 函数读取的数据并且返回的值不是 EOF 即可进入循环,直到读取数据完毕,文件结束(EOF)。
但是在自己输入数据测试时,如果想要结束输入就要:
(1)windows平台,即dos命令窗口:
输入CTRL+Z即为文件结束。
(2)其它平台,如Unix, Linux,Mac等:
输入CTRL+D即为文件结束。
————————————————
版权声明:本文为CSDN博主「Pyrrole」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51788994/article/details/113352449
方法2:
方法三:
‘~’ 为一元运算符,用于求整数的二进制反码,也就是对输入的数的二进制进行按位取反。
通过上面我们可以知道scanf 的返回值都为为大于等于 -1 的数,只有当 scanf 返回值为 -1(二进制表示为全为 1)时,~scanf() 的值为就为 0,其他情况均不为 0。
所以对于方法三,正常的输入都会进入循环,而当遇到文件结束时就会结束循环。
在自己输入数据测试时,结束输入的方法也与方法一 一样。
————————————————
版权声明:本文为CSDN博主「Pyrrole」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51788994/article/details/113352449
吸收”(getchar())掉该字母:
下一期 log in…………
文章主要参考比特就业课-鹏哥c语言训练营,文章内容及排版格式也参考比特课程的课件;