实验题

6

实验三 顺序结构程序设计

输入三角形三边长,输出三角形面积。

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

int main()

{

	// 输入三角形三边长,输出三角形面积。
	
	float a, b, c, s, area;
	
	printf("请输入三角形三边长:");
	
	scanf("%f %f %f", &a, &b, &c);
	
	s = 0.5 * (a + b + c);
	
	area = sqrt(s * (s - a) * (s - b) * (s - c));
	
	printf("\n三角形的面积是%.2f",area);
	
	return 0;

}

1.已知圆半径及圆柱高,求圆周长和圆柱体积。要求对输入、输出进行提示。

提示:

(1)用scanf()函数输入数据,输出计算结果,取小数点后两位数字。

(2)设圆半径为r,圆柱高为h,圆周长的计算公式为 $$ C = 2\pi r $$

圆柱体积的计算公式为 $$ V = \pi r^2h $$

#include <stdio.h>

#define PI 3.14

int main()

{
	float h, r, V, C;
	printf("请输入圆半径及圆柱高:");
	scanf("%f %f", &h, &r);
	C = 2 * PI * r;
	V = PI * PI * r * h;
	printf("\n圆的周长是:%.2f", C);
	printf("\n圆柱的体积是%.2f", V);
	return 0;

}

求方程$ax^2 + bx + c = 0$ ($a \neq 0$)的解

提示:

(1)为了使用sqrt()函数,需要包含math.h头文件。

(2)一元二次方程的根为

$$
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$$

#include <stdio.h>
#include <math.h>
int main()
{
	float a, b, c, delta, x1, x2;
	printf("请输入一元二次方程的系数a,b,c:");
	scanf("%f %f %f", &a, &b, &c);
	delta = b * b - (4 * a * c);
	if (delta > 0)
	{
		x1 = (-b - sqrt(delta)) / (2 * a);
		x2 = (-b + sqrt(delta)) / (2 * a);
		printf("方程的两个不同解x1 = %f, x2 = %f:", x1, x2);
	}
	else if (delta == 0)
	{
		x1 = -b / (2 * a);
		printf("方程的两个相同解x1 = x2 = %f:", x1);
	}
	else
	{
		printf("方程无解");
	
	}
	return 0;

}

实验四 选择结构程序设计

编写程序求三个整数a、b、c中的最小值

#include <stdio.h>

int main()
{
	int a, b, min;
	printf("请输入三个整数: ");
	scanf("%d %d %d", &a, &b, &min);
	if (min > a) min = a;
	if (min > b) min = b;
	printf("三个整数中的最小值为:%d", min);
	return 0;
}

计算如下分段函数的值,要求使用scanf()函数输入 x的值,输出 x及对应 y的值。
$$

f(x) = \begin{cases}
y = x, & x < 1 \
y = 2x - 1, & 1 \leq x < 10 \
y = 3x - 11, & x \geq 10
\end{cases}
$$

#include <stdio.h>

int main()
{
	float x, y;
	printf("请输入x的值:");
	scanf("%f", &x);
	if (x < 1)
	{
		y = x;
	}
	else if (x < 10 && x >= 1)
	{
		y = 2 * x - 1;
	}
	else
	{
		y = 3 * x - 11;
	}
	printf("当x = %.2f时,y = %.2f",x,y);
	return 0;
}

输入某学生的百分制成绩,经处理后输出成绩等级A、B、C、D、E。90分及以上为A等,80~89分为B等,70~79分为C等,60~69分为D等, 60分以下为E等。要求:

① 分别使用if语句和switch语句实现;

② 程序应能处理0~100分以外的不合理数据;

③ 调试程序时,应测试所有的分支情况。

提示:

① 成绩值可能是实型数。

② 每次输入成绩后应先判断输入的成绩是否在0~100之间。

③ 当用switch语句实现时,由于case后的表达式必须是一个常量表达式,所以必须把百分制成绩除十取整化为常量。例如,(int)(score/10)。

#include <stdio.h>
int main()
{
	float score;
	printf("请输入成绩:");
	scanf("%f", &score);
	if (score < 0 || score > 100)
	{
		printf("输入数据不合理");
		return -1;
	}
	if (score >= 90)
	{
		printf("A");
	}
	else if (score >= 80)
	{
		printf("B");
	}
	else if (score >= 70)
	{
		printf("C");
	}
	else if (score >= 60)
	{
		printf("D");
	}
	else
	{
		printf("E");
	}

	switch ((int)(score / 10))
	{
		case 9:
			printf("A");
			break;
		case 8:
			printf("B");
			break;
		case 7:
			printf("C");
			break;
		case 6:
			printf("D");
			break;
		default:
			printf("E");
			break;
	}
	return 0;

}

输入一个不多于5位的正整数,要求:

① 求出它是几位数;

② 分别输出每一位数字;

③ 按逆序输出各位数字。例如,原数为321,应输出123。

提示:

① 本题目中三个问题的求解代码应编写在同一个函数中。

② 本题的核心问题有两个:一是判断输入的整数是几位数;二是取出该整数的各数位。

编写代码时,先①再②或先②再①均可,最后输出结果。

#include <stdio.h>

int main()
{
	int num, nums[5], count=0;
	printf("请输入一个不多于5位的正整数:");
	scanf("%d",&num);
	if (num > 99999 || num<0)
	{
		printf("输入错误");
		return -1;
	}
	while (num>0)
	{
		nums[count] = num % 10;
		num = num/10;
		count++;
	}
	for (int i = 0; i < 5; i++)
	{
		if (!nums[i])
		{
			break;
		}
		printf("%d",nums[i]);
	}
	return 0;
}

计算1-3+5-7+…-99+101

#include <stdio.h>

int main()
{
	int flag = 1, result = 0, count = 1;
	while (count < 102)
	{
		result += count * flag;
		flag *= -1;
		count += 2;
	}
	printf("1-3+5-7+...-99+101 = %d", result);
	return 0;
}

从键盘输入一批整数,最后一个数为0,编程找出其中的最大数和最小数,并输出。

#include <stdio.h>

int main()
{
	int num, max, min;
	scanf("%d", &num);
	min = max = num;
	while (num)
	{
		if (min > num)
		{
			min = num;
		}
		if (max < num)
		{
			max = num;
		}
		scanf("%d", &num);
	}
	printf("min = %d max = %d", min, max);
	return 0;
}