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


🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!

🔭个人主页: 散峰而望

🚀学习方向: C/C++等方向

📌专栏系列:

💬人生格言: 冀以尘雾之微,补益山海,荧烛末光,增辉岁月。

🎬博主简介

文章目录


前言

该篇文章主要分享一些比较基础的C语言基础编程代码题,让各位能够更好熟练使用C语言,为以后的深入做好准备。

1. C语言基础知识

  1. 实践出真知

先把语言运行环境改为C模式

文章只要打印出Practice makes perfect!,非常简单所以只需要一个printf函数就行了。代码如下:

c 复制代码
#include <stdio.h>

int main() {
   printf("Practice makes perfect!");
    return 0;
}

回答正确后便会出现这个窗口:

  1. 我是大V

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

这篇题也非常简单,按照形式进行打印。

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;
}
  1. 有容乃大

这道题也非常简单按照题目要求的方式进行输出就行,代码如下:

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;
}
  1. 缩短二进制

根据要求:在八进制前显示前导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

  1. 小飞机

比较简单按照题目要求输入就行,代码如下:

c 复制代码
#include <stdio.h>

int main()
{
	printf("     **\n");
	printf("     **\n");
	printf("************\n");
	printf("************\n");
	printf("    *  *\n");
	printf("    *  *\n");
	return 0;
}
  1. 十六进制转十进制

也是一道非常简单的题按照题目要求打印即可,注意要有15占位宽,要写成 %15d 代码如下:

c 复制代码
#include <stdio.h>

int main()
{
	printf("%15d\n", 0xABCDEF);
	return 0;
}
  1. printf的返回值

由题目可知要打印两个值,要打印两个,一个是输出值一个是返回值。因为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

  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.初入循环

  1. 反向输出一个四位数

如果想让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;
}
  1. 大小写转换

题目要求:多组输入过程中要注意"回车"也是字母,所以要"吸收"(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;
}
  1. 判断字母
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。

  1. 字符圣诞树

这里需要循环打印,因此使用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语言基础,向更高的目标更难的算法进攻。

同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天

相关推荐
Dxxyyyy2 小时前
零基础学JAVA--Day27(注释+异常+异常处理方法)
java·开发语言
视图猿人2 小时前
RxJS基本使用及在next.js中使用的例子
开发语言·javascript
墨雪不会编程2 小时前
C++的基础语法篇一 ——命名空间
开发语言·c++
墨客希2 小时前
安装 awscli
开发语言
天天进步20153 小时前
Python全栈项目:结合Puppeteer和AI模型操作浏览器
开发语言·人工智能·python
唐僧洗头爱飘柔95273 小时前
【GORM(3)】Go的跨时代ORM框架!—— 数据库连接、配置参数;本文从0开始教会如何配置GORM的数据库
开发语言·数据库·后端·golang·gorm·orm框架·dsn
Jonathan Star3 小时前
在 Go 语言中,模板字符串
开发语言·后端·golang
闲人编程3 小时前
用Python识别图片中的文字(Tesseract OCR)
开发语言·python·ocr·识图·codecapsule
程序员卷卷狗3 小时前
JVM 内存结构与 GC 调优全景图
java·开发语言·jvm