数论相关问题分析/First

题目001

三个整数的比较、浮点数的比较、双精度的比较

分析:三个数比较大小,首先取两个数比较大小,然后将最大的再和剩下的那个比较

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>

using namespace std;

int main()
{
	double a, x, y, z;
	(void)scanf("%lf %lf %lf %lf", &a, &x, &y, &z);
	if (x > y)
	{
		if (x > z)
		{
			printf("%lf", x);
		}
		else
		{
			printf("%lf", z);
		}
	}
	if (x < y)
	{
		if (y > z)
		{
			printf("%lf", y);
		}
		else
		{
			printf("%lf", z);
		}
	}
	return 0;
}

题目002

输入一个字符串,按单词将该字符串逆序输出

提示:可用c++中string类数组

如:

输入:XIAN JIAOTONG UNIVERSITY

输出:UNIVERSITY JIAOTONG XIA

分析:使用string类需要头文件<string>,string类处理字符串很方便,可以完全代替C语言中的char数组

当然本示例没有使用

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main() {
    char arr[100][100];
    int i = 0;

    // 从用户输入中读取单词,直到遇到换行符
    while (scanf("%s", arr[i]) != EOF) 
    {
        i++;

        // 检查是否遇到换行符,如果是,则跳出循环
        if (getchar() == '\n')
            break;
    }

    i--;

    // 以相反的顺序打印单词,用空格分隔
    for (int j = i; j >= 0; j--) {
        if (j == i)
            printf("%s", arr[j]);
        else
            printf(" %s", arr[j]);
    }

    return 0;
}

题目003

将字符串完全逆序输出

分析:本示例使用了一个strlen()函数,可以计算字符串中字符的数量,注意增加头文件<string.h>

#define _CRT_SECURE_NO_WARNIGS
#include<stdio.h>
#include<iostream>
#include<string.h>

using namespace std;
int main()
{
	char array[200];
	(void)scanf_s("%s", &array,sizeof(array));
	for (int i = strlen(array); i >= 0; i--)
	{
		printf("%c", array[i]);
	}
	return 0;
}

题目004 

char 数组表示的正整数数字,比如”123”、”976”,现在要将他们变为int型数字,然后将两个数字作加法

分析:一位的字符型数字减去字符’0‘即为该整数,如 ’1‘-’0‘ = 1、’7‘-’0‘ = 7

同样,我们也运用了strlen()函数,头文件<string.h>,123=100*1+10*2+1*3

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<iostream>

using namespace std;

int main()
{
	int a=0, b=0;
	char x[100], y[100];
	scanf_s("%s %s", &x, sizeof(x), &y, sizeof(y));
	for (int i = 0; i < strlen(x); i++)
	{
		a = a * 10 + (int)(x[i] - '0');
	}
	for (int n = 0; n <strlen(y); n++)
	{
		b = b * 10 + (int)(y[n] - '0');
	}
	int c = a + b;
	printf("%d", c);
}

这个C程序从用户那里读取单词,直到遇到换行符。接着,它将这些单词存储在二维数组`arr`中,并以相反的顺序用空格分隔打印这些单词。`#define _CRT_SECURE_NO_WARNINGS` 是为了在使用Microsoft Visual Studio中的某些函数时抑制与安全性相关的警告。

以下是代码的详细解释:

1. `char arr[100][100];`:声明一个二维数组,最多可以存储100个单词,每个单词最长为99个字符。

2. `int i = 0;`:初始化一个变量`i`,用于跟踪输入的单词数量。

3. `while` 循环使用 `scanf` 读取单词,直到遇到文件结束符 (`EOF`) 或者换行符。将这些单词存储在 `arr` 数组中,如果遇到换行符,循环就会中断。

4. `i--;`:将`i`减1,以修正循环中的额外递增。

5. `for` 循环以相反的顺序打印单词,用空格分隔。它检查当前单词是否是第一个要打印的单词,以避免在第一个单词之前打印额外的空格。

下面是一个示例执行:

```plaintext
输入: This is a sample sentence
输出: sentence sample a is This
```

注意:此程序假设单词之间用空格分隔,并且输入不超过数组限制。它可能无法处理所有可能的边界情况,也可能无法优雅地处理输入错误。根据需求,你可能需要添加额外的输入验证和错误检查。

疑问:计算机怎么区分不同单词?

在这个代码中,不同的单词是通过`scanf`函数的格式化字符串指定的`"%s"`来区分的。让我详细解释一下:

```c
while (scanf("%s", arr[i]) != EOF) {
    i++;
    if (getchar() == '\n')
        break;
}
```

在这个`while`循环中,`scanf("%s", arr[i])`用于从标准输入(用户输入)读取一个字符串,并将其存储在`arr[i]`中。 `%s` 是格式化字符串,告诉`scanf`读取一个字符串,遇到空格、制表符或换行符时停止。因此,`scanf`会将一个单词(不包含空格、制表符或换行符的字符序列)读取到数组 `arr[i]` 中。

每次循环迭代都会递增`i`,以便将下一个单词存储在数组的下一个位置。

循环的终止条件是检查`getchar() == '\n'`,即如果用户输入了换行符(按下了Enter键),则跳出循环。这是因为这段代码似乎是用于逐行输入,每次循环读取一行的单词,并且通过换行符来判断是否结束输入。

总体来说,通过`scanf`的`"%s"`格式化字符串,这个代码可以区分用户输入中的不同单词。程序会持续循环,每次将一个新单词存储在数组中,直到用户输入换行符为止。

题目005

判断字符串是否是回文

判断正整数是否左右对称,就是1,34543之类的数。可以把原来的数的高低位互换,构造一个新的数,如果和原来的数相等则是对称数

输入一个数如果是对称数,返回1,否则返回0

分析:高低位互换,本质就是判断首项和尾项是否相同,以此类推

说明:

!!!continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环

!!!break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<iostream>

using namespace std;

int main()
{
	char a[100];
	(void)scanf("%s", &a);
	int k = 0;
	int length = strlen(a);
	for (int i = 0; i < length; i++)
	{
		if (a[i] == a[length - i - 1])
			continue;
		k = 1;
		break;
	}
	if (k == 1)
	{
		printf("0");
	}
	if (k == 0)
	{
		printf("1");
	}
	return 0;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

挣钱钱暴富富

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

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

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

打赏作者

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

抵扣说明:

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

余额充值