二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号

简介: 本文详解三道C语言编程题:①矩阵主/反对角线元素求和(填空);②二分法求方程根(修改错误);③删除字符串中间的“*”号(程序设计)。含题目分析、易错点解析与完整代码,助力算法与指针实践能力提升。

前言
本文讲解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号

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

一、程序填空📝 --- 矩阵主、反对角线元素之和

难度:⭐

题目📃

在此程序中,函数 fun 的功能是:计算 N×N 矩阵的主对角线元素和反对角线元素之和,并作为函数值返回。要求先累加主对角线元素中的值,再累加反对角线元素中的值。

例如,若 N = 3,有下列矩阵:
1 2 3
4 5 6
7 8 9

首先累加 1、5、9,然后累加 3、5、7,函数返回值为 30。

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

#include    <stdio.h>
#define    N    4
int fun(int  t[][N], int  n)
{  int  i, sum;
/**********found**********/
  1️⃣;
   for(i=0; i<n; i++)
/**********found**********/
     sum+= 2️⃣;
   for(i=0; i<n; i++)
/**********found**********/
     sum+= t[i][n-i-3️⃣] ;
   return sum;
}
void main()
{  int  t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j;
   printf("\nThe original data:\n");
   for(i=0; i<N; i++)
   {  for(j=0; j<N; j++)  printf("%4d",t[i][j]);
      printf("\n");
   }
   printf("The result is:  %d",fun(t,N));
}

分析🧐

这道题相对简单

  1. 填写:sum = 0
    由下方的sum的使用可以知道
    这个sum没有赋初值
    又因为是sum是用来做累加求和
    所以初始值是0
  2. 填写:t[ i ][ i ]
    由题意可以知道,这里有两个for循环
    这里的第一个就是累加从左往右(主对角线)的长度
    可以看出规律,都是行列相等的
  3. 填写:1
    这个循环,是来实现反对角线的(从右往左)
    可以写一下反对角线的各个元素,就可以得出规律了

解答代码如下:

#include    <stdio.h>
#define    N    4
int fun(int  t[][N], int  n)
{  int  i, sum;
/**********found**********/
   1️⃣sum = 0;
   for(i=0; i<n; i++)
/**********found**********/
     2️⃣sum+= t[i][i];
   for(i=0; i<n; i++)
/**********found**********/
     3️⃣sum+= t[i][n-i-1] ;
   return sum;
}
void main()
{  int  t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j;
   printf("\nThe original data:\n");
   for(i=0; i<N; i++)
   {  for(j=0; j<N; j++)  printf("%4d",t[i][j]);
      printf("\n");
   }
   printf("The result is:  %d",fun(t,N));
}

二、程序修改🛠️ --- 二分法求方程根

难度:⭐

题目📃

在此程序中,函数 fun 和 funx 的功能是:用二分法求方程 2x³ - 4x² + 3x - 6 = 0 的一个根,并要求绝对误差不超过 0.001。
例如,若给 m 输入 - 100,n 输入 90,则函数求得的一个根为 2.000。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件 modi1.c 中。
不要改动 main 函数,不得增行或删行,也不得更改程序的结构!

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

#include <stdio.h>
#include <math.h>
double funx(double  x)
{   return(2*x*x*x-4*x*x+3*x-6);  }
double fun( double  m, double  n)
{
/************found************/
    int  r;
    r=(m+n)/2;
/************found************/
    while(fabs(n-m)<0.001)
    {   if(funx(r)*funx(n)<0)  m=r;
    else  n=r;
    r=(m+n)/2;
    }
    return  r;
}
void main( )
{  double  m,n, root;
   printf("Enter  m  n :  \n"); scanf("%lf%lf",&m,&n);
   root=fun( m,n );
   printf("root = %6.3f\n",root);
}

分析🧐

这道题的意思难以理解,但是不要被这个文字描述吓到了,看他在程序里挖的错,都是一眼能够看出来的

  1. 第8行改为
    double  r;
    函数的返回值是double类型
    而最后是返回r的,所以很明显 i 是double
  2. 第11行改为
    while(fabs(r)<0.001)
    由题目可知,绝对值不超过0.001
    所以是小于0.001

解答代码如下:

#include <stdio.h>
#include <math.h>
double funx(double  x)
{   return(2*x*x*x-4*x*x+3*x-6);  }
double fun( double  m, double  n)
{
/************found************/
   1️⃣ double  r;
    r=(m+n)/2;
/************found************/
   2️⃣ while(fabs(r)<0.001)
    {   if(funx(r)*funx(n)<0)  m=r;
    else  n=r;
    r=(m+n)/2;
    }
    return  r;
}
void main( )
{  double  m,n, root;
   printf("Enter  m  n :  \n"); scanf("%lf%lf",&m,&n);
   root=fun( m,n );
   printf("root = %6.3f\n",root);
}

三、程序设计💻 --- 处理字符串中 * 号

难度:⭐⭐⭐

题目📃

在此程序中,规定输入的字符串中只包含字母和 * 号。
编写函数 fun,其功能是:除了字符串前导和尾部的号外,将串中其它的 * 号全部删除。形参 h 已指向字符串中第一个字母,形参 p 指向字符串的中最后一个字母。在编写函数时,不得使用 C 语言提供的字符串函数。

例如,若字符串中的内容为 ******ABC*DEFG******,删除后,字符串中的内容应当是:******ABCDEFG******。在编写函数时,不得使用 C 语言提供的字符串函数。

注意:部分源程序在文件 prog1.c 中。
请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。

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

#include <stdio.h>
void  fun( char *a, char *h,char *p )
{
    
}
void main()
{  char  s[81],*t, *f;
   printf("Enter a string:\n");gets(s);
   t=f=s;
   while(*t)t++;
   t--;
   while(*t=='*')t--;
   while(*f=='*')f++;
   fun( s , f,t );
   printf("The string after deleted:\n");puts(s);
}

分析🧐

可以先看main函数的功能,就是将t指针跳过后面的*号,还有将f指针是跳过前面的*号
而后在fun函数中,h指针相当于指向在左边第一个非*号地址的位置
p指针是指向右边非*号地址的位置
这也就相当于是帮我们省去了考虑前后导零的情况了

之后就可以想到覆盖,当h指针是*号,就覆盖它
如果不是*号就向前走

解答代码如下:

#include <stdio.h>
void  fun( char *a, char *h,char *p )
{
    //p指向最右边非星号的位置
    //h指向最左边非星号的位置
    int j;
    while(h < p)
    {
        //让flag指向h,代替h指针移动
        //如果直接让h指针移动的话,就只能执行一次了
        char *flag = h;
        if(*flag == '*')
        {
            //如果是*号,就将其覆盖
            for(j = 0; flag[j] != '\0'; j++)
                flag[j] = flag[j + 1];
            //覆盖完后,长度也要减少一个,所以p--
            p--;
        //如果不是*号的话h指针就向前移动
        }else h++;
    }
}
void main()
{  char  s[81],*t, *f;
   printf("Enter a string:\n");gets(s);
   t=f=s;
   while(*t)t++;
   t--;
   while(*t=='*')t--;
   while(*f=='*')f++;
   fun( s , f,t );
   printf("The string after deleted:\n");puts(s);
}

今日题的总结

如果遇到题目看不懂,一定不要慌,先看看代码中能不能找出解出这个空的条件

希望本文能够帮助到你😊

目录
相关文章
|
2月前
|
存储 弹性计算 监控
二手ERP对接闲鱼API:聚石塔强制入塔后的架构重构实录(正文骨架)
本文为二手ERP对接闲鱼API的权威重构指南,直击2026年聚石塔强制入塔新规。全文基于alibaba.idle.isv.*官方接口实测,涵盖入塔决策、全闭环接口清单(商品/订单/用户)、双Token模型、消息驱动架构、闲管家与第三方采集双通道设计、成色/验货字段映射、5大高频坑及合规红线,并附Python可运行源码。专为CTO/技术总监选型而写,240字。
|
2月前
|
Java 程序员 应用服务中间件
Maven之初识与安装
本文详解Maven安装与配置全流程:从基础概念、下载安装、环境变量配置到版本验证,助新手一次理清逻辑、顺利完成部署;涵盖一键构建、依赖管理核心功能,并提供交流支持。
212 0
Maven之初识与安装
|
2月前
|
存储 C语言
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
本文详解C语言二级考试三类典型题:统计字母及非字母字符个数、数字字符串转双精度浮点数、二维数组上下三角区域数据对调。含题目解析、错误定位与完整代码,适合备考学生、中职生及编程爱好者提升实战能力。
143 1
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
|
2月前
|
Java 应用服务中间件 数据库连接
Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理
本文详解Maven工程化开发核心:从IDEA中Maven插件配置、Web项目创建与目录结构搭建,到pom.xml关键配置(坐标、properties、dependencies、plugins)、依赖范围(provided等)原理与实战,助你掌握工程化思维,高效构建Java项目。(239字)
120 1
Maven 之工程化开发核心指南:插件配置、pom 文件与依赖管理
|
2月前
|
人工智能 IDE 开发工具
全网首发!完美解决 Antigravity IDE 地区限制登录,把 Gemini Pro 会员用到极致
本文专为具备基础访问环境与Gemini Pro会员的用户撰写,深度解析网页端多模态功能(图文/视频/PPT/音乐生成、画布工具)及编程利器Antigravity IDE实操技巧,含地区限制破解、中文化设置、模型选配、自动执行等独家避坑指南,助你物超所值发挥Pro版全部潜力。
796 1
全网首发!完美解决 Antigravity IDE 地区限制登录,把 Gemini Pro 会员用到极致
|
2月前
|
缓存 人工智能 JSON
最新版通义千问(Qwen3.8‑Max)功能介绍
随着AI应用走向真实复杂业务落地,市场对于大模型的诉求已经不再局限于简单问答、短文生成这类浅层任务,行业更加看重模型处理长周期开放任务的综合实力,希望基座模型能够完成目标拆解、多工具协同调用、结果校验、自我排查修复,在较少人工介入的前提下交付完整可用成果。Qwen3.8‑Max作为通义千问系列定位最高的旗舰基座模型,采用前沿稀疏混合专家MoE架构,总参数量达到2.4万亿,单次推理激活95B参数,在超大模型容量和推理开销之间完成高效平衡,原生面向智能体长周期任务进行深度优化,覆盖百万级超长上下文、多模态输入理解、工程级自主编程、长链路办公自动化、完备工具调用生态,既支持普通用户直接交互使用,也可
546 1
|
2月前
|
SQL 安全 网络安全
【网络安全】常见攻击与防御:XSS、CSRF、SQL 注入、DDoS、越权访问、中间人攻击(附《思维导图》)
本文系统梳理XSS、CSRF、SQL注入、DDoS、越权访问、中间人攻击六大高发漏洞,覆盖网络层至业务层全攻击面,结合原理、危害与分层防御策略,构建纵深防御知识体系。
阿里云轻量应用服务器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月前
|
NoSQL 前端开发 安全
零成本邮件验证码全链路拆解,附最新 QQ 邮箱 SMTP 授权码完整步骤
本文详解个人项目“词帆CiFan”中邮件验证码功能的完整实现:选用QQ邮箱SMTP零成本方案,涵盖密码重置与账号注销两大核心场景,包含前后端链路设计、Redis降级容错、安全配置避坑(如授权码获取、端口选择、环境变量保护)及AI辅助开发技巧。
260 0
零成本邮件验证码全链路拆解,附最新 QQ 邮箱 SMTP 授权码完整步骤

热门文章

最新文章