笔试题:C语言if语句中的零值比较。零值比较转载自:零值比较.
布尔变量与零值比较: bool flag;
规则:不可将布尔值直接与0,1或者true,false比较
代码示例:
bool flag;
if (flag) //表示flag为真
if (!flag) //表示flag为假
//不良风格,编程时不要使用
if (flag == 0)
if (flag == 1)
if (flag == false)
if (flag == true)
整型变量与零值比较: int flag;
规则:应当将整形变量用“==”或“!=”直接与0比较
代码示例:
int num;
if (num == 0)
if (num != 0)
//不可模仿bool值的比较方式以免被当成是bool变量
if (num)
if (!num)
浮点变量与零值比较 : float flag;(精度) double flag;
规则:不可将浮点型变量用“==”或者“!=”与任何数字比较不论是float变量还是double变量,都有精度限制。所以一定要避免将浮点型变量用“==”或“!=”与数字比较,应该设法换成“>=”或者“<=”形式。
代码示例:
float epsinon = 0.000001; //设定允许的误差
float x;
if (x == 0.0) //隐含错误的比较方法
if ((x >= -epsinon) && (x <= epsinon)) //正确的比较方法
指针变量与零值比较: int* flag;
规则:应当将指针变量用“==”或者“!=”与NULL比较
指针变量的零值是“空”(记为NULL),尽管NULL与0值相同,但是两者意义不同。
代码示例:
char* ptr;
//显示比较,强调ptr是指针变量
if (ptr == NULL)
if (ptr != NULL)
//不要写成
if (ptr == 0)
if (ptr != 0)
if (ptr)
if (!ptr)
习题 : 通过if判断学生的成绩[0~60]不及格,[60~70]及格,[70~80]良好,[80~90]优,[90~100]优+
方法1:
#include<stdio.h>
void main()
{
float score =0 ;
score = (int)score;
switch(score>0?(score>60?(score>70?(score>80?(score>90?5:4):3):2):1):-1)
{
case 5:
printf("优秀%d",score);
break;
case 4:
printf("80~90良好%d",score);
break;
case 3:
printf("70~80可以%d",score);
break;
case 2:
printf("60~70及格%d",score);
break;
case 1:
printf("0~60不及格%d",score);
break;
case -1:
printf("不合法%d",score);
break;
}
}
方法2:
#include<stdio.h>
void main()
{
float score = ;
int a ;
if(0<score<60){
a = 1;
}
switch(a)
{
case 1:
printf("不及格");
}
/*
float score = 99.9;
switch((int)score/10) // 0 1 2 3 4 5 n<60
{
case 0:
case 1:
printf();
break;
case 6:
printf();
break;
}
*/
}
习题 : 打印一个金字塔.
*
***
*****
******* ********* 代码实现:
#include<stdio.h>
int main()
{
int i,j,k;
for(j=1;j<=4;j++)
{
for(k=4;k>j;k--)
{
printf(" ");
}
for(i=1;i<=2*j-1;i++)
{
printf("*");
}
printf("\n");
}
}
习题 : 将54321的整型数字倒着打印.
#include<stdio.h>
int main()
{
//第一种方法
int num = 12345;
for(;num!=0;num=num/10)
printf("%d",num%10);
/* //好理解的
int i = 1;
int b = 0;
int a = 12345;
for(i=1;i<=5;i++)
{
b = a%10;
a = a/10;
printf("%d",b);
}
*/
/* //简单明了的方法
int a = 12345;
printf("%d",a%10);
a = a/10;
printf("%d",a%10);
a = a/10;
printf("%d",a%10);
a = a/10;
printf("%d",a%10);
a = a/10;
printf("%d",a%10);*/
}
习题 : 求某个数字是否是回文数字 (***) 121 12345 54321 .
#include<stdio.h>
void main()
{
int num=12323; //1230+4
//54321 倒序打印
/*
for(;num!=0;num=num/10)
printf("%d",num%10);
*/
int temp1=num;
int temp=0;
for(;num!=0;num/=10)
{
temp*=10;//将之前的数*10 temp=temp*10
temp+=(num%10);//加个数
}
printf("%d\n",temp);
if(temp1==temp)
{
printf("是回文\n");
}
else
printf("不是回文\n");
}
习题 : 求某个5位数中哪一位数最大!如 : 12859.
求出最大值在哪一位.
#include<stdio.h>
int main()
{
int a = 67843;
int i = 0;
int x = 0;
int y = 0;
for(i = 0;i<=5;i++)
{
if(x<a%10)
{
x = a%10;
y = i+1;
}
a = a/10;
}
printf("最大位数是第%d位",y);
}
求出最大值.
#include<stdio.h>
int main()
{
int a = 67554;
int b,c,d,e,f;
b = a/10000;
c = (a/1000)%10;
d = (a/100)%10;
e = (a/10)%10;
f = a%10;
printf("%d %d %d %d %d",b,c,d,e,f); //打印出各个位的值
if(b>=c)
{
if(b>=d)
{
if(b>=e)
{
if(b>=f)
{
printf("最大值是%d",b);
}
else
{
printf("最大值是%d",f);
}
}
else
{
printf("最大值是%d",e);
}
}
else
{
printf("最大值是%d",d);
}
}
else
{
printf("最大值是%d",c);
}
第三种方法:
#include<stdio.h>
int main()
{
int a = 34762;
int b = 0;
int max = 0;
for(;a!=0;a=a/10)
{
b = a%10;
if(max<b)
{
max = b;
}
}
printf("最大值是%d",max);
}