这篇文章主要是记录书籍中遇到的有关面试题,方便以后使用,也可帮助大家。
1. float类型的变量x与零值比较;
由于float精度问题, 不可写为:
if(x == 0.0) 或 if(x! == 0.0)
而应该使用">=" 或"<="
if((x >= -0.00001) && (x<= 0.00001))
2. 写出下面两个循环的优缺点
第一种:优点:程序简洁,缺点:多执行了N-1判断并且不利于编译器对代码进行优化,降低执行效率
for(i = 0 ; i< N; i++)
{
if(condition)
dosomething;
else
dootherthing;
}
第二种:正好与第一种相反
if(condition)
{
for(i = 0 ; i< N; i++)
dosomething;
}
else{
for(i = 0 ; i< N; i++)
doOTHERthing;
}
3. 实例:日本发生谋杀案,警察确定嫌疑犯是4个人中的一个,一下是4个嫌疑犯的供词。
A说:不是我
B说:是C
C说:是D
D说:C在说谎
已知3个人是真话,一个人假话。写个程序确定谁是凶手。
解题思路:将4个人所说的话写成计算机可以理解的表达式,即如下:
A: killer != 'A';
B: killer == 'C'
C: killer == 'D'
D: killer != 'D'
找到合适的算法,解决这个问题。对于这个问题,只有4种可能的结果,因此可以采用穷举算法,穷举算法逐一尝试每一种解。
#include
int main()
{
int i, sum, flag = 0;
char killer = 65; // 从A开始
for(i = 0; i < 4; i ++)
{
killer += i;
sum = (killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D');
if(sum == 3)
{
flag = 1;
printf("%c is the killer.\n",killer);
break;
}
}
if(flag == 0)
{
printf("can not find\n");
}
return 0;
}
#include
#include
#incldue
int main()
{
int number, guess, i = 8;
srand(time(NULL)); //为rand 提供设置随机数种子
number = rand()%100 + 1; //产生随机数,并使其在1~100范围
while( i > 0)
{
scanf("%d", &guess);
if(guess == number)
{
printf("Wonderful, you are right!\n");
return 0;
}
else if(guess > number)
{
printf("Sorry, you are wrong.\n");
printf("too high\n");
}
else
{
printf("Sorry, you are wrong.\n");
printf("too low\n");
}
i--;
}
printf("game over\n");
return 0;
}