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

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

时间:2024-11-11 12:29:38浏览次数:4  
标签:11 真题 int C语言 ++ && printf fun found

1. 前言

今天双 11,正好轮到讲第 11 篇,直接来个三 11。

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

真题11-程序评分

2. 程序填空题

2.1 题目要求

真题11-程序填空

2.2 提供的代码

#include   <stdio.h>
#include   <ctype.h>
#pragma warning (disable:4996)
void fun(int* cd, int* cu, int* cs)
{
    char  c;
    printf("用回车键结束输入!\n");
    while ((c = getchar()) != '\n')
    {
        /**********************found***********************/
        if (c >= '0' && ____(1)____)  ++*cd;
        /**********************found***********************/
        if (____(2)____ && c <= 'Z')  ++*cu;
        /**********************found***********************/
        if (c >= 'a' && ____(3)____)  ++*cs;
    }
}

main()
{
    int cd, cu, cs;
    cd = cu = cs = 0;
    fun(&cd, &cu, &cs);
    printf("数字的个数: %d\n", cd);
    printf("大写字母的个数: %d\n", cu);
    printf("小写字母的个数: %d\n", cs);
}

2.3 解题思路

这道题是对于范围的判断,在字符中数字的范围是'0'~'9',小写字母的范围是'a'~'z',大写字母的范围是'A'~'Z'

要统计个数,只需要判断是否符合这个范围即可。

第(1)处填空:

数字的范围,即 0 到 9。

if (c >= '0' && c <= '9')  ++*cd;

第(2)处填空:

大写字母的范围,即 A 到 Z。

if (c >= 'A' && c <= 'Z')  ++*cu;

第(3)处填空:

小写字母的范围,即 a 到 z。

if (c >= 'a' && c <= 'z')  ++*cs;

2.4 代码实现

填写完整的代码:

#include   <stdio.h>
#include   <ctype.h>
#pragma warning (disable:4996)
void fun(int* cd, int* cu, int* cs)
{
    char  c;
    printf("用回车键结束输入!\n");
    while ((c = getchar()) != '\n')
    {
        /**********************found***********************/
        if (c >= '0' && c <= '9')  ++*cd;
        /**********************found***********************/
        if (c >= 'A' && c <= 'Z')  ++*cu;
        /**********************found***********************/
        if (c >= 'a' && c <= 'z')  ++*cs;
    }
}

main()
{
    int cd, cu, cs;
    cd = cu = cs = 0;
    fun(&cd, &cu, &cs);
    printf("数字的个数: %d\n", cd);
    printf("大写字母的个数: %d\n", cu);
    printf("小写字母的个数: %d\n", cs);
}

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

3. 程序修改题

3.1 题目要求

真题11-程序修改

3.2 提供的代码

#include <stdio.h>
int  fun(int  n, int  a[], int* k)
{
    int  m = 0, i, t;
    t = n;
    /**********found**********/
    for (i = 0; i < n; i++)
        if (n % i == 0)
        {
            a[m] = i;  m++;  t = t - i;
        }
    /**********found**********/
    k = m;
    /**********found**********/
    if (t = 0)  return  1;
    else  return  0;
}

main()
{
    int  n, a[10], flag, i, k;
    printf("请输入一个整数:    ");  scanf("%d", &n);
    flag = fun(n, a, &k);
    if (flag)
    {
        printf(" %d 是完数,其因子是:  ", n);
        for (i = 0; i < k; i++)   printf("  %d ", a[i]);
        printf("\n");
    }
    else    printf(" %d 不是完数.\n ", n);
    getchar();
}

3.3 解题思路

第(1)处修改:

我们知道 0 是不能做除数的,所以这里i的初始值不能为 0,应从 1 开始。

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

第(2)处修改:

这里要做的是将m的值通过指针int* k传递回去,即存放因子个数,所以这里需要对指针k进行解引用操作。

*k = m;

第(3)处修改:

语法错误,一个=为赋值,两个==为判断左右值是否相等。

if (t == 0)  return  1;

3.4 代码实现

修改后的代码:

#include <stdio.h>
int  fun(int  n, int  a[], int* k)
{
    int  m = 0, i, t;
    t = n;
    /**********found**********/
    for (i = 1; i < n; i++)
        if (n % i == 0)
        {
            a[m] = i;  m++;  t = t - i;
        }
    /**********found**********/
    *k = m;
    /**********found**********/
    if (t == 0)  return  1;
    else  return  0;
}

main()
{
    int  n, a[10], flag, i, k;
    printf("请输入一个整数:    ");  scanf("%d", &n);
    flag = fun(n, a, &k);
    if (flag)
    {
        printf(" %d 是完数,其因子是:  ", n);
        for (i = 0; i < k; i++)   printf("  %d ", a[i]);
        printf("\n");
    }
    else    printf(" %d 不是完数.\n ", n);
    getchar();
}

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

4. 程序设计题

4.1 题目要求

真题11-程序设计

4.2 提供的代码

#include <stdio.h>
float  fun(int m, int n)
{



}

main()   /* 主函数 */
{
    void NONO();
    printf("P=%f\n", fun(12, 8));
    NONO();
    getchar();
}

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

    fp = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for (i = 0; i < 10; i++) {
        fscanf(fp, "%d,%d", &m, &n);
        s = fun(m, n);
        fprintf(wf, "%f\n", s);
    }
    fclose(fp);
    fclose(wf);
}

4.3 解题思路

这道题也不难,让我们用函数fun完成公式求p的值。

公式中是三个阶乘做乘除运算,所以我们需要先计算出阶乘,在return时直接套入公式就可以了。

在程序中用了三个for循环,分别计算m!n!(m-n)!,最后通过return (_m / (_n * _mn));返回计算结果P

4.4 代码实现

填写完整的代码:

#include <stdio.h>
float  fun(int m, int n)
{
    float _m = 1.0, _n = 1.0, _mn = 1.0;
    int i = 0;

    // 计算 m 的阶乘
    for (i = 1; i <= m; i++)
    {
        _m *= i;
    }

    // 计算 n 的阶乘
    for (i = 1; i <= n; i++)
    {
        _n *= i;
    }

    // 计算 m-n 的阶乘
    for (i = 1; i <= (m - n); i++)
    {
        _mn *= i;
    }

    return (_m / (_n * _mn));   // 通过公式求出 P,将其返回
}

main()   /* 主函数 */
{
    void NONO();
    printf("P=%f\n", fun(12, 8));
    NONO();
    getchar();
}

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

    fp = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for (i = 0; i < 10; i++) {
        fscanf(fp, "%d,%d", &m, &n);
        s = fun(m, n);
        fprintf(wf, "%f\n", s);
    }
    fclose(fp);
    fclose(wf);
}

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

5. 后记

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

标签:11,真题,int,C语言,++,&&,printf,fun,found
From: https://www.cnblogs.com/main-studio/p/18538484

相关文章

  • 代码随想录——二叉树-11.完全二叉树的节点个数
    思路一、层序遍历,时间复杂度O(n)二、利用完全二叉树性质,时间复杂度O(logn*logn)(小于O(n))完全二叉树性质:若树深度为h,则前h-1层节点都达到最大值。第h层节点都集中在最左侧的位置完全二叉树要么1.是满二叉树2.最后一层没满满二叉树计算节点数太方便了,直接用公式2^h-1。......
  • 新人报到附加一个小作业(C语言实现的三子棋)
    1.一个简单的自我介绍我是来自宁夏大学软件工程的一名学生,因为从小喜欢玩游戏,长大对于计算机领域也产生了非常浓厚的兴趣,于是在高考结束后的志愿填报中毫不犹豫的全部选择了计算机专业,希望在接下来的学习中不断进步,在IT行业中发挥自己的光和热。我的学习计划:在大一,学习C/C++......
  • 题解:P11250 [GESP202409 八级] 手套配对
    题目传送门思路讲解一道非常经典的排列组合的题。首先,我们要先从nnn对手套中取走kk......
  • 【多线程】---1115. 交替打印 FooBar
     解法1:condition_variable + mutex classFooBar{private:intn;mutexmtx;condition_variablecv;boolfoo_done=false;public:FooBar(intn){this->n=n;}voidfoo(function<void()>printFoo)......
  • 上周热点回顾(11.4-11.10)
    热点随笔:· 【故障公告】k8s集群2台32核64G节点服务器被释放造成全站故障 (博客园团队)· 强!34.1Kstar!再见Postman,新一代API测试利器,功能强大、颜值爆表! (狂师)· .NET开发者福音:JetBrains官方宣布Rider非商用免费开放! (追逐时光者)· 又给会员送福利,100台一年华为云......
  • 代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)
    代码1、长度最小的子数组⭐使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。 2、水果成篮自己想法:使用backet1和backet2表示篮子1和篮子2;使用backet1Account和backet2Account分别表示两个篮子里水果的数量,内层循环将i指针......
  • 【开发心得】筑梦上海:项目风云录(11)
    没想到这个长篇能够写这么多篇,根据之前的反馈,今后在每次开始后面的故事之前,先分享一段之前文章中提到的原型界面和代码,算是给之前的技术文章填坑吧。代码揭秘这个就是最原型的一个界面,整个系统中的form全部是引用这个form。这个设计现在已经不稀奇了,但在当时,有了这个form以后......
  • 【软考】系统架构设计师-2017年下半年下午论文真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2017年下半年下午试卷 论文  试题一 论软件架构风格软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。体系结构风格定义一个系统家族,即一个体系结构定义一个词汇表和一组约......
  • 【软考】系统架构设计师-2017年下半年下午案例真题及答案
    全国计算机技术与软件专业技术资格(水平)考试高级系统架构设计师2017年下半年下午试卷 案例试题一 阅读以下关于软件架构评估的叙述,在答题纸上回答问题 1 和问题 2 。【说明】某单位为了建设健全的公路桥梁养护管理档案,拟开发一套公路桥梁在线管理系统。在系......
  • KubeSphere 社区双周报| 2024.10.25-11.07
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2024.10.25-11.07。贡献者名单新晋KubeSpherecontribu......