If For switch 使用 和 零值比较笔试题 (习题)

   笔试题: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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值