每天一练——C语言练习(4)

本文提供四个C语言编程练习题,包括计算偶数序列和奇数序列的和,按顺序输出三个数,以及逻辑推理找出说谎的窃贼。详细解释了每个问题的解题思路和关键判断条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不要懒!不要停! 坚持刷题!

目录

1.计算:1/2+1/4+……+1/n,设n是由键盘输入的正偶数。

2.计算:1/1+1/3+……+1/n,设n是由键盘输入的正奇数。

3.从终端输入3个数a、b、c,按从大到小的顺序输出。

4. 公安人员审问四名窃贼嫌疑犯


1.计算:1/2+1/4+……+1/n,设n是由键盘输入的正偶数。

#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	double sum = 0.0;
	for (int i = 2; i <= n; i++)
	{
		if (i % 2 == 0)
		{
			sum += 1.0/i;
		}
	}
	printf("sum=%lf", sum);
	return 0;
}

输入一个偶数,n看做大小。用  i  判断是否是偶数(i%2==0)余0就是偶数。

一开始是二分之一,所以i的初始值是2。

2.计算:1/1+1/3+……+1/n,设n是由键盘输入的正奇数。

#include<stdio.h>
int main()
{
	int n;
	scanf("%d", &n);
	double sum = 0.0;
	for (int i = 1; i <= n; i++)
	{
		if (i % 2 == 1)
		{
			sum += 1.0/i;
		}
	}
	printf("%lf", sum);
	return 0;
}

输入一个奇数,n看做大小。用  i  判断是否是奇数(i%2==1)余1就是奇数。

一开始是一分之一(就是1),所以i的初始值是1。

3.从终端输入3个数a、b、c,按从大到小的顺序输出。

//第一种方法按位异或
#include<stdio.h>
int main()
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)
	{
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
	}
	else if (a < c)
	{
		a = a ^ c;
		c = a ^ c;
		a = a ^ c;
	}
	else if (b < c)
	{
		b = b ^ c;
		c = b ^ c;
		b = b ^ c;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

 

//第二种方法加减法
#include<stdio.h>
int main()
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)
	{
		a = a + b;
		b = a - b;
		a = a - b;
	}
	else if (a < c)
	{
		a = a + c;
		c = a - c;
		a = a - c;
	}
	else if (b < c)
	{
		b = b + c;
		c = b - c;
		b = b - c;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

 

//第三种方法变量法
#include<stdio.h>
int main()
{
	int a, b, c;
    int tmp;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b)
	{
		tmp=a;
        a=b;
        b=tmp;
	}
	else if (a < c)
	{
		tmp=a;
        a=c;
        c=tmp;
	}
	else if (b < c)
	{
		tmp=b;
        b=c;
        c=tmp;
	}
	printf("a=%d,b=%d,c=%d\n", a, b, c);
	return 0;
}

比大小有三种方法

按位异或^ :按位异或用的是二进制的方法,也是最高效的

加减法加减法有一定的范围,如果是超大值会溢出

第三个变量变量也比较常用的方式。

看自己个人喜好,如果都会那是最好的!!!

4.  公安人员审问四名窃贼嫌疑犯。

已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:


// 甲说“乙没有偷,是丁偷的”,  
// 乙说“我没有偷,是丙偷的”,
// 丙说“甲没有偷,是乙偷的”,
// 丁说“我没有偷”。
// 请根据这四人的答话判断谁是盗窃者。

#include<stdio.h>
//a=甲   b=乙  c=丙  d=丁
int main()
{
	char ch;
	for (ch = 'a'; ch <= 'd'; ch++)
	{
		if((ch!='b')+(ch=='d')!=1&&(ch!='b')+(ch=='c')!=1&&(ch!='a')+(ch=='b')!=1&&(ch!='d'))
			break;
	}
	printf("%c", ch);
	return 0;
}

这个是一个逻辑问题我们来捋一下

 题目所说:

要么每个人都是诚实的(意思是全部为真话)

要么总有人说假话(意思是全部是假话)

先从甲为例(没有偷我们用    !=       偷了我们用    ==)

 ch !=' b '+ ch==' d ' !=1

把甲乙丙丁说的话用&&串起来,利用for循环遍历一次就可以找到小偷了

今天的分享就到这里啦!

看了这么久点个关注吧!你的肯定是我最大的动力,每天都会分享小题目哦!~

我是Try_harder,正在磕磕绊绊中成长~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Try_harder.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值