zoukankan      html  css  js  c++  java
  • 关于C语言的几个考试编程题目

    提交要求:
    1:邮件名称:学号后三位-题目编号-姓名-期中考试。例如:098-1-沈苗-期中考试
    2:不用附件提交,直接写邮件,内容包括编程思路(写一段自己对题目的认识、思路、技术细节等)、源代码、运行结果分析和截图

    题目:

    1.编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。

    编程思路

     1)计算机“想”一个1-100的数,则需要程序在运行的时候随机产生一个1-100之间的自然数,需要使用rand()srand((int)time(0))函数;

     2)猜数者“猜”数:则是用户每次输入的数字与随机产生的数进行比较,使用if..else..进行判断;

     3)  猜数者只有10次机会,则需要使用forwhile循环进行控制次数,本程序选择使用for循环;

     4)另外程序结束和程序判断,需要引入returnbreakcouture等配合;

    源代码

    #include <stdio.h>
    #include <stdlib.h>
    #include<time.h>
    /*
    Author:南非波波
    E-mail:qingbo.song@gmail.com
    github:@swht 
    */
    
    /*
    *产生1-n之间的随机数
    *注意:请配合srand((int)time(0)); 
    */
    int RandNum(n)
    {
        return rand()%n + 1;
    }
    
    int main()
    {
    	srand((int)time(0)); //设置随机数种子 
        int num = RandNum(100),int_num,i,min=0,max=100; 
        printf("%d
    ",num);
        for(i=1;i<=10;i++)
        {
        	printf("===============第%d次=======================
    ",i);
    		printf("请输入一个幸运数字:");
            scanf("%d",&int_num);
            if (int_num >100 || int_num < 1)
            {
            	printf("你输入的数为%d,不在1-100之间.请重试!
    ",int_num);
                continue;
    		}else if(int_num == num){
                printf("恭喜你猜中幸运数字,你猜中的幸运数字为:%d,第%d次猜中.
    ",int_num,i);
                return 0;
            }else{
            	printf("你猜的幸运数字不正确,请重试!
    ");
            	if(int_num > num )
            	{
            		max=int_num;
            		printf("幸运数字范围缩小为%d-%d!
    ",min,max);
    			}else{
    				min=int_num;
    				printf("幸运数字范围缩小为%d-%d!
    ",min,max);
    			}
            	continue;
    		}
        }
        printf("你猜数字次数已达10次上限,很抱歉你未能猜中幸运数字,程序退出!
    ");
        return 0;
    }

    输出截图

      

    运行结果分析

      该源码程序会在第一行提示当前为第几次输入,提示用户输入的幸运数字缩小的范围,最终用户正确猜中显示用户猜中的数字和当前次数,或者用户输入达到10次,程序遗憾退出!

    2.

    题目描述:任意给定n个整数,求这n个整数序列的和、最小值、最大值
    输入描述:输入一个整数n,代表接下来要输入的整数个数,n<=100,接着输入n个整数
    输出描述:输出整数序列的和、最小值和最大值,用空格隔开,占一行
    样例输入:
    2
    1 2
    样例输出:
    3 1 2

    编程思路

      1)用户输入的元素个数不定,需要引入数组的概念进行实现;

      2)求和,既是转变成数组元素遍历,元素值累加,求和,使用for循环进行处理;

      3)求最小数,既是转变成元素遍历,比较各元素大小,求出最小值,使用for循环嵌套if判断进行处理;

      4)求最大数,既是转变成元素遍历,比较各元素大小,求出最大值,使用for循环嵌套if判断进行处理;

    源代码:

    #include <stdio.h>
    #include <stdlib.h>
    /*
    Author:南非波波
    E-mail:qingbo.song@gmail.com
    github:@swht 
    */
    int MaxNum(int num[],int n)
    /*
    *传入一个整数型数组和对应数组的长度,输出数组元素值最大的下标 
    */
    {
        int i,maxnum=num[0],maxi=0;
        for(i=0;i<n;i++)
        {
            if(num[i]>maxnum)
            {
                maxnum=num[i];
                maxi=i;
            }
        }
        return maxi;
    }
    
    int MinNum(int num[],int n)
    /*
    *传入一个整数型数组和对应数组的长度,输出数组元素值最小的下标 
    */
    {
        int i,minnum=num[0],mini=0;
        for(i=0;i<n;i++)
        {
            if(num[i]<minnum)
            {
                minnum=num[i];
                mini=i;
            }
        }
        return mini;
    }
    
    int SumNum(int num[],int n)
    /*
    *传入一个整数型数组和对应数组的长度,输出数组所有元素的和 
    */ 
    {
    	int i,sum=0;
    	for(i=0;i<n;i++)
    	{
    		sum +=num[i];
    	}
    	return sum;
    } 
    
    int main()
    {
        int num[100],i,n,imax,imin,sum;
        printf("请输入即将要输入整数的个数(1-100):");
        scanf("%d",&n);
        if(n>100||n<1)
        {
        	printf("你输入的数值不正确,整数个数数值要求在1-100以内!程序退出!");
        	return 0;
    	}
        printf("请依次输入%d个整数:",n);
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&num[i]);
    	}
        imax = MaxNum(num,n);
        imin = MinNum(num,n);
        sum = SumNum(num,n);
        printf("%d,%d,%d
    ",sum,num[imin],num[imax]);
    	return 0;
    }

    截图:

    运行结果分析

      在运行结果正确的情况下,对程序进行优化处理,将数组求和、求最小数、求最大数封装成函数,只要传入整数型数组和数组的长度,即可实现函数返回数据元素和、数组最小元素下标和数组最大元素下标;

      增加判断用户输入即将要输入的元素个数进行判断,大于100和小于1的进行异常退出操作;

      如果用户输入的元素不足,则程序不会退出,知道用户输入元素个数满足之前预定的数值,回车才能进行后续处理:

      对于输入元素个数超出之前预定个数,则按照顺序仅取前n个元素值:

    3. 

    外卖费。上了一上午的课,终于到了午饭时间,大家讨论中午吃什么,有人说吃食堂盖饭,有人说吃海底捞,最后宿舍长大人一拍桌子,说:叫外卖!于是开始打电话叫外卖,规则如下:每单少于20元(不含)不予以送餐,每单在20(含)到30(不含)元之间收取8块钱送餐费,每单在30(含)到40(不含)元之间收取5元送餐费,每单在40(含)元以上免费送餐,请你计算这顿午餐的全部费用。
    输入格式:输入共2行,第一行包括一个整数n(n>=1&&n<=20),表示这一单一共要了几个菜,第2行有n个浮点数,以空格分开,表示每个菜的价格
    输出格式:输出1行,包含一个浮点数,表示全部外卖费,保留小数点后面2位,当不够送餐服务时,输出error
    输入样例:
    3
    10.5 11.5 10.5
    输出样例:
    37.50

    编程思路

      1)分阶段收取配送费,选择使用switch..caseif..else..语句进行判断;

      2)输入菜品个数不定,使用数组的概念,加入for循环遍历数组读取输入的值;

    源代码:

    #include <stdio.h>
    #include <stdlib.h>
    /*
    Author:南非波波
    E-mail:qingbo.song@gmail.com
    github:@swht 
    */
    int main()
    {
    	int n,i;
        double sum,totalsum,num[100];
        printf("请输入预定餐品数量:");
        scanf("%d",&n);
        printf("请输入每个餐品的价格:");
        for(i=0;i<n;i++)
        {
            scanf("%lf",&num[i]);
            sum += num[i];
        }
        if(sum >= 20 && sum < 30)
        {
            totalsum=sum+8;
            printf("你此次外卖费(包含运费8元):%.2lf
    ",totalsum);
        }else if(sum>=30 && sum < 40)
        {
            totalsum=sum+5;
            printf("你此次外卖费(包含运费5元):%.2lf
    ",totalsum);
        }else if(sum >= 40)
        {
            totalsum = sum +0;
            printf("你此次外卖费(免运费):%.2lf
    ",totalsum);
        }else{
            printf("你此次外卖费小于20元,不予配送,感谢你的支持!");
        }
        return 0;
    }

    截图:

    运行结果分析

      一定要注意用户输入的个数和输入价格不符的情况,否则引起程序异常。另外需要注意在计算sum值的时候,比较sum值大小是不包含运费在内的。

  • 相关阅读:
    MySQL事务知识要点(一)
    MySQL 安全体系知识要点
    MySQL 安全性知识要点
    #翻译#通往SQL Server安全级别2的阶梯:身份验证; 唐•吉利; 原文链接:Stairway to SQL Server Security Level 2: Authentication http://www.sqlservercentral.com/articles/Stairway+Series/109975/
    SQL子查询&视图&更新&删除思维导图-误点难点(附示例代码)
    #翻译#通往t
    香港中文大学-人脸识别进展-2014-06
    NotesMITLinearAlgebra
    Notes Berkerly Statistics 2.1X Week4
    Notes on Brain Study
  • 原文地址:https://www.cnblogs.com/songqingbo/p/8733959.html
Copyright © 2011-2022 走看看