Uploaded by qi zhang

lab13-c

advertisement
C 语言实验报告
1. (动态内存分配)实现一个一元多项式计算系统。多项式的项数和系数保存在数组中,数组通
过动态内存分配创建。
函数原型如下:double polynomial(int *p, int n, double x)。
#include<stdio.h>
#include<stdlib.h>
double polynomial(int* p, int n, double x)
{
double sum = 0;
for (int i = 0; i < n; i++)
{
sum = sum * x + *(p + i);
}
return sum;
}
int main()
{
int* arr, n;
double x, sum;
printf("请输入项数 x的值 系数");
scanf_s("%d %lf", &n, &x);//项数和x
arr = (int*)malloc(n * sizeof(int));
if (arr == NULL)
{
return 1;
}
for (int i = 0; i < n; i++)
{
scanf_s("%d", arr + i);//系数
}
sum = polynomial(arr, n, x);
printf("%lf", sum);
return 0;
}
2. (结构基础)用结构体实现:求一元二次方程 ax2+bx+c=0 的解,写程序完成以下功能:
(1) 设计一个结构体,保存一元二次方程的系数和根;
struct EquationInfoStru{
double a;
//方程系数1
double b;
//方程系数2
double c; //方程系数3
int nRootStatus;
//方程根的不同情况
double dRoot1;//方程的第一个根
double dRoot2;//方程的第二个根
};
(2) 函数 int root(struct EquationInfoStru * pEquaInfo)求解方程的根。
(3) 在 main 函数中用格式化输入函数输入方程的三个实系数,并调用 root 函数,根据
nRootStatus 的不同情况分别输出方程的解。
#include<stdio.h>
#include<malloc.h>
#include<math.h>
typedef struct EquationInfoStru {
double a;
//方程系数1
double b;
//方程系数2
double c;
//方程系数3
int nRootStatus;
//方程根的不同情况
double dRoot1;//方程的第一个根
double dRoot2;//方程的第二个根
}E;
void root(struct EquationInfoStru* pEquaInfo)
{
double a, b, c;
a = pEquaInfo->a;
b = pEquaInfo->b;
c = pEquaInfo->c;
if (b * b - 4 * a * c < 0)
{
pEquaInfo->nRootStatus = 0;
pEquaInfo->dRoot1 = 0;
pEquaInfo->dRoot2 = 0;
}
else if (b * b - 4 * a * c == 0)
{
pEquaInfo->nRootStatus = 1;
pEquaInfo->dRoot1 = b / (-2.0 * a);
pEquaInfo->dRoot2 = b / (-2.0 * a);
}
else
{
pEquaInfo->nRootStatus = 2;
pEquaInfo->dRoot1 = (-b + sqrt(b * b - 4 * a * c)) / 2.0 * a;
pEquaInfo->dRoot2 = (-b - sqrt(b * b - 4 * a * c)) / 2.0 * a;
}
}
int main()
{
E p[100];
int i = 0;
double a, b, c;
printf("请输入三个系数");
scanf_s("%lf %lf %lf", &a, &b, &c);
p->a = a;
p->b = b;
p->c = c;
root(p);
printf("%.2lf %.2lf", p->dRoot1, p->dRoot2);
}
3. (结构基础)用结构体实现如下工程:
假定有如下的成人体重标准:
标准体重(男) = (身高 cm - 100) x 0.9(kg)
标准体重(女) = (身高 cm - 100) x 0.9(kg) - 2.5(kg)
并有如下标准用于判定一个成人体重情况:
(1) 太瘦:低于标准体重 10%以上
(2) 正常:标准体重 ± 标准体重×10%
(3) 超 重:超出标准体重 11%到 20%
(4) 轻度肥胖:超出标准体重 21%到 30%
(5) 中度肥胖:超出标准体重 31%到 50%
(6) 重度肥胖:超出标准体重 50%以上
功能设计要求:编写具有如下功能的程序:让用户输入性别、身高和体重以后,能判定
其体重情况并给出如下提示信息:
您的身高为: *cm, 性别:男/女,体重:*kg
您的标准体重应为:***
您的体重情况为:正常/超重/轻度肥胖/…
您的体重 高于/低于 标准体重 x%
程序输入数据格式及取值范围要求:
(1) 字符 m 或 M 表示男性,f 或 F 表示女性。
(2) 身高单位为厘米,取值范围[50.0, 260.0]
(3) 体重单位为 kg,取值范围[30.0, 300.0]
若用户输入数据不合法,应给出错误提示信息和出错的原因。用户输入错误时可以终止
程序的运行。也上可让用户重新输入,最多允许 5 次输入错误。
工程要求:
请将以上要求实现到如下四个函数中:
(1) double StandardWeight(char cGender, double dHeight); //返回值为标准体
重。
(2) int WeightStatus(double dStandardWeight, double dActualWeight); //根据
标准体重与实际体重计算体重情况。返回值:0-5,分别对应于太瘦/正常/超重/…
(3) void OutputResult(struct CheckInfoStru *pUserData); //输出判定结果
(4) void CheckYourWeight(); //本题主程序,请在 main 函数中调用该函数。
以上函数的框架已经在 CodeForLab13_1.cpp(或者相应的.c 文件)中提供了,请直
接将程序写在每个函数的函数体内即可。
结构体类型 struct CheckInfoStru 用于保存用户的相关信息及检查结果,其类型说明
请参见 CodeForLab13_1.h。
#include <stdio.h>
#include <stdlib.h>
enum {
TOO_SLIM = 0, NORMAL, OVER_WEIGHT,
MILD_OBESITY, MODERATE_OBESITY, TOO_FAT
};
struct CheckInfoStru {
char cGender; //性别
double dHeight;
//身高
double dActualWeight;//实际体重
double dStandardWeight;//标准体重
int nResult; //体重检测结果
};
char getGender(void)
{
char c;
printf("请输入性别:");
for (int i = 1; i <= 5; i++)
{
if (scanf_s("%c", &c, 1) != 1 || (c != 'f' && c != 'F' && c != 'm' && c !=
'M'))
{
printf("The gender of user: 'm' or 'M' denotes male, 'f' or 'F' denotes
female");
while ((getchar()) != '\n');
}
else
return c;
}
return -1;
}
double getHeight(void)
{
double h;
printf("请输入身高:");
for (int i = 1; i <= 5; i++)
{
if (scanf_s("%lf", &h) != 1 || h < 50.0 || h>260.0)
{
printf("The height of user. Range--[[50.0, 260.0]]");
while ((getchar()) != '\n');
}
else
return h;
}
return -1;
}
double getActualWeight(void)
{
double h;
printf("请输入体重:");
for (int i = 1; i <= 5; i++)
{
if (scanf_s("%lf", &h) != 1 || h < 30.0 || h>300.0)
{
printf("The height of user. Range--[[30.0, 300.0]]");
while ((getchar()) != '\n');
}
else
return h;
}
return -1;
}
double StandardWeight(char cGender, double dHeight)
{
double w = (dHeight - 100) * 0.9;
if (cGender == 'm' || cGender == 'M')
return w;
else if (cGender == 'f' || cGender == 'F')
return w - 2.5;
else
return -1;
}
int WeightStatus(double dStandardWeight, double dActualWeight)
{
if (dActualWeight < dStandardWeight * 0.9)
return 0;//太瘦
else if (dActualWeight >= dStandardWeight * 0.9 && dActualWeight <= dStandardWeight
* 1.1)
return 1;//正常
else if (dActualWeight > dStandardWeight * 1.1 && dActualWeight <= dStandardWeight
* 1.2)
return 2;//超重
else if (dActualWeight > dStandardWeight * 1.2 && dActualWeight <= dStandardWeight
* 1.3)
return 3;//轻度肥胖
else if (dActualWeight > dStandardWeight * 1.3 && dActualWeight <= dStandardWeight
* 1.5)
return 4;//中度肥胖
else
return 5;//重度肥胖
}
double OverweightPercent(double dStandardWeight, double dActualWeight)
{
return (dActualWeight - dStandardWeight) / dStandardWeight;
}
void CheckYourWeight(struct CheckInfoStru* pUserData)
{
pUserData->dStandardWeight = StandardWeight(pUserData->cGender,
pUserData->dHeight);
pUserData->nResult = WeightStatus(pUserData->dStandardWeight,
pUserData->dActualWeight);
}
void OutputResult(struct CheckInfoStru* pUserData)
{
printf("您的身高为:%.2lfcm,性别:", pUserData->dHeight);
switch (pUserData->cGender)
{
case 'm':case'M':printf("男"); break;
case 'f':case'F':printf("女"); break;
}
printf(",体重:%.2lfkg\n", pUserData->dActualWeight);
printf("您的标准体重应为:%.2lfkg\n您的体重情况为:", pUserData->dStandardWeight);
switch (pUserData->nResult)
{
case 0:printf("太瘦\n"); break;
case 1:printf("正常\n"); break;
case 2:printf("超重\n"); break;
case 3:printf("轻度肥胖\n"); break;
case 4:printf("中度肥胖\n"); break;
case 5:printf("重度肥胖\n"); break;
}
}
int main()
{
struct CheckInfoStru x, * p;
p = &x;
if ((p->cGender = getGender()) < 0)
return 1;
if ((p->dHeight = getHeight()) < 0)
return 2;
if ((p->dActualWeight = getActualWeight()) < 0)
return 3;
CheckYourWeight(p);
OutputResult(p);
return 0;
}
4. 设一个班有若干学生(如 10 人),请定义学生结构包含以下信息:学生学号、学生姓名、高
级语言程序课的成绩,请写程序完成以下功能:
(1)定义函数以学生结构指针(指向学生数组)为参数,逐个录入该班集的学生信息;
(2)定义函数以学生结构指针(指向学生数组)为参数,求出该班高级语言程序课的排名第
一的学生,并输出该第一名学生的学号、姓名及高级语言程序课成绩。
(3)在主程序中完成测试。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct studentscore {
double did;
//学号
char cname[10];
//姓名
double dmark;//成绩
}STUDENTSCORE;
int best(STUDENTSCORE* p, int n);
int information(STUDENTSCORE* p, int n);
int main()
{
int n;
STUDENTSCORE* p;
scanf_s("%d", &n);
p = (STUDENTSCORE*)malloc(sizeof(STUDENTSCORE) * n);
information(p, n);
best(p, n);
return 0;
}
int information(STUDENTSCORE* p, int n)
{
for (int i = 0; i < n; i++)
{
scanf_s("%lf %s %lf", &(p + i)->did, (p + i)->cname, 10, &(p + i)->dmark);
}
return 0;
}
int best(STUDENTSCORE* p, int n)
{
STUDENTSCORE* q;
q = (p+0);
for (int i = 1; i < n; i++)
{
if ((p + 1) >q)
{
q = p + i;
}
}
printf("高级语言程序课的排名第一的学生\n");
printf("学号:%lf,姓名:%s,成绩:%lf\n", q->did, q->cname, q->dmark);
return 0;
}
Download