把之前的实验一写一下博客,做一个复习
1.程序改错
第一题简单
参数要先定义再使用
#include <stdio.h>
int main()
{
int a,b;
int sum;
scanf("%d %d",&a,&b);
sum=a+b;
printf("sum=%d\n",sum);
return 0;
}
运行结果
2.程序改错
if语句后不加’;‘,初学易错,相等不用=,而用==,’=‘代表赋值
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if (a==b)
{
printf("a和b相等\n");
}
else
{
printf("");
}
return 0;
}
运行结果
3.程序改错
if语句养成写大括号的习惯
#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;
}
运行结果
4.计算1+1/2+1/3 的值,并输出结果(保留2位小数)
理解c语言中1/2的结果为0,而1.0/2的结果为0.5
#include<stdio.h>
int main()
{
float a,b,c,sum;
a=1,b=1.0/2,c=1.0/3;
sum=a+b+c;
printf("%.2f",sum);
return 0;
}
5.身高预测
任务描述
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。
设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表示不好)。 利用给定公式和身高预测方法对身高进行预测,输出所得结果,保留2位小数。
编程注意事项
cm不是C语言的一部分,不能直接放到程序中;
在身高增加2%中,不能直接在公式中使用2%,而应该转换为0.02再使用;
字符char在赋值时,需要带单引号,例如char ch = 'Y'。
注意乘号的使用,在C中乘号为*
double类型数据的输入输出格式控制为%lf
float类型数据的输入输出格式控制为%f
良好的输入提示信息
在educoder平台中,因为测试的局限性,因此只能设置输入格式都是统一的横着排列输入,各个输入的数据之间可用空格隔开。
因此如果在编译环境中已经实现一款给用户提示信息明确的代码,拿到educoder平台中运行时,还需要把自己写的输出用户提示的语句删除,以便完全符合平台输入要求。
####相关知识
为了完成本关任务,你需要掌握:1.数字、字符混搭输入,2.if-else的使用。
数字字符混搭输入
在C语言中数字与字符一起混搭输入,不太容易作对。
如有问题,可以使用编译环境,单步调试,查看输入是否正确。
在进行字符输入时,如果单步调试发现并没有获得想要的字符,应思考是何种原因造成。
比如在这里的测试输入,每个信息之间用空格隔开
170 160 F N N
前两个是数字,后面3个是字符。
数字输入可以方便的scanf(“%lf”,&faHeight);
但是字符在输入时,前面是空格字符,因此需要用一个temp字符去把空格清除,之后再读入需要的字符。
方法如下:
scanf("%c",&temp);
scanf("%c",&sex);
if-else的使用
(1)if-else和switch都是用于进行选择判断的,但是switch一般用于离散的值的判断条件选择,如果值不是离散的,还需要进行一些转换,让其为离散的,然后再用switch语句进行判断,相关例子,比如统计各个分数段的学生人数。
(2)编码的时候,要根据具体问题的需要来进行选择,哪种方式方便就用哪种方式。
(3)本题,无疑是用if-else比较方便。
解题:
#include <stdio.h>
int main()
{
char sex;
double faHeight,moHeight;
char sports;
char diet;
char temp;
scanf("%lf%lf",&faHeight,&moHeight);
scanf("%c",&temp);
scanf("%c",&sex);
scanf("%c",&temp);
scanf("%c",&sports);
scanf("%c",&temp);
scanf("%c",&diet);
if(sex=='M')
{
double a;
a=(faHeight + moHeight)*0.54;
if(sports=='Y')
{
if(diet=='Y')
{
printf("%.2f",a*1.02*1.015-0.05);
}
else if(diet=='N')
printf("%.2f",a*1.02);
}
else if(sports=='N')
{
if(diet=='Y')
{
printf("%.2f",a*1.015);
}
else if(diet=='N')
printf("%.2f",a);
}
}
else if(sex=='F')
{
double b;
b=(faHeight*0.923+moHeight)/2;
if(sports=='Y')
{
if(diet=='Y')
{
printf("%.2f",b*1.02*1.015-0.05);
}
else if(diet=='N')
printf("%.2f",b*1.02);
}
else if(sports=='N')
{
if(diet=='Y')
{
printf("%.2f",b*1.015);
}
else if(diet=='N')
printf("%.2f",b);
}
}
return 0;
}
运行结果
这里做的时候我们分成了两种情况,但实际上要通关并不难,而这样写更加严谨,增加容错率。
6.简单的计算器
题目:
用switch语句编程设计一个简单的计算器程序。
要求根据用户从键盘输入的表达式(注意操作数与运算符之间没有空格):
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
编程要求:程序能进行浮点数的算术运算,有用户输入输出提示信息。
提示:因为除法中的除数不能为0,因此关键在于如何比较浮点变量data2和常数0是否相等。作为整型变量跟0的比较,简单的==就可以解决。而浮点型等实型变量需要用
if (fabs(data2) <= 1e-7)
进行判断(即判断其是否足够小)。若使用函数fabs,需要包含头文件math.h
#####注意事项
输入的数据中操作数与运算符之间没有空格,例如1+5
需要处理除数为0的情况。如果除数为0,则输出提示信息: 除数不能为0
需要判断用户输入的运算符是否是+-*/,如果符号不对,输出:运算符有误
结果输出保留2位小数
为了完成本关任务,你需要掌握:switch语句使用。
switch语句使用
(1)If和switch都是用于进行选择判断的,但是switch一般用于离散的值的判断条件选择,如果值不是离散的,还需要进行一些转换,让其为离散的,然后再用switch语句进行判断,相关例子,比如统计各个分数段的学生人数。
(2)编码的时候,要根据具体问题的需要来进行选择,哪种方式方便就用哪种方式。
(3)本题理论上也可以用if-else实现,但是题目要求必须使用switch语句完成。在本题中,使用switch语句可读性更好。
解题:
#include<stdio.h>
int main()
{
double a, b;
double c=0;
char ch;
scanf ("%lf%c%lf", &a,&ch,&b);
switch (ch)
{
case'+':
c = a + b; printf("%.2f", c);
break;
case'-':
c = a - b; printf("%.2f", c);
break;
case'*':
c = a * b;printf("%.2f", c);
break;
case'/':
if(b!=0) {
c = a / b;printf("%.2f", c);
}
else{
printf("除数不能为0");
}
break;
default:
printf("运算符有误");
}
return 0;
}
运行结果