【2023.10.29练习】C语言-字符出现次数计算

计算机能力挑战初赛2020.18题

题目描述:

"输入一行由字符a~z和A~Z组成的字符串,字符串长度<=10000,

求其中任意两个字符出现次数的差值的绝对值

输入: 第一行输入字符串 第二行输入两个字符。

输出: 输出这两个字符出现次数的差值的绝对值

输入样例: AbddeDfacd A d

输出样例: 2

(解释:字符串中字符'A'出现了2次,字符'd'出现了4次,则结果为|2-4|=2)"


题目分析:

#include <stdio.h>
#include <string.h>
#include <math.h>

int main(void) {

	char str[10002];
	scanf("%s", str);
    char A;
	char B;
	A = getchar();
	B = getchar();
	int a = 0;
	int b = 0;
	int i;

	for (i = 0; i < strlen(str); i++) {
		if (str[i] == A || str[i] == A + 32 || str[i] == A - 32) {
			a++;
		}
		if (str[i] == B || str[i] == B + 32 || str[i] == B - 32) {
			b++;
		}
	}

	printf("%d", abs(a - b));

	return 0;
}

一开始代码如上,然而调试后发现scanf(“%s”)虽然不会接收回车键,但会将回车留在缓冲区。

这里可以使用getchar()来将换行吞掉。

然而接下来出现的问题是输入a之后的空格仍会被getchar()读取。

因此再次用getchar()吞掉空格。


最终代码:

#include <stdio.h>
#include <string.h>
#include <math.h>

int main(void) {

	char str[10002];
	scanf("%s", str);
    char A;
	char B;
	getchar();
	A = getchar();
	getchar();
	scanf("%c", &B);
	int a = 0;
	int b = 0;
	int i;

	for (i = 0; i < strlen(str); i++) {
		if (str[i] == A || str[i] == A + 32 || str[i] == A - 32) {
			a++;
		}
		if (str[i] == B || str[i] == B + 32 || str[i] == B - 32) {
			b++;
		}
	}
	printf("%d", abs(a - b));
	return 0;
}

<think>好的,用户想要一些C语言的新手题目。首先,我需要确定用户的背景。可能是一个刚开始学习编程的学生,或者是对编程感兴趣的自学者。他们需要一些基础的练习来巩固语法和基本概念,比如变量、循环、条件语句、数组和函数等。 接下来,我要考虑题目的难度和范围。作为新手题,应该从简单到中等难度,覆盖C语言的核心知识点。常见的入门题目包括计算器、数列求和、判断质数、排序算法等。这些题目不仅帮助理解语法,还能培养解决问题的逻辑思维。 然后,我需要确保题目描述清晰,不会有歧义。例如,斐波那契数列的题目需要明确是输出前n项还是第n项。另外,要考虑用户可能遇到的常见错误,比如数组越界、循环条件错误,或者数据类型的问题,比如在计算平均数时整数除法的问题。 还要考虑题目的多样性,覆盖不同的知识点。比如,基础输入输出、条件判断、循环控制、数组操作、函数使用、指针基础、字符串处理、结构体和文件操作。每个题目最好侧重一个或两个知识点,让用户可以逐步提升。 可能还需要添加一些实际应用的例子,比如学生成绩管理系统,这样可以让用户看到如何将多个知识点结合起来解决实际问题。同时,这样的题目也能激发学习兴趣,因为看起来更有实用性。 另外,要确保题目的可行性,避免超出新手能力范围的题目。例如,排序算法可以从简单的冒泡排序开始,而不是直接要求快速排序或归并排序。指针相关的题目也应该从基础入手,比如交换两个数的值,而不是复杂的指针运算。 最后,提供一些提示或示例代码可能会有帮助,但根据用户的要求,可能只需要题目列表。不过,用户可能希望得到解答,但根据系统指令,用户不可见层可能需要确保答案的正确性和格式,但用户可见层需要结构清晰的回答。因此,在给出题目时,可能需要分点列出,每个题目有明确的编号和简要描述,方便用户逐一练习。 总结下来,我需要生成大约10个涵盖C语言基础知识的题目,按照难度递增排列,每个题目针对不同的知识点,确保用户能通过练习巩固基础,并逐步提升编程能力。</think>以下是为C语言新手设计的10个循序渐进的编程练习题,涵盖基础语法和核心知识点: 1. **Hello World扩展版** 要求:输出自定义欢迎语,并显示当前日期 ```c //示例输出: //欢迎学习C语言!今天是202310月25日 ``` 2. **简易计算器** 要求:输入两个数字和运算符(+,-,*,/),输出运算结果 ```c //输入示例:5 3 * → 输出:15 ``` 3. **数字特征判断** 要求:输入整数,判断并输出是否为偶数、正数、3的倍数 ```c //输入示例:-9 → 输出:奇数 负数 3的倍数 ``` 4. **等差数列求和** 要求:使用循环计算1+3+5+...+n(n为奇数输入值) ```c //输入示例:7 → 输出:16 (1+3+5+7) ``` 5. **矩阵对角线求和** 要求:3x3矩阵输入计算主对角线和副对角线之和 ```c /* 输入示例: 1 2 3 4 5 6 7 8 9 输出:主对角线15 副对角线15 */ ``` 6. **素数验证函数** 要求:编写isPrime函数,判断输入数字是否为素数 ```c //输入示例:17 → 输出:是素数 ``` 7. **字符串反转** 要求:不使用库函数,实现字符串反转功能 ```c //输入示例:hello → 输出:olleh ``` 8. **结构体学生记录** 要求:定义学生结构体,包含姓名和三科成绩,计算平均分 ```c //输入示例:张三 85 90 78 → 输出:平均分84.33 ``` 9. **文件单词统计** 要求:读取文本文件,统计总单词数和最长单词长度 ```c //示例文件内容:C programming is fun → 输出:单词数4 最长长度10 ``` 10. **简易通讯录系统** 要求:实现添加、查询、删除联系人的功能(使用结构体数组) **学习建议**: 1. 从基础题开始,逐步提升难度 2. 每个程序完成后添加注释说明逻辑 3. 尝试不同实现方法(如循环的不同写法) 4. 使用调试工具观察变量变化 5. 完成后可扩展功能(如增加异常处理) 需要具体题解或扩展练习建议,可以告知具体题号哦!(^_^)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值