第一题
求最后打印是多少
//第一题
int cnt = 0;
int fib(int n)
{
cnt++;
if (n == 0)
return 1;
else if (n == 1)
return 2;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
fib(8);
printf("%d", cnt);
}
给fib函数传入n=8
执行 return fib(n - 1) + fib(n - 2);
共执行67次
第二题
int main()
{
int x = 1;
do
{
printf("%2d\n", x++);
} while (x--);
return 0;
}
执行 printf("%2d\n", x++);
//后置++,先使用后++ 所以先打印1 然后再++变为2
//再执行while (x--) 又变为1,1为真在进入循环
//一直重复操作进入死循环
第三题
//第三题
int main()
{
int i = 1;
int j;
j = i++;
printf("%d\n", i);
printf("%d\n", j);
}
//2 1 i++ 先调用后++,所以先调用给j,j为1,然后i++,i为2
第四题
k为多少
int main()
{
int i = 10;
int j = 20;
int k = 3;
k *= i + j;
printf("%d\n", k);
return 0;
}
// k *= i + j;
//+的优先级比 *=高,所以先算i+j=30,然后再算乘等于3*30=90
//最后结果为90
第五题
以下for循环的执行次数为
for(x=0,y=0;(y=123)&&(x<4);x++);
//首先初始化 x=0 y=0
//将y赋值为123,并且x<4,并判断是否为真,若为真进入循环
//x=0,1,2,3符合判断进入循环
//总共循环4次
第六题
正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a > b ? a : b;//取a b中大的一个,表示最小公倍数
while (1)
{
if (m%a == 0 && m%b == 0)
{
printf("%d\n", m);
break;
}
m++;
}
return 0;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = 1;
for (m = 1;; m++)
{
if (a*m%b == 0)
{
printf("%d\n", m);
break;
}
}
return 0;
}
第七题
将一句话的单词进行倒置,例如将 I like beijing. 经过函数后变化为:beijing. like I
//将一句话的单词进行倒置,例如将 I like beijing.经过函数后变化为:beijing. like I
void reverse(char*left, char*right)
{
while (left < right)
{
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[100] = { 0 };
//输入进去字符串
gets(arr);
//三步翻转法
//1. 整体反转字符串 .gnijieb ekil I
//2. 每个单词逆序 beijing. like I
//3.
//1. 整体反转字符串 .gnijieb ekil I
int len = strlen(arr);
reverse(arr,arr+len-1);//传的都为地址
//2. 每个单词逆序 beijing. like I
char *start = arr;
while (*start)
{
char*end = start;//让end往后找
while (*end != ' '&&*end!='\0')//单词的结束位置可能为空格或者\0
{
end++;
}
//逆序一个单词
reverse(start, end - 1);
if (*end == ' ')
start = end + 1;
else
start = end;
}
printf("%s\n", arr);
return 0;
}