
🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
🔭个人主页: 散峰而望
🚀学习方向: C/C++等方向
📌专栏系列:
💬人生格言: 冀以尘雾之微,补益山海,荧烛末光,增辉岁月。
🎬博主简介



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

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

做任何题目都要注意题目描述所需求的内容

这篇题也非常简单,按照形式进行打印。
c
#include <stdio.h>
int main()
{
printf("v v\n");
printf(" v v\n");
printf(" v\n");
return 0;
}
除了多行输入,也可以单行输入:
c
#include <stdio.h>
int main()
{
//一行输出的效果
printf("v v\n v v\n v\n");
return 0;
}
这道题也非常简单按照题目要求的方式进行输出就行,代码如下:
c
#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"分别输出八进制整数和十六进制整数
则代码如下:
c
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
比较简单按照题目要求输入就行,代码如下:
c
#include <stdio.h>
int main()
{
printf(" **\n");
printf(" **\n");
printf("************\n");
printf("************\n");
printf(" * *\n");
printf(" * *\n");
return 0;
}
也是一道非常简单的题按照题目要求打印即可,注意要有15占位宽,要写成 %15d 代码如下:
c
#include <stdio.h>
int main()
{
printf("%15d\n", 0xABCDEF);
return 0;
}
由题目可知要打印两个值,要打印两个,一个是输出值一个是返回值。因为printf函数返回的是打印在屏幕上的字符的个数,所以需要一个变量来接收这个返回值。
c
int main()
{
int ret = printf("Hello world!");
printf("%d\n", ret);
}
又题目要求打印要在两行那么是否要在Hello world后面加上 \n 呢?

发现输出的不为12,而是13,这是为什么呢?原因是将 \n 一并读取了,所以 \n 要单开一列。
c
#include <stdio.h>
int main()
{
int ret = printf("Hello world!");
printf("\n");
printf("%d\n",ret);
return 0;
}
也可以这样写:
c
#include <stdio.h>
int main()
{
int ret = printf("Hello world!");
printf("\n%d\n",ret);
return 0;
}
还能这样写:
c
#include <stdio.h>
int main()
{
printf("\n%d\n",printf("Hello world!"));
return 0;
}
至于为什么可以这样写,是因为想要打印 %d 就必须读取Hello world 的返回值,所以先打印Hello world,然后换行,打印返回值。
那么思考一下,下面这样写会有什么效果,打印的是什么?
c
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0;
}
打印:4321
因为43是两个值,所以返回2,然后第二个printf打印2,之后返回1,打印1
由题目要注意输入格式,其他的按照题目要求输出就行。代码如下:
c
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循环。
所以代码如下:
c
#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循环。
c
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch + 32);
getchar();//处理多余的\n
}
return 0;
}
运行会发现这个代码有错误,这是为什么呢?因为while循环没有跳出。想让代码读取失败需要加一个 != EOF (EOF -- end of file文件结束标志,通常为文件的末尾),同时还要换行。
c
#include <stdio.h>
int main() {
int ch = 0;
while ((ch = getchar()) != EOF) {
putchar(ch + 32);
printf("\n");
getchar();//处理多余的\n
}
return 0;
}
当然还可以这样写:
c
#include <stdio.h>
int main() {
int ch = 0;
while ((ch = getchar()) != EOF) {
printf("%c\n", ch + 32);
getchar();//处理多余的\n
}
return 0;
}
c
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
printf("YES\n");
else
printf("NO\n");
getchar();//处理\n
}
return 0;
}
如果最后不再写一下getchar()处理 \n 就会一直报错。当然对getchar了解比较少可以改用isalpha库函数,代码如下:
c
int main()
{
int ch = 0;
while((ch=getchar()) != EOF)
{
//使用库函数
if(isalpha(ch))
printf("YES\n");
else
printf("NO\n");
getchar();
}
return 0;
}
isalpha - 是专门用来判断一个字符是不是字母,是字母返回非0的值,不是字母返回0。
这里需要循环打印,因此使用for循环相对好用。同时该题需要先循环一次确定行数 ,之后再循环一次空格 和字符。
c
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语言基础,向更高的目标更难的算法进攻。
同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天。

