二级C语言题解:迭代求根、字符串加法、字符串拆分

简介: 本文详解三道C语言编程题:①迭代法求平方根(牛顿法),误差≤1e-6;②字符串模拟大数加法,处理进位与字符数字转换;③字符串按索引模3拆分为三子串。含填空、修改、设计三类题型及完整解析代码。

前言
本文讲解:迭代求根、字符串加法、字符串拆分

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

一、程序填空📝 --- 迭代求根

难度:⭐⭐

题目📃

输入一个实数 a,根据迭代公式 x1=(x0 + a/x0)/2,计算并输出其平方根。

要求误差不超过 1e-6(即 0.000001)

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

#include  <stdio.h>
main( )
{
    double a,x0,x1;
    printf("输入一个实数, 本程序计算并输出其平方根\n");
    do
/**********************found***********************/
    1️⃣
    while(a<=0);
    x1=a/2.0;
    do
    {
/**********************found***********************/
        2️⃣
        x1=(x0+a/x0)/2.0;
/**********************found***********************/
    }while((x1-x0)>1e-6  3️⃣ );
    printf("%f 的平方根是 %f\n",a,x1);
}

分析🧐

这里提到迭代公式,就要先到值的覆盖
例如这个公式,这里的x1代表当前的值,x0代表上一次的值
现在依次分析下代码

  1. 填写   scanf("%lf", &a);
    由于在这个do - while循环里,又根据这个判断条件
    如果小于等于0就循环,也就是如果不满足条件就循环
    直到满足条件为止
  2. 填写  x0 = x1;
    这里就要注意,迭代了,x0是上一次的值
    x1是当前的值,所以要这样赋值
  3. 填写 || (x1-x0) < -(1e-6)
    由题目可知误差不超过1e-6
    所以这个循环就是让误差不超过1e-6为止
    当不满足这个条件就一直循环

解答代码如下:

#include  <stdio.h>
main( )
{
    double a,x0,x1;
    printf("输入一个实数, 本程序计算并输出其平方根\n");
    do
/**********************found***********************/
    1️⃣scanf("%lf", &a);
    while(a<=0);
    x1=a/2.0;
    do
    {
/**********************found***********************/
        2️⃣x0 = x1;
        x1=(x0+a/x0)/2.0;
/**********************found***********************/
    }while((x1-x0)>1e-6 3️⃣|| (x1-x0) < -(1e-6) );//超出了这个误差
    printf("%f 的平方根是 %f\n",a,x1);
}

二、程序修改🛠️ --- 字符串加法

难度:

题目📃

函数 char *fun (char * s1,char *s2, char *r) 的功能:
将两个长度相等的纯数字字符串当作两个加数,求其代表的数值之和并以字符串的形式存入 r 所指内存且返回。
如:s1 是 "723",s2 是 "567",则返回的字符串为 "1290"。要考虑进位。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!

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

#include <stdio.h>
#include <string.h>
char *fun(char * s1,char *s2,char *r)
{
    int len,cy=0,md;
    char *p,*q,*t;
    len=strlen(s1);
    p=s1+len-1;
    q=s2+len-1;
    t=r+len;
/**********************found***********************/
    *t='\0';
    while(p>=s1)
    {
/**********************found***********************/
        md=*p+*q-'0'+cy;
        if(md>=10)  cy=1;
        else  cy=0;
        *t=md%10+'0';
        p--;
        q--;
        t--;
    }
/**********************found***********************/
    if(cy=1)     
        *t='1';
    else
    {
        while(*r++=*++t);
    }
    return r;
}
void main()
{
    char s1[100],s2[100],s3[101];
    strcpy(s1,"65743");
    strcpy(s2,"85339");
    fun(s1,s2,s3);
    printf("%s+%s=%s\n",s1,s2,s3);
}

分析🧐

这道题,看着题目感觉有点难实现,但是看程序挖的空,还是很容易发现的

  1. 第12行
    改成  *(t + 1)='\0';
    由上方的指针p和q就可以知道,这样指针是指向
    对应字符串的末尾(因为加法是从个位开始的)
  2. 第16行
    改成  md=*p-'0'+*q-'0'+cy;
    这里很容易发现,字符要变成数字
    就要减去字符零
  3. 第25行
    改成  if(cy==1)
    这里也很容易发现,是判断相等的

解答代码如下:

#include <stdio.h>
#include <string.h>
char *fun(char * s1,char *s2,char *r)
{
    int len,cy=0,md;
    char *p,*q,*t;
    len=strlen(s1);
    p=s1+len-1;//末尾
    q=s2+len-1;
    t=r+len;
/**********************found***********************/
    1️⃣*(t+1)='\0';
    while(p>=s1)
    {
/**********************found***********************/
        2️⃣md=*p-'0'+*q-'0'+cy;//转成数字
        if(md>=10)  cy=1;
        else  cy=0;
        *t=md%10+'0';
        p--;
        q--;
        t--;
    }
/**********************found***********************/
    3️⃣if(cy==1)     
        *t='1';
    else
    {
        while(*r++=*++t);
    }
    return r;
}
void main()
{
    char s1[100],s2[100],s3[101];
    strcpy(s1,"65743");
    strcpy(s2,"85339");
    fun(s1,s2,s3);
    printf("%s+%s=%s\n",s1,s2,s3);
}

三、程序设计💻 --- 字符串拆分

难度:⭐⭐

题目📃

编写函数 char *fun (char * s0,char *s1,char *s2, char *s3)
要求实现:将 s0 所指字符串分解成三个字符串,分别存入 s1、s2、s3 所指内存中。分解的方法是,s1、s2、s3 从 s0 中依次顺序每隔 3 个字符取 1 个。 例如,s0 为 "abcdefghij" 时,分解完成后,s1、s2、s3 分别为:"adgj"、"beh"、"cfi"。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。

代码如下
在fun函数中编写

#include <stdio.h>
#include <string.h>
void fun(char * s0,char *s1,char *s2, char *s3)
{
    
}
void main()
{
    char  s0[100],s1[40],s2[40],s3[40];
    printf("请输入一行字符串\n");
    gets(s0);
    fun(s0,s1,s2,s3);
    puts(s1);
    puts(s2);
    puts(s3);
}

分析🧐

这道编程题还是挺简单的,直接可以用三个for循环来解决,三个循环对应着三个指针
依次实现对于的功能

每个循环都是从对应的位置开始循环

解答代码如下:

#include <stdio.h>
#include <string.h>
void fun(char * s0,char *s1,char *s2, char *s3)
{
    //i控制着每个循环从哪个位置开始
    //j控制着每个指针的下标,所以每次一个循环后就要将其赋值为0
    int i, j = 0;
    int len = strlen(s0);
    for(i = 0; i < len; i+=3)
    {
        s1[j++] = s0[i];
    }
    //最后都要记得加上斜杠零
    s1[j] = '\0';
    j = 0;
    for(i = 1; i < len; i+=3)
    {
        s2[j++] = s0[i];
    }
    s2[j] = '\0';
    j = 0;
    for(i = 2; i < len; i+=3)
    {
        s3[j++] = s0[i];
    }
    s3[j] = '\0';
}
void main()
{
    char  s0[100],s1[40],s2[40],s3[40];
    printf("请输入一行字符串\n");
    gets(s0);
    fun(s0,s1,s2,s3);
    puts(s1);
    puts(s2);
    puts(s3);
}

希望本篇文章能够帮助到你😊

目录
相关文章
|
1天前
|
C语言 数据安全/隐私保护
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
本教程专为C语言二级考生、中职学生及编程初学者设计,涵盖三大核心题型:二维数组每行最大值与首元素交换、结构体重复项删除(保留首个)、字符串单词首字母提取。含详细分析、易错点解析与标准代码,助你夯实基础、提升解题思维。
31 2
二级C语言题解:二维数组每行最大值与首元素交换、删除结构体的重复项、取出单词首字母
|
1天前
|
人工智能 C语言
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
本文详解三类经典编程题:十进制转任意进制(填空)、非素数求和(修改)与重复数字统计(设计),含完整代码、逐空分析及易错点解析,助你夯实C语言基础。
23 2
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
|
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语言二级考试三类典型题:统计字母及非字母字符个数、数字字符串转双精度浮点数、二维数组上下三角区域数据对调。含题目解析、错误定位与完整代码,适合备考学生、中职生及编程爱好者提升实战能力。
38 1
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
|
1天前
|
机器学习/深度学习 算法 C语言
二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号
本文详解三道C语言编程题:①矩阵主/反对角线元素求和(填空);②二分法求方程根(修改错误);③删除字符串中间的“*”号(程序设计)。含题目分析、易错点解析与完整代码,助力算法与指针实践能力提升。
29 1
二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号
|
1天前
|
Java 应用服务中间件 数据库连接
Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理
本文详解Maven工程化开发核心:从IDEA中Maven插件配置、Web项目创建与目录结构搭建,到pom.xml关键配置(坐标、properties、dependencies、plugins)、依赖范围(provided等)原理与实战,助你掌握工程化思维,高效构建Java项目。(239字)
26 1
Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理
|
1天前
|
存储 C语言
二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点
本文详解C语言三道经典编程题:①统计整数序列中奇偶数个数并返回结构体;②提取字符串中数字字符拼接成整数;③筛选数组偶数并按原序拼接为“数字.”格式字符串。含完整代码、填空/修改/设计解析及易错点提醒。
26 1
二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点
|
1天前
|
Java 应用服务中间件 Shell
Tomcat 使用与配置全解
Tomcat是Apache开源的轻量级Java Web容器,实现Servlet/JSP规范,支持Web应用部署与运行。需搭配JDK使用,目录结构清晰(如webapps存应用、conf存配置),默认端口8080,启动简单,广泛用于开发与中小型项目部署。
31 1
Tomcat 使用与配置全解

热门文章

最新文章