首页 > 其他分享 >2个月搞定计算机二级C语言——真题(12)解析

2个月搞定计算机二级C语言——真题(12)解析

时间:2024-11-20 21:33:38浏览次数:1  
标签:12 真题 ++ sum C语言 int printf fun row

1. 前言

本篇我们讲解2个月搞定计算机二级C语言——真题12

真题12-程序评分

2. 程序填空题

2.1 题目要求

真题12-程序填空

2.2 提供的代码

#include  <stdio.h>
#define   N   3
int fun(int  (*a)[N])
{
    int  i, j, m1, m2, row, colum;
    m1 = m2 = 0;
    for (i = 0; i < N; i++)
    {
        j = N - i - 1;  m1 += a[i][i];  m2 += a[i][j];
    }
    if (m1 != m2) return  0;
    for (i = 0; i < N; i++) {
        /**********found**********/
        row = colum = __1__;
        for (j = 0; j < N; j++)
        {
            row += a[i][j];  colum += a[j][i];
        }
        /**********found**********/
        if ((row != colum) __2__(row != m1)) return 0;
    }
    /**********found**********/
    return  __3__;
}
main()
{
    int  x[N][N], i, j;
    printf("Enter number for array:\n");
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)  scanf("%d", &x[i][j]);
    printf("Array:\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)  printf("%3d", x[i][j]);
        printf("\n");
    }
    if (fun(x)) printf("The Array is a magic square.\n");
    else printf("The Array isn't a magic square.\n");
    getchar();
}

2.3 解题思路

第(1)处填空:

在这条语句的下方,使用了一个for循环将数组的行和列累加至rowcolum中,所以这里需要对他俩进行初始化为 0。

和上方的m1 = m2 = 0;是同种作用,在实际应用中可以直接在变量定义时初始化,例如:int m1 = 0,m2 = 0;

row = colum = 0;

第(2)处填空:

if中的语句是返回 0,则需要判断检查当前行的和是否等于当前列的和,或当前行的和是否等于对角线的和(幻方的要求),这两个中只要有一个为不等于,则可以说明该数组不是幻方。

其中判断的条件已经给出,我们只需要在中间填入||,表示有其中一个条件符合就会执行return 0;

if ((row != colum) || (row != m1)) return 0;

第(3)处填空:

经过前面一系列的判断,都没有执行到return 0;,则说明该数组是幻方,返回1即可。

return  1;

2.4 代码实现

填写完整的代码:

#include  <stdio.h>
#define   N   3
int fun(int  (*a)[N])
{
    int  i, j, m1, m2, row, colum;
    m1 = m2 = 0;
    for (i = 0; i < N; i++)
    {
        j = N - i - 1;  m1 += a[i][i];  m2 += a[i][j];
    }
    if (m1 != m2) return  0;
    for (i = 0; i < N; i++) {
        /**********found**********/
        row = colum = 0;
        for (j = 0; j < N; j++)
        {
            row += a[i][j];  colum += a[j][i];
        }
        /**********found**********/
        if ((row != colum) || (row != m1)) return 0;
    }
    /**********found**********/
    return  1;
}
main()
{
    int  x[N][N], i, j;
    printf("Enter number for array:\n");
    for (i = 0; i < N; i++)
        for (j = 0; j < N; j++)  scanf("%d", &x[i][j]);
    printf("Array:\n");
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)  printf("%3d", x[i][j]);
        printf("\n");
    }
    if (fun(x)) printf("The Array is a magic square.\n");
    else printf("The Array isn't a magic square.\n");
    getchar();
}

提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。

3. 程序修改题

3.1 题目要求

真题12-程序修改

3.2 提供的代码

#include <stdio.h>
#include <string.h>
#define    N     80
int  fun(char* s, char* t)
{
    int  n;
    char* p, * r;
    n = 0;
    while (*s)
    {
        p = s;
        /*********found**********/
        r = p;
        while (*r)
            if (*r == *p) { r++;  p++; }
            else  break;
        /*********found**********/
        if (*r = 0)
            n++;
        s++;
    }
    return  n;
}
main()
{
    char  a[N], b[N];    int   m;
    printf("\nPlease enter string a : "); gets(a);
    printf("\nPlease enter substring b : "); gets(b);
    m = fun(a, b);
    printf("\nThe result is :  m = %d\n", m);
    getchar();
}

3.3 解题思路

第(1)处修改:

先执行了p = s;,又执行了r = p;,此时r等于p等于s,下方的语句会判断*r*p是否相等。在程序里它没有用形参t,也就是说程序运行起来,一直是s自己比较。

这里需要将t的地址赋值给r,才能达到题目要求的效果。

r = t;

第(2)处修改:

这里没啥好说的,少个等号,加上即可。

if (*r == 0)

3.4 代码实现

修改后的代码:

#include <stdio.h>
#include <string.h>
#define    N     80
int  fun(char* s, char* t)
{
    int  n;
    char* p, * r;
    n = 0;
    while (*s)
    {
        p = s;
        /*********found**********/
        r = t;
        while (*r)
            if (*r == *p) { r++;  p++; }
            else  break;
        /*********found**********/
        if (*r == 0)
            n++;
        s++;
    }
    return  n;
}
main()
{
    char  a[N], b[N];    int   m;
    printf("\nPlease enter string a : "); gets(a);
    printf("\nPlease enter substring b : "); gets(b);
    m = fun(a, b);
    printf("\nThe result is :  m = %d\n", m);
    getchar();
}

提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。

4. 程序设计题

4.1 题目要求

真题12-程序设计

4.2 提供的代码

#include <stdio.h>
#pragma warning (disable:4996)
#define N 5
struct mpow
{
    double a;
    int t;
};
double fun(struct mpow* x, int n)
{

}
void main()
{
    void NONO();
    struct mpow x[N] = { 12,0,9,2,23,1,7,2 };
    double sum;
    sum = fun(x, 4);
    printf("sum=%lf\n", sum);
    NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE* in, * out;
    struct mpow x[N];
    int i, j;
    double sum;
    in = fopen("in.dat", "r");
    out = fopen("out.dat", "w");
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 4; j++) fscanf(in, "%lf,%d,", &x[j].a, &x[j].t);
        sum = fun(x, 4);
        fprintf(out, "sum=%lf\n", sum);
    }
    fclose(in);
    fclose(out);
}

4.3 解题思路

在数学中,幂是用来表示一个数被自身乘以若干次的运算结果。幂由两部分组成:底数和指数。

这个大家在数学中都学过,这里便不再赘述,下面主要来看如何用代码来实现功能。

我们可以采用两层循环嵌套的方式,依次求出结构体数组中计算的结果,外层循环为 n个幂数,内层循环则将幂的底a自乘t次,计算完一个幂数之和后累加到sum中,这样遍历结束后即可得到x所指数组中n个幂数之和,将其返回即可。

4.4 代码实现

填写完整的代码:

#include <stdio.h>
#pragma warning (disable:4996)
#define N 5
struct mpow
{
    double a;
    int t;
};
double fun(struct mpow* x, int n)
{
    double sum = 0.0, number = 1.0;
    int i = 0, j = 0;

    for (i = 0; i < n; i++)
    {
        number = 1.0;
        for (j = 0; j < x[i].t; j++)
        {
            number *= x[i].a;
        }
        sum += number;
    }

    return sum;
}
void main()
{
    void NONO();
    struct mpow x[N] = { 12,0,9,2,23,1,7,2 };
    double sum;
    sum = fun(x, 4);
    printf("sum=%lf\n", sum);
    NONO();
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE* in, * out;
    struct mpow x[N];
    int i, j;
    double sum;
    in = fopen("in.dat", "r");
    out = fopen("out.dat", "w");
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 4; j++) fscanf(in, "%lf,%d,", &x[j].a, &x[j].t);
        sum = fun(x, 4);
        fprintf(out, "sum=%lf\n", sum);
    }
    fclose(in);
    fclose(out);
}

提示:为确保代码正常运行,请在题库编程环境的对应题目中进行测试和运行。

5. 后记

本篇博客到这就结束了,如果您有疑问或建议欢迎您在留言区留言。

标签:12,真题,++,sum,C语言,int,printf,fun,row
From: https://www.cnblogs.com/main-studio/p/18559350

相关文章

  • C语言:数组的学习
    1.什么是数组?数组是一组相同类型元素的集合。数组可以存储1个或多个数据。数组中存储的数据的类型是相同的。数组分为一维数组和多维数组。变量和数组都是容器,变量只能存储一个数据,数组可以存储多个。2.一维数组创建和初始化存放在数组中的数据叫做数组的元素。数组是自......
  • Goby 漏洞发布|超高危!Palo-alto-panos createRemoteAppwebSession.php 命令执行漏洞CVE
    漏洞名称:Palo-alto-panoscreateRemoteAppwebSession.php命令执行漏洞CVE-2024-0012CVE-2024-947EnglishName:Palo-alto-panos/php/utils/createRemoteAppwebSession.phpCommandExecutionVulnerabilityCVE-2024-0012CVE-2024-9474CVSScore:9.5漏洞描述:PaloAltoNet......
  • 第十二课 接口文档和编写接口测试用例(12.1)
    一、熟悉接口文档和分析接口1、发送接口文档2、分析接口文档3、了解需要测试接口,分析需求文档接口请求参数:接口返回参数:成功接口返回参数:失败================================================================================整理接口:(自己项目有哪些借款)cms项目接......
  • C语言第14节:字符函数和字符串函数
    1.字符分类函数C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h><ctype.h>头文件中的字符分类函数提供了一组用于检查单个字符特性的函数。这些函数接收一个字符(通常为int类型的char值),返回......
  • 经典C语言代码——part 4(素数问题)
    【程序10】题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。2.程序源代码:#include"stdio.h"main(){inti,j;printf("\1\1\n");/*输出两个笑脸*/for(i=1;i<11;i++){for(j=1;j<=i;j++)printf......
  • 洛谷 P11210 强制在线动态二维数点
    题目传送门题目中的点满足\(y\lex\),那么不妨把每个点看成区间\([y,x]\)。那么题目相当于要求维护若干个区间,支持修改,以及查询询问区间中区间长度的最小值。从“区间长度的最小值”入手。显然包含别的区间的区间不能成为答案。排除了这样的区间,剩下区间按左端点升序排序,则右端......
  • 《技术规划与技术平台开发管理赋能》公开课(2024年12月20-21日)
    【课程背景】随着国内外高科技领域的产品竞争越来越激烈,产品和解决方案的创新尤其是核心技术的自主创新已成为中国企业乃至整个中国商业社会转型的重要手段。公司的技术战略是基于战略高度对产品机遇和技术发展趋势的前瞻性认识,如果没有这种前瞻性的认识,产品、平台和技术就会在......
  • Debian12关闭休眠模式
    场景描述:日常服务器部署中,系统环境如果是Debian12操作系统,那么安装完操作系统后,会默认开启系统自动休眠模式,需要关闭系统的自动休眠,否则网络状态也会休眠,导致远程连接服务器的时候,没有响应!临时解决方式:如果目标服务器在机房或者在旁边,可以移动下该服务器连接的鼠标或键盘,激活......
  • SAP MIGO 收货/退货操作和科目配置,货物移动类型101/122
    文章目录前言一、收货二、查询收货凭证三、退货操作及会计凭证退货操作查看会计凭证三、收货凭证配置(一)BSX(存货记账)配置(二)WRX(货物和发票清算科目)配置(三)PRD(成本价格差异)配置(四)整体流程前言一、收货确保已经创建了采购订单,并且采购订单号码已知。这是进行收货操......
  • 分别用else if语句和switch语名完成下列编程题输入一个整数月份(1到12),输出对应的季度(第
    用elseif语句:#include<stdio.h>intmain(){ intm; scanf("%d",&m); if(m>=1&&m<=12){ if(m>=1&&m<3){  printf("第一季度\n"); }elseif(m>=4&&m<=6){  prin......