C语言经典题目(三)

news2024/11/26 18:27:25

C站的小伙伴们,大家好呀!😊😊✨✨这一篇是C语言之经典题目篇,除程序设计,还有一些不错的程序分析,快来和我一起进入C语言的世界吧!✨✨✨
💕C语言其他·刷题篇在这里哦:
【C语言经典题目(一)】
【C语言经典题目(二)】
【C语言字符串刷题篇】
【C语言 语言篇数组和字符串】

C语言经典题目三

  • 程序分析
    • 一:输出指向字符的指针
    • 二:for循环和switch语句体中break和continue
    • 三 :双指针完成赋值
  • 求数组相邻两个数之和
  • 删除值为x的数组元素

程序分析

一:输出指向字符的指针

分析一下程序执行后的输出结果:___________

#include <stdio.h>
int main (void)
{
  char *string="I love China!";    //(1)
  printf("%s\n",string);           //(2)
  string+=7;                      //(3)
  while(*string)                  //(4)
  {
    putchar(string[0]);
    string++;
  }  
  return 0;                    //(5)
}

对于指针类题目,画图可以更加直观地帮助我们分析理解。
(1)字符型指针string指向了字符串"I love China!"的第一个元素,即C。
在这里插入图片描述
(2)第二条语句,printf()函数中格式控制字符%s控制输出项是指向字符的指针,输出方式是从该指针指向的字符即'C'开始输出,直到遇到'\0'输出结束。故第二条语句输出结果为 I love China!
(3)指针向下移动7位,指向了元素’C’。
在这里插入图片描述
(4)进入循环体,当*string (即指针指向的元素的值)为非零值时,执行循环体中的语句。此语句依次输出’C’ ‘h’ ‘i’ ‘n’ ‘a’ ‘!’
故该程序所有的输出结结果为:
在这里插入图片描述

二:for循环和switch语句体中break和continue

分析程序执行后的输出结果______________

#include <stdio.h>
int main(void)
{
    char  str[]="ssswlia",c;           \\(1)
    int k;                              
    for (k=2;(c=str[k])!='\0';k++)     \\(2)
    {
        switch(c) 
        {
            case 'i':++k;break;
            case 'l':continue;
            default:putchar(c);continue;
        }
    putchar('*');                     \\(3)
    }
    printf("\n");
    return 0;
}

(1)定义字符数组,将字符串存入字符数组。
注意,字符串的长度(用strlen()函数计算)为7,而字符数组的长度为8(用sizeof()函数计算,得到字符数组的字节数,再除以char型元变量所占的字节数,即1,即可得到字符数组的长度。)
在这里插入图片描述
(2)指针进行for循环。
循环体是个switch语句,这里要搞清楚switch和break的用法。
break只用于循环体或者switch语句体中。当用于循环体中时,它的作用是退出循环。当用于switch语句体内时,作用只是跳出该switch语句体,注意此时并不能终止循环。
continue语句只用于循环体,它的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定。

分析
对于这个题目的分析,如下图。

  • 指针指向’s’,进入for循环,for循环的第一条语句是switch语句,符合switch第三条语句,输出’s’,这是遇到continue语句(注意continue语句是对于for语句而言的),不执行在for循环体中该语句之后的语句,(即 putchar()语句),进行下一次的循环,k++,指针向下移动。
  • 指针指向’w’,这个情况和刚刚的指针指向’s’的情况过程一样。
  • 下一步,指针指向’l’,在这种情况下,执行continue语句,即要直接进行下一次的for循环,指针向下移动。
  • 下一步,指针指向’i’,在这种情况下,执行switch语句体里的两条语句。指向向下移动,指向’a’,执行break语句,退出switch语句体,(注意此时并不会退出for循环),执行putchar()语句,输出’*’。指针移动,指向’\0’。结束for循环。
  • 因此最终的输出结果为 sw*

在这里插入图片描述

三 :双指针完成赋值

#include <stdio.h>
int main(void)
{
    void fun(char *);             //(1)
    char str[]="abcdefggedcba";   //(2)
    fun(str);                   //(3)
    puts(str);
}
void fun(char *p)               //(4)
{
    int i,j;
    for (i=0;*(p+i)!='\0';i++)
    if (*(p+i)>='d')
    {
        *(p+j)=*(p+i);
        j++;
    }
    *(p+j)=0;
}

(1)在主函数中声明被调函数。
(2)将字符串存入字符数组。
(3)调用被调函数。

在这里插入图片描述
(4)
分析大概思路

主函数将str传递给指针p,即将字符数组第一个元素’a’的首地址传递给了指针p,p指向a。
在被调函数体,有两个指针。它们初始状态都是指向a。
p+i不断移动,当满足for循环体中的条件时,p+j移动。

具体执行过程
指针p+i不断移动,p+0,p+1,p+2,所指向的值都小于’e’,因此p+j不移动(j=0)
当p+i(i=3时),满足if条件,*p+j(j=0)赋值为d,并向下移动……

在这里插入图片描述
最后,将p+j所指向的元素的值赋值为0。
在这里插入图片描述

求数组相邻两个数之和

求数组a中相邻两个元素之和,并将这些和存在数组b中,按每行3个元素的形式输出。

#include <stdio.h>
int main (void)
{
    int a[10],b[10],i; 
    //初始化数组a
    for  (i=0;i<10;i++)
    scanf("%d",&a[i]);
    //将相邻两个数之和依次赋值给数组b
    for (i=1;i<10;i++)
    b[i]=a[i]+a[i-1];
    //输出数组b
    for (i=1;i<10;i++)
    {
        printf("3d",b[i]);
        if (i%3==0) printf("\n");//控制格式
    }
    return 0;
}

删除值为x的数组元素

主要思路
对数组中的元素进行遍历,检验每一个元素是否等于目标元素x,若是相等,则删除?
怎样实现删除呢?就是自这个元素起,将其后面的每一个元素向前移动一位。
在这个过程我们使用指针实现,要注意指针越界行为。

#include <stdio.h>
int main(void)
{
    int a[10]={1,3,5,2,2,6,8,10,0,2};
    int x,*p,count=0,i;
    x=2;
    for (p=a;p<a+10-count;p++)    //(1)
    {
        if (*p=x)               //(2)
        {
            count++;
            for (i=p-a;i<10-count;i++)    //(3)
            a[i]=a[i+1];
            p--;         //(4)      //注意这里的p--防止漏掉某个元素的检验
        }
    }
    for (p=a;p<a+10-count;p++)
    printf("5d",*p);
    printf("\n");
    return 0;
}

(1)指针p初识指向数组a的第一个元素,即指向1。
这里设置的循环条件是为了防止指针越界。
1,3,5都不等于目标元素2,所以指针的指向不变。
在这里插入图片描述

(2)当指针移动到下一个元素即2时,count++,这时会使得指针的下界向左移动。
(3)在里层的for循环中,将p指针所指的位置开始,把后面的元素的值赋值给前一个元素。这样就实现了删除
在这里插入图片描述
(4)假设这里没有p–,那么执行完for循环循环体中的语句,会p++(for循环(1)中),注意这时可以已经删掉一个目标元素后的数组,那么移动后p所指向的元素检验了吗?还没有,就又移动到了下一个元素。所以没有 p–这条语句,会使得漏掉一些元素,最终没法达到目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python程序设计】——重点题目(期末不挂科)

课本&#xff1a; 目录 &#x1f552; 1. 控制结构&#x1f552; 2. 数据类型&#x1f552; 3. 函数&#x1f552; 4. 文件操作&#x1f552; 5. 面向对象&#x1f552; 6. Excel操作&#x1f552; 7. 实验课题目合集&#x1f552; 8. 思政题 &#x1f552; 1. 控制结构 【例…

chatgpt赋能python:Python怎么二次安装?

Python怎么二次安装&#xff1f; 介绍 Python作为一种广泛应用的编程语言&#xff0c;其安装也是极其简单。只需要在Python官网上下载对应版本的安装包&#xff0c;并按照提示进行安装即可。但是&#xff0c;如果你需要二次安装Python&#xff0c;比如更新到新的版本或者将Py…

百度、头条、360、搜狗下拉拓词及长尾关键词挖掘-批量多线程

百度、头条、360、搜狗下拉拓词及长尾关键词挖掘软件介绍&#xff1a; 1、在如今竞争激烈的互联网时代&#xff0c;作为SEO站长&#xff0c;我们都知道一个事实&#xff1a;流量就是金钱&#xff01;而要想在海量信息中脱颖而出&#xff0c;我们需要借助一些强大的工具来帮助我…

OpenMMLab-AI实战营第二期——4-1.目标检测与MMDetection

文章目录 1. 目标检测的基本范式1.0-1 目标检测简介1.0-2 基本概念1.1 滑窗1.1.1 滑窗基本思想1.1.2 滑窗效率问题改进1.1.3 感受野计算 1.2-1 使用卷积实现密集预测1.2.1 在特征图上进行密集预测1.2.2 边界框回归1.2.3 非极大值抑制&#xff08;Non-Maximum Suppression&#…

chatgpt赋能python:Python入门:如何下载和安装JupyterNotebook

Python入门&#xff1a;如何下载和安装Jupyter Notebook Jupyter Notebook是Python编程必备的工具之一&#xff0c;它可以帮助你快速地编写和测试Python代码。在这篇文章中&#xff0c;我们将向你展示如何下载和安装Jupyter Notebook。如果你是一名Python入门者&#xff0c;这…

神经网络:CNN中的filter,kernel_size,strides,padding对输出形状的影响

输入数据在经过卷积层后&#xff0c;形状一般会发生改变&#xff0c;而形状的变化往往与以下四个超参数有关。 1&#xff0c;filter&#xff08;out_channel&#xff09; 该超参数控制着输入数据经过卷积层中需要与几个卷积核进行运算&#xff0c;而输入数据与每个卷积核进行…

【P57】JMeter 保存响应到文件(Save Responses to a file)

文章目录 一、保存响应到文件&#xff08;Save Responses to a file&#xff09;参数说明二、准备工作三、测试计划设计 一、保存响应到文件&#xff08;Save Responses to a file&#xff09;参数说明 可以将结果树保存到文件 使用场景&#xff1a;当结果太大&#xff0c;使…

Mybatis插件001分页 pagehelper

Mybatis-PageHelper/Important.md at master pagehelper/Mybatis-PageHelper GitHubMybatis通用分页插件. Contribute to pagehelper/Mybatis-PageHelper development by creating an account on GitHub.https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis…

短视频社区的商业化和流量分发

商业化本质上是一门流量生意&#xff0c;那么为什么要做流量&#xff1f; 1、流量分配影响社区生态 一个社区的总流量是要在三类流量里面做分配&#xff0c;此消彼长&#xff1a; 私域流量公域流量&#xff08;中心化运营 算法推荐&#xff09;商业化的流量&#xff08;也是…

chatgpt赋能python:Python代码的保存:保障开发效率和代码质量

Python 代码的保存&#xff1a;保障开发效率和代码质量 Python 是一种高级语言&#xff0c;被广泛应用于数据分析、机器学习、 Web 开发等各个领域。它的语法简洁、易于学习&#xff0c;拥有丰富的标准库和第三方库&#xff0c;帮助开发者快速实现功能。在这样一个代码生产效率…

[ruby on rails] passenger+nginx 部署rails

安装Passenger 方法1 Passenger 是一个 app server&#xff0c;支持基于 Rack 框架的 Ruby app&#xff08;包括 Rails&#xff09;&#xff0c;作为模块变异到Nginx&#xff0c;不需要自己启动。 安装 Passenger 最简单的方法是通过 apt 安装&#xff0c;首先导入 Passenger…

英语4级技巧

真题链接&#xff1a;https://pan.baidu.com/s/1IZ0MmEpkANUm77ZLDmHs1A?pwd1111 提取码&#xff1a;1111 一、听力技巧 听到什么选什么 听发音 4级 90% 6级 60% 1、开头原则 2、顺序原则 1、单词发音/语音现象&#xff08;连读、弱读、失去爆破&#xff09; 反转词&#…

chatgpt赋能python:Python如何产生随机整数?

Python如何产生随机整数&#xff1f; Python是一种高级编程语言。它允许程序员轻松地创建各种类型的应用程序&#xff0c;包括生成随机整数。本文将介绍如何在Python中使用内置的随机数函数来生成随机整数。 random模块 Python中的random模块提供了生成随机数的函数。这些函…

chatgpt赋能python:Python实现二分查找

Python实现二分查找 在计算机科学中&#xff0c;二分查找是一种在有序数组中查找特定值的算法。 以一个有序数组为例&#xff0c;二分查找从数组的中间元素开始查找。如果需要查找的值与中间元素相同&#xff0c;则返回中间元素的位置。否则&#xff0c;如果查找的值比中间元…

ubuntu 20.04 aarch64 平台交叉编译 glib

glib 是什么&#xff1f; glib 是一个比较强大的 软件库&#xff0c;类似于 libc 库 交叉编译 当前需要移植到 aarch64&#xff08;ARM64&#xff09;平台上&#xff0c;需要使用 aarch64 交叉编译工具链编译 glib 环境准备 ubuntu 20.04 安装较新版本的 meson &#xff1…

使用大型语言模(LLM)构建系统(三):思维链推理

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。 下面是我们访问大型语言模(LLM)的主要代码&#xff1a; import openai#您的openai的api key openai.api_key YOUR-OPENAI-API-KEY def get_…

vue3中的插槽

目录 什么是插槽插槽的类型默认插槽具名插槽作用域插槽 插槽的默认内容动态组件中使用插槽插槽的组合使用插槽的高级用法插槽复用将动态组件作为插槽 插槽的优先级规则 什么是插槽 插槽是组件中用来承载内容的一种机制&#xff0c;可以让组件在运行时接受来自其它组件的任意内…

【后端面经-数据库】MySQL的存储引擎简介

【后端面经-数据库】MySQL的存储引擎简介 MySQL的存储引擎0. 存储引擎的查看和修改1. MyISAM2. InnoDB3. MEMORY4. MERGE5. 总结6. 参考博客 MySQL的存储引擎 mysql主要有四类存储引擎&#xff0c;目前主要使用InnoDB作为存储引擎。 0. 存储引擎的查看和修改 查看当前数据库…

Oracle子查询改写的几种方式

子查询定义 子查询是嵌套在另一个语句(如SELECT,INSERT,UPDATE或DELETE)中的SELECT语句。 通常,可以在任何使用表达式的地方使用子查询。 例子 比如从以下的病人信息中查询最近一个月住院年龄最大的病人信息 从以上的信息中我们知道病人出生日期BIRTHDATE ,限制取数的时…

chatgpt赋能python:Python二次方函数——优化您的SEO排名

Python二次方函数——优化您的SEO排名 如果您是一位拥有10年Python编程经验的工程师&#xff0c;您可能已经知道Python是一个强大的编程语言&#xff0c;虽然它不是专业的SEO工具&#xff0c;但是它可以用于优化SEO排名&#xff0c;尤其是当您需要通过Python编写一个二次方函数…