大一上学期课程设计

本文介绍了一个包含小学生数学考试系统、大奖赛计分系统及电子词典查询系统的程序设计案例。针对不同年级的学生,考试系统能生成不同难度级别的算术题目,并计算得分。计分系统则用于去除最高和最低评分后计算平均得分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,小学生考试系统

/*Copyright(c)2016,烟台大学计算机学院
all rights reserved.
作者:曹欣宇
完成日期:2016年12月31日


题目描述
 出10个100以内的加减乘除随机运算
输入
  答案
输出
  答案评判以及正确答案,最后输出正确率以及得分。
样例输入
  无
样例输出
  无
课程设计说明:增加减乘除运算,开始输入年级,
一二年级只有加法,三四年级增加乘法,五六年级增加除法。*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void jia();
void jian_h();
void cheng_h();
void chu_h();

int num1,num2,add,jian,cheng,chu,way,jie,count=0;
//float rate;
int main()
{

    int i,grade;
    printf("/*****************************/\n");
    srand(time(0));
    printf("请输入年级(数字):\n");
        scanf("%d",&grade);
    for(i=0; i<10; i++)
    {
        num1=rand()%100+1;
        num2=rand()%100+1;
        if(grade==1||grade==2)
            way=rand()%2+1;
        else if(grade==3||grade==4)
            way=rand()%3+1;
        else if(grade==5||grade==6)
            way=rand()%4+1;
        printf("这是第%d道题\n",i+1);
        if(way==1)
            jia();
        else if(way==2)
            jian_h();
        else if(way==3)
            cheng_h();
        else if(way==4)
            chu_h();
    }
    //rate=(float)count/10;
    printf("你的正确率是%%d,得分%d\n",count*10,count*10);
    return 0;
}
/***********************************************************

功能描述;进行加法计算。

参数;无。

返回值;无。

其他说明;随机数若相加大于零则重新产生。

***********************************************************/
void jia()
{
    while(num1+num2>100)
    {
        num1=rand()%99+1;
        num2=rand()%99+1;
        if(num1+num2<=100)
            break;
    }
    jie=num1+num2;
    printf("%d+%d=?\n",num1,num2);
    printf("你的答案是?");
    scanf("%d",&add);
    if(add==jie)
    {
        printf("这么简单,你肯定会做对的!\n");
        count++;
    }
    else
    {
        printf("没听课吗?要努力喽!\n");
        printf("正确答案是%d\n",jie);
        printf("/*****************************/\n");
    }
}
/***********************************************************

功能描述;进行减法计算。

参数;无。

返回值;无。

其他说明;若第一个随机数小于第二个随机数则重新产生。

***********************************************************/
void jian_h()
{
    while(num1<num2)
    {
        num1=rand()%99+1;
        num2=rand()%99+1;
        if(num1>num2)
            break;
    }
    jie=num1-num2;
    printf("%d-%d=?\n",num1,num2);
    printf("你的答案是?");
    scanf("%d",&jian);
    if(jian==jie)
    {
        printf("不错不错!\n");
        count++;
    }
    else
    {

        printf("继续努力!\n");
        printf("正确答案是%d\n",jie);
        printf("/*****************************/\n");
    }
}
/***********************************************************

功能描述;进行乘法计算。

参数;无。

返回值;无。

其他说明;随机数若相乘大于零则重新产生。

***********************************************************/
void cheng_h()
{
    while(num1*num2>100)
    {
        num1=rand()%99+1;
        num2=rand()%99+1;
        if(num1*num2<=100)
            break;
    }
    jie=num1*num2;
    printf("%d*%d=?\n",num1,num2);
    printf("你的答案是?");
    scanf("%d",&cheng);
    if(cheng==jie)
    {
        printf("厉害啊,乘法难不倒你!\n");
        count++;
    }
    else
    {
        printf("想想哪里错了。\n");
        printf("正确答案是%d\n",jie);
        printf("/*****************************/\n");
    }
}
/***********************************************************

功能描述;进行除法计算。

参数;无。

返回值;无。

其他说明;若第一个随机数大于第二个则重新产生,且保证结果为整数。

***********************************************************/
void chu_h()
{
    while(num1<num2||num1>100)
    {
        num1=rand()%99+1;
        num2=rand()%99+1;
        if(num1>num2)
            break;
    }
    num1=(num1/num2)*num2;
    jie=num1/num2;
    printf("%d/%d=?\n",num1,num2);
    printf("你的答案是?");
    scanf("%d",&chu);
    if(chu==jie)
    {
        printf("真棒!\n");
        count++;
    }
    else
    {
        printf("你离成功不远了!\n");
        printf("正确答案是%d\n",jie);
        printf("/*****************************/\n");
    }
}

二,大奖赛计分。

/*Copyright(c)2016,烟台大学计算机学院
all rights reserved.
作者:曹欣宇
完成日期:2016年12月31日
题目描述
 详见报告
输入
  评委人数以及各评委打分
输出
  选手最后得分
样例输入
  无
样例输出
  无
课程设计说明:按N继续,按其他键退出*/
#include <stdio.h>
void calScore(int n);
int main()
{
    int n;
    char whether;
    while(1)
    {
        printf("请输入评委的人数:");
        scanf("%d",&n);
        calScore(n);
        printf("*******************************SUCCESS**********************************\n");
        printf("按N退出,其他键继续!\n");
        getchar();
        scanf("%c",&whether);
        if(whether=='N')
            break;
    }
    return 0;
}
/***********************************************************

功能描述;进行程序大部分功能,即:
输入成绩,判断输入是否合法,得出最后得分

输入参数;n-评委人数。

返回值;无。

其他说明;若输入不合法则重新输入。

***********************************************************/
void calScore(int n)
{
    float grade,max=-1,min=11;
    float average,sum=0;
    int j=0,num;
    num=n;
    printf("请输入选手的成绩(1-10):\n");
    for(j=1; j<=num; j++)
    {
        printf("第%d位评委的给分为:",j);
        scanf("%f",&grade);
        while(1)
        {
            if(grade>=1&&grade<=10)
                break;
            if(grade<1||grade>10)
            {
                printf("第%d位评委的给分为:",j);
                scanf("%f",&grade);
            }

        }
        sum=sum+grade;
        if(grade>max)
            max=grade;
        if(grade<min)
            min=grade;
    }
    average=(sum-max-min)/(num-2);
    printf("去掉一个最低分:%.2f,去掉一个最高分;%.2f\n",min,max);
    printf("这位选手最后的得分是:%.3f!\n",average);
}

三,电子词典。

/*Copyright(c)2016,烟台大学计算机学院
all rights reserved.
作者:曹欣宇
完成日期:2016年12月31日
题目描述
 详见报告
输入
  一个英文单词
输出
  词性以及中文意思
样例输入
  具体见运行图
样例输出
  具体见运行图
课程设计说明:拓展内容,若三次连续没有正确输入则退出*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 8001
int binary_chop();
struct dictionary
{
    char e[20];
    char c[20];
};
int m=0;
int j,max=N-1,min=0,mid;
char s[20];
int count=0;
struct dictionary dic[N];
int main()
{

    printf("/*****************************************/\n");
    printf("注意,若三次连续没有正确输入,则系统会自动退出!\n");
    printf("/*****************************************/\n");
    FILE *fp;
    if((fp=fopen("dictionary.txt","r"))==NULL)
    {
        printf("Target file cannot open!");
        exit(0);
    }
    for(j=1; j<=N; j++)
    {
        fscanf(fp,"%s %s",dic[j].e,dic[j].c);
    }
    fclose(fp);
    while(1)
    {
        printf("请输入要查找的单词(0000结束):");
        gets(s);
        if(strcmp(s,"0000")==0)
            break;
        else
        {
            binary_chop();
            if(m==1)
            {
                printf("%s的中文意思是: %s\n/********************************/\n",s,dic[mid].c);
                count=0;
            }
            else
            {
                printf("查无此词!\n/********************************/\n");
                count++;
            }
            min=0,max=N-1,m=0;
        }
        if(count>=3)
        {
            printf("你逗我玩呢,不想用就赶紧gun!\n");
            break;
        }
    }
    if(count==0)
        printf("欢迎再次使用!\n");
    return 0;
}
/***********************************************************

功能描述;进行二分查找。

参数;无。

返回值;m。

其他说明;若找到则返回m值为1,反之则为0。

***********************************************************/
int binary_chop()
{
    while(min<=max)
    {
        mid=(min+max)/2;
        if(strcmp(dic[mid].e,s)==0)
        {
            m=1;
            break;
        }
        if(strcmp(dic[mid].e,s)>0)
            max=mid-1;
        else
            min=min+1;
    }
    return m;
}

总结详见报告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值