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