• C++期末作业习题记录


    习题一

    遍历含有学生提交作业的文件夹,并找出相应学生(预先输入该学生的学号)的有效文件(当天作业当天提交的次数,程序文件以当天布置作业的时间命名)

    void listFiles(const char * dir);

    定义遍历文件夹的函数 listFiles

    void listFiles(const char * dir)
    {
        char dirNew[200];
        strcpy(dirNew, dir);
        strcat(dirNew, "\*.*");    
    
        intptr_t handle;
        _finddata_t findData;
    
        handle = _findfirst(dirNew, &findData);
        if (handle == -1)        
            return;
    
        do
        {
            if (findData.attrib & _A_SUBDIR)//.attrib表示文件的属性 
            {
                if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
                    continue;
    
                
                strcpy(dirNew, dir);
                strcat(dirNew, "\");
                strcat(dirNew, findData.name);
    
                listFiles(dirNew);
            }
            else
            {
                if(strstr(findData.name, number))
                {
                    char strTime[100] = {0};
                    unixTime2Str(findData.time_write, strTime, sizeof(strTime));
                    if(strstr(findData.name,strTime))
                    {
                        m[findData.name]++;
                    }
                }
            } 
        } while (_findnext(handle, &findData) == 0);
    
        _findclose(handle);    
    }

    遍历文件夹的函数使用#include <io.h>头文件下的_finddata_t结构体来获取文件的属性.attrib,若文件属性为_A_SUBDIR(目录directory)则继续向下打开文件夹查找,直到文件的属性不为_A_SUBDIR为止

    匹配所查找的学生与其对应的.cpp文件所用的时strstr()函数,通过在文件名中查找学号的子串来确定所找的文件,查找时间也是通过同样的方法,只不过.time_write返回的最后修改时间用得时unix时间戳,

    需要函数将其转化为标准时间

    完整代码

    #include <bits/stdc++.h>     
    #include <io.h>
    using namespace std;
    int sum=0;
    map<string,int> m;
    map<string,int>::iterator it;
    
    void listFiles(const char * dir, char * number);//遍历目录 
    void unixTime2Str(int n, char strTime[], int bufLen);//将unix时间戳转化为标准时间 
    
    int main()
    {
        int n;
        char dir[200];
        cout<<"Enter total number of students: ";
        cin>>n;//输入查找的人数 
        cin.ignore();//删除流中的
     
        cout<<"Enter a directory: ";
        cin.getline(dir, 200);//输入目录 
        while(n--)
        {
            sum=0;
            char number[20];
            cout<<"Enter student number: ";
            cin.getline(number, 20);
            listFiles(dir,number);
        
            for(it=m.begin();it!=m.end();it++)
            {
                if(it->second>=1)//迭代排除同一天所交的相同作业 
                    sum++;
            }
            m.clear();//清空map 
            cout<<"Valid assignments submitted on the day: ";
            cout<<sum<<endl;
        }
        return 0;
    }
    
    void listFiles(const char * dir, char * number)
    {
        char dirNew[200];
        strcpy(dirNew, dir);
        strcat(dirNew, "\*.*");    
    
        intptr_t handle;
        _finddata_t findData;
    
        handle = _findfirst(dirNew, &findData);
        if (handle == -1)        
            return;
    
        do
        {
            if (findData.attrib & _A_SUBDIR)//.attrib表示文件的属性 
            {
                if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
                    continue;
    
                
                strcpy(dirNew, dir);
                strcat(dirNew, "\");
                strcat(dirNew, findData.name);
    
                listFiles(dirNew,number);
            }
            else
            {
                if(strstr(findData.name, number))
                {
                    char strTime[100] = {0};
                    unixTime2Str(findData.time_write, strTime, sizeof(strTime));
                    if(strstr(findData.name,strTime))
                    {
                        m[findData.name]++;
                    }
                }
            } 
        } while (_findnext(handle, &findData) == 0);
    
        _findclose(handle);    
    }
    
    void unixTime2Str(int n, char strTime[], int bufLen)
    {
        struct tm tm = *localtime((time_t *)&n);
        strftime(strTime, bufLen - 1, "_%m%d_", &tm);
        strTime[bufLen - 1] = '';
    }

    习题二

    控制一个字符可以上下左右移动遇到相应的字符扣除相应的体力值,体力值扣完输入结束,并且记录运行的时间,预先规定运行的时间,当程序运行达到规定的时间是,停止输入

    使用#include <conio.h>头文件里的getch()函数,读取一个字符而不再屏幕上显示,输入字符后判断字符的ASCII码来确定所控制字符的移动方向(用二维字符数组确定),每次变化

    后使用system("cls");清屏,并再次输出新的二维数组。时间记录使用了#include <time.h>头文件下的clock()函数,定义两个clock_t型start和finish变量,在程序开始时获取时间并赋值给

    start,在每次循环输入的结尾处获取时间并赋值给finish,利用double(finish-start)/CLOCKS_PER_SEC将程序执行时间转化为秒,之后再while里判断时间,时间超了break;出去

    完整代码

    #include <conio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <time.h>
    using namespace std;
    
    
    int main()
    {
        clock_t start,finish;
        start = clock();
        char c;
        char a[10][10]={{'#','M','#','#','#','#','#','#','#','#'},{'#',':','G',':',':',':','*',':','*','#'},{'#',':',':',':',':',':','G',':',':','#'},{'#','G','G','G','G','G','G','G','G','#'},{'#',':',':',':',':',':',':',':',':','#'},{'#','*','*','*','*','*','*','*','*','#'},{'#','*',':','*',':','*',':','*','*','#'},{'#',':',':',':',':',':',':',':',':','#'},{'#',':',':',':',':',':',':',':',':','#'},{'#','#','#','#','#','#','#','#','#','#'}};
        int x,y,sum,tempx,tempy;
        sum=100;
        cout<<"* is stone"<<endl<<"G is gold"<<endl<<": is soil"<<endl; 
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                cout<<a[i][j];
            }
            cout<<endl;
        }
        cout<<endl<<endl;
        cout<<"Current energy level: "<<sum<<endl;
        for(int i=0;i<10;i++)
        {
            for(int j=0;j<10;j++)
            {
                if(a[i][j]=='M')
                {
                    x=i;
                    y=j;        
                }    
            }
        }
        while(sum>0)
        {
            tempx=x;
            tempy=y;
            c=getch();
            switch(c)
            {
                case 119://
                {
                    if(x-1>0 || x==1 && y==1)
                    {
                        x=x-1;
                        if(a[x][y]=='*')
                        {
                            sum=sum-2;
                        }
                        else if(a[x][y]=='G')
                        {
                            sum=sum-3;    
                        }
                        else if(a[x][y]==':')
                        {
                            sum--;
                        }    
                    }
                    break;    
                }
                   case 97: //
                {
                    if(y-1>0)
                    {
                        y=y-1;
                        if(a[x][y]=='*')
                        {
                            sum=sum-2;
                        }
                        else if(a[x][y]=='G')
                        {
                            sum=sum-3;    
                        }
                        else if(a[x][y]==':')
                        {
                            sum--;
                        }        
                    }
                    break;    
                }
                case 100: //
                {
                    if(y+1<9)
                    {
                        if(x==0 && y==1)
                            continue;
                        y=y+1;
                        if(a[x][y]=='*')
                        {
                            sum=sum-2;
                        }
                        else if(a[x][y]=='G')
                        {
                            sum=sum-3;    
                        }
                        else if(a[x][y]==':')
                        {
                            sum--;
                        }    
                    }
                    break;    
                }
                case 115: //
                {
                    if(x+1<9)
                    {
                        x=x+1;
                        if(a[x][y]=='*')
                        {
                            sum=sum-2;
                        }
                        else if(a[x][y]=='G')
                        {
                            sum=sum-3;    
                        }
                        else if(a[x][y]==':')
                        {
                            sum--;
                        }    
                    }
                    break;
                }
                default: 
                    break;
            }
            a[tempx][tempy]='.';
            a[x][y]='M';
            system("cls");//清屏
            cout<<"* is stone"<<endl<<"G is gold"<<endl<<": is soil"<<endl; 
            for(int i=0;i<10;i++)
            {
                for(int j=0;j<10;j++)
                {
                    cout<<a[i][j];
                }
                cout<<endl;
            }
            cout<<endl<<endl;
            cout<<"Current energy level: "<<sum<<endl;
            finish = clock();
            if(double(finish-start)/CLOCKS_PER_SEC>=10)
                break;
            cout<<"time = "<<double(finish-start)/CLOCKS_PER_SEC<<"s"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Android RxJava 2.0中backpressure(背压)概念的理解
    Android 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题
    Android 滚动RecyclerView加载图片时的流畅度优化
    Android RecyclerView 滑动时图片加载的优化
    云计算之路-阿里云上:结合IIS日志分析“黑色30秒”问题团队
    云计算之路-阿里云上:对“黑色30秒”问题的猜想团队
    云计算之路-阿里云上:排查“黑色30秒”问题-为什么请求会排队团队
    云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题团队
    上周热点回顾(4.14-4.20)团队
    上周热点回顾(4.7-4.13)团队
  • 原文地址:https://www.cnblogs.com/benzikun/p/11080168.html
Copyright © 2020-2023  润新知