zoukankan      html  css  js  c++  java
  • ITAT复赛答案集锦(1)

    第一届

    1.       输入一个五位整数,将它反向输出。例如输入12345,输出应为54321。(15分)

    Strrev();

    2.      用两种循环结构分别编程计算1+2+3…+100的值。
    运行结果为“1+2+…+100=5050”(15分)

    3.       从终端读入20个数据到数组中,统计其中正数的个数,并计算它们之和。(15分)

    4.       利用指针实现将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各单元的值。(20分)

    5.       要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,要求换成30张小钞票,每种面值的至少一张,编程输出所有可能的换法,程序应适当考虑减少重复次数。(25分)

    6.       求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out.dat中。例如若n为1000时,函数值应为:s=153.909064。(30分)

    第四届(A)

    1、编写一个程序,让它有以下功能:从键盘上输入一个五位数,对此整数中的五个数值进行从大到小排序,形成一个新的五位数,输出这个整数。(15分)

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

     

    int cmp(const void* a,const void* b)

    {

        return *(char*)b - *(char*)a;

    }

    int main()

    {

        char s[6];

        scanf("%s",s);

        qsort(s,5,sizeof(s[0]),cmp);

        printf("%s\n",s);

    }

    2、输入年、月、日,输出该日期是该年的第几天。(25分)

    3、利用数组实现数据的存储。将学生的学号和成绩存储在数组中,利用循环计算出数组中存储学生的平均成绩,找出高于平均分的学生信息并输出。(20分)

    4、输入五个国家的名字,按字母顺序(即按ASCII码从小到大的顺序)排列输出。(20分)

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

     

    int cmp(constvoid* a,const void* b)

    {

        return strcmp((char*)a,(char*)b);

    }

    int main()

    {

        int i;

        char s[5][10];

        for(i=0;i<5;i++)

            scanf("%s",s[i]);

        qsort(s,5,sizeof(s[0]),cmp);

        for(i=0;i<5;i++)

            printf("%s\n",s[i]);

    }

    5、用指针实现:任意输入20个数,将它们按照从大到小的顺序输出。(20分)

    附加题

    6、编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找,通讯录保存到一个文件中。(50分)

    (提示:可能用到以下库函数:

    malloc(),功能:分配size字节的存储区,

    用法:(类型 *)malloc(size *sizeof(你要定义的类型));包含于<stdlib.h>库中

    feof(),功能:检测文件是否结束

    用法: int feof(fp)

    FILE *fp;包含于<stdio.h>库中。)

    (B)

    1、编程完成数据加密。数据是五位的整数,加密规则为:每位数字都加上6,然后用和除以8的余数代替该数字,再将第一位和第五位交换,第二位和第四位交换。(15分)

    2、请猜数字,该数字由系统随即产生。要求:用户最多有10次猜测的机会,如果在10次内猜对数字,则程序显示祝贺信息,如果连续10次都没有猜中数字,则游戏自动退出。(25分)

    (提示:可能用到以下库函数:

    randomize();用系统的时间作为随机种子;包含于stdlib.h库中

    random(100):随机产生0-99之间的一个随机数;包含于stdlib.h库中

    toupper():将字符c转换为大写英文字母,包含于ctype.h库中)

    3、有一个3×4的矩阵,要求编写程序找出每一行中最大值并与第一列交换。(20分)

    4、输入五个字符串,要求按照字母顺序(即按ASCII码从小到大的顺序)输出这五个字符串。(20分)

    5、用指针实现:把一个整数插入到由小到大排列的数列中,插入后仍然保持由小到大的顺序。(20分)

    附加题

    6、编写一个简单的通讯录管理系统。通讯录包括:姓名、通讯地址、邮编、联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入、显示、查找等,通讯录保存到一个文件中。(50分)

    (提示:可能用到以下库函数:

    malloc(),功能:分配size字节的存储区,

    用法:(类型 *)malloc(size *sizeof(你要定义的类型));包含于<stdlib.h>库中

    feof(),功能:检测文件是否结束

    用法: int feof(fp)

    FILE *fp;包含于<stdio.h>库中。)

    第五届(A)

    1、 编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。(20分)

       a12 b8  c5

       12  0   0

       *   *   * ( “*”表示当前状态下每个容器的盛水量)

       ......

       0   6   6

    2、 编程实现:有二维数组a[3][3]={{5.4,3.2,8},{6,4,3.3},{7,3,1.3}},将数组a的每一行元素均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),按行输出新数组。(20分)

    3、 编程:设x取值为区间[1,20]的整数,求函数f(x)=x-sin(x)- cos(x)的最大值,要求使用自定义函数实现f(x)功能。(20分)

    4、 编写函数fun,通过指针实现将一个字符串反向。要求主函数输入字符串,通过调用函数fun实现输入字符串反向。(20分)

    5、 已知学生三门课程基本信息如下。请使用结构体编程,计算学生三门课程平均成绩后,列表输出学生的姓名、数学、英语、计算机、平均分信息,并按平均分排序。(20分)

       姓名  数学 英语 计算机

       Mary 93    100   88

       Jone  82    90   90

       Peter  91    76   71

       Rose  100   80   92

    6、 附加题:编程实现输入一串英文,统计其中各单词出现的个数(不区分大小写字母),以“000”作为字符串输入结束标志,例如:

       Twinkle twinkle little star 000(回车)

       twinkle little  star

         2     1     1   (50分)        

    (B)

    1、 编程解决如下问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,       问鸡翁,鸡母,鸡雏各几何?(20分)

    2、 编程实现:有二维数组a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}},将数组a的每一行元素均除以该行上绝对值最大的元素,按行输出新数组。(20分)

    3、 编程:设x、y取值为区间[1,10]的整数,f(x,y)=(3x-2y)/(x+y),求使f(x,y)取最小值的x1、y1,要求使用自定义函数实现f(x,y)功能。(20分)

    4、 编写函数fun,其功能是:在字符串中所有数字字符前加一个“*”字符,要求通过指针实现。(20分)

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <math.h>

     

    void fun(char *str)

    {

        char*s_p,*s_new;

        s_p = str;

        while(*s_p!='\0')

        {

            if(*s_p>='0'&&*s_p<='9')

            {

                s_new = (char*)malloc(strlen(str)+1);

                strcpy(s_new,s_p);

                *s_p = '\0';

                strcat(str,"*");

                s_p++;

                strcat(str,s_new);

                free(s_new);

                s_new = NULL;

            }

            s_p++;

        }

        puts(str);

    }

     

    int main()

    {

        charstr[100];

        gets(str);

        fun(str);

        return 0;

    }

     

    5、 编程:已知学生记录由学号和学习成绩构成,N名学生的记录已存入结构体数组中,找出成绩最低的学生,并输出这个学生的信息,已知学生信息如下。(20分)

    A01,81;A02,89;A03,66;A04,87;A05,77

    A06,90;A07,79;A08,61;A09,80;A10,71

    6、 附加题:编写一个函数InverseByWord(char*sentence),实现一个英文句子按单词逆序存放的功能,并给出测试程序。(50分)

    如:This is an interestingprogramme.

    逆序后变为:.programmeinteresting an is This

    第六届(A)

    编程解决如下问题(50分)。

    有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。

    2. 编程解决如下问题(50分)。

    请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:

    (1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;

    (2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。

    (提示:整数n可以以字符数组的方式定义、赋值和处理)

    3. 附加题:编程解决如下问题(50分)。

        (1)已知平面上三个点:(7,1)、(4,6)、(5,8),判断这三点组成的三角形是何种三角形(锐角,直角,钝角)(10分);

    (2)对(1)问中的三角形,给出它的外接圆半径(20分);

    (3)已知平面上6个点的坐标为:(7,1)、(4,6)、(5,8)、(6,2)、(3,9)、(2,7),试求覆盖这6个点的覆盖圆最小半径(20分)。

    (要求:点坐标数据在程序初始化中赋值完成,程序运行后直接输出结果,不进行数据输入;点坐标数据和题目要求完全一致,否则导致的结果不正确视为程序编写错误。)

    (B)

    编程解决如下问题(50分)。

    有一个数学等式:ABCD*E= DCBA,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。

    #include <stdio.h>

    #include <stdlib.h>

    int main()

    {

        intnum,i,j,s;

        int div[4] ={0};

        for(j=1000;j<=9999;j++)

        {

            num = j;

            for(i=0;i<4;i++)

            {

                div[i] = num % 10;

                num = num / 10;

            }

            s = div[0] * 1000 + div[1] * 100 +div[2] * 10 + div[3];

            for(i=1;i<=9;i++)

            {

                if(j* i == s)

                {

                    printf("%d* %d = %d\t",j,i,s);

                }

            }

        }

        return 0;

    }

     

    2. 编程解决如下问题(50分)。

    请在整数n=92081346718538中删除10个数字,使得余下的数字按原次序组成的新数最大。要求如下:

    (1)   整数n和删除数字的个数“10”在源程序中完成赋值,程序直接输出运行结果;

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    int cmp(const void *a,const void *b)

    {

        return *(char*)b - *(char*)a;

    }

     

    int main()

    {

        char n[] = "92081346718538";

        int m = 10;

        int i;

        int len =strlen(n) - m;

        qsort(n,sizeof(n),sizeof(n[0]),cmp);

        for(i=0;i<len;i++)

            printf("%c",n[i]);

        printf("\n");

        return 0;

    }

     

    修改版:

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

     

    int main()

    {

        char n[] = "72081346718538";

        int len =strlen(n);

        int m = 10;

        int length =len - m;

        int i,j,pos;

        int num;

        pos = 0;

        for(i=0;i<length;i++)

        {

            num = -1;

            for(j=pos;j<=m;j++)

            {

                if(n[j]-'0'>num)

                {

                    num = n[j]-'0';

                    pos = j;

                }

     

     

            }

            printf("%d",num);

            m++;

            pos++;

        }

        return 0;

    }

     

    (2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最大数。

    (提示:整数n可以以字符数组的方式定义、赋值和处理)

           #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

     

    int cmp(const void *a,const void *b)

    {

        return *(char*)a - *(char*)b;

    }

     

    int main()

    {

        char n[] = "92081346718538";

        int len =strlen(n);

        char m[100]= {0};

        strcpy(m,n);

        int i,j;

        qsort(m,len,sizeof(m[0]),cmp);

        for(i=0;i<len;i++)

        {

            for(j=0;j<10;j++)

            {

                if(n[i]==m[j])

                {

                    printf("%c,",n[i]);

                    break;

                }

            }

        }

        for(i=len-1;i>=10;i--)

            printf("%c",m[i]);

        printf("\n");

     

        return 0;

    }

     

    3. 附加题:编程解决如下问题(50分)。

    在小于10的素数中有3、5、7组成的等差数列,在小于30的素数中有11、17、23、29组成的等差数列。试找出区间[100,1000]内的素数构成的最大等差数列(即等差数列包含的素数个数最多)并打印输出。

     

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    #include <math.h>

     

    int main()

    {

        intprime[1000]={0};

        inti,j,k,sub,*max,*max_temp,count_temp=0,l=0,count=0;

        for(i=101;i<=1000;i+=2)

        {

            for(j=2;j<=sqrt(double(i));j++)

            {

                if(i%j==0)break;

            }

            if(j>sqrt(double(i))) prime[l++] = i;//k??ºy

        }

     

     

        for(i=0;i<l;i++)

            printf("%d\t",prime[i]);

        printf("\n===========================================\n");

        max = (int*)malloc(l*sizeof(int));

        max_temp = (int*)malloc(l*sizeof(int));

        memset(max,0,sizeof(max));

        memset(max_temp,0,sizeof(max_temp));

        for(i=0;i<l;i++)

        {

            for(j=i+1;j<l;j++)

            {

                count_temp = 0;

                max_temp[count_temp++] = prime[i];

                max_temp[count_temp++] = prime[j];

                sub = prime[j] - prime[i];

                for(k=j+1;k<l;k++)

                {

                    if(prime[k]-max_temp[count_temp-1]==sub)

                    {

                        max_temp[count_temp++] =prime[k];

                    }

                }

                if(count<= count_temp)

                {

                    count = count_temp;

                    for(k=0;k<count;k++)

                    {

                        max[k] = max_temp[k];

                    }

                }

            }

        }

        for(i=0;i<count;i++)

            printf("%d\t",max[i]);

     

        printf("\n===========================================\n");

        for(i=0;i<l;i++)

        {

            for(j=i+1;j<l;j++)

            {

                count_temp = 0;

                max_temp[count_temp++] = prime[i];

                max_temp[count_temp++] = prime[j];

                sub = prime[j] - prime[i];

                for(k=j+1;k<l;k++)

                {

                    if(prime[k]-max_temp[count_temp-1]==sub)

                    {

                        max_temp[count_temp++] =prime[k];

                    }

                }

                if(count== count_temp)

                {

                    for(k=0;k<count;k++)

                    {

                        printf("%d\t",max_temp[k]);

                    }

                    printf("\n");

                }

            }

        }

        return 0;

    }

     

     

  • 相关阅读:
    MySQL经典面试题--SQL语句
    awk命令
    mysql安装配置
    notepad++使用
    Xshell使用
    说明
    对 MMO 游戏的调研
    对 VR 项目开发流程的调研
    对 Unity 动态加载资源的调研
    对 Unity 太空射击游戏的实践
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835381.html
Copyright © 2011-2022 走看看