二级C语言题解:十进制转其他进制、非素数求和、重复数统计

简介: 本文详解三类经典编程题:十进制转任意进制(填空)、非素数求和(修改)与重复数字统计(设计),含完整代码、逐空分析及易错点解析,助你夯实C语言基础。

前言
本文讲解:十进制转其他进制、非素数求和、重复数统计
🏠我的主页:我的主页
📚系列专栏:系列专栏

一、程序填空📝 --- 十进制转其他进制

难度:⭐⭐

题目📃

函数 fun 的功能是:将整数 m 转换成 n(二~十六)进制数的字符串,并通过函数值返回字符串首地址。
例:输入:125 16,则输出:7d
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

代码如下:
在1️⃣2️⃣3️⃣处填空

#include <stdio.h>
#include <string.h>
char  c[32];
char *fun(int m, int n)
{
    int i = 0, j = 0, a[32];
    char b[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }, *p;
    do
    {
        a[i] = m%n;
        /**********found**********/
        m = 1️⃣;
        i++;
        /**********found**********/
    } while (2️⃣);
    for (--i; i >= 0; --i)
    {
        n = a[i];
        /**********found**********/
        c[j++] = 3️⃣;
    }
    c[j] = 0;
    p = c;
    return p;
}
void main()
{
    int m, n;
    char s[32];
    scanf("%d %d", &m, &n);
    strcpy(s, fun(m, n));
    printf("%s\n", s);
}

分析🧐

这里要注意,第一个是十进制的值,第二个值是转成对应的进制
例如题中给的例子,就是让十进制125转成16进制
现在来逐个分析每一空(最后一空是难点)

  1. 填写:m / n
    因为由十进制转任意进制的原理可知
    十进制模除对应进制取余数,再反向输出即可
    那么这个当前值就要更新为值
  2. 填写:m != 0
    当值不为零时就继续取余
  3. 填写:b[n]
    看到b数组就要想想他的作用是什么
    很明显是用于将对应位数的字符取出来

解答代码如下:

#include <stdio.h>
#include <string.h>
char  c[32];
char *fun(int m, int n)
{
    int i = 0, j = 0, a[32];
    char b[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' }, *p;
    do
    {
        a[i] = m%n;
        /**********found**********/
        m = 1️⃣m / n;
        i++;
        /**********found**********/
    } while (2️⃣m != 0);
    for (--i; i >= 0; --i)
    {
        n = a[i];
        /**********found**********/
        c[j++] = 3️⃣b[n];
    }
    c[j] = 0;
    p = c;
    return p;
}
void main()
{
    int m, n;
    char s[32];
    scanf("%d %d", &m, &n);
    strcpy(s, fun(m, n));
    printf("%s\n", s);
}

二、程序修改🛠️ --- 非素数求和

难度:⭐

题目📃

函数 fun 的功能是:求一维数组 a 中非素数之和 sum,其结果 sum 通过函数返回。
例:22,3,65,37,18,19,10,11,12,23,15,17,则输出结果:sum=142
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!

代码如下:
在代码中找出3个错误并修改

#include <stdio.h>
int fun(int a[], int n)
{
    int i, j, k, sum;
    sum = 0;
    for (i = 0; i < n; i++)
    {
        k = a[i] / 2;
        /**********found**********/
        for (j = 2; j < k; j++)
        {
            if (a[i] % j == 0)
                /**********found**********/
                continue;
        }
        /**********found**********/
        if (j >= k)
            sum += a[i];
    }
    return sum;
}
int main()
{
    int a[12] = { 22,3,65,37,18,19,10,11,12,23,15,17 };
    printf("sum=%d\n", fun(a, 12));
    return 0;
}

分析🧐

本题还是很容易理解的,要掌握素数
素数:只能被1或怎么整数的数字,例如:11

  1. 第11行的j < k改成  j <= k
    如果这里的k是要是a[i]的原值的话就不能有等于
    因为如果是等于的话就是和自己整除
    那么这里是将要测试的数字除2了,那么就要等于
  2. 第15行的continue;改成break;
    因为如果能被除了1和自己以外的数整除就说明不是素数
    所以就要打断
  3. 第18行的if (j >= k)改成 if(j <=k)
    因为根据题意,这里是计算非素数的和
    也就是通过break打断的,不是正常结束的
    所以条件就和11行判断循环的条件一样就可以了

解答代码如下:

#include <stdio.h>
int fun(int a[], int n)
{
    int i, j, k, sum;
    sum = 0;
    for (i = 0; i < n; i++)
    {
        k = a[i] / 2;
        /**********found**********/
        for (j = 2; 1️⃣j <= k; j++)
        {
            if (a[i] % j == 0)
                /**********found**********/
                2️⃣break;
        }
        /**********found**********/
        3️⃣if (j <= k)
            sum += a[i];
    }
    return sum;
}
int main()
{
    int a[12] = { 22,3,65,37,18,19,10,11,12,23,15,17 };
    printf("sum=%d\n", fun(a, 12));
    return 0;
}

三、程序设计💻 --- 重复数统计

难度:⭐⭐⭐

题目📃

请编写函数 fun,其功能是:从一个整数数组中,统计出有重复数字数的个数存于 m 中,m 值由函数值返回。
例如:2430, 3001, 1798, 199, 498, 277, 229, 851, 369, 1146
其中如:3001 中有重复的数字 0
输出:Total Num=5
注意:部分源程序在文件 PROG1.C 中。
请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。

代码如下:
在fun函数中编写

#include <stdio.h>
#include <string.h>
int fun(int a[], int n)
{
    
}
void main()
{
  int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
  int m;
  m = fun(a, 10);
  printf("符合条件的数共有:%d\n",m);
  getchar();
}

分析🧐

由题意可知,这里要统计一个数组中的一个整数里有重复数字的个数
可以这样:

  1. 先在数组中取出一个数
  2. 对这个数进行拆解,放到新的数组b中
  3. 再对这个这个b数组进行遍历,看是否有相等的数字
  4. 有的话就将其加1

解答代码如下:

#include <stdio.h>
#include <string.h>
int fun(int a[], int n)
{
    int i, j, k, flag, value = 0, save = 0;
    int b[10] = {0};
    //一个循环取一个数
    for(i = 0; i < n; i++)
    {
        j = 0;
        //将这个数中的每个数字
        //保存到数组b中
        while(a[i] != 0)
        {
            b[j++] = a[i] % 10;
            a[i] = a[i] /10;
        }
        //判断这个数是否有重复的数
        for(k = 0; k < j; k++)
        {
            for(flag = k+1; flag < j; flag++)
            {
                //如果有相等的数,就给save赋1
                if(b[k] == b[flag])
                {
                    save = 1;
                    break;
                }
            }
        }
        //如果save为1,则表示有重复的数,就将其加一
        if(save == 1)
        {
            value++;
            save = 0;
        }
    }
    return value;
}
void main()
{
  int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
  int m;
  m = fun(a, 10);
  printf("符合条件的数共有:%d\n",m);
  getchar();
}

如果本文对您有帮助,还希望点点关注呢,这将是我不断前进的动力😊

目录
相关文章
阿里云轻量应用服务器68元/年,新用户特价,不要退款,重新买价格459元,涨价了!
阿里云轻量应用服务器新用户专享价68元/年(2核2G、200M带宽、40GB ESSD),秒杀低至38元。⚠️地域选定后不可修改,退款将失去新用户资格,再购恢复原价459元/年!务必下单前确认地域,避免浪费优惠。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
|
2月前
|
人工智能 安全 中间件
AI 帮你改了 20 个文件,最后 3 个忘了改——长任务为什么总是"差一口气"?
AI长任务常因“失忆”、误删、静默跳过、截断编造等问题翻车。UseIO通过Plan驱动拆解、检查点回滚、三级安全门控、结构化错误处理与交付前四点复查,构建工程级可靠性防护链,显著提升多文件重构等复杂任务的完成率与稳定性。(239字)
|
2月前
|
存储 弹性计算 监控
二手ERP对接闲鱼API:聚石塔强制入塔后的架构重构实录(正文骨架)
本文为二手ERP对接闲鱼API的权威重构指南,直击2026年聚石塔强制入塔新规。全文基于alibaba.idle.isv.*官方接口实测,涵盖入塔决策、全闭环接口清单(商品/订单/用户)、双Token模型、消息驱动架构、闲管家与第三方采集双通道设计、成色/验货字段映射、5大高频坑及合规红线,并附Python可运行源码。专为CTO/技术总监选型而写,240字。
|
2月前
|
缓存 测试技术 API
大模型API中转站避坑:满血验证、倍率换算与降智识别(附压测代码)
从工程师视角系统梳理大模型API中转站的评估方法:讲清兑换比例与倍率的真实换算关系,给出满血模型验证三招(复杂推理压测、模型指认、长上下文压力测试)与可运行的Python压测脚本,并总结稳定性、协议兼容、计费透明等接入要点和先测后充的避坑建议。
|
2月前
|
缓存 人工智能 计算机视觉
Qwen3.8-Flash模型介绍:能力、上下文限制、费用定价详细说明
通义千问最新多模态大模型Qwen3.8-Flash(ID:qwen3.8-flash),原生支持百万级上下文(100万tokens)、文本/图像/视频输入,输出为文本。具备Function Calling、结构化输出、联网搜索(限北京/新加坡)等能力,兼容OpenAI/Anthropic协议,已在阿里云百炼平台开放免费试用(赠100万Tokens)。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
2月前
|
Java 程序员 应用服务中间件
Maven之初识与安装
本文详解Maven安装与配置全流程:从基础概念、下载安装、环境变量配置到版本验证,助新手一次理清逻辑、顺利完成部署;涵盖一键构建、依赖管理核心功能,并提供交流支持。
219 0
Maven之初识与安装
|
2月前
|
C语言 数据安全/隐私保护
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
本教程专为C语言二级考生、中职学生及编程初学者设计,涵盖三大核心题型:二维数组每行最大值与首元素交换、结构体重复项删除(保留首个)、字符串单词首字母提取。含详细分析、易错点解析与标准代码,助你夯实基础、提升解题思维。
111 2
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
|
2月前
|
存储 C语言
二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点
本文详解C语言三道经典编程题:①统计整数序列中奇偶数个数并返回结构体;②提取字符串中数字字符拼接成整数;③筛选数组偶数并按原序拼接为“数字.”格式字符串。含完整代码、填空/修改/设计解析及易错点提醒。
121 1
二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点
|
2月前
|
XML 运维 Java
Tomcat 核心配置解析:4 大文件、乱码处理、端口与 Manager 配置
本文详解Tomcat四大核心配置文件(context.xml、web.xml、server.xml、tomcat-users.xml)功能与配置要点,涵盖控制台乱码解决、端口修改、Manager管理界面启用及用户权限配置,助你扎实掌握Tomcat运维关键技能。
199 0
Tomcat 核心配置解析:4 大文件、乱码处理、端口与 Manager 配置
|
2月前
|
SQL Java 数据库连接
MyBatis 之基础概念与框架原理详解
MyBatis是一款轻量级半自动ORM框架,封装JDBC,让开发者专注SQL编写与业务逻辑;支持XML/注解配置、动态SQL、高级映射,SQL与代码分离,灵活高效,显著提升持久层开发效率。(239字)
148 1
MyBatis 之基础概念与框架原理详解

热门文章

最新文章