【C语言】速刷日记

本篇收录总结3道C语言题型,其中两道来自ACM编程,有兴趣的可以刷刷,总结经验。

①. C循环控制

#include<stdio.h>
int main(){
 unsigned char i = 7;
 int j = 0;
 for(;i > 0;i -= 3){
++j;
 }
printf("%d\n", j);
 return 0;
}

请问该程序的输出是多少(
A. 2
B.死循环
C. 173
D. 172
解析:

#include<stdio.h>
int main() {
	unsigned char i = 7;
	//unsigned char 的范围为0-255
	int j = 0;
	for (; i > 0; i -= 3) //要求i大于0,当i等于0时循环停止。所以我们就计算什么时候i等于0,这时j循环了多少次就可以了
	{
		++j;
	}
	//7 4 1 254~~~ 2  255~85
	//3+84+1+85=173
	printf("%d\n", j);
	return 0;
}

在这里插入图片描述

②. 添加逗号

在这里插入图片描述
思路:

规定N的范围不能超过2,000,000,000,而整数int类型的最大范围是2,147,483,647 所以没有超过整形范围。
注意它说每三位加一个逗号,如果我们从前面每三位开始加逗号,可能会更加难以理解。所以我们应该是从后面开始每三个数加一个逗号。
而我们获取数字也是从低位开始获取,我们可以从低位获取数字后,每获取三个数字就加上一个逗号, 当数字全部获取完后,再将获取的数字倒过打印。

代码:

int main()
{
	int n;
	scanf("%d", &n);
	char arr[14] = { 0 };//n的最大数是13位
	int i = 0;
	int k = 0;
	while (n)
	{
		if (k % 3 == 0&&k!=0)//k是用来记录每获取三个数字后就加上一个逗号的标识
		{
			arr[i++] = ',';
			
		}
		//不断获取n的低位数字,然后把它变成数字字符放进数组里
		arr[i++] = n % 10 + '0';//数字加'0'==数字字符 ---比如 8+'0'=='8'
		//获得一个数字就给数组arr的下标+1
		k++;
		n /= 10;

	}
	//最后倒着打印数组
	int j = 0;
	for (j = i-1; j >= 0; j--)
	{
		printf("%c", arr[j]);
	}
	return 0;
}

③. 删除公共字符

在这里插入图片描述
思路:

要求输入两个字符串,输出字符串1中没有出现字符串2中的字符。
可以投机一下,并不是真正意义上的的删除
我们直接打印字符串1中没有出现字符串2中的字符就可以了。 如果字符串1中的字符与字符串2中的某个字符一样则不打印,如果全不一样则进行打印。

#include <string.h>
#include <assert.h>
int is_not_exist(char ch, char* str)
{
	assert(str != NULL);
	while (*str)
	{
		if (*str == ch)
		{	
			return 0;//如果一样直接返回0,那if语句就不成立,就不要打印
		}
		str++;
	}
	return 1; //最后遍历完arr2后发现没有字符与arr1[i]一样,那就返回1,if语句为真,进行打印

}
int main()
{
	char arr1[100] = { 0 };
	char arr2[100] = { 0 };
	//输入
	gets(arr1);
	gets(arr2);
	int sz = strlen(arr1);
	int i = 0;
	//输出
	for (i = 0; i < sz; i++)
	{
		if (is_not_exist(arr1[i],arr2))//如果该字符与arr2中所以字符都不一样那就可以打印,如果有一个一样那就不打印
		{
			printf("%c", arr1[i]);
		}
	}
	return 0;
}

我们还可以利用库函数strchr
在这里插入图片描述
查找字符串中的字符,如果有则返回该字符所在的地址,如果没有则返回NULL.

int main()
{
	char arr1[100] = { 0 };
	char arr2[100] = { 0 };
	//输入
	gets(arr1);
	gets(arr2);
	int sz = strlen(arr1);
	int i = 0;
	//输出
	for (i = 0; i < sz; i++)
	{
		
//strchr--查找字符,查找一个字符串中是否有一个字符,如果有则返回第一次出现的地址,如果没有则返回NULL;
		if (strchr(arr2, arr1[i])== NULL)//如果没有找到则返回NULL,也就可以打印了
		{
			printf("%c", arr1[i]);
		}
	}
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小陶来咯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值