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

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

时间:2024-11-06 21:10:15浏览次数:1  
标签:搞定 return 真题 int double C语言 printf fun x1

1. 前言

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

真题9-程序评分

2. 程序填空题

2.1 题目要求

真题9-程序填空

2.2 提供的代码

#include  <stdio.h>
double f1(double  x)
{
    return x * x;
}
double f2(double  x, double  y)
{
    return  x * y;
}
/**********found**********/
__1__ fun(int  i, double  x, double  y)
{
    if (i == 1)
        /**********found**********/
        return __2__(x);
    else
        /**********found**********/
        return  __3__(x, y);
}
main()
{
    double  x1 = 5, x2 = 3, r;
    r = fun(1, x1, x2);
    r += fun(2, x1, x2);
    printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n", x1, x2, r);
    getchar();
}

2.3 解题思路

第(1)处填空:

题目要求输出浮点型,所以返回值可以使用main函数中使用的类型double

double fun(int  i, double  x, double  y)

第(2)处填空:

这里填写的参数只有x,所以是调用的函数f1

return f1(x);

第(3)处填空:

参数为x,y,对应着函数f2

return  f2(x, y);

2.4 代码实现

填写完整的代码:

#include  <stdio.h>
double f1(double  x)
{
    return x * x;
}
double f2(double  x, double  y)
{
    return  x * y;
}
/**********found**********/
double fun(int  i, double  x, double  y)
{
    if (i == 1)
        /**********found**********/
        return f1(x);
    else
        /**********found**********/
        return  f2(x, y);
}
main()
{
    double  x1 = 5, x2 = 3, r;
    r = fun(1, x1, x2);
    r += fun(2, x1, x2);
    printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n", x1, x2, r);
    getchar();
}

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

3. 程序修改题

3.1 题目要求

真题9-程序修改

3.2 提供的代码

#include   <stdio.h>
void fun(int  n)
{
    int  j, b, c, m, flag = 0;
    for (b = 1; b <= n / 2; b++) {
        /**********found**********/
        n = m;
        c = b;
        while (m != 0 && m >= c) {
            /**********found**********/
            m = m - c;    c++
        }
        /**********found**********/
        if (m != 0)
        {
            printf("%d=", n);
            for (j = b; j < c - 1; j++)   printf("%d+", j);
            printf("%d\n", j);
            flag = 1;
        }
    }
    if (flag == 0)
        printf("不能分解\n");
}
main()
{
    int  n;
    printf("请输入一个整数 :   ");   scanf("%d", &n);
    fun(n);
    getchar();
}

3.3 解题思路

第(1)处修改:

原来的程序是n = m;,因为m这个变量在定义时没有初始化,它内部存储的可能是垃圾值,赋值给n后会导致n不再存储传入的 100,而是存储的垃圾值,这没有实际的意义,反而会导致程序跑飞。

所以这里需要让m初始化为n,在while (m != 0 && m >= c)这个循环中不断从m中减去c(当前序列的值),并且让c递增以考虑下一个正整数。

m = n;

第(2)处修改:

C语言中每条语句是以;作为结束,在语句c++后面少了;,加上即可。

m = m - c;    c++;

第(3)处修改:

如果在while (m != 0 && m >= c)循环结束时,变量m的值为 0,说明通过不断减去当前的正整数c,正好将m减到 0。我们前面将n赋值给了mb赋值给了c,这就意味着从b开始的连续正整数的和恰好等于n

所以说如果m等于 0,代表找到了和为n的一组连续正整数,则进行相应的输出。

if (m == 0)

3.4 代码实现

修改后的代码:

#include   <stdio.h>
void fun(int  n)
{
    int  j, b, c, m, flag = 0;
    for (b = 1; b <= n / 2; b++) {
        /**********found**********/
        m = n;
        c = b;
        while (m != 0 && m >= c) {
            /**********found**********/
            m = m - c;    c++;
        }
        /**********found**********/
        if (m == 0)
        {
            printf("%d=", n);
            for (j = b; j < c - 1; j++)   printf("%d+", j);
            printf("%d\n", j);
            flag = 1;
        }
    }
    if (flag == 0)
        printf("不能分解\n");
}
main()
{
    int  n;
    printf("请输入一个整数 :   ");   scanf("%d", &n);
    fun(n);
    getchar();
}

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

4. 程序设计题

4.1 题目要求

真题9-程序设计

4.2 提供的代码

#include   <stdio.h>
#include  <string.h>
void NONO();
int  fun(char* t)
{

}

main()
{
    char  s[26];
    printf("请输入一个字母组成的字符串 :  "); gets(s);
    if (fun(s))  printf("%s 是由连续字母组成的字符串.\n", s);
    else   printf("%s 不是由连续字母组成的字符串!\n", s);
    NONO();
    getchar();
}

void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE* fp, * wf;
    int i;
    char s[26], * p;

    fp = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for (i = 0; i < 10; i++) {
        fgets(s, 26, fp);
        p = strchr(s, '\n');
        if (p) *p = 0;
        if (fun(s)) fprintf(wf, "%s\n", s + 2);
        else  fprintf(wf, "%s\n", strrev(s));
    }
    fclose(fp);
    fclose(wf);
}

4.3 解题思路

我给出了两种解法,第二种在文末,先来看第一种。

对于这个题,我们首先需要知道t所指字符串的首位是什么字母,也就是t[0]的值,这里我使用char c = t[0]来存储,在知道值后可以根据t的大小遍历它,同时每次进行c++;作为连续递增字母序列的比较,在循环中只要找到一次t[i]不等于c的值,就说明t所指字符串是不连续的,直接返回 0 即可。当遍历完所有的元素均相等,则说明是连续的递增字母序列,返回 1。

下面假设t所指的字符串是acd,进行不连续字符串程序的演示:

      i    c    t[i]
1.    0    a    a---- > 相等进行下一次
2.    1    b    c---- > 不相等返回 0

反之连续字符串会执行完for循环后,返回 1。

4.4 代码实现

填写完整的代码:

#include   <stdio.h>
#include  <string.h>
void NONO();
int  fun(char* t)
{
    char c = t[0];
    int i = 0;

    for (i = 0; i < strlen(t); i++)
    {
        if (t[i] != c)    // 当检测到一处不相等时,说明不是连续递增的
        {
            return 0;    // 则返回 0
        }
        c++;
    }

    return 1; // 将字符串全部遍历,没有发现不相等的,返回 1
}

main()
{
    char  s[26];
    printf("请输入一个字母组成的字符串 :  "); gets(s);
    if (fun(s))  printf("%s 是由连续字母组成的字符串.\n", s);
    else   printf("%s 不是由连续字母组成的字符串!\n", s);
    NONO();
    getchar();
}

void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE* fp, * wf;
    int i;
    char s[26], * p;

    fp = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for (i = 0; i < 10; i++) {
        fgets(s, 26, fp);
        p = strchr(s, '\n');
        if (p) *p = 0;
        if (fun(s)) fprintf(wf, "%s\n", s + 2);
        else  fprintf(wf, "%s\n", strrev(s));
    }
    fclose(fp);
    fclose(wf);
}

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

还有一种方法是先根据首位元素和长度生成一个连续的递增字母序列,使用函数strcmp()t与之比较,也可以判断是否连续,下面给出代码供大家参考:

int  fun(char* t)
{
    char c[26] = { 0 };
    int i = 0;

    // 先根据 t[0]的值,和它的大小生产连续的递增字母序列
    c[0] = t[0];
    for (i = 0; i < strlen(t); i++)
    {
        c[i] = c[0] + i;
    }
    // 使用 strcmp() 函数判断这两个字符串是否相等
    if (strcmp(c, t) == 0)    // strcmp() 返回 0 则说明两个字符串相等
    {
        return 1;    // 则返回 1
    }
    else {
        return 0;    // 不相等的,返回 0
}

5. 后记

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

标签:搞定,return,真题,int,double,C语言,printf,fun,x1
From: https://www.cnblogs.com/main-studio/p/18531036

相关文章

  • 重温c语言之,7天开整,就是随便的写写,第七天
    一:素数又见素数但这次不一样,这次需要用到函数,利用函数来将素数区分出来,直接上代码1#include<stdio.h>2#include<math.h>3intprime_num(intnum)4{5for(inti=2;i<sqrt(num);i++)6{7if(num%i==0)8{9......
  • c语言中多个变量连续赋值
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试c程序#include<stdio.h>intmain(void){inti,j;i=j=5;//连续赋值printf("i=%d\n",i);printf("j=%......
  • c语言中声明数组时, 元素个数必须使用常量表达式
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试程序#include<stdio.h>intmain(void){intvar1=5;//初始化一个变量var1intarray1[var1]={3,5,8,4,9};//初始化数组return0;}[......
  • c语言入门4——函数
    4-1判断数字字符编写函数,判断指定的字符是否是数字字符,如果是函数返回1,否则函数返回0.要求在主调函数中输入该字符,调用函数并输出判断结果。输入格式:在一行中给出1个字符。输出格式:对于给定输入的字符,输出判断结果yes或no。输入样例:6输出样例:yes输入样例:H输......
  • 不用代码,2小时搞定自己的网站
    引言:之前有许多人咨询过怎么建个官网,有没有便宜,省事,且数据由自己掌控的方式。毕竟一个企业在初期,如果不是IT行业,不一定有程序员,但是数据由自己掌握,未来发展壮大了,人员角色被齐了,就可以在原来的基础上做更好的发展了。最近我也把玩了一个自助建站的产品,快速试了一下,感觉还不错,核心......
  • 【研究生必看】把选题和文献交给AI,轻松搞定毕业论文!
        在学习和研究的过程中,选题和文献录入真的是让人头疼的事情。面对一堆资料,很多时候我们会感到无从下手,甚至有点焦虑。不过,大家别担心!现在有了像“梅子AI论文”这样的工具,可以帮助我们轻松搞定这些问题,让这一切变得简单多了。首先,选题是科研的第一步,也是很关键的一......
  • 绞尽脑汁终于搞定/天地图标注点marker旋转/任意角度旋转/无需引入其他框架
    一、前言说明在其他地图组件中,标注点marker都是可以设置旋转角度的,这个功能其实非常实用,比如飞机移动轨迹,就是需要旋转飞机头飞行,轮船轨迹移动也是,百度地图和腾讯地图是通过调用setRotation函数设置,高德地图是setAngle,唯独天地图没有提供对应接口,找遍了文档和源码,也没有找到对应......
  • 华为OD机试真题---字母组合
    华为OD机试中的“字母组合”题目是一道涉及字符串处理和回溯算法的编程题。以下是对该题目的详细解析:一、题目描述每个数字关联多个字母,关联关系如下:0关联“a”,“b”,“c”1关联“d”,“e”,“f”2关联“g”,“h”,“i”3关联“j”,“k”,“l”4关联“m”,“n......
  • 银行业专业人员职业资格考试《公司信贷(中级)》机考真题精选及详解
    2022年银行业专业人员职业资格考试《公司信贷(中级)》机考真题精选及详解​1.[单选题]下列选项中,不属于保证担保的主要风险因素的是()。A.未办理相关登记手续B.保证手续不完备C.公司互保D.虚假担保人答案:A解析:保证担保的主要风险包括:①保证人不具备担保资格;②保证人不具备担......
  • C语言之输出函数printf以及puts
    printf和puts都是c语言的库函数,都可以输出的函数但他们也存在着一定的区别printf函数:1.功能强大:printf是一个格式化输出的函数,它可以输出各种类型的数据,并且能够按照指定的格式进行输出,例如会以10进制整数输出10。可以同时输入多组数据,灵活的控制输出的格式,如控制整数的......