C语言刷题-编程(一)(基础)

🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
🔭个人主页:散峰而望
🚀学习方向: C/C++等方向
📌专栏系列:
- 📖《C语言:从基础到进阶》
- 📚《编程工具的下载和使用》
- 🚀《C语言刷题》
- ⚖️《算法竞赛从入门到获奖》
💬人生格言:冀以尘雾之微,补益山海,荧烛末光,增辉岁月。
🎬博主简介



文章目录
- 前言
- 1. C语言基础知识
- 2.初入循环
- 结语
前言
该篇文章主要分享一些比较基础的C语言基础编程代码题,让各位能够更好熟练使用C语言,为以后的深入做好准备。
1. C语言基础知识
- 实践出真知
先把语言运行环境改为C模式

文章只要打印出Practice makes perfect!,非常简单所以只需要一个printf函数就行了。代码如下:
#include <stdio.h>int main() {printf("Practice makes perfect!");return 0;
}
回答正确后便会出现这个窗口:

- 我是大V
做任何题目都要注意题目描述所需求的内容

这篇题也非常简单,按照形式进行打印。
#include <stdio.h>int main()
{printf("v v\n");printf(" v v\n");printf(" v\n");return 0;
}
除了多行输入,也可以单行输入:
#include <stdio.h>int main()
{//一行输出的效果printf("v v\n v v\n v\n");return 0;
}
- 有容乃大
这道题也非常简单按照题目要求的方式进行输出就行,代码如下:
#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;
}
- 缩短二进制
根据要求:在八进制前显示前导0,在十六进制数前显示前导0X。但是一般电脑打印不会出现,所以要自行添加。又由备注
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数
则代码如下:
int main()
{printf("0%o 0X%X", 1234, 1234);return 0;
}
注意:这里题目要求十六进制(字母大写),千万不要把X写成x。
这里我们就需要对各种数据的格式控制进行掌握,比如:

格式参考:https://zh.cppreference.com/w/c/io/fscanf
更多了解:https://blog.csdn.net/sanfengerwang/article/details/151065417
- 小飞机
比较简单按照题目要求输入就行,代码如下:
#include <stdio.h>int main()
{printf(" **\n");printf(" **\n");printf("************\n");printf("************\n");printf(" * *\n");printf(" * *\n");return 0;
}
- 十六进制转十进制
也是一道非常简单的题按照题目要求打印即可,注意要有15占位宽,要写成 %15d 代码如下:
#include <stdio.h>int main()
{printf("%15d\n", 0xABCDEF);return 0;
}
- printf的返回值
由题目可知要打印两个值,要打印两个,一个是输出值一个是返回值。因为printf函数返回的是打印在屏幕上的字符的个数,所以需要一个变量来接收这个返回值。
int main()
{int ret = printf("Hello world!");printf("%d\n", ret);
}
又题目要求打印要在两行那么是否要在Hello world后面加上 \n 呢?

发现输出的不为12,而是13,这是为什么呢?原因是将 \n 一并读取了,所以 \n 要单开一列。
#include <stdio.h>int main()
{int ret = printf("Hello world!");printf("\n");printf("%d\n",ret);return 0;
}
也可以这样写:
#include <stdio.h>int main()
{int ret = printf("Hello world!");printf("\n%d\n",ret);return 0;
}
还能这样写:
#include <stdio.h>int main()
{printf("\n%d\n",printf("Hello world!"));return 0;
}
至于为什么可以这样写,是因为想要打印 %d 就必须读取Hello world的返回值,所以先打印Hello world,然后换行,打印返回值。
那么思考一下,下面这样写会有什么效果,打印的是什么?
int main()
{printf("%d", printf("%d", printf("%d", 43)));return 0;
}
打印:4321
因为43是两个值,所以返回2,然后第二个printf打印2,之后返回1,打印1
- 学生基本信息输入输出
由题目要注意输入格式,其他的按照题目要求输出就行。代码如下:
int main()
{int number = 0;float score_c = 0.0;float score_math = 0.0;float score_eng = 0.0;scanf("%d;%f,%f,%f", &number, &score_c, &score_math, &score_eng);printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n", number, score_c, score_math, score_eng);return 0;
}
2.初入循环
- 反向输出一个四位数
如果想让1234反向输入为4321,我们可以联想到/%,这是因为
1234 % 10 == 4
123 % 10 == 3
…
同时
1234 / 10 == 123
123 / 10 == 12
…
又需要多次运行/%,所以需要用到while循环。
所以代码如下:
#include <stdio.h>int main()
{int n = 0;scanf("%d", &n);while (n){printf("%d", n % 10);n /= 10;}return 0;
}
- 大小写转换
题目要求:多组输入过程中要注意“回车”也是字母,所以要“吸收”(getchar())掉该字母。
所以此处要用到getchar函数,如果对这个函数不了解的可以跳转到这里进行了解:https://blog.csdn.net/sanfengerwang/article/details/154577254
因为getchar函数所有的字母都会读取,所以如果用getchar会出现,将回车键读取,放有’\n’字符,打印出’*‘。所以要解决这个问题要第二次调用getchar把’\n’从输入缓冲区拿走。
同时需要多组输入所以要用到while循环。
int main()
{int ch = 0;while ((ch = getchar()) != EOF){putchar(ch + 32);getchar();//处理多余的\n}return 0;
}
运行会发现这个代码有错误,这是为什么呢?因为while循环没有跳出。想让代码读取失败需要加一个 != EOF (EOF – end of file文件结束标志,通常为文件的末尾),同时还要换行。
#include <stdio.h>int main() {int ch = 0;while ((ch = getchar()) != EOF) {putchar(ch + 32);printf("\n");getchar();//处理多余的\n}return 0;
}
当然还可以这样写:
#include <stdio.h>int main() {int ch = 0;while ((ch = getchar()) != EOF) {printf("%c\n", ch + 32);getchar();//处理多余的\n}return 0;
}
- 判断字母
#include <stdio.h>int main()
{int ch = 0;while ((ch = getchar()) != EOF){if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))printf("YES\n");elseprintf("NO\n");getchar();//处理\n}return 0;
}
如果最后不再写一下getchar()处理 \n 就会一直报错。当然对getchar了解比较少可以改用isalpha库函数,代码如下:
int main()
{int ch = 0;while((ch=getchar()) != EOF){//使用库函数if(isalpha(ch))printf("YES\n");elseprintf("NO\n");getchar();} return 0;
}
isalpha - 是专门用来判断一个字符是不是字母,是字母返回非0的值,不是字母返回0。
- 字符圣诞树
这里需要循环打印,因此使用for循环相对好用。同时该题需要先循环一次确定行数,之后再循环一次空格和字符。
int main()
{char ch = 0;ch = getchar();int i = 0;//每循环一次,打印一行//每一行由2部分组成,空格和字符for (i = 0; i < 5; i++){//打印空格int j = 0;for (j = 0; j < 4 - i; j++){printf(" ");}//打印字符for (j = 0; j <= i; j++){printf("%c ", ch);}printf("\n");}return 0;
}
结语
希望这些题目能够更好的帮助各位掌握C语言基础,向更高的目标更难的算法进攻。
同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天。


