二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点

简介: 本文详解C语言三道经典编程题:①统计整数序列中奇偶数个数并返回结构体;②提取字符串中数字字符拼接成整数;③筛选数组偶数并按原序拼接为“数字.”格式字符串。含完整代码、填空/修改/设计解析及易错点提醒。

前言
本文讲解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点

🏠我的主页:我的主页
📚系列专栏:系列专栏

一、程序填空📝 --- 整数序列奇偶个数

难度:

题目📃

函数 fun 的功能:
根据形参 c 中存储的整数序列,分别统计偶数元素和奇数元素的个数,将统计结果以结构变量返回主函数,结构变量的类型由程序中定义的 struct pair 给出,它包含两个整数变量成员,依次对应偶数个数、奇数个数。形参 d 中存储的是序列的长度。  

例如:若 c 中存储的数值依次为 3, 5, 14, 27, 12,d 为 5,则函数返回的结构变量中,第一个成员的值为 2,第二个成员的值为 3。主函数输出 n1=2,n2=3
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

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

#include  <stdio.h>
struct pair {
    int n1, n2;
};
struct pair fun(int* c, int d) {
    int i;
/**********************found***********************/
    1️⃣;
    p.n1 = p.n2 = 0;
/**********************found***********************/
    for (i=0; i<d; 2️⃣) {
        if (c[i] % 2 == 0)
            p.n1++;
        else
/**********************found***********************/  
            3️⃣;
    }
    return p;
}
int main( ) {
    int i, c[100], d;
    struct pair p;
    printf("请输入数值的个数:");
    scanf("%d", &d);
    printf("请输入%d个数值:", d);
    for (i = 0; i < d; i++)
    scanf("%d", &(c[i]));
    p = fun(c, d);
    printf("n1=%d,n2=%d", p.n1, p.n2);
    return 0;
}

分析🧐

这道题还是挺简单的,做多了就能看出来

  1. 填写:struct pair p
    由下面的语句可以知道,p变量没有定义
    所以直接可以确定是需要定义
    这里要注意的是结构体变量类型是要加上struct的
  2. 填写:i++
    因为这里是每次只判断一个值,所以是每次加一
    则i++
  3. 填写:p.n2++
    由判断语句可以知道,这里是奇数的值
    如果不是偶数,那么else奇数加一

解答代码如下:

#include  <stdio.h>
struct pair {
    int n1, n2;
};
struct pair fun(int* c, int d) {
    int i;
/**********************found***********************/
    //定义结构体变量
    1️⃣struct pair p;
    p.n1 = p.n2 = 0;
/**********************found***********************/
    //每次只取一个值
    for (i=0; i<d; 2️⃣i++) {
        if (c[i] % 2 == 0)
            p.n1++;
        else
/**********************found***********************/  
            //这里是奇数要加一
            3️⃣p.n2++;
    }
    return p;
}
int main( ) {
    int i, c[100], d;
    struct pair p;
    printf("请输入数值的个数:");
    scanf("%d", &d);
    printf("请输入%d个数值:", d);
    for (i = 0; i < d; i++)
    scanf("%d", &(c[i]));
    p = fun(c, d);
    printf("n1=%d,n2=%d", p.n1, p.n2);
    return 0;
}

二、程序修改🛠️ --- 拼接数字字符

难度:

题目📃

函数 fun 的功能:
将形参 str 所指字符串中的数字字符按从前往后出现的次序从左往右拼接成一个整数,返回主函数输出。若形参 str 中没有数字,则函数 fun 返回 0 给主函数。
例如,若 str 的内容为 "C3Xyz9D1",则函数返回 391,程序输出 391
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!

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

#include <stdio.h>
#include <string.h>
int fun(char* str) 
{  
    int i, k;
    i = 0;
/**********************found***********************/
    for (k=0; k<=strlen(str); k++) 
    {
/**********************found***********************/
        if ( (str[k] >= 0) && (str[k] <= 9) ) 
             i = i * 10 + str[k] - '0';
    }
/**********************found***********************/
    return k;
}
int main()
{ 
    char str[100];
    int l;
    printf("input string:");
    scanf("%s", str);
    l = fun(str);
    printf("num:%d\n", l);
    return 0;
}

分析🧐

这道题是基础,要能够一眼看出来

  1. 第10行的k <= strlen(str)
    改成 k < strlen(str)
    因为如果是等于的话,就会越界
  2. 第13行的两个数字加上单引号
    if ( (str[k] >= '0') && (str[k] <= '9') )
    因为这里是判断字符的
  3. 第17行的return k;
    改成:return i;
    如果是k的话就不符合题意了
    这个k只是循环判断的变量
    i 才是提取的数字

解答代码如下:

#include <stdio.h>
#include <string.h>
int fun(char* str) 
{  
    int i, k;
    i = 0;
/**********************found***********************/
    //相等会越界
    for (k=0; 1️⃣k<strlen(str); k++) 
    {
/**********************found***********************/
        //对比的是字符
        2️⃣if ( (str[k] >= '0') && (str[k] <= '9') ) 
             i = i * 10 + str[k] - '0';
    }
/**********************found***********************/
    //i才是提取的数字
    3️⃣return i;
}
int main()
{ 
    char str[100];
    int l;
    printf("input string:");
    scanf("%s", str);
    l = fun(str);
    printf("num:%d\n", l);
    return 0;
}

三、程序设计 💻 --- 数组取偶数并加小数点

难度:⭐⭐

题目📃

请编写函数 fun,其功能是:
将具有 n 个元素的形参数组 x 中的偶数原顺序输出到字符数组 str 中,每个数字后面加一个小数点,并生成一个结果字符串 str 由函数返回。
例如,当数组 x 内容为 1,4,19,82,61,2,输出结果是:4.82.2.
注意:部分源程序在文件 PROG1.C 中。
请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。

代码如下
在fun函数中编写

#include <stdio.h>
#include <string.h>
/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_to_str(int n,char *s)
{
    sprintf(s,"%d",n);  
}
char  *fun(int x[], int n)
{
    static char str[200],s[10];
    int i;
    *str = 0;
    /* 请在这里填入你编写的代码*/
    
    return str;
}
int main()
{
    int x[] = {1,4,19,82,61,2};
    printf("str=%s\n", fun(x, 6));
    return 0;
}

分析🧐

这道题,主要难在,每个数字后面加上一个小点
由于给出的程序中包含string.h 所以可以使用strcat() 连接函数来将小数点添加上去

这里有两个str 和 s 两个字符数组,由最后返回的是str数组可知,str中是用来存放这些数字的,而s数组是用来配合str使用的

解答代码如下:

#include <stdio.h>
#include <string.h>
/* 函数int_to_str的功能是将参数n中的整数转换成字符串,存入s指内存中 */
void int_to_str(int n,char *s)
{
    sprintf(s,"%d",n);  
}
char  *fun(int x[], int n)
{
    static char str[200],s[10];
    int i;
    *str = 0;
    /* 请在这里填入你编写的代码*/
    //将每个值遍历一遍
    for(i = 0; i < n; i++)
    {    //是偶数就要加入
        if(x[i] % 2 == 0)
        {
            //先用这个函数将s变成字符串
            int_to_str(x[i], s);
            //再将这个字符串数字后面加上小数点
            strcat(s,".");
            //最终加入到str数组中
            strcat(str, s);
        }
    }
    return str;
}
int main()
{
    int x[] = {1,4,19,82,61,2};
    printf("str=%s\n", fun(x, 6));
    return 0;
}

C语言就是要多看,多练,多思考。到后面就能熟能生巧
希望本文能够对您有帮助😊

目录
相关文章
|
1天前
|
人工智能 C语言
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
本文详解三类经典编程题:十进制转任意进制(填空)、非素数求和(修改)与重复数字统计(设计),含完整代码、逐空分析及易错点解析,助你夯实C语言基础。
23 2
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
|
1天前
|
C语言 数据安全/隐私保护
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
本教程专为C语言二级考生、中职学生及编程初学者设计,涵盖三大核心题型:二维数组每行最大值与首元素交换、结构体重复项删除(保留首个)、字符串单词首字母提取。含详细分析、易错点解析与标准代码,助你夯实基础、提升解题思维。
31 2
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
|
1天前
|
Java 应用服务中间件 Shell
Tomcat 使用与配置全解
Tomcat是Apache开源的轻量级Java Web容器,实现Servlet/JSP规范,支持Web应用部署与运行。需搭配JDK使用,目录结构清晰(如webapps存应用、conf存配置),默认端口8080,启动简单,广泛用于开发与中小型项目部署。
31 1
Tomcat 使用与配置全解
|
1天前
|
存储 C语言
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
本文详解C语言二级考试三类典型题:统计字母及非字母字符个数、数字字符串转双精度浮点数、二维数组上下三角区域数据对调。含题目解析、错误定位与完整代码,适合备考学生、中职生及编程爱好者提升实战能力。
38 1
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
|
1天前
|
SQL Java 数据库连接
MyBatis 之基础概念与框架原理详解
MyBatis是一款轻量级半自动ORM框架,封装JDBC,让开发者专注SQL编写与业务逻辑;支持XML/注解配置、动态SQL、高级映射,SQL与代码分离,灵活高效,显著提升持久层开发效率。(239字)
29 1
MyBatis 之基础概念与框架原理详解
|
1天前
|
Java 程序员 应用服务中间件
Maven之初识与安装
本文详解Maven安装与配置全流程:从基础概念、下载安装、环境变量配置到版本验证,助新手一次理清逻辑、顺利完成部署;涵盖一键构建、依赖管理核心功能,并提供交流支持。
29 0
Maven之初识与安装
|
1天前
|
前端开发 Java 测试技术
Maven 之工程构建与依赖管理全攻略
本文系统讲解Maven核心知识:涵盖POM/JAR/WAR工程类型与标准目录结构;详解构建生命周期(validate→compile→test→package→install→deploy)及常用命令;深入解析本地/远程/中央仓库机制,并指导配置本地仓库路径、阿里云镜像及JDK版本。内容精炼实用,助开发者快速掌握Maven项目管理精髓。
34 1
Maven 之工程构建与依赖管理全攻略
|
1天前
|
机器学习/深度学习 算法 C语言
二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号
本文详解三道C语言编程题:①矩阵主/反对角线元素求和(填空);②二分法求方程根(修改错误);③删除字符串中间的“*”号(程序设计)。含题目分析、易错点解析与完整代码,助力算法与指针实践能力提升。
29 1
二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号
|
1天前
|
C语言 索引
二级C语言题解:迭代求根、字符串加法、字符串拆分
本文详解三道C语言编程题:①迭代法求平方根(牛顿法),误差≤1e-6;②字符串模拟大数加法,处理进位与字符数字转换;③字符串按索引模3拆分为三子串。含填空、修改、设计三类题型及完整解析代码。
23 1
二级C语言题解:迭代求根、字符串加法、字符串拆分

热门文章

最新文章