大家好,我是深鱼~
目录
前言:
在线OJ
<1>什么是在线OJ
<2>为啥训练在线OJ
1.实践出真知
2.我是大V
3.有容乃大
4.缩短二进制
5.反向输出一个四位数
6.大小写转换
7.小飞机
8.十六进制转十进制
9.printf的返回值
10.学生基本信息输入输出
结语:彼方尚有荣光在,少年不惧岁月长
本部分是C语言初阶部分题目,一共130题,由易到难,适于初学者学习,非初学者勿看题目链接:编程语言初学训练营_在线编程+题解_牛客题霸_牛客网 (nowcoder.com),大家一起冲呀https://www.nowcoder.com/ta/beginner-programmers-v1
在线判题系统(Online Judge)是一种在编程竞赛中用来测试参赛程序的在线系统
a.有些比赛,比如ACM之类的编程竞赛都是采用在线OJ的方式进行
b.笔试OJ化,这是未来的趋势
链接:牛客网—实践出真知
题目:
题解:
#include
int main()
{
printf("Practice makes perfect!");
return 0;
}
打印的内容建议直接复制粘贴,这样可以防止敲错(这题自己敲可能会忘了!)
对应知识点就是C语言的第一个程序:Hello World!
#include
是头文件的包含,stdio中的std是标准,i是输入,o是输出 main函数是程序的入口,并且一个程序中有且只有一个main函数
printf是库函数,是用来打印输出的,库函数的使用得包含头文件,它的头文件就是stdio.h
return 0是在main函数结束的返回值为0
除了第五行,其他的部分都是C语言程序固定部分,是敲代码不可缺少的部分
链接:我是大V
题目:
题解1: 注意这里要用到换行符\n
#include
int main()
{
printf("v v\n");
printf(" v v\n");
printf(" v\n");
return 0;
}
题解2:简化版:直接用一个printf函数打印
#include
int main()
{
printf("v v\n v v\n v\n");
return 0;
}
题目:
题解:
#include
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语言标准:sizeof(long long) >=sizeof (long) >=sizeof (int) >sizeof (short) >sizeof (char)
补充:计算机中常见单位及换算:
bit -比特位
byte -字节
KB 1byte=8bit
MB 1KB=1024byte
GB 1MB=1024KB
TB 1GB=1024MB
PB 1TB=1024GB
链接:缩短二进制
题目:
题解1:注意怎么控制字母大小写,%x就是小写,%X就是大写
#include
int main()
{
printf("0%o 0X%X",1234,1234);
return 0;
}
题解2:用上题目提示的#
#include
int main()
{
printf("%#o %#X",1234,1234);
return 0;
}
拓展:对各种数据的格式控制
%c - 字符
%d - 整形
%s - 字符串
%f - 单精度浮点数
%lf - 双精度浮点数
%p - 地址格式
链接:反向输出一个四位数
题目:
题解:思路就是不断 -模10除10打印-
#include
int main()
{
int a=0;
scanf("%d",&a);
while(a)
{
printf("%d", a%10);
a=a/10;
}
return 0;
}
链接:大小写转换
题解1:
#include
int main()
{
int ch = '0';
while ((ch=getchar()) != EOF)
{
getchar();
putchar(ch + 32);//大写字母的ASCII值比小写的小32
printf("\n");//防止输出的字符和下次输入的字符在同一行
}
return 0;
}
问题1:为啥ch要定义为int类型,而不是char类型
答:getchar:输入/读取一个字符 putchar:输出一个字符(一次只能操作一个字符)
getchar()返回的是字符的ASCII值,是个整数
EOF -end of file 文件结束的标志,通常在文件的末尾,它的值为-1也为整形
问题2:为啥循环中要getchar();答:因为getchar和键盘中间有个缓冲区,每当输入一个字符的时候,我们都会按下回车键,这也就无形之中多了一个'\n',如果没有这个getchar(),'\n'也是一个字符,在循环中也加上32,变成另一个字符,为了拿走这个字符,就需要getchar()
问题3:多组输入怎么写?
while((ch=getchar())!=EOF) { }
题解2:直接用printf()加上\n代替putchar()
#include
int main()
{
int ch = 0;
while ((ch=getchar()) != EOF)
{
getchar();
printf("%c \n",ch + 32);
}
return 0;
}
链接:小飞机
题解: 本题主要是考查printf函数的打印
#include
int main()
{
printf(" **\n");
printf(" **\n");
printf("************\n");
printf("************\n");
printf(" * *\n");
printf(" * *\n");
return 0;
}
链接:十六进制转十进制
题解:本题主要考查格式的输出
#include
int main()
{
printf("%15d",0XABCDEF);//注意这里不能直接写ABCDEF
return 0;
}
链接:printf的返回值
题目:
#include
int main()
{
int a=printf("Hello world!");
printf("\n%d",a);
return 0;
}
本题主要考查printf的返回值:打印在屏幕上字符的个数,如这题"Hello world!"就是13个字符(包括空格和感叹号),所以结果就是
注意:\n不能写在第一个printf函数中,这样printf的返回值会变成13,多了一个
题解2:简化版
#include
int main()
{
printf("\n%d\n",printf("Hello world!"));
return 0;
}
拓展:这个打印的结果是什么呢
#include
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
答:4321(printf打印是从内层开始的,内层调用完,再进行外层,最里面的printf打印43,接着下一个printf打印上一个printf的返回值(即43的)也就是2,最后就是2的返回值,也就是1)
题目链接:学生基本信息输入输出
题目:
题解:注意两个点
(1)scanf输入时要注意格式,看是;(分号)还是,(逗号)
(2)小数在内存中有可能不能精确保存,这题需要四舍五入,double类型不行就换float类型
(3)保留m位小数的写法:%.mf
#include
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;
}
求求了,来个三连吧。