9.3 C语言顺序结构和选择结构练习

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条件为"-1"非零所以输出1。第二个if中条件为0所以输出“4”。故答案为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

解析:B选项缺少语句结束的“;”,C选项输出语句内为“%x”输出的是十六进制的100不符合题意。D项缺少语句结束的“;”

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

答:if(8==n)更好,因为if(n==8)在C语言中如果输入错误少打一个“=”会导致程序不报错,但影响最终输出结果不方便查找错误。

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

答:switch-case 执行效率更高,因为该方法只需判断一次就可获得结果,而if-elseif-else结构需要判断多次影响执行效率。

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

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

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

答案:C

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

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

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

答案:C

解析: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

解析:x++是先进行运算判断后再进行自加操作,判断后自加1,x=6执行else输出x。故答案为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)

答案: B C         

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义一个字符变量ch
    char ch;
	//输出提示信息
	printf("请输入一个小写字母:\n");
	//输入一个字符
	scanf(" %c",&ch);
	//判断是否输入的是大写字母
	if(ch>='a'&&ch<='z')
	{
	//根据ASCII表中所知大写字母-32为小写字母的ASCII码
	printf("%c",ch-32);
	}
	else{
		printf("请输入小写字母");}
	return 0;
}

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

成绩(grade)

等级

90<=grade<=100

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[])
{
	int grade;
	printf("请输入学生成绩:\n");
	scanf(" %d",&grade);
	//为减少代码书写量和重复率将百分制分数换算成十分制利用算术运算符/取商作为case条件
	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;
	//其余皆为E等级
	default:printf("该生成绩为E\n");break;
	}
	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和b进行变量赋值
	int a=3,b=5;
	//定义第三个变量作为交换媒介
	int t;
	//将a的值赋值给t类似存入t
	t=a;
	//将b的值赋值给a
	a=b;
	//将t(原来a的值)赋值给b完成交换
	b=t;
	//输出交换结果
	printf("a=%d b=%d\n",a,b);
	return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
      int a=3,b=5;
	  //整合交换类似于加法交换律的样子
	  a=a+b;
	  b=a-b;
	  a=a-b;
	  printf("a=%d b=%d",a,b);
	  return 0;
}

12. 编写一个程序。实现输入一个三位数,判断是否是水仙花数。 水仙花数——各个位立方之和等于本身。 eg: 1*1*1 + 5*5*5 + 3*3*3 = 153,所以153是水仙花数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义一个整型变量num
	int num;
	//输出提示语句
	printf("请输入一个三位数:\n");
	//键盘输入num的值
	scanf("%d",&num);
	//定义三个整型变量存储个位、十位、百位
	int a,b,c;
	//利用%取余,/取商提取出个位十位百位
	a = num%10;
	b = num/10%10;
	c = num/100%10;
	//根据水仙花数定义进行判断
	if(a*a*a+b*b*b+c*c*c==num){
	//满足if条件执行输出语句是水仙花数
         printf("%d 是水仙花数!",num);
	}
	else{
	//不满足if里的条件输出不是水仙花数
    	printf("%d不是水仙花数",num);
	}
	return 0;
}

13.编写一个程序。实现输入一个年份,判断是不是闰年。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义整型变量作为存入年份
	int year;
	printf("请输入年份");
	//输入年份
	scanf("%d",&year);
	//if条件填写闰年条件4年一闰年,100年不闰。400年一闰
	if((year%4==0&&year%100!=0)||(year%400==0)){
		printf("%d是闰年\n",year);
	}
	//不满足条件输出不是闰年
	else{
	printf("%d不是闰年\n",year);
	}
	return 0;
}

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

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

输入:

XXX  XXX  XXX

输出:

此日是该年的第XXX 天

示例:

输入 2020 2 20

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

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//定义三个变量存储年,月,日
	int year,mouth,day;
	//定义sum存储天数
	int sum=0;
	printf("请输入年日月日中间用空格隔开");
	//输入年月日
	scanf(" %d %d %d",&year,&mouth,&day);
	//将每月对应天数存入
	int y1=31,y3=31,y5=31,y7=31,y8=31,y10=31,y12=31;
	int y4=30,y6=30,y9=30,y11=30;
	int y2=28;
	//判断是否为闰年如果为闰年将天数更改为29天
	if((year%4==0&&year%100!=0)||(year%400==0))
	{
		y2=29;
	}
	/*if结束后执行switch分支语句,参数为mouth月份,逻辑为switch从上往下遍历查询,
	如果月份为12则查到第一个case12执行并依次执行到case1结束期间累加月份天数。
	如果月份为5则Switch从上往下遍历查询到case5则只执行case5至case1 break结束只有5行代码期间累加了四个月的天数。
	如果月份为1则switch从上往下遍历只查询到case1仅有一行且只加当月天数break结束。符合题目要求*/
	switch(mouth){
	case 12:sum=sum+y11;
	case 11:sum=sum+y10;
	case 10:sum=sum+y9;
	case 9:sum=sum+y8;
	case 8:sum=sum+y7;
	case 7:sum=sum+y6;
	case 6:sum=sum+y5;
	case 5:sum=sum+y4;
	case 4:sum=sum+y3;
	case 3:sum=sum+y2;
	case 2:sum=sum+y1;
	case 1:sum=sum+day;break;
	}
	printf("此日是该年的第%d天",sum);
		return 0;
}

!!!此代码有不严谨的地方,例如对所输入的月份和日期时间没有进行有效性检验,如果所输入月份大于12或者小于1,日期大于31天。或者出现例如9月份出现31号的情况。会出现错误状况。待以后学习生活中讨论解决。

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

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

        输出能构成三角形

        再输出是什么三角形

        等边 [a==b && a==c && b==c]

        等腰 [a==b || a==c || b==c]

        直角(勾股定理)[a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a]

        普通

        如果不能 输出不能构成三角形

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义三个整型变量作为三角形三条边
	int a,b,c;
	printf("请输入三角形的三条边中间用空格隔开\n");
	//输入三角形的三条边
	scanf(" %d %d %d",&a,&b,&c );
	//首先利用三角形的定义任意;两边之和大于第三边判断是否构成三角形
	if(a+b>c&&a+c>b&&b+c>a)
	{
	//是三角形后判断三边相等是否为等边三角形
		if(a==b&&b==c&&c==a)
		{
			printf("这是等边三角形\n");
		}
		//不是等边判断是否任意两边相等是等腰三角形
		else if(a==b||a==c||b==c)
		{
			printf("这是等腰三角形\n");
		}
		//以上两者都不是,则根据勾股定理判断是否为直角三角形
			else if(a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
				{
					printf("这是直角三角形\n");
				}
				//以上三种都不是则输出此为普通三角形
				else
				{
				printf("这是普通三角形\n");
				}

	}
	//不满足三角形定义输出不是三角形
	else{
      printf("您输入的不是三角形,请重新输入。");
		}
	return 0;
}

16. 编写一个程序。有 4 个变量 a,b,c,d,我们提前并不知道他们的值,请用你的方式将他们从大到小排序。算法任意。(山东丁一)
这道题我根据学习顺序用的最简单的if语句交换排序,在后续学习中会更新方法。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	//定义五个变量。四个作为输入的四个参数,t作为交换媒介
	int a,b,c,d,t;
	printf("请输入四个数字中间用空格隔开:\n");
	//输入四个数字
	scanf("%d %d %d %d", &a, &b, &c, &d);
	//判断若a<b,则a最小让其与b交换后b最小
	if(a<b)t=a,a=b,b=t;
	//判断若b<c,则b最小让其与c交换后c最小
	if(b<c)t=b,b=c,c=t;
	//判断若c<d,则c最小让其与d交换后d最小此时abcd四个值最右边位置的d最小。abc中还需重新排序。
	if(c<d)t=c,c=d,d=t;
	//判断若a<b,则a最小让其与b交换后b最小
	if(a<b)t=a,a=b,b=t;
	//断若b<c,则b最小让其与c交换后c最小。此时abc中c为最小已在最右边。ab还需重新排序
	if(b<c)t=b,b=c,c=t;
	//断若a<b,则a最小让其与b交换后b最小。此时a为最大在最左侧。排序完成。
	if(a<b)t=a,a=b,b=t;
	//按照abcd顺序输出
	printf("%d %d %d %d",a,b,c,d);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值