总结归纳练习

文章讨论了C语言中的do-while循环和后置运算符的影响,解释了代码为何会产生死循环。同时,涉及到了运算符优先级的问题,如`*=`和`++`。接着,提到了计算两个数最大公倍数的算法,包括试除法和乘积法。最后,文章介绍了如何反转字符串并保留单词顺序,实现过程中包含了字符串逆置和遍历查找单词的操作。
摘要由CSDN通过智能技术生成

1.

int main()

{

int x = 1;

do

{

printf("%d\n", x++);

}while(x--);

return 0;

}

对于这个题的输出结果是死循环的打印1

由于x++是后置++ 先使用 在++ 先进行打印 打印1 在++ x变为2 进行判断 x-- 是后置-- 先使用 在-- 2为真 -- x变成1 就这样反复循环

2.

int i = 10;

int j = 20;

int k = 3;

k *= i+j;

//这道题考虑到了优先级 赋值操作符的优先级是比较低的 所以这道题先计算i+j 在计算*= 结果是90

3.

int year = 1009;

int* p = &year;

能让year变成1010的有

*p += 1;//*的优先级高于+= 所以先计算*p找到year 在+=1 让year变成1010

(*p)++; ++(*p);// 这个不管是前置还是后置都优先计算()里面的 所以都能让year变成1010

*p++;//这种情况是不行的 对于* 和++ 都是单独作用于p的 ++的优先级比*高 先计算++

//又因为++是后置++ 先使用再++ 先*p 找到year 在++ ++作用于p 是将p的值改了

//而不是把p所指向的内容修改了 所以不能让year变成1010.

4.

求两个数的最大公倍数

(1).试除法

int main()

{

int a = 0;

int b = 0;

scanf("%d %d", &a, &b);

int m = a>b?a:b;

while(m%a != 0 || m%b != 0)

{

m++;

}

printf("%d\n", m);

return 0;

}

int main()

{

int a = 0;

int b = 0;

scanf("%d %d", &a, &b);

int m = a>b?a:b;

while(1)

{

if(m%a == 0 && m%b == 0)

{

break;

}

m++;

}

printf("%d\n", m);

return 0;

}

(2).

int main()

{

int a = 0;

int b = 0;

scanf("%d %d", &a, &b);

int i = 1;

while(i*a%b != 0)

{

i++;

}

printf("%d\n", a*i);

return 0;

}

5.倒置字符串 标点不逆置 单词用空格分开 不超过100个字符

例子 I like beijing. beijing. like I

思路 : 逆置整个字符串 再把每个单词逆置回来

void reverse(char* l, char* r)

{

assert(l&&r)

while(l<r)

{

char tmp = *l;

*l = *r;

*r = tmp;

l++;

r--;

}

}

int main()

{

char arr[101] = {0};

gets(arr);

int len = strlen(arr);

//1.逆置整个字符串

reverse(arr, arr+len-1);

//2.逆置每个单词

char* cur = arr;

while(*cur != '\0')

{

char* state = cur;//单词的起始地址

while(*cur != ' ' && *cur != '\0')

{

cur++;//当循环停下来的时候 cur指向的就是空格或者\0的位置 cur-1就是单词的尾地址

}

reverse(state, cur-1);//逆置单词

if(*cur != '\0')

{

cur++;//如果cur指向的不是\0说明还没结束,让cur指向下一个单词的首地址

//循环到上面的 char* state = cur;将state赋值给下一个单词的首地址

//cur遍历拿到这个单词的尾地址

}

}

printf("%s\n", arr);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值