【C++】苏大期中考试前第二次模拟

目录

一. 题目

二. 代码 

三. 总结


一. 题目

考试说明

  1. 考试时间:合计2小时。选择题部分30分钟交卷,允许提前交卷。
  2. 考试过程中,不能连接未经指定网站或服务器。
  3. 闭卷考试部分,不能查阅任何类型的参考资料。
  4. 开卷考试部分,可以查阅纸质文档,不能查阅任何类型的电子文档。
  5. 考试过程中,不得使用任何形式的电子存储设备,不可使用手机。
  6. 违反上述2-5条者,视为考试作弊。

选择题答题方式(20分,闭卷,严禁使用vs编程环境进行尝试

  1. 打开浏览器,在地址栏中输入http://192.168.125.3,点击相应链接进入登录页面。
  2. 按要求输入两遍自己的学号。
  3. 点击“登录”按钮即可进入答题页面。如考试尚未开始,系统会进入等待页面并倒计时。考试开始时间到,系统会自动进入答题页面。
  4. 在页面左侧选择题号,页面右侧即会显示相应的题目。考生只需点击选择相应的选项。
  5. 答题过程中如关闭浏览器或出现系统故障导致计算机重新启动,系统不会丢失之前已经完成的题目的答案。考生可以打开浏览器重新登录并继续考试。
  6. 答题完成后,点击“交卷”按钮即可完成交卷。交卷后不能再次登录系统继续考试。
  7. 考试结束时间到,系统会自动收卷。

编程题提交方式(80分,开卷)

  1. 提交前务必关闭vs2005vs2008或vs2010编程环境。
  2. 所有源程序内容必须仅包含在一个源程序文件(CPP文件)中。
  3. 在浏览器的地址栏中输入http://192.168.125.3,点击相应链接进入提交页面。
  4. 按要求输入两遍自己的学号。
  5. 点击“选择文件”按钮,选择自己的源程序文件。点击“提交”按钮提交。
  6. 如提交成功,系统会显示相关信息。如果提交不成功,请重复步骤16-18。
  7. 提交成功后,可点击“查看内容”按钮检查提交的内容。


按以下要求编写程序

题目说明

请各位考生课程信息发布网站下载数据文件input.txt,然后将该数据文件手动保存D盘根目录下。该文件中的数据以文本形式存储,包含若干个以空格间隔的单词,且不包含任何标点符号。

请按要求依次完成如下操作:

  1. 编写一个函数ReadFile。读取input.txt文件中的所有单词,并将它们存放在string类型的A向量中。
  2. 编写一个函数ShowData。显示第1步中生成的string类型的A向量。要求每行显示X个单词,每个单词占Y列,左对齐,右补空格。该函数要求将每行显示单词个数X、每个单词显示列数Y都作为函数参数来进行处理。如不设定,则每行显示5个单词,每个整数占8列。
  3. 编写一个函数GetNumbers,提取出A向量中所有形式为整数数值的单词,并将其转换为整数,将计算结果保存在另一个int类型的向量B中。
  4. 编写一个函数ShowData。显示第3步中生成的int类型的B向量。要求每行显示X个整数,每个整数占Y列,左对齐,右补空格。该函数要求将每行显示单词个数X、每个单词显示列数Y都作为函数参数来进行处理。如不设定,则每行显示5个整数,每个整数占5列。
  5. 编写一个函数SortData。对第3步中生成的向量B按照各元素的“权重”进行增序排序。所谓“权重”是指某整数的各位数字的总和除以该整数位数所得到的计算结果,该结果为double类型。例如:356的权重计算过程为:(3+5+6)/3=4.66667;4457的权重计算过程为:(4+4+5+7)/4=5.0
  6. 编写一个函数WriteFile。将经过第5步处理的向量B中所有整数写入到指定文本文件中,要求每行显示4个整数,每个整数占5列,右对齐,左补空格字符。
  7. main函数如下:

void main()

{

string ifname="d:\\input.txt",ofname="d:\\result.txt";

vector A;

vector B;

ReadFile(ifname,A);

cout<<"文件读取操作完成后的A向量为:"<

ShowData(A);

cout<

B=GetNumbers(A);

cout<<"整数提取操作完成后的B向量为:"<

ShowData(B);

cout<

SortData(B);

cout<<"排序操作完成后的B向量为:"<

ShowData(B,6);

cout<

WriteFile(ofname, B);

}

注意: 不允许修改main函数,每修改一处,扣3分;


评分标准

(编程题满分为80分)

大项

子项

评分项

应得分

实得分

70

结果(70分)

编译子项5分

ReadFile函数

15

ShowData函数(string向量版本)

10

ShowData函数(int向量版本)

10

GetNumbers函数

13

SortData函数

12

WriteFile函数

10

上述各项都不得分

编译子项

本项不得分

程序运行出现异常

-10

程序死循环

-10

修改main函数

-3(每处修改)

编译(5分)

编译连接均通过(无warning)

5

编译连接均通过(有warning)

4

编译通过、连接不通过

3

编译、连接均不通过

0

10分

缩进对齐(4分)

正确运用缩进对齐规则

4

有缩进对齐但不完全符合要求

2

没有使用缩进对齐规则

0

注释(3分)

有详细且正确的注释

3

有注释,但不够详细

2

完全没有注释

0

变量命名(3分)

变量命名有规则

3

变量命名有规则、但规则使用不一致

2

变量命名无规则

0

总分(满分80分)

二. 代码 

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

void ReadFile(string ifname,vector&a){
    ifstream ifile(ifname);
    while(!ifile.eof()){
        string s;
        if(ifile>>s){
            a.push_back(s);
        }
    }
    ifile.close();
}

void ShowData(const vector&a,int X=5,int Y=8){
    /*要求每行显示X个单词,
    每个单词占Y列,左对齐,右补空格。
    该函数要求将每行显示单词个数X、每个单词显示列数Y都作为函数参数来进行处理。
    如不设定,则每行显示5个单词,每个整数占8列。*/
    int cont=0;
    for(int i=0;iGetNumbers(const vector&a){
    /*
    提取出A向量中所有形式为整数数值的单词,
    并将其转换为整数,
    将计算结果保存在另一个int类型的向量B中
    */
    vectortempB;
    for(int i=0;i>n){
            tempB.push_back(n);
        }
        */
        int j=0;
        if(a[i][j]=='-' or (a[i][j]<='9' and a[i][j]>='0')){
            for(j=1;j'9'){
                    break;
                }
            }
        }

        if(j==a[i].size()){
            int n;
            istringstream s(a[i]);
            if(s>>n){
                tempB.push_back(n);
            }
        }     
    }
    return tempB;
}

void ShowData(const vector&b,int X=5,int Y=8){
    /*要求每行显示X个单词,
    每个单词占Y列,左对齐,右补空格。
    该函数要求将每行显示单词个数X、每个单词显示列数Y都作为函数参数来进行处理。
    如不设定,则每行显示5个单词,每个整数占8列。*/
    int cont=0;
    for(int i=0;i&b){
    /*
    5、对第3步中生成的向量B按照各元素的“权重”进行增序排序。
    所谓“权重”是指某整数的各位数字的总和除以该整数位数所得到的计算结果,
    该结果为double类型。
    例如:356的权重计算过程为:(3+5+6)/3=4.66667;4457的权重计算过程为:(4+4+5+7)/4=5.0。
    */
    sort(b.begin(),b.end(),cmp);
}

void WriteFile(string s,const vector&b){
    /*
    将经过第5步处理的向量B中所有整数写入到指定文本文件中
    要求每行显示4个整数,
    每个整数占5列,右对齐,左补空格字符
    */
    ofstream ofile(s);
    int cont=0;
    for(int i=0;i A;
	vector B;

	ReadFile(ifname,A);
	
	cout<<"文件读取操作完成后的A向量为:"<

三. 总结

期中考试三件套:

1. 读写文件

2. vector操作

3. sstream(即stringstream)

这次差点被坑,在GetNumbers里本来是直接用istringstream ss(a[i])把数放进int中去的,毕竟如果ss>>n成功的话就说明是int,结果我忘记了,只要是包含int的部分都会被塞进去

结果就是,12a这样一个字符串在我的程序里面将12提出来当成int塞进B里了。

判断的时候又忘记要把负号单独拿出来判断了。

好吧,我说怎么真的会十分钟了事嘞。

你可能感兴趣的:(c++,算法,开发语言)