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