C程序设计 谭浩强 第四章

4选择结构

注:文章中部分代码或者答案来源于以下文章:
https://blog.csdn.net/gjggj/article/details/92249633
大部分是本人所写,因此投了原创,如果有侵权请私信告知,我会重新改类型的,谢谢大家。

注注注:如果大家觉得有帮助的话请点赞收藏~

在这里插入图片描述

太简单 略

习题

1. 什么是算术运算?什么是关系运算?什么是逻辑运算?

算术运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘方、开方等几种运算的统称。其中加减为一级运算,乘除为二级运算,乘方和开方为三级运算。在一道算式中,如果有多级运算存在,则应先进行高级运算,再进行低一级的运算。

C语言中的算术运算符包括:+、-、*、/、++、--、%等种类

如果只存在同级运算符,则从左至右的顺序进行;如果算式中有括号,则应先算括号里面,再按上述规则进行计算。

关系运算符:关系的基本运算有两类:一类是传统的集合运算(并、差、交等),另一类是专门的关系运算(选择、投影、除法、外连接等),而在C语言中,关系运算通常被认为是比较运算,将两个数值进行比较,判断比较结果是否符合给定的条件。

其中,前4种关系运算符(< <= > >=)的优先级相同,后2种(== !=)也相同。而前4种高于后2种。

例如,>优先于==,而>与<优先级相同,并且关系运算符的优先级低于算术运算符的优先级,关系运算符的优先级高于赋值运算符的优先级。

逻辑运算符:在逻辑代数中,有与、或和非三种基本逻辑运算。表示逻辑运算的方法有多种,如语句描述、逻辑代数、真值表、卡诺图。而在C语言中,逻辑运算通常用于使用逻辑运算符将关系表达式或其他逻辑量连接起来组成逻辑表达式用来测试真假值。

常见的逻辑运算符有:&& || !等种类。

2. C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

C语言中,0表示假,非零表示真。

3. 写出下面各逻辑表达式的值。设a=3,b=4,c=5。

3.1 题目:a + b > c && b == c -> 3+4>5&&4==5

3.2 题目:a || b + c && b - c -> 3||4 + 5 && 4-5

3.3 题目:!(a > b) && !c || 1 -> !(3>4) && !5 || 1

3.4 题目:!(x = a) && (y = b) && 0 -> !(x=3) && (y=4)&&0

3.5 题目:!(a + b) + c - 1 && b + c / 2 -> !(3+4)+5-1 && 4+5/2

4. 有3个整数a, b, c,由键盘输入,输出其中最大的数。

#include<stdio.h>
#include<math.h>

int main()
{
	int a, b, c, max;
	scanf("%d%d%d", &a, &b, &c);
	max = a;
	
	if(max < b)	max = b;
	if(max < c) max = c;
	
	printf("最大值为:%d\n", max);
	
	return 0;
}

5.从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000 的正数。若不是,则要求重新输入。

#include<stdio.h>
#include<math.h>

int main()
{
	int n;
	scanf("%d", &n);
	
	if(n >= 1000) {
		printf("请输入一个小于1000的正整数\n");
		scanf("%d", &n);
	}
	
	int r = (int) sqrt(n);
	printf("%d\n", r);
	
	return 0;
}

6. 有一个函数,编写程序,输入x的值,输出y相应的值。

y = { x ( x < 1 ) 2 x − 1 ( 1 ≤ x < 10 ) 3 x − 11 ( x ≥ 10 ) y = \begin{cases} x\quad & (x<1)\\ 2x-1\quad & (1\le x<10)\\ 3x-11 & (x\ge 10) \end{cases} y=x2x13x11(x<1)(1x<10)(x10)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	int x, y;
	scanf("%d", &x);
	
	if(x < 1)	y = x;
	else if (x <= 1 && x < 10)	y = 2*x - 1;
	else	y = 3*x - 11;
	
	printf("y的值为:%d", y);
	
	return 0;
}

7.有一个函数

y = { − 1 ( x < 0 ) 0 ( x = 0 ) 1 ( x > 0 ) y = \begin{cases} -1 & (x<0)\\ 0 & (x=0)\\ 1 & (x>0) \end{cases} y=101(x<0)(x=0)(x>0)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	int x, y;
	scanf("%d", &x);
	
	if(x < 0)	y = -1;
	else if (x == 0)	y = 0;
	else	y = 1;
	
	printf("y的值为:%d", y);
	
	return 0;
}

8. 给出一百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’。 90分以上为’A’,80~89分为’B’,70~79分为’C’ ,60~69分为’D’ ,60分以下为’E’。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	int score;
	scanf("%d", &score);
	
	while(score <= 0 || score > 100) {
		printf("分数只能在0~100之间\n");
		scanf("%d", &score);
	}
	
	if(score >= 90) printf("A\n");
	else if(score >= 80 && score < 90) printf("B\n");
	else if(score >= 70 && score < 80) printf("C\n");
	else if(score >= 60 && score < 70) printf("D\n");
	else printf("E\n");
	
	return 0;
}

9. 给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	char string[25];
	int a, len;
	scanf("%d", &a);
	itoa(a,string,10);
	len = (int) strlen(string);
	
	printf("这是一个%d位数的数字\n", len);
	
	printf("正序输出为:");
	int i;
	for(i = 0; i < len; i++) {
		printf("%c ",string[i]);
	}
	
	printf("\n逆序输出为:");
	for(i = len -1 ; i >= 0; i--) {
		printf("%c ",string[i]);
	}
	printf("\n");
	
	return 0;
}

10.企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%;利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7. 5%;200000<I≤400000时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;400000<<I≤600000元时,高于400000元的部分按3%提成;600000<1≤1000000时,高于600000元的部分按1.5%提成;I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。要求:(1) 使用if语句编写程序。(2) 使用switch语句编写程序。

#include<stdio.h>

int main()
{
	printf("奖金利润提成计算。\n");
	
	printf("========if语句运算========\n");
	float salary, result;
	scanf("%f", &salary);
	
	result = 0;
	if(salary > 1000000) {
		result += (salary - 1000000) * 0.01;
		salary -= 1000000;
	}
	if(salary > 600000 && salary <= 1000000) {
		result += (salary - 600000) * 0.015;
		salary -= 600000;
	}
	if(salary > 400000 && salary <= 600000) {
		result += (salary - 400000) * 0.03;
		salary -= 400000;
	}
	if(salary > 200000 && salary <= 400000) {
		result += (salary - 200000) * 0.05;
		salary -= 200000;
	}
	if(salary > 100000 && salary <= 200000) {
		result += (salary - 100000) * 0.075;
		salary -= 100000;
	}
	if(salary <= 100000) {
		result += salary * 0.1;
	}
	
	printf("利润提成为:%6.2f\n", result);
	
	printf("========switch语句运算========\n");
//	float salary, result;
	scanf("%f", &salary);
	result = 0;
	
	float salary1 = 100000 * 0.1;	//100000<salary<=200000
	float salary2 = (200000 - 100000) * 0.075 + salary1;	//200000<salary<=400000
	float salary3 = (400000 - 200000) * 0.05 + salary2;		//400000<salary<=600000
	float salary4 = (600000 - 400000) * 0.03 + salary3;	//600000<salary<=1000000
	float salary5 = (1000000 - 600000) * 0.015 + salary4;	//salary>1000000
	
	result = 0;
	int grade = salary / 100000;
	switch (grade) {
	case 0:
		result += salary * 0.1; break;
	case 1:
		result += (salary - 100000) * 0.075 + salary1; break;
	case 2:
	case 3:
		result += (salary - 200000) * 0.005 + salary2; break;
	case 4:
	case 5:
		result += (salary - 400000) * 0.003 + salary3; break;
	case 6:
	case 7:
	case 8:
	case 9:
		result += (salary - 600000) * 0.015 + salary4; break;
	default:
		result += (salary - 1000000) * 0.01 + salary5; break;
	}
	
	printf("利润提成为:%6.2f\n", result);
	
	return 0;
}

11. 输入4个整数,要求按由小到大的顺序输出。

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int compare(const void*,const void*);
	
	int intArr[4];
	int i;
	for(i = 0; i < 4; i++) {
		scanf("%d", &intArr[i]);
	}
	
	qsort(intArr,4,sizeof(int),compare);
	
	for(i = 0; i < 4; i++) {
		printf("%d ", intArr[i]);
	}
	printf("\n");
	
	return 0;
}

int compare(const void* a, const void *b) {
	int inta = *(int *)a;
	int intb = *(int *)b;
	
	return inta - intb;
}

12. 有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,见图。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxtFVd7E-1645016614556)(C:\Users\zhizh\Desktop\C程序总结笔记\img\4.选择结构12.png)]

#include<stdio.h>
#include<math.h>

int main()
{
	float distance(int,int,float,float);
	
	float x, y, d;
//	float d;
	scanf("%f,%f", &x, &y);
	
	if(x >= 0 && y >= 0) {	//第一象限 + X轴左半轴 + Y轴上半轴 + 原点
		d = distance(2,2,x,y);
	}else if(x <0 && y >= 0) {	//第二象限 + X轴右半轴
		d = distance(-2,2,x,y);
	}else if(x < 0 && y <= 0) {	//第三象限 + Y轴下半轴
		d = distance(-2,-2,x,y);
	}else {	//第四象限
		d = distance(2,-2,x,y);
	}
	
	if(d > 1)	printf("该点的建筑的高度为0\n");
	else	printf("该点的建筑的高度为10\n");
	
	return 0;
}

float distance(int circleX,int circleY,float x,float y) {
	float square = pow(x - circleX, 2) + pow(y - circleY, 2);
	return sqrt(square);
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值