实验题
实验三 顺序结构程序设计
输入三角形三边长,输出三角形面积。
#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;
}