例题:1.正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数 2.将一句话的单词进行倒置,单词之间空格,标点不倒置,字母不超100

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力成为焦耳定律鸭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值