#define _CRT_SECURE_NO_WARNINGS 1
// &&并且 ||或者
//switch不一定需要default语句 if语句可以没有else
//
//x,y均为double型, x=2;y=x+3/2;则y的值为 3.000000
//#include<stdio.h>
//int main()
//{
// int x = 0; int y = 0;
// for (x = 0, y = 0; (y = 123) && (x < 4); x++)//一个等号是赋值
// ;
//
// return 0;
//}
//以上循环进行四次
//选择表达式 11||10的结果为
//11为00000000000000000000000000001101
//10为00000000000000000000000000001100按位或
// 00000000000000000000000000001101 为11
//char a; int b; float c; double d;计算结果为double型
//正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数
//要求:输入正整数A B 输出A和B的最小公倍数
//思路1:公倍数min必须能整除a,b。。并且最小公倍数应最小比a,b中最大的数大,从a,b中最大的数开始++
//#include<stdio.h>
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d %d", &a, &b);
// int min = a > b ? a : b;//min为最小公倍数 a > b ? a : b含义为 如果a>b,则将a赋给min,否则将b赋给min
// while (1)
// {
// if (min % a == 0 && min % b == 0)
// {
// printf("%d", min);
// break;
// }
// min++;
// }
// return 0;
//}
//思路2:公倍数min必须能整除a,b。。并且a与一个数相乘的结果除以b,直到能得到一个余数为0,即为最小公倍数
//#include<stdio.h>
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d %d", &a, &b);
// int i = 1;
// while (1)
// {
// if(a*i%b==0)
// {
// printf("%d", a * i);
// break;
// }
// i++;
// }
// return 0;
//}
//将一句话的单词进行倒置,标点不倒置,如 I like Fanshabi. 经过函数变换.Fanshabi.like I
//输入要求,输入的字符串不能超过100
//输出要求:依次输出倒置之后的字符串,以空格分隔将一句话的单词进行倒置,标点不倒置,如 I like Fanshabi. 经过函数变换.Fanshabi.like I
//思路:三步翻转法:
// 1.字符串整体翻转:
//2每个单词逆序:
void reverse(char*left, char*right)//实现所有字符串翻转部分: 定义两个空间right left并解地址
{
while (left < right)
{
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
#include<stdio.h>
int main()
{
char arr[100] = {0};
//scanf("%s\n", &arr);//scanf不能有空格,否则打印的结果会中断,所以用gets函数
gets(arr);//scanf不能有空格,否则打印的结果会中断,所以用gets函数
int len = strlen(arr);//求字符串长度,放在len中,如arr[a b c d e f]字符串长度为6
reverse(arr, arr + len - 1);//实现字符串整体翻转部分
//从arr开始,到arr+len-1截止...arr为起始位置0(下标),len为字符串长度6,arr+len-1为最后一个词下标
//每个单词逆序部分:
char* start = arr;//将数组名起始地址给start
while (*start)//循环,知道start里面赋值的arr变为\0
{
char* end = start;//把start赋给end,end往后找,直到找到空格
while (*end != ' ' && *end !='\0')//结束标准有两种:空格和\0
{
end++;
}
reverse(start, end - 1);//start为起始位置,end为空格,需要找的是空格前的字母,所以end-1
if (*end == ' ')//此时排除*end=\0结束时,跳过并还在循环的情况
start == end + 1;
else
start = end;
start = end + 1;
}
printf("%s\n", arr);
return 0;
}