C语言if和switch的一些应用

1、下面的一段程序的输出结果为( ) (鲁科安全)

#include <stdio.h>

int main()

{

    if(-1)

        printf("1");

    else

        printf("2");

    if(0)

        printf("3");

    else

        printf("4");

    return 0;

}

A. 23         B. 24         C. 13         D. 14

答案:D

分析:

//第一个if-else

if(-1)                        //-1为真,所以执行下面的语句,结果为1

        printf("1");

    else                        //已经执行了if,后面不执行了

        printf("2");

//第二个if-else

if(0)                        //0为假,不执行下面的语句

        printf("3");

    else                        //执行else,结果为4

        printf("4");

//所以最后打印的结果为D.14

2、( )设int s = 100,要输出字符串"s的值是100"应使用下列哪个语句?(山东精电电气)

A. printf("s 的值是%d", s);          B. printf("s 的值是%s", s)

C. printf("s 的值是%x", s):          D. printf("s 的值是%i", s)

答案:A

分析:首先输出字符串"s的值是100"使用printf标准输出函数,int s = 100,int是一个整型数据,其格式控制符是%d、%i,所以排除B、C;C语言中的语句以;结束,所以排除D,正确答案为A。

3、if(n==8)和if(8== n)两种判断方式,哪一种更好,为什么?(泰华智)

if(8==n)更好,因为当不小心将“==”写成"="的时候,编译时if(8=n)会自动报错,而if(n=8)不会报错,这将会影响计算结果,增加调试的难度。

4、if-elseif-else结构和switch-case结构,哪个效率高,为什么?(泰华智慧)

switch-case效率更高,因为switch-case结构通过使用跳转表的数据结构,能够直接跳转到相应的代码块,而不需要像if-else结构那样逐个比较条件,从而大大提高了执行效率。

5、结构化程序设计所规定的三种基本控制结构是:( ) (易购软件)

A. 输入、处理、输出 B. 形、网形、环形

C. 顺序、选择、循环 D. 主程序、子程序、函数

答案:C

6、C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符:_________ (智洋)

A. 必须为字母 B. 必须为下划线

C. 必须为字母或下划线  D. 可以是字母,数字和下划线中任一字符

答案:C

分析:标识符命名规范:

  1. 标识符必须以字母或下划线开始,后面可以跟任意数量的字母、数字或下划线。

  2. 标识符区分大小写。

  3. 不能使用C语言的关键字作为标识符。

7、若执行下面的程序时,从键盘上输入 5,则输出是 ( ) (智洋创新)

int main(int argc, char **argv)

{

    int x;

    scanf("%d", &x);

    if(x++ > 5)

        printf("%d\n", x);

    else

        printf("%d\n", x--);

    return 0;

}

A. 7          B. 4          C. 6          D. 5

答案:C

分析:

 int x;                                      //定义一个整型变量x

    scanf("%d", &x);                //从输入设备输入一个x值,输入x=5

    if(x++ > 5)                        //x++先计算再自加1,即5>5为假,x=6,执行else下的语句

        printf("%d\n", x);

    else                              

        printf("%d\n", x--);        //x--先计算再自减1,即输出x=6之后再自减1,所以输出结果为6

8、以下语句中,能够判断uiNum(unsigned int)可以被16整除的有()(H3C)

A. if (((uiNum / 16) * 16) == uiNum)

B. if ((uiNum % 16) == 0)

C. if ((uiNum & 0x0F) == 0)

D. if (((uiNum >> 4) << 4) == uiNum)

答案:ABCD

分析:uiNum(unsigned int)        //uiNum为无符号整型

        A、((uiNum / 16) * 16) == uiNum,uiNum除以16如果没有余数,再乘以16就能得到uiNum本身,如果有余数,再乘以16就不能得到uiNum。所以A能够判断uiNum(unsigned int)可以被16整除。

        B、(uiNum % 16) == 0,uiNum除以16如果余数等于0,说明能除尽,所以B能够判断uiNum(unsigned int)可以被16整除。

        C、(uiNum & 0x0F) == 0,0x0F是一个十六进制数,转换成二进制是0000 1111,位&运算,有0位0,全1为1,所以uiNum & 0x0F的前四位一定为0,所以剩下的结果不大于16,且不等于0,所以uiNum & 0x0F的值不等于0,uiNum(unsigned int)不可以被16整除。但能够判断uiNum(unsigned int)是否可以被16整除。

1286432168421
0x0F00001111
uiNum
uiNum & 0x0F0000

        D、((uiNum >> 4) << 4) == uiNum,uiNum为无符号整型,uiNum(二进制)使用了右移操作符(>>)和左移操作符(<<)来判断一个数是否为16的倍数。具体来说,如果uiNum是16的倍数,那么(uiNum >> 4)的结果应该为0,因为右移4位后,原来的每一位都会左移12位,对于任何16的倍数来说,这会导致最低的4位都变为0。然后,通过左移操作符将这4个0左移4位,再与原数进行位与操作,如果结果为0,则说明原数是16的倍数。这是因为任何数与0进行位与操作都会得到0,除非该数的某一位是1,但这在原数是16的倍数的情况下是不会发生的。

9、编写一个程序。实现输入一个小写字母,程序输出它对应的大写字母。(提示:小写字母的ASCII码值比大写宇母大32) (中科四平)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char ch;//定义一个字符型变量ch

	printf("input ch:");//提示输入字符ch
	scanf(" %c",&ch);//从输入设备输入一个字符ch
	
	if(ch >= 'a' && ch <= 'z'){ 	//if条件语句()内是条件
		ch -= 32;
	}

	printf("%c\n",ch);//输出ch的值
	return 0;
}

结果如下:

10、已知学生成绩(100分为满分)与等级的对应关系为: (中科四平)

成绩(grade)

等级

90<=grade<=1000

A

80<=grade<90

B

70<=grade<80

C

60<=grade<70

D

grade<60

E

请你编写一个程序,要求:输入学生成绩,输出学生成绩对应的等级。(提示:使用switch....case 语句)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义一个变量grade
	int grade;
	//提示输入成绩,并从键盘输入
	printf("input grade:");
	scanf("%d",&grade);
	//先判断输入的成绩是否有效
	if(grade >= 0 && grade <= 100){
	//判断输入的分数属于哪个等级
		switch(grade / 10){
			case 10: case 9: printf("A\n"); break;
			case 8: 		 printf("B\n"); break;
			case 7: 	   	 printf("C\n"); break;
			case 6: 		 printf("D\n"); break;
			default : 		 printf("E\n"); break;
		}
	}else{
		printf("输入成绩无效,请重新输入:\n");
	}
	return 0;
}

结果如下:

11、编写一个程序。a=3,b=5,对a和b的值进行交换。 (北京君正集成电路)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义变量a,初始化为3;变量b,初始化为5,变量n
	int a = 3, b = 5, n;
	
	n = a;//将a的值赋值给n,n=3
	a = b;//将b的值赋值给a,a=5
	b = n;//将n的值赋值给b,b=3

	printf("a=%d b=%d\n",a,b);//输出a,b的值
	return 0;
}

结果如下:

12、编写一个程序。实现输入一个三位数,判断是否是水仙花数。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int num,a,b,c;

	printf("input num:");
	scanf("%d",&num);
	//判断输入的num是否为一个三位数
	if(num > 99 && num < 1000){
		a = num / 100; 	//a存储num的百位数
		b = num / 10 % 10; 	//b存储num的十位数
		c = num % 10; 		//c存储num的个位数
	//判断a,b,c的三次方之和是否等于num,如果等于输出是水仙花数,如果不等于输出不是水仙花数
		if( a*a*a + b*b*b + c*c*c == num){
			printf("是水仙花数\n");
		} else{
			printf("不是水仙花数\n");
		}
	} else{
		printf("请重新输入一个三位数:");
	}
	return 0;
}

结果如下:

13、编写一个程序。实现输入一个年份,判断是不是闰年。

#include <stdio.h>

int main()
{
	//定义整型变量year
	int year;
	//提示输入年份,并输入
	printf("input year:");
	scanf("%d",&year);
	//判断是否为闰年
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
		printf("%d is leap year\n",year);
	}
	else{
		printf("%d is common year\n",year);
	}

	return 0;
}

结果如下:

14、编写一个程序。请实现以下功能:(威海精讯畅通)

输入三个数,分别为年、月、日,输出此日是该年的第几天。

输入:

XXX  XXX  XXX

输出:

此日是该年的第XXX 天

示例:

输入 2020 2 20

程序输出 此日是该年的第51 天

#include <stdio.h>

int main()
{
	int year,month,day,sum = 0;
	printf("input year , month and day:");
	scanf("%d%d%d",&year,&month,&day);
	//判断输入日期是有有误	
	if(day > 0 && day < 31){
	//判断月份,并计算总天数
	switch(month){
	case 1: sum = 0;   break;
	case 2: sum += 31; break;
	case 3: sum += 59; break;
	case 4: sum += 90; break;
	case 5: sum += 120;break;
	case 6: sum += 151;break;
	case 7: sum += 181;break;
	case 8: sum += 212;break;
	case 9: sum += 243;break;
	case 10:sum += 273;break;
	case 11:sum += 304;break;
	case 12:sum += 334;break;
	default:printf("输入月份有误,请重新输入:\n");
	}
	sum += day;
	//判断闰年,如果为闰年且月份过了二月就多加一天
	if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && (month >= 2)){
			sum += 1;
		}
	printf("%d-%02d-%02d sum=%d \n",year,month,day,sum);
	} else{
		printf("输入日期有误,请重新输入:\n");
	}
	return 0;
}

结果如下:

 

15、编写一个程序。输入三角形的 三个边长

        判断能否构成三角形,如果能

            输出能构成三角形

            再输出是什么三角形

                等边

                等腰

                直角(勾股定理)

                普通

        如果不能

            输出不能构成三角形

#include <stdio.h>

int main()
{
	int a,b,c;

	printf("input 三角形的三边 a b c:");
	scanf("%d%d%d",&a,&b,&c);
	//判断是否能构成三角形
	if ((a + b) > c && (b + c) > a && (c + a) > b){
	//判断三边是否相等,等边三角形
		if (a == b && a == c){
			printf("This is an equilateral triangle\n");
		}
	//判断任意两边相等,等腰三角形
		else if (a == b || b == c || c == a) {
	//判断任意两边的平方和是否等于第三边的平方,等腰直角
			if (c * c == a * a + b * b || a * a == b * b + c * c || b * b == a * a + c * c)	{
				printf("This is a isosceles right triangle\n");
			} 
	//如果上一条件不成立,则为普通等腰三角形
			else {
				printf("This is an isosceles triangle\n");
			}
		} 
	//如果不是的等腰三角形,判断是否为普通直角三角形
		else if (c * c == a * a + b * b || a * a == b * b + c * c || b * b == a * a + c * c){
			 printf("This is a right triangle\n"); 
		}
	//如果都不是,就是普通三角形
		else {
			printf("This is an ordinary triangle\n");
		}
	} 
	//不能构成三角形,重新输入
	else{
		printf("Fail to triangle.Please enter again:\n");
	}

	return 0;
}

结果如下:

16、编写一个程序。有 4 个变量 a,b,c,d,我们提前并不知道他们的值,请用你的方式将他们从大到小排序。算法任意。(山东丁一)

#include <stdio.h>
int main()
{
	//定义5个变量
	int a ,b ,c ,d , n;
	//提示输入4个值,并从键盘输入
	printf("input a b c d:");
	scanf("%d%d%d%d",&a,&b,&c,&d);
	//判断a,b的大小,如果a<b就执行交换值
	if(a < b){
		n = a;
		a = b;
		b = n;
	}
	//判断a,c的大小,如果a<c就执行交换值
	if(a < c){
		n = a;
		a = c;
		c = n;
	}
	//判断a,d的大小,如果a<d就执行交换值
	if(a < d){
		n = a;
		a = d;
		d = n;
	}
	//判断b,c的大小,如果b<c就执行交换值
	if(b < c){
		n = b;
		b = c;
		c = n;
	}
	//判断b,d的大小,如果b<d就执行交换值
	if(b < d){
		n = b;
		b = d;
		d = n;
	}
	//判断c,d的大小,如果c<d就执行交换值
	if(c < d){
		n = c;
		c = d;
		d = n;
	}
	//输出结果
	printf("%d>%d>%d>%d\n",a,b,c,d);
	return 0;
}

结果如下:

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值