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

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

时间:2024-10-30 09:57:45浏览次数:4  
标签:10 搞定 真题 int sum C语言 printf fun found

1. 前言

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

真题6-程序评分

2. 程序填空题

2.1 题目要求

真题6-程序填空

2.2 提供的代码

#include <stdio.h>
unsigned long fun(unsigned long n) {
    unsigned long x = 0;
    int           t;
    while (n) {
        t = n % 10;
        /**********found**********/
        if (t % 2 == __1__)
        /**********found**********/
            x = __2__ + t;
        /**********found**********/
        n = __3__;
    }
    return x;
}
main() {
    unsigned long n = -1;
    while (n > 99999999 || n < 0) {
        printf("Please input(0<n<100000000): ");
        scanf("%ld", &n);
    }
    printf("\nThe result is: %ld\n", fun(n));
    getchar();
}

2.3 解题思路

题目要求将各位上的偶数取出,需要将各位的数取出后再判断该数是否为偶数,偶数可以通过该数除 2 取余的结果来判断,如果结果为 0 则是偶数,为 1 则是奇数。

第(1)处填空:

此处是用来判断取出的一位数字是否为偶数,上面说过如何判断是否为偶数,所以这里我们需要让它判断是否等于 0。

if (t % 2 == 0)

第(2)处填空:

这里我们要实现的功能是重组一个新的数,题目要求是相反的顺序,所以我们需要每次让x * 10,下面程序的代码中演示:

// t = 6 时符合条件,x = 0 * 10 + 6,则 x 为 6
// t = 9 时不符合条件,则执行 n = n / 10;
// t = 4 时符合条件,x = 6 * 10 + 4,则 x 为 64
// t = 8 时符合条件,x = 64 * 10 + 8,则 x 为 648
// 下同
x = x * 10 + t;

第(3)处填空:

这里我们要实现的是将前面取出的个位数除去,原本的十位变为个位,以便下次循环进入时t = n % 10;取出的是一个新数值。

n = n / 10;

2.4 代码实现

填写完整的代码:

#include <stdio.h>
unsigned long fun(unsigned long n) {
    unsigned long x = 0;
    int           t;
    while (n) {
        t = n % 10;
        /**********found**********/
        if (t % 2 == 0)      // 除 2 取余等于 0,则为整数
        /**********found**********/
            x = x * 10 + t;  // 将 t 的值加到 x 的个位
        /**********found**********/
        n = n / 10;  // 逐次除去 n 的个位
    }
    return x;
}
main() {
    unsigned long n = -1;
    while (n > 99999999 || n < 0) {
        printf("Please input(0<n<100000000): ");
        scanf("%ld", &n);
    }
    printf("\nThe result is: %ld\n", fun(n));
    getchar();
    getchar();
}

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

3. 程序修改题

3.1 题目要求

真题6-程序修改

3.2 提供的代码

#include <stdio.h>
void fun(char* p) {
    char max, *q;
    int  i = 0;
    max    = p[i];
    q      = p;
    while (p[i] != 0) {
        if (max < p[i]) {
            max = p[i];
    /**********found**********/
            q = p + i
        }
        i++;
    }
    /**********found**********/
    wihle(q > p) {
        *q = *(q - 1);
        q--;
    }
    p[0] = max;
}
main() {
    char str[80];
    printf("Enter a string:  ");
    gets(str);
    printf("\nThe original string:      ");
    puts(str);
    fun(str);
    printf("\nThe string after moving:  ");
    puts(str);
    printf("\n\n");
    getchar();
}

3.3 解题思路

本题只有两处错误,一个语法错误,一个关键字写错了,都是初学者经常犯的错误,在编程时需要注意一下。

第(1)处修改:

这里是因为语句后面没有加;,加上就好。

q = p + i;

第(2)处修改:

这句是因为while写错了。对于这种错误,更有可能出错的是main,会有人写成mian导致程序出错,也要注意。

while(q > p) {

3.4 代码实现

修改后的代码:

#include <stdio.h>
void fun(char* p) {
    char max, *q;
    int  i = 0;
    max    = p[i];
    q      = p;
    while (p[i] != 0) {
        if (max < p[i]) {
            max = p[i];
    /**********found**********/
            q = p + i;
        }
        i++;
    }
    /**********found**********/
    while(q > p) {
        *q = *(q - 1);
        q--;
    }
    p[0] = max;
}
main() {
    char str[80];
    printf("Enter a string:  ");
    gets(str);
    printf("\nThe original string:      ");
    puts(str);
    fun(str);
    printf("\nThe string after moving:  ");
    puts(str);
    printf("\n\n");
    getchar();
}

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

4. 程序设计题

4.1 题目要求

真题6-程序设计

4.2 提供的代码

#include <stdio.h>
#pragma warning(disable : 4996)
#define N 10
int fun(int x[], int e, int* sum) {
}
main() {
    void NONO();
    int  x[N] = {1, 7, 8, 6, 10, 15, 11, 13, 29, 31}, e = 3, n, sum;
    n = fun(x, e, &sum);
    printf("n=%d,sum=%d\n", n, sum);
    NONO();
}

void NONO() {
    /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
       输出数据,关闭文件。 */
    int   i, j, x[10], n, e, sum;
    FILE *rf, *wf;

    rf = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 10; j++)
            fscanf(rf, "%d ", &x[j]);
        fscanf(rf, "%d", &e);
        n = fun(x, e, &sum);
        fprintf(wf, "%d, %d\n", n, sum);
    }
    fclose(rf);
    fclose(wf);
}

4.3 解题思路

根据题目提供的数组x、整数e和输出结果可以看出是要求数组中能整除e的,也就是整除e的倍数,所以本题的题目描述错了。

那么我们只需要遍历数组x,判断元素是否能整除e,是则计数加 1,否则求和加该元素存储的数。

4.4 代码实现

填写完整的代码:

#include <stdio.h>
#pragma warning(disable : 4996)
#define N 10
int fun(int x[], int e, int* sum) {
    int count = 0, i = 0;

    *sum = 0;   // 将 sum 存储的数据清空,防止出现垃圾值

    for (i = 0; i < N; i++) {   // 遍历数组 X,范围取 0 ~ (N-1)
        if (x[i] % e == 0) {    // 判断是否能整除 e
            count++;            // 计数
        } else {
            *sum += x[i];       // 求和
        }
    }

    return count;
}
main() {
    void NONO();
    int  x[N] = {1, 7, 8, 6, 10, 15, 11, 13, 29, 31}, e = 3, n, sum;
    n = fun(x, e, &sum);
    printf("n=%d,sum=%d\n", n, sum);
    NONO();
    getchar();
    getchar();
}

void NONO() {
    /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
       输出数据,关闭文件。 */
    int   i, j, x[10], n, e, sum;
    FILE *rf, *wf;

    rf = fopen("in.dat", "r");
    wf = fopen("out.dat", "w");
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 10; j++)
            fscanf(rf, "%d ", &x[j]);
        fscanf(rf, "%d", &e);
        n = fun(x, e, &sum);
        fprintf(wf, "%d, %d\n", n, sum);
    }
    fclose(rf);
    fclose(wf);
}

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

5. 后记

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

标签:10,搞定,真题,int,sum,C语言,printf,fun,found
From: https://www.cnblogs.com/main-studio/p/18515198

相关文章

  • 【C语言】预处理(预编译)详解(下)(C语言最终篇)
    文章目录一、#和##1.#运算符2.##运算符二、预处理指令#undef三、条件编译1.单分支条件编译2.多分支条件编译3.判断符号是否被定义4.判断符号是否没有被定义四、头文件的包含1.库头文件的包含2.本地头文件的包含3.嵌套包含头文件的解决方法使用条件编译指令使用预处理......
  • C语言之长整型有符号数与短整型有符号数转换
            最近考证的新星,问了一个问题:inta=1234565789;为什么在输出%hd时的值为-1379?其实这个很简单,只不过对于可能初入“编程坑”以及经验不是很丰富的朋友来说,感觉知道这么个道理,但就是解释不上来,无法做出实际的推论。作者想说的是,这个知识点亦涉及多方面,比较广泛,......
  • 初学c语言(第一天)
     其实我也不太算是初学,但是也算是初学,这样说有点矛盾哈,让我来解释一下: 首先我是一个今年刚刚毕业的大学生,大学学的专业是电子信息工程,这个专业涉及过c语言,但是我大学期间只顾的潇洒了,没怎么认真学习,只有当大四下学期的时候我们离校需要出去找工作实习时,我才发现我什么都不......
  • 实验3 C语言函数应用编程
    #include<stdio.h>charscore_to_grade(intscore);intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",score,gr......
  • 实验3_C语言函数应用编程
    任务一:#include<stdio.h>charscore_to_grade(intscore);intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",......
  • 【Nginx学习】5步轻松搞定:用Nginx配置一个静态Web服务器,文件路径定义你真的会了吗?
    ......
  • 《Java 大厂面试基础真题及解析 —— 来自一位程序员的心得分享》
    作为一名Java程序员,在经历了众多面试后,深知Java基础在大厂面试中的重要性。以下是我总结的一些常被问到的Java基础面试题及解析,希望对大家有所帮助。2024Javaoffer收割指南分享一、面向对象的三大特性(一)封装概念封装是将数据和操作数据的方法绑定在一起,形成一个......
  • C语言中实现一个包含开卡、查询内容、存钱、取钱、转账和修改密码的银行服务系统
       大家好,我是带我去滑雪,每天教你一个小技巧!   本次在C语言中实现一个包含开卡、查询内容、存钱、取钱、转账和修改密码的银行服务系统,下面开始代码实战。目录一、功能模块设计(1)开卡功能(2)查询内容(3)存钱功能(4)取钱功能(5)转账功能(6)修改密码功能二、数据结构......
  • Java常见面试真题之中级进阶(HashMap篇)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!说说Hashtable与HashMap的区别?HashMap中的key我们可以使用任何类作为key吗?HashMap的长度为什么是2的N次方呢?HashMap与ConcurrentHashMap的异同?红黑树有哪几个特征?似乎有点模糊了,那就大概看一下面试题吧。......
  • 实验3 C语言函数应用编程
    1.实验任务1#include<stdio.h>charscore_to_grade(intscore);intmain(){intscore;chargrade;while(scanf("%d",&score)!=EOF){grade=score_to_grade(score);printf("分数:%d,等级:%c\n\n",score,grad......