2020计算机应用能力大赛C语言决赛客观题

14. 补全代码

本题要求输入某一年的两天,计算这两天之间间隔的天数,有四处待补全。

#include <stdio.h>
#include <math.h>
int jdg(int year)/*填空1*/
{
    int  leap;
    leap= (year%4==0 && year%100!=0 || year%400==0);
    return  leap;
}
int fun1(int  y, int  m, int  d)
{
    int  finall[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int  r=0, i;
    for(i=1; i<m; i++)
        r+=finall[i];/*填空2*/
    r=r+d;
    if(jdg(y)&&m>=3)/*填空3*/
        r=r+1;
    return  r;
}
int main()
{
    int  y, m, d, dd ;
    printf("开始日期:");
    scanf("%d %d %d",&y, &m, &d);
    dd = fun1(y, m, d);
    printf("结束日期:");
    scanf("%d %d %d",&y, &m, &d);
    dd = fun1(y, m, d)-dd;/*填空4*/
    printf("从开始日期到结束日期总共有%d天
",dd);
    return 0;
}

tips: ① C语言没有bool变量;

   ② 填空3注意m>=3.

15. 补全代码

要求输入一个字符串,判断其位于给出字符串的第几个位置,有四处待补全。

#include  <stdio.h>
#include  <string.h>
#define   N   10
#define   M   10
int f(char str[N][M],char temp[M])/*填空1*/
{
    int  i;
    for(i=0; i<N ; i++)
        if(strcmp(str[i],temp)==0)
            return i ;/*填空2*/
    return -1;/*填空3*/
}
int main()
{
    char  str[N][M]= {"jony","lucy","abbe","lily","rebeca","tomme","osca","tomas","jayjay","doan"},temp[M]= {}; /*填空4*/
    int  n,i;
    printf("
原始字符串数组为:
");
    for(i=0; i<N; i++)
        puts(str[i]);
    printf("
");
    printf("请输入你想要查询的字符串:  ");
    gets(temp);
    n=f(str,temp);
    if(n== -1)
        printf("
对不起,没找到!
");
    else
        printf("
恭喜你,找到了,它是二维数组中第%d个一维数组.
",n);
    return 0;
}

16. 编程

#include    <stdio.h>
#define    N    5
int r[N][N];
void fun1(int (*a)[N])
{
    int mid = N / 2;
    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j)
        {
            int x = i - 2;
            int y = j - 2;
            if((y > x && y < -x) || (y < x && y > -x))
            {
                (*(a + i))[j] = 0;
            }
        }
    }
}
void printArray(int (*a)[N])
{
    for(int i = 0; i < N; ++i)
    {
        printf("%2d",(*(a + i))[0]);
        for(int j = 1; j < N; ++j)
        {
            printf("  %2d",(*(a + i))[j]);
        }
        printf("
");
    }
}
void scanArray(int (*a)[N])
{
    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j)
        {
            scanf("%d",&((*(a + i))[j]));
        }
    }
}
int main()
{
    int t[N][N]= {25,33,14,28,19,42,57,48,39,53,39,34,27,40,77,61,21,36,74,51,42,82,38,25,40}, i, j;
    printf("原始矩阵:
");
    printArray(t);
    fun1(t);
    printf("变换后的矩阵:
");
    printArray(t);
    printf("
随机输入一个%d*%d的矩阵:
",N,N);
    scanArray(t);
    fun1(t);
    printf("变换后的矩阵:
");
    printArray(t);
    return 0;
}

17. 编程

题目以本次新冠肺炎疫情为背景,要求输入5个城市的信息,其中包括城市名字,新增感染人数,现有感染人数,累积感染人数,治愈人数和死亡人数,定义一种相似度并给出其计算方法。

#include  <stdio.h>
#include  <string.h>
#include <math.h>
#define   N   5
#define   M   10
float ans,tmp;
char c1[M],c2[M]; //记录结果城市名字
struct area   //结构体表示城市信息
{
    char name[M];
    int data[N];
} areas[N];

float sim(int x,int y)  // 计算相似程度
{
    float d=0;
    for(int i=0; i<N; i++)
        d+=((areas[x].data[i]-areas[y].data[i])*(areas[x].data[i]-areas[y].data[i]));
    return 1/(1+sqrt(d));
}

int main()
{
    ans=0;
    // 分行输入城市数据信息,空格间隔,例如:CityB 20 49 1127 1074 4
    for(int i=0; i<N; i++)
    {
        scanf("%s",&areas[i].name);
        for(int j=0; j<N; j++)
            scanf("%d",&areas[i].data[j]);
    }
    for(int i=0; i<N-1; i++)
        for(int j=i+1; j<N; j++)
        {
            tmp=sim(i,j);
            printf("%s和%s的疫情相似程度是:%.6f
",areas[i].name,areas[j].name,tmp);
            // 迭代记录答案
            if(tmp>ans)
            {
                strcpy(c1,areas[i].name);
                strcpy(c2,areas[j].name);
                ans=tmp;
            }
        }
    // 输出结果
    printf("
%s和%s的当前疫情情况最相似。",c1,c2);
    return 0;
}

原文地址:https://www.cnblogs.com/MissCold/p/13410760.html