【每日进步一点点】C语言刷题技巧及训练2

恭喜你发现宝藏,这里是刹那芳间,很高兴为您服务~

在这里插入图片描述

今天是南方的小年,在这里祝大家小年快乐!

这里刷题需要的网站:

点击链接访问牛客网

1.printf的返回值

题目:
描述
KiKi写了一个输出“Hello world!”的程序,BoBo老师告诉他printf函数有返回值,你能帮他写个程序输出printf(“Hello world!”)的返回值吗?
输入描述:

输出描述:
包括两行:
第一行为“Hello world!”
第二行为printf(“Hello world!”)调用后的返回值。

在这里插入图片描述
核心知识:
printf函数返回的是:打印在屏幕上的字符的个数
空格也是一个字符, 所以第一行打印的“Hello world!”有12个字符,所以返回值为12。

2.学生基本信息输入输出

题目:
描述
依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩 (注:输出成绩时需进行四舍五入且保留2位小数)。
数据范围:学号满足1≤n≤20000000 ,各科成绩使用百分制,且不可能出现负数
输入描述:
学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。
输出描述:
学号,3科成绩,输出格式详见输出样例。

示例
输入:
17140216;80.845,90.55,100.00
输出:
The each subject score of No. 17140216 is 80.85, 90.55, 100.00.

#include <stdio.h>
int main()
{
	int id = 0;
	float c_score = 0.0;
	float math_score = 0.0;
	float english_score = 0.0;
	//输入
	scanf("%d;%f,%f,%f", &id, &c_score, &math_score, &english_score);
	//输出
	printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", id, c_score, math_score, english_score);
	return 0;
}

核心知识:
小数在内存中可能不能精确保存
要四舍五入的时候 ,可能会因为float 和 double 的精度不一样,所得到的结果也就不一样,所以看题目输出的结果选择合适的类型定义浮点数

3.判断字母

题目:
描述
从键盘任意输入一个字符,编程判断是否是字母(包括大小写)。
输入描述:
多组输入,每行输入包括一个字符。
输出描述:
针对每行输入,输出该字符是字母(YES)或不是(NO)。

示例
输入:
H
9
输出:
YES
NO

#include <stdio.h>
int main()
{
	char ch;
	//多组输入
	while (scanf("%c", &ch) != EOF)
	{
		//判断并输出
		if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
			printf("YES\n");
		else printf("NO\n");
		getchar();//处理\n
	}
	return 0;
}

重点:
多组输入
区分字符和字母:
字母是字符的一部分,包括小写a ~ z和大写A ~ Z
getchar();用来处理 \n
这是一个很重要的点。在字符题中用来处理多余的字符,这个用法在上一期也出现过,可见其重要性。

4.字符金字塔

题目:
输入描述
输入只有一行,一个字符
输出描述
该字符构成的三角形金字塔

示例
输入1
在这里插入图片描述

#include <stdio.h>
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;
}

思路:
对于打印图形的题重点在于找规律,可以把题目分成几部分思考。
比如这道题,分成两部分处理空格和字符。

5.ASCII码

题目:
描述
BoBo教KiKi字符常量或字符变量表示的字符在内存中以ASCII码形式存储。BoBo>出了一个问题给KiKi,转换以下ASCII码为对应字符并输出他们。
73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33
输入描述:

输出描述:
转换输出题目中给出的所有ASCII到对应的字符。

#include <stdio.h>
int main()
{
	char arr[] = { 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 };
	// arr是数组,数组是用下标来访问的!
	// 0
	int i = 0;
	//计算数组的元素个数
	int sz;
	sz = sizeof(arr) / sizeof(arr[0]);//元素个数=总字节数÷一个元素的字节数
	for (i = 0; i < sz; i++)
	{
		printf("%c", arr[i]);
	}
	return 0;
}

即将高能,魔法来了,古拉拉黑暗之神,啾~ 变~

在这里插入图片描述
运行结果是"I can do it! "
希望我们都能在遇到困难的时候跟自己说"I can do it! "
猫猫冲!!!~

6. 出生日期输入输出

题目:
描述
输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出。
数据范围:年份满足1990≤y≤2015 ,月份满足1≤m≤12 ,日满足1≤d≤30
输入描述:
输入只有一行,出生日期,包括年月日,年月日之间的数字没有分隔符。
输出描述:
三行,第一行为出生年份,第二行为出生月份,第三行为出生日期。输出时如果月份或天数为1位数,需要在1位数前面补0。

示例
输入:
20130225
输出:
year=2013
month=02
date=25

#include <stdio.h>
int main()
{
	int year = 0;
	int month = 0;
	int date = 0;
	//按照格式输入
	scanf("%4d%2d%2d", &year, &month, &date);
	//输出
	printf("year=%4d\n", year);
	printf("month=%02d\n", month);
	printf("date=%02d\n", date);
	return 0;
}

核心知识:
通过 scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;
通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。

7. 2的n次方计算

题目:
描述
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。
数据范围: 0≤n≤31
输入描述:
一行输入整数n(0 <= n < 31)。
输出描述:
输出对应的2的n次方的结果。

示例
输入:
2
输出:
4

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	// 2的n次方计算
	printf("%d\n", 1 << n);
	return 0;
}

核心知识:
在这里插入图片描述

每日进步一点点

OK 各位
这就是本期博客的全部内容啦,非常感谢你能看到这里,咱们下次再见~

如果你觉得这篇文章写的 还不错的话,求赞,求收藏,求转发,最重要的是点一个大大的关注,各位的支持,是我最大的动力

在这里插入图片描述

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刹那芳间-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值