C语言第一次实验报告
一.实验题目,设计思路,实现方法。
题目1:4-2-6 到底是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
输入格式:
输入第一行给出一个正整数N(≤ 20)。随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200;单位:厘米)和真实体重W(50 < W ≤ 300;单位:市斤),其间以空格分隔。
输出格式:
为每个人输出一行结论:如果是完美身材,输出You are wan mei!;如果太胖了,输出You are tai pang le!;否则输出You are tai shou le!。
设计思路:
要求输入不定的整数并且这些整数就是接下来程序所要处理的数据的量。故引入数组来成批的输入、成批的处理。对于判断过程,需要一个一个的判断,故引入for循环,调出数组中的数据进行比对。由于要用到绝对值,故需加头文件 #include <math.h>
实现方法:
调用两个数组(身高数组和体重数组);并应用for循环来读入数据,最后再次使用for循环把数据调用出来对比。
题目2:4-2-7 装睡
你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。
输入格式:
输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。
输出格式:
按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。
设计思路:
本题思路跟上一题差不多,只是要用到字符数组来存贮名字。
解决方案:
在本题中,使用了数据结构,利用数据结构来存储和调用数据。
题目3:4-5 求简单交错序列前N项和
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。
设计思路:
本题要求前N项和,注意到1=1/1,所以分母是有规律的,依次加3;再者,本题中一加一减,可以设一个数,再在每次循环的最后进行变号。
解决方案:
在求前N项和的时候,可以使用for循环来实现,在for循环中,定义i=1,在每次循环结束后,i = i + 3,从而实现分母的变化;
在进入for循环前,可以先定义一个flag = 1,然后在每次循环的最后,flag = -flag,从而实现符号的变换。
二.源程序
题目1:4-2-6 到底是不是太胖了
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,a,b,w,h; //定义数据个数
double standardw,standardh; //定义标准体重,标准身高
scanf("%d",&n);
int hight[21]; //定义身高数组
int weight[21]; //定义体重数组
/*初始化身高体重数组*/
for(i = 0;i<20;i++){
hight[i] = 0;
weight[i] = 0;
}
/*输入数组数据*/
for(a = 0;a<n;a++){
scanf("%d %d",&h,&w);
if(120 < h < 200 && 50 < w <= 300){
hight[a] = h;
weight[a] = w;
}
}
for(b=0;b<n;b++){
standardw = ( hight[b] - 100 ) * 0.9 * 2;
if(fabs( weight[b] - standardw ) < standardw * 0.1){
printf("You are wan mei!\n");
}else if(fabs( weight[b] - standardw ) >= standardw * 0.1 && weight[b] > standardw){
printf("You are tai pang le!\n");
}else if(fabs( weight[b] - standardw ) >= standardw * 0.1 && weight[b] < standardw){
printf("You are tai shou le!\n");
}
}
return 0;
}
题目2:4-2-7 装睡
#include <stdio.h>
struct people{ //数据结构定义
char name [50]; //姓名
int br; //呼吸频率
int pulse; //脉搏
};
int main(){
int n,i; //定义组数
struct people s1; //定义结果变量
scanf("%d",&n); //输入组数
for(i=1;i<=n;i++){
scanf("%s %d %d",&s1.name,&s1.br,&s1.pulse);
if(s1.br < 15 || s1.br > 20 || s1.pulse < 50 || s1.pulse > 70){
printf("%s\n",s1.name);
}
}
return 0;
}
题目3:4-5 求简单交错序列前N项和
#include <stdio.h>
int main()
{
int n,i;
double sum =0;
int flag = 1;
scanf("%d",&n);
if(n==1){
sum = 1.0;
}else if(n>=2){
for( i = 0; i <= n+1; i++){
sum = sum + flag*1.0/(1+i*3);
flag = -flag;
}
}
printf("sum = %.3lf",sum);
return 0;
}
三.遇到的问题及解决方法,心得体会
在这几次PTA中,遇到了许多之前没有遇到过的错误,如段错误……,也使用了之前没有用过的方法去解决问题,在遇到问题不要放弃,学会寻找资料,会学到更多。
PTA对格式的要求极为严格,在做题的过程中必须要认真,不对马虎,稍有不慎就会出现格式错误。