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; }