标题:实训课程,求大佬帮忙支支招
只看楼主
q937421637
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-1-4
结帖率:0
已结贴  问题点数:20 回复次数:4 
实训课程,求大佬帮忙支支招
搜索更多相关主题的帖子: 课程 
2019-01-04 09:19
q937421637
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-1-4
得分:0 
定义变量不太懂,贼难受
2019-01-04 09:28
q937421637
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-1-4
得分:0 
大佬们,谁能帮我弄下,QQ937421637    有偿
2019-01-04 09:40
Mr_doge
Rank: 5Rank: 5
等 级:贵宾
威 望:10
帖 子:159
专家分:385
注 册:2018-6-28
得分:10 
我就喜欢这种干脆的,懒得动脑干脆有偿,可以,代码给你,免得别人说我们C版摸鱼的都是怂货
支付宝 15289802628

由于图片的题目出题者明显语文风格特别个性,理解困难,可能理解有偏差,如果需要修改再说
编译环境 win10 MinGW(gcc 3.4.5)

XXXXXX 2018091101233.zip (10.66 KB)


程序代码:
#include <stdio.h>     //C标准库文件
#include <stdlib.h>    //C标准库文件

#define name "老李"    //此处填姓名
#define xuehao 12      //此处填学号

#define max 199        //随机数值数组上限
#define strn_max 5     //读取成绩输入的字符上限

//根据C99标准进行函数声明
int fun1(int n,int a[]);
int fun2(int n,int a[]);
int fun3(int n,int a[]);
int fun4(int n,int a[]);
int str_get(char * arr,int the_max);
int ascii_to_int(char cache[]);

//用作状态判定的全局变量
int state=0;

int main(void)
{
    int std[max]={0};
    std[0]=-1;
    int xh=xuehao;
    char ch=0;

    printf("2011-2012 第二学期C语言上机考试试题\n班级——11网络1班\n姓名——%s\n学号——%d\n\n",name,xh);

    //printf("请输入选项:\n1:fun1\n2:fun2\n3:fun3\n4:fun4\n");

    while(ch!='q')
    {
        printf("请输入选项:\n\n1:随机生成成绩数据\n2:显示成绩数据\n3:查找数据\n4:显示随机生成数据的属性\nq:退出\n\n");
        ch=getchar();
        while(getchar()!='\n')
            continue;

        switch(ch)
        {
            case '1':
                fun1(xh,std);
                break;
            case '2':
                fun2(xh,std);
                break;
            case '3':
                fun3(xh,std);
                break;
            case '4':
                fun4(xh,std);
                break;
            case 'q':
                return 0;
                break;
            default:
                printf("未定义行为,请重新输入\n\n");
                break;
         }
    }

    return 0;

}

//fun1的功能是随机生成学号x3个整形数值并存入数组中,生成随机范围为0至100
int fun1(int n,int a[])
{
    int cache=0;
    int count=0;
    cache=n*3;
    if(cache>199)
    {
        printf("学号x3超出数据保存上限!\n\n");
        return 1;
    }

    switch(state)
    {
        case 0:
            state=1;
            break;
        case 1:
            state=2;
            printf("数组内已存在随机成绩数据!\n\n");
            return 1;
            break;
        default:
            printf("致命错误!\n\n");
            return 1;
            break;
    }

    while(count<(cache-1))
    {
        a[count]=(rand()%100);//本处程序重点,随机数生成函数rand()是C标准库stdio.h中的一个函数
        count++;
    }

    a[count]=-1;
    printf("数据已生成。\n\n");
    return 0;
}

//fun2的功能是输出数组内的数据
int fun2(int n,int a[])
{
    int count,line;
    if(!state)
    {
        printf("数据为空,返回主菜单\n\n");
        return 1;
    }

    printf("随机数据为:\n");
    for(count=0,line=1;count<(max-1);count++)
    {
        if(a[count]<0)
            break;
        printf("%2d ",a[count]);
        if((!((count+1)%5))&&(count))
            printf("\n");
    }
    printf("\n\n");
    return 0;
}


//fun3的功能是查找数组内自己的成绩并输出对应等级
int fun3(int n,int a[])
{
    int count=0;
    int cache=0;
    int grades=0;
    int the_state=0;
    int round=0;
    char * size[4]={"优秀","良好","合格","不合格"};
    char gra_cache[strn_max]={0};
    char * sig;
    if(!state)
    {
        printf("数据为空,返回主菜单\n\n");
        return 1;
    }

    printf("输入你的成绩\n\n");

    ////此处利用了自行编写的函数读取输入,避免VS编译不允许scanf()等不安全函数的问题
    str_get(gra_cache,strn_max);
    if((gra_cache[3])||((gra_cache[0]<'0')||(gra_cache[0]>'9')))//这里讲解一下,如果输入成绩的时候输入奇怪的东西就会停止该函数执行
    {
        printf("未定义行为,返回主菜单。\n\n");
        return 1;
    }
    grades=ascii_to_int(gra_cache);
    ///////////

    if(grades>100)
    {
        printf("你的分数不科学!\n\n");
        return 1;
    }
    while(a[count]>=0)
    {
        if(cache>90)
            sig=size[0];
        else if(cache>80)
            sig=size[1];
        else if(cache>60)
            sig=size[2];
        else
            sig=size[3];
        if(a[count]==grades)
        {
            printf("%2d %3s ",a[count],sig);
            round++;
            the_state=1;
        }

        count++;
    }
    printf("共查找到%d个数据。\n",round);

    if(!the_state)
        printf("数据内没有你的成绩。\n");

    printf("\n\n");
    return 0;

}

//fun4的功能是输出数组的最大值、最小值以及所有数值的总和和平均值
int fun4(int n,int a[])
{
    int the_max=0,the_min=0,sum=0;
    float average=0;
    int count=0;

    if(!state)
    {
        printf("数据为空,返回主菜单\n\n");
        return 1;
    }

    while(count<(max-1))
    {
        if(a[count]<0)
            break;
        if(a[count]>the_max)
            the_max=a[count];
        else if(a[count]<the_min)
            the_min=a[count];
        sum+=a[count];
        count++;
    }
    average=(float)sum/count;

    printf("最高:%d 最低:%d 总和:%d 平均值:%2.2f\n\n",the_max,the_min,sum,average);
    return 0;
}

//针对可在VS以及MinGW都可正常编译无需替换而自行编写的读取输入函数
int str_get(char * arr,int the_max)
{
    char * cache;
    cache=arr;
    int count=0;
    for(count=0;count<the_max-1;count++)
    {
        *arr=getchar();
        if((*arr)==('\0')||(*arr)==('\n'))
        {
            *arr='\0';
            return count;
        }
        arr++;
    }
    *arr='\0';
    return count;
}

//自行编写的将输入字符串转换为整数的函数
int ascii_to_int(char cache[])
{
    int sum=0;
    int count=0;
    int base_of_sum=1;
    int round_of_ten=0;
    int round=0;

    for(count=0;(0!=(cache[count]))&&(count<strn_max);count++)
        round++;

    for(count=0;(0!=(cache[count]))&&(count<strn_max);count++)
    {
        for(base_of_sum=1,round_of_ten=0;round_of_ten<round-1;round_of_ten++)
            base_of_sum*=10;

        sum+=((cache[count]-'0') * base_of_sum);
        round--;
     }

    return sum;
}
2019-01-04 22:36
libaoquanccc
Rank: 2
等 级:论坛游民
帖 子:24
专家分:39
注 册:2019-1-5
得分:10 
我特别理解楼上,看了半天我也没看明白。。。需求让人看不懂
2019-01-05 11:03



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492495-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.214151 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved