题目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;
}