一.实验目的:
- 了解和使用VC集成开发环境;
- 理解顺序结构程序设计方法。
- 掌握关系和逻辑运算表达式来表示条件;
- 掌握分支结构程序if和switch设计方法。
二、实验内容和步骤
1. 分析并修改下面程序错误,使之能够正常运行。
(1)错误代码一:
下面的程序是求a和b的和。用户读入a和b的值,计算出结果,并输出。
#include <stdio.h>
int main()
{ int a,b;
int sum;
sum=a+b;
scanf("%d%d",a,b);
printf("sum=%d\n",sum);
return 0;
}
编译环境中正确代码、运行结果截图及错误原因分析如下:
正确代码如图片所示:
错误原因分析:
Scanf中a和b没有取地址符号
Sum= a+b这条语句应该放在scanf之后,
先输入才能进行求和
2)错误代码二:
下面的这个程序是当a和b的值相等的情况下输出“a和b相等”,而a与b的值不相等的话无输出。
#include <stdio.h>
int main()
{
scanf(“%d%d”,&a,&b);
if (a==b);
{
printf("a和b相等\n");
}
return 0;
}
编译环境中正确代码、运行结果截图及错误原因分析如下:
正确代码:
错误原因:if后面有一个分号,不符合语法规定
且a和b没有定义
(3)错误的代码三:
下面的这个程序是当a和b的值相等的情况下a与b的值同时增加1,而a与b的值不相等的话,二者的值保持不变。
#include <stdio.h>
int main()
{
int a,b;
scanf(“%d%d”,&a,&b);
if (a==b)
a++;
b++;
printf("a=%d,b=%d",a,b);
return 0;
}
编译环境中正确代码、运行结果截图及错误原因分析如下:
正确代码:
#include <stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); if (a == b) { a++; b++; } printf("a=%d,b=%d", a, b); return 0; }
运行结果:
错误原因:
即使a和b不相等,仍然执行a++和b++语句,因为这两个语句没有用大括号括起来,导致if判断不成立之后,仍然执行这两条语句
2.编写程序实现以下功能
(1)身高预测
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。
设faHeight为其父身高,moHeight为其母身高,身高预测公式为
男性成人时身高=(faHeight + moHeight)×0.54cm
女性成人时身高=(faHeight×0.923 + moHeight)/2cm
此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示良好,输入字符N表示不好),利用给定公式和身高预测方法对身高进行预测。
编程要求:有用户输入输出提示信息。
编译环境中正确代码、运行结果截图如下:
正确代码:
#include<stdio.h> int main() { char sex,sport,diet; int fh,mh; float h; scanf("%d %d %c %c %c",&fh,&mh,&sex,&sport,&diet); if(sex=='M') { if(sport=='Y'&&diet=='Y') { h=(float)((fh+mh)*0.54*1.02*1.015); printf("%.2lf",h); } else if(sport=='Y'&&diet=='N') { h=(float)((fh+mh)*0.54*1.02); printf("%.2lf",h); } else if(sport=='N'&&diet=='Y') { h=(float)((fh+mh)*0.54*1.015); printf("%.2lf",h); } else if(sport=='N'&&diet=='N') { h=(float)((fh+mh)*0.54); printf("%.2lf",h); } }else if(sex=='F') { if(sport=='Y'&&diet=='Y') { h=(float)(((fh*0.923+mh)/2)*1.02*1.015-0.05); printf("%.2lf",h); } else if(sport=='Y'&&diet=='N') { h=(float)(((fh*0.923+mh)/2)*1.02); printf("%.2lf",h); } else if(sport=='N'&&diet=='Y') { h=(float)(((fh*0.923+mh)/2)*1.015); printf("%.2lf",h); } else if(sport=='N'&&diet=='N') { h=(float)((fh*0.923+mh)/2);
(3)简单的计算器
用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
编程要求:程序能进行浮点数的算术运算,有用户输入输出提示信息。
提示:因为除法中的除数不能为0,因此关键在于如何比较浮点变量data2和常数0是否相等。作为整型变量跟0的比较,简单的==就可以解决。而浮点型等实型变量需要用
if (fabs(data2) <= 1e-7)
进行判断(即判断其是否足够小)。若使用函数fabs,需要包含头文件math.h
编译环境中正确代码如下:
正确的代码:
#include<stdio.h> int main() { float a=0.00; float b=0.00 ; char op; float sum = 0.00; scanf("%f%c%f", &a, &op, &b); switch (op) { case '+': sum = a + b; printf("%.2f", sum); break; case '-': sum = a - b; printf("%.2f", sum); break; case '*': sum = a * b; printf("%.2f", sum); break; case '/': if (b == 0) printf("除数不能为0\n"); else if (b != 0) { sum = a / b; printf("%.2f", sum); break; } default: { if(op != '+'&&op!='-'&&op!='*'&&op!='/') printf("运算符有误\n"); break; } } return 0; }
三、实验小结
总结在实验中出现的问题以及解决的方法。
- 实验中出现的问题主要为输入时变量没有取地址符号
- 语言的逻辑顺序问题
- 大括号,分号等符号要正确使用
- 编写代码时,应该先有一个总体思路,先实现整体构架,在逐步细分实现各分部代码。