期末考试成绩出来了请帮忙编程代码分别计算出总分和平均分各为多少?
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int x = 0;
int y = 0;
int z = 0;
cin >> x >> y >> z;
int total_score = x + y + z;
float average_score = total_score/3.0;
cout << total_score << endl;
cout << average_score << endl;//不加控制精度
cout << fixed << setprecision(1) << average_score<<endl;//控制精度,c++用setprecision函数
//setprecision单独使用是控制有效位数的,与fixed合用才是控制小数点后位数的,要包含<iomanip>头文件
printf("%.1f\n", average_score);//C语言写法
return 0;
}
#include <stdio.h>
#include <stdlib.h>
enum isAllocated{yes, no}; // 是否分配
typedef struct Node {
int id; // 作业号(如果是未分配的空闲分区,则为-1)
int start; // 起始地址
int length; // 大小
enum isAllocated isallocated; // 是否分配
struct Node* next; // 指向后面的Node
struct Node* prev; // 指向前面的Node
}Node;
Node* head; // 链表的头指针
// 打印菜单
void printMenu() {
printf("\n1. 申请内存\n");
printf("2. 释放内存\n");
printf("0. 退出\n");
printf("请选择:");
}
// 初始化(新建一个和内存相同大小的空闲结点)
void init(int capacity) {
Node* p = (Node*)malloc(sizeof(Node)); // 给新结点开辟空间
p->id = -1;
p->start = 0;
p->length = capacity;
p->isallocated = no;
p->prev = NULL;
p->next = NULL;
head = p;
}
// 打印空闲分区
void printSpare() {
Node* p = head;
printf("空闲分区如下:\n起始地址\t长度\n---------------------\n");
while (p != NULL) {
if (p->isallocated == no) {
printf("%d\t\t%d\n", p->start, p->length);
}
p = p->next;
}
}
// 申请内存
void getMemory() {
int id, size;
Node* p;
printf("请输入作业号和要申请的内存大小:");
scanf("%d%d", &id, &size);
p = head;
while (p != NULL) {
// 当找到一块长度大于所需空间的空闲分区时
if (p->isallocated == no && p->length > size) {
// 首先新建一个结点
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->id = id;
newNode->length = size; // 新结点的长度即所需空间的大小
newNode->isallocated = yes;
newNode->start = p->start; // 新结点的起始地址即空闲分区的起始地址
p->start += size; // 空闲分区的起始地址修改为新结点的末尾
p->length -= size; // 空闲分区的长度做相应的修改
// 判断这块空闲分区是不是第一块分区
if (p != head) {
newNode->prev = p->prev;
p->prev->next = newNode;
newNode->next = p;
p->prev = newNode;
}
else {
newNode->prev = NULL;
newNode->next = p;
p->prev = newNode;
head = newNode;
}
break;
} // 当找到一块长度恰好等于所需空间的空闲分区时
else if (p->isallocated == no && p->length == size) {
p->id = id; // 直接修改作业号
p->isallocated = yes;
break;
}
p = p->next;
}
if (p == NULL) {
printf("没有足够的内存可以分配了!\n");
}
}
// 释放内存
void returnMemory() {
int id;
Node* p;
printf("请输入要释放内存的作业号:");
scanf("%d", &id);
p = head;
while (p != NULL) {
// 根据作业号查找要释放的作业
if (p->id == id) {
p->id = -1;
p->isallocated = no;
// 如果此作业前面还有空闲分区,则与之合并
if (p->prev != NULL && p->prev->isallocated == no) {
p->start = p->prev->start;
p->length += p->prev->length;
p->prev = p->prev->prev;
p->prev->next = p;
}
// 如果此作业后面还有空闲分区,则与之合并
if (p->next != NULL && p->next->isallocated == no) {
p->length += p->next->length;
p->next = p->next->next;
p->next->prev = p;
}
break;
}
p = p->next;
}
if (p == NULL) {
printf("您输入的作业号不存在!\n");
}
}
int main() {
int option; // 用户选择的选项
int capacity; // 内存容量
printf("请先输入内存的容量:");
scanf("%d", &capacity);
init(capacity); // 根据内存容量进行初始化
printSpare();
while (1) {
printMenu(); // 打印菜单
scanf("%d", &option); // 输入选项
switch (option) // 判断选项
{
case 1:
getMemory(); // 申请内存
break;
case 2:
returnMemory(); // 释放内存
break;
case 0: // 退出
return 0;
default:
break;
}
printSpare(); // 打印空闲分区
}
return 0;
}