资源描述
实验二 选择结构程序设计
一、实验目的
1. 掌握关系表达式和逻辑表达式的使用。
2. 熟悉选择结构程序设计。
3. 熟练使用if语句进行程序设计。
4. 使用switch语句实现多分支选择结构。
二、实验内容
1 计算a+|b|
源代码如下
#include<stdio.h>
int main (void)
{
float a,b;
printf("请输入a,b值\n");
scanf("%f%f",&a,&b);
if (b>=0)
{
printf("%f\n",a+b);
}
else
{
printf("%f\n",a-b);
}
return 0;
}
2 判断一个整数是否可以被3和5整除)
#include<stdio.h>
int main (void)
{
int a;
printf("请输入a值\n");
scanf("%d",&a);
if (a==0)
{
printf("这个数是0\n");
}
else
{
if (a%3==0)
{
printf("这个数能被3整除\n");
}
else
{
if (a%5==0)
{
printf("这个数能被5整除\n");
}
else
{
printf("这个数不能被5,3整除\n");
}
}
}
return 0;
}
1.[目的]掌握判断一个字符型数据是否数字字符的方法,以及数字字符转换为相应整数的方法。
[题目内容]从键盘输入一个字符型数据,若输入一个数字字符('0'-'9'),则将其转换成相应的整数显示出来;若输入其它字符,则显示出错信息。
[输入]一个字符型数据
[输出]整数或出错信息
[提示] 根据字符型数据的ASCII码值是否在‘0’字符与‘9’字符之间进行判断。使用if…else…语句和复合语句。#include<stdio.h>
int main (void)
{
char c=' ';
printf("请输入字符型数据\n");
scanf("%c",&c);
if(c>='0'&&c<='9')
{
printf("这个是数字");
}
else
{
if(c>='a'&&c<='z')
{
printf("这个是小写字母");
}
else
{
if(c>='A'&&c<='Z')
{
printf("这个是大写字母");
}
}
}
return 0;
}
2.[目的]掌握条件表达式的使用
[题目内容] 编写一个程序,其功能为:从键盘输入三个数x、y、z,判断x+y=z是否成立,若成立输出“x+y=z”的信息,否则输出“x+y!=z”的信息。
[输入] 三个数x、y、z
[输出] “x+y=z”或“x+y!=z”
[提示] 条件判断表达式x+y==z
#include<stdio.h>
int main (void)
{
float x=0.0;
float y=0.0;
float z=0.0;
scanf("%f,%f,%f",&x,&y,&z);
if (x+y==z)
{
printf("x+y=z\n");
}
else
{
printf("x+y!=z\n");
}
return 0;
}
3.[目的]掌握求最大值最小值的方法。
[题目内容] 编写一个程序,其功能为:输入三个整数,输出最大数和最小数。
[输入] 三个整数
[输出] 最大值和最小值
[提示] 设置最大值变量max和最小值变量min;首先比较a,b的大小,并把大数存入max, 小数存入min;然后最大值变量max和最小值变量min再与c比较,若c大于max,则max取值c,否则保持不变;如果c小于min,则min取值c,否则保持不变。最后输出max和min的值。使用if…else…语句、if语句以及复合语句。
#include<stdio.h>
int main (void)
{
float x=0.0;
float y=0.0;
float z=0.0;
float max=0.0;
float min=0.0;
printf("请输入三个数\n");
scanf("%f%f%f",&x,&y,&z);
if (x>y)
{
max=x;
min=y;
}
else
{
max=y;
min=x;
}
if (z>max)
{
max=z;
}
if (z<min)
{
min=z;
}
printf("max=%f,min=%f",max,min);
return 0;
}
4.[目的]运用已学知识解决实际问题。
[题目内容]如下两个线性方程组的两个未知数为x1和x2:
ax1+bx2=m
cx1+dx2=n
该方程的唯一解为(ad-cb不等于零时):
请编写一个程序,读取a、b、c、d的值,计算x1和x2的值。如果ad-cd等于零,应给出适当的提示信息。
[输入]方程的系数 a、b、c、d的值
[输出] 当ad-cb不等于零时,输出方程的解x1、x2的值;当ad-cb等于零时,输出提示信息。
[提示] 用if…else…语句和复合语句实现。
#include <stdio.h>
int main (void)
{
float a=0.0;
float b=0.0;
float c=0.0;
float d=0.0;
float x1=0.0;
float x2=0.0;
float m=0.0;
float n=0.0;
printf ("如下两个线性方程组x1和x2\n ax1+bx2=m\n cx1+dx2=n\n");
printf ("请输入a,b,c,d,m,n的值:\n");
scanf ("%f%f%f%f%f%f",&a,&b,&c,&d,&m,&n);
if((a*d)-(c*b)==0)
{
printf ("此方程组无解\n");
}
else
{
x1=((m*d-b*n)/(a*d-c*b));
x2=((n*a-m*c)/(a*d-b*c));
}
printf("方程的一个根x1=%f\n",x1);
printf("方程的另一根x2=%f\n",x2);
return 0;
}
三、课后作业(写在实验报告中)
1.[目的]运用已学知识解决实际问题。
[题目内容]某产品生产成本c=c1+mc2,其中c1为固定成本,c2为单位产品可变成本。当生产数量m<10000时,c1=20000元,c2=10元;当生产数量m≥10000时,c1=40000元,c2=5元;编写一个程序,其功能为:分别计算出生产数量为6000以及25000时,总生产成本及单位生产成本。
[输入] 生产数量
[输出] 生产数量、总生产成本、单位可变成本
#include <stdio.h>
int main (void)
{
long int m=0,c1=0,c2=0,c=0;
printf("生产数量为\n");
scanf("%d",&m);
if (m>=10000)
{
c1=40000,c2=5;
}
else
{
c1=20000,c2=10;
}
c=c1+m*c2;
printf("生产成本为%d\n",c);
return 0;
}
2.[目的]掌握分段函数的计算。
[题目内容] 编写一个程序,计算下列函数:
y=
x
x<1
2x-1
1≤x<10
3x-11
X≥10
[输入] x值
[输出] y值
[提示]根据输入的x值的取值,计算y的值并输出。使用if…else if语句以及复合语句。
#include <stdio.h>
int main (void)
{
int x=0,y=0;
printf("请输入x值\n");
scanf("%d",&x);
if (x<1)
{
y=x;
}
if (x>=10)
{
y=3*x-11;
}
else
{
y=2*x-1;
}
printf ("y值为%d\n",y);
return 0;
}
3.[目的]掌握字符型变量的定义与使用,掌握大小写字母转换的算法。
[题目内容] 编写一个程序,其功能为:从键盘输入一个字符,判别该字符的类别,并输出向相应信息。
[输入]一个字符
[输出] 显示“控制字符”、“数字字符”、“大写字母”、“小写字母”、“其它字符”信息。
[提示] 根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。 在'0'和'9'之间的为数字,在'A'和'Z'之间为大写字母, 在'a'和'z'之间为小写字母,其余则为其它字符。使用if…else if…语句。
#include <stdio.h>
int main (void)
{
char c=0;
printf("请输入字符\n");
scanf("%c",&c);
if (c<32)
{
printf("您输入的是控制字符\n");
}
else
{
if (c>='0'&&c<='9')
{
printf("您输入的是数字字符\n");
}
else
{
if (c>='a'&&c<='z')
{
printf("您输入的是小写字母\n");
}
else
{
if (c>='A'&&c<='Z')
{
printf("您输入的是大写字母\n");
}
else
{
printf("您输入的是其他字符\n");
}
return 0;
}
}
}
}
4.[目的]掌握标准数学函数使用。
[题目内容]编写一个程序,其功能为:从键盘输入一元二次方程ax2+bx+c=0的各项系数a、b、c的值,判断方程实数解的不同情况,分别求解方程,并输出(结果保留两位小数,如无实根给出相应的信息)。
应用如下规则:
(1) 若a、b的值为零,则没有解;
(2) 若a为零,只有一个实数解;
(3) 若b2-4ac为负数,则没有实数解;若b2-4ac为正数,有两个实数解;若b2-4ac为零,有两个相等的实数解。
[输入]一元二次方程ax2+bx+c=0的各项系数a、b、c
[输出] 方程的实数解情况
[提示]包含标准数学函数头文件,使用标准数学函数sqrt(x)实现开平方计算,判别式b2-4ac,如果小于0,则输出“方程无实数根”,等于0 ,输出一个实根,结果使用双精度浮点数表示,%lf格式,大于0,输出两个不同的实数根,结果使用双精度浮点数表示,%lf格式。
#include <stdio.h>
#include<math.h>
int main (void)
{
float a,b,c;
double x1,x2;
printf ("如下一元二次方程ax2+bx+c=0\n");
printf ("请输入a,b,c的值:\n");
scanf ("%f%f%f",&a,&b,&c);
if(a==0&&b==0)
{
printf ("此方程组无解\n");
}
else
if(a==0&&b!=0)
{
x1=(-1*b/c);
printf("方程的一个根1x1=%lf\n",x1);
}
else
if((b*b-4*a*c)>0)
{
x1=(-b-sqrt(b*b-4*a*c))/(2*a);
x2=(-b+sqrt(b*b-4*a*c))/(2*a);
printf("方程的一个根x1=%lf\n",x1);
printf("方程的另一根x2=%lf\n",x2);
}
if((b*b-4*a*c)<0)
{
printf("方程无解");
}
if(a!=0&&(b*b-4*a*c)==0)
{
x1=(-b/(2*a));
printf("方程的一个根2x1=%lf\n",x1);
}
return 0;
}
5.[目的]运用已学知识解决实际问题。
[题目内容] 编写程序,输入三角形三边 a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。
[输入] 三角形三边 a、b、c
[输出] 不能构成三角形或能构成等腰、等边、直角、一般三角形的信息。
[提示]利用三角形两边之和大于第三边判断是否能够构成三角形,能够成三角形时再以等腰、等边、直角三角形的条件进行判断。
#include <stdio.h>
int main (void)
{
float a,b,c;
printf ("请输入三角形三边a,b,c的值:\n");
scanf ("%f%f%f",&a,&b,&c);
if(a+b>c&&b+c>a&&a+c>b)
{
printf ("能构成三角形\n");
if(a==b&&b==c)
{
printf("是等边三角形");
}
else
if(a==b||b==c||c==a)
{printf ("是等腰三角形\n");
}
}
else
{
printf ("不能构成三角形");
}
return 0;
}
6.[目的]运用已学知识解决实际问题。
[题目内容]某个电力公司对其用户的收费规定如下:
用电数量 收费标准
0~200 x*0.5元
201~400 100+(x-200)*0.65元
401~600 230+(x-400)*0.8元
601以上 390+(x-600)*1.0元
编写程序,对于一个输入的用电数量,计算用户的缴费额。
[输入] 用电数量
[输出] 缴费额
[提示] 用if…else if语句实现。注意输入负数时的处理。
#include <stdio.h>
int main (void)
{
int a=0,b=0;
printf ("请输入用电量a的值,单位千瓦时:\n");
scanf ("%d",&a);
if(a>0)
{
if(a>0&&a<=200)
{
b=0.5*a;
}
if(a>=201&&a<=400)
{
b=100+(a-200)*0.65;
}
if(a>=201&&a<=400)
{
b=230+(a-400)*0.8 ;
}
if(a>=601)
{
b=390+(a-600)*1.0;
}
printf ("应该缴纳的费用是%d元\n",b);
}
else
{
printf ("输入数值有误\n");
}
return 0;
}
7.[目的]运用已学知识解决实际问题。
[题目内容]某个服装展示厅对所卖商品打折规定如下:
------------------------------------------------------------
购买总额 折扣
-------------------------------------------
机加工产品 手工产品
0~100 - 5%
101~200 5% 7.5%
201~300 7.5% 10.0%
大于300 10.0% 15.0%
--------------------------------------------------------------
编写程序输入购买总额,计算并输顾客实际应付的货款。
[输入]顾客的购买总额
[输出] 顾客实际应付的货款
[提示]机加工产品与手工产品可以使用类别变量表示,例如,设计类别变量为lb,假设lb=0表示机加工产品,lb=1表示手工产品。
#include <stdio.h>
int main (void)
{
float a=0.0,b=0.0,c1=0.0,c2=0.0,c=0.0;
printf ("请输入用机加工产品价格和手工产品价格:\n");
scanf ("%f%f",&a,&b);
if(a>0&&a<=100)
{
c1=a;
}
if(a>100&&a<=200)
{
c1=0.95*a;
}
if(a>200&&a<=300)
{
c1=0.925*a;
}
if(a>300)
{
c1=0.9*a;
}
printf ("应该缴纳的费用1是%f元\n",c1);
if(b>0&&b<=100)
{
c2=b*0.95;
}
if(b>100&&b<=200)
{
c2=0.920*a;
}
if(b>200&&b<=300)
{
c2=0.9*a;
}
if(b>300)
{
c2=0.85*b;
}
c=c1+c2;
printf ("应该缴纳的费用2是%f元\n",c2);
printf ("应该缴纳的费用是%f元\n",c);
return 0;
}
8.[目的]switch语句的练习
[题目内容]编程在屏幕上显示一张如下所示的时间表:
*******Time*******
1 morning
2 afternoon
3 night
Please enter your choice:
根据用户输入的时间序号显示相应的问候信息,选择1时显示“Good morning”, 选择2时显示“Good afternoon”, 选择3时显示“Good night”,对于其他选择显示“Selection error!”。
[输入] 序号
[输出] 问候语或其他信息
[提示] 用switch语句实现
#include <stdio.h>
int main (void)
{
int a=0,b=0;
printf ("请输入时间序号:\n");
scanf ("%d",&a);
switch (a)
{
case 1:printf ("morning\n");break;
case 2:printf ("afternoon\n");break;
case 3:printf ("night\n");break;
default:printf("selection error\n");
}
return 0;
}
9.[目的]运用已学知识解决实际问题。
[题目内容]编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的运算符为加(+)、减(-)、乘(*)、除(/)
[输入]
Please enter the expression:22.12+12.10
键盘输入
屏幕提示
[输出]
22.12+12.10=34.22
程序输出
[提示] 分别用if或switch语句实现
#include <stdio.h>
int main( )
{
double a, b;
char op;
printf("Please enter the expression\n");
scanf("%lf%c%lf",&a,&op,&b);
switch (op)
{
case '+':
printf("%.2lf + %.2lf = %.2lf\n", a, b, a + b);
break;
case '-':
printf("%.2lf - %.2lf = %.2lf\n", a, b, a - b);
break;
case '*':
printf("%.2lf * %.2lf = %.2lf\n", a, b, a * b);
break;
case '/':
if (b!=0)
printf("%.2lf / %.2lf = %.2lf\n", a, b, a / b);
else
printf("³ýÊý²»ÄÜÊÇ0! \n");
break;
}
}
10.输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90): A
80至90分(包括80):B
70至80分(包括70):C
60至70分(包括60):D
60分以下: E
方法一:(用if语句的嵌套) #include <stdio.h>
int main (void)
{
int a=0,b=0;
printf ("请输入成绩\n");
scanf ("%d",&a);
if(a>0&&a<60)
{
printf ("学生等级为E\n",a);
}
else
{
if(a>=60&&a<70)
{
printf ("学生等级为D\n",a);
}
else if(a>=70&&a<80)
{
printf ("学生等级为C\n",a);
}
else if(a>=80&&a<90)
{
printf ("学生等级为B\n",a);
}
else if(a>=90)
{
printf ("学生等级为A\n",a);
}
return 0;
}
}
方法二:用switch语句
展开阅读全文