嵌入式全栈开发学习笔记---C语言笔试复习大全10

目录

字符数组(笔试重点)

字符数组初始化

字符串数组输出

字符串的输入

字符串处理函数

puts()输出字符串

gets()输入字符串

strlen()计算字符串长度

strcpy()将后面的字符串拷贝到前面的字符串数组里面

笔试题12

strcmp()比较字符串的大小

strcat()将后面的字符串接到前面的字符串数组中

strchr()查找字符的位置

笔试题13

笔试题14

笔试题15


上一篇复习了二维数组,这一篇我们来复习字符数组。

说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。

这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。

注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!

vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。

我们正式开始:

字符数组(笔试重点)

字符数组初始化

字符数组的初始化有两种方法,一种是逐个赋值,一种是用字符串赋值。

1.char ch[5] = {'h', 'e', 'l', 'l', 'o'};  //麻烦,一般不用

2.char ch[10] = “helloworld”;  //方便实用,但是存在bug,有些平台上这样写打印出来后面会跟着很多乱七八糟的东西,如果这样写的话字符数组定义要大一些。

3.推荐写法:char ch[11] = “helloworld,把\0计算进数组长度中。

注意:凡是数组,尽量初始化!要不然数组的元素就会是随机值。

字符串数组输出

Printf(%s\n, a); //a是字符串数组的地址,也就是首字符的地址

字符串的输入

1、获取单个字符串

char ch[32] = {0};

scanf(“%s”, ch); //数组名本身就是地址,不需要再取地址

2、获取多个字符串

ch ch1[32] = {0};  char ch2[32] = {0};

scanf(“%s%s”, ch1, ch2); //两个%s之间不需要空格 但的时候需要空格隔开

3、获取字符串和字符

char ch1[32] = {0}, ch;

scanf(“%s %c”, ch1, &ch); //%s和%c之间需要空格,输入的时候字符串和字符也需要空格

4、获取字符串和数字

char ch1[32] = {0}; int n;

scanf(“%s %d”, ch1, &n); //同上,都需要空格隔开

字符串处理函数

puts()输出字符串

1.函数原型:

int puts(const char *s);

作用:

其作用是将一个字符串(以′\0′结束的字符序列)输出到终端

用法:

char ch[32] = “helloworld”;

puts(ch);

类似的函数:

int putchar(int c);

注:这个很少用,我们一般都是直接用printf输出就行

gets()输入字符串

2.函数原型:

char *gets(char *s);

作用:

其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数返回值是字符数组的起始地址。它和scanf的区别是,scanf遇到空格结束,gets遇到换行才结束。(Linux下编译会出现警告,可用getchar代替)

用法:

char ch[32];

gets(ch);         //可以输入带有空格的字符串,比如hello world

类似的函数:

int getchar(void);

注:这个也很少用,我们一般都是直接用scanf输入就行

strlen()计算字符串长度

3.函数原型:

size_t strlen(const char *s);

作用:

获取字符串的长度,遇到'\0'结束。

用法:

char str1[32] = “helloworld”; char str2[32] = “welcome\0tonanjing”;

printf(“%lu %lu\n”, strlen(str1), strlen(str2));

注:size_t就是unsigned long类型。

strcpy()将后面的字符串拷贝到前面的字符串数组里面

4.函数原型:

char *strcpy(char *dest, const char *src);

char *strncpy(char *dest, const char *src, size_t n);

作用:

把src指向的字符串拷贝到dest指向的内存中,包括字符串结尾的'\0'。

strncpy可以指定拷贝固定的字节。

用法:

char str1[32] = “helloworld”; char str2[32] = “welcome”;

strcpy(str1, str2);   //str1变成了welcome

strncpy(str1, str2, 2);   //str1变成了welloworld

size_t就是unsigned long类型。

注:数组的赋值,要么在定义的时候初始化,要么逐个元素赋值,要么拷贝

char str[32] = {0}; str = “helloworld”;//错误

笔试题12

问:以下程序输出的结果是什么?

char s3[32]=”helloworld”;

char s4[32]=”111111111222222222”;

strcpy(s4,s3);

printf(“%s\n”,s4);

答案是:helloworld

因为把s3拷贝到s4的时候把s3的结束标志\0也拷贝过去了,’\0’覆盖掉了一个第一个2,实际s4变成了helloworld\022222222,但是printf在输出的时候遇到’\0’就结束了,因此输出的结果我们只能看到helloworld。

如果我们不想要将\0拷贝过去,想把2也输出,可以用strncpy( )指定拷贝的长度,strncpy(s4,s3,10)指定拷贝长度为10,即不包含helloworld后面的\0。这样printf输出的时候就能把后面的2也输出了,最终我们看到的结果就是helloworld222222222

strcmp()比较字符串的大小

5.函数原型:

int strcmp(const char *s1, const char *s2);

int strncmp(const char *s1, const char *s2, size_t n);

作用:

比较s1指向的字符串和s2指向的字符串;(按字符的ASCII码比较,abcd小于acde)

strncmp指定比较固定的长度,即指定比较前几个字符。

用法:

char str1[32] = “helloworld”; char str2[32] = “welcome”;

strcmp(str1, str2);    //结果小于0

返回值:

(如果前面的比后面的大)返回值大于0、(如果前面的比后面的小)返回值小于0、(如果前面的等于后面的)返回值等于0(如if(strcmp(str1, str2)==0) printf(%s=%s\n,s1,s2);)

strcat()将后面的字符串接到前面的字符串数组中

6.函数原型:

char *strcat(char *dest, const char *src);

        char *strncat(char *dest, const char *src, size_t n);

作用:

把src指向的字符串接在dest指向的字符串后面(要求dest指向的内存空间足够大)

strncat连接指定长度的字符串。

用法:

char str1[32] = “helloworld”; char str2[32] = “welcome”;

strcat(str1, str2);   //str1变成了helloworldwelcome

strncat(str1, str2, 2);   //str1变成了helloworldwe

strchr()查找字符的位置

7.函数原型

char *strchr(const char *s, int c);

char *strrchr(const char *s, int c);

作用:

查找字符c在字符串s中的位置,返回的是字符c的地址

strrchr其实r就是reverse的意思,反向查找字符c在字符串s中的位置。

用法:

char str1[32] = “helloworld”; char ch = 'o';

strchr(str1, ch);  //结果是第一个o的位置

strrchr(str1, ch) - str1;     //结果是6

笔试题13

问:以下程序输出的什么?

char str1[32] = “helloworld”;

printf(“%s\n”,strchr(str1, ‘w’);

答案是:world

因为strchr(str1, ‘w’)返回的是‘w’的地址,而printf打印的是%s字符串,因此输出为world。

笔试题14

问:以下程序输出的什么?

char str1[32] = “helloworld”;

printf(“%s\n”,strrchr(str1, ‘o’);

答案是:orld

因为从后往前查找,直到找到第一个o,因此结果输出也会把o字符的右边的字符也printf输出。

注意:使用任何一个字符串处理函数都要包含头文件:#include <string.h>

笔试题15

问:字符数组中在指定位置插入字符;(输入hello 3 x   输出hexllo)

我们可以把后面三个字符向后移动三位,然后将a放在第三个位置,然后将那三个字符赋值给后面三个位置。

参考代码:

#include <stdio.h>
#include <string.h>int main(){int num;int ch;char str[32]={0};int i;printf("输入 字符串 插入位置 插入字符\n");scanf("%s %d %c",str,&num,&ch);int length=strlen(str);//计算字符串长度for(i=0;i<length-num+1;i++){   str[length-i]=str[length-1-i];  //移动后三位字符}   str[num-1]=ch;//插入字符printf("%s\n",str);return 0;
}

运行结果:

以上就是这篇内容,如想了解更多,欢迎订阅本专栏!

如有问题可评论区或者私信留言,如果想要进交流群请私信!

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

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

相关文章

自动化机器学习——网格搜索法:寻找最佳超参数组合

自动化机器学习——网格搜索法&#xff1a;寻找最佳超参数组合 在机器学习中&#xff0c;选择合适的超参数是模型调优的关键步骤之一。然而&#xff0c;由于超参数的组合空间通常非常庞大&#xff0c;手动调整超参数往往是一项耗时且困难的任务。为了解决这个问题&#xff0c;…

C语言 | Leetcode C语言题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(char* a, char* b) {reserve(a);reserve(b);int len_a strlen(a), len_b st…

性能优化(一):ArrayList还是LinkedList?

引言 集合作为一种存储数据的容器&#xff0c;是我们日常开发中使用最频繁的对象类型之一。JDK为开发者提供了一系列的集合类型&#xff0c;这些集合类型使用不同的数据结构来实现。因此&#xff0c;不同的集合类型&#xff0c;使用场景也不同。 很多同学在面试的时候&#x…

大厂案例 - 通用的三方接口调用方案设计(中)

文章目录 Pre阿里云华为云【AK和SK生成方案】最佳实践1. 创建API密钥管理系统2. 生成AK和SK3. 存储和管理AK和SK4. 提供API密钥分发机制5. 安全性6. 其他注意事项 DB Model Design表结构Next考虑其他建议 API接口设计指导1. 使用POST作为接口请求方式2. 客户端IP白名单3. 单个接…

【研发管理】产品经理知识体系-产品创新流程

导读&#xff1a;产品创新流程是一个系统性的过程&#xff0c;旨在通过创造和引入新的产品或改进现有产品来满足市场需求、解决用户问题或实现竞争优势。 目录 1、产品创新引论 2、决策基本框架 3、模糊前端 4、产品创新流程模型概论 5、门径管理流程 6、并行工程和集成产…

Java与Go:并发

在此之前&#xff0c;我们先要明白什么是并发&#xff1f;为什么要并发编程&#xff1f; 在计算机中&#xff0c;同一时刻&#xff0c;只能有一条指令&#xff0c;在一个CPU上执行 后面的指令必须等到前面指令执行完才能执行&#xff0c;就是串行。在早年CPU核心数还少的时候倒…

Android版本依赖Version catalog

曾经我们使用config.gradle文件进行版本依赖配置&#xff0c;然后在project的build.gradle.kts中使用如下方式引入&#xff1a; apply(from "./config.gradle") 缺点&#xff1a;在project的module中引用无任何提示&#xff0c;无法跳转到指定引用 一、创建versio…

临床+康复的一体化治疗服务,把握黄金康复时间

随着我院脑血管病人&#xff0c;重症病人及骨科病人康复需求的日渐增多&#xff0c;为了使每位住院患者在治疗原发病的同时&#xff0c;第一时间接受到康复治疗&#xff0c;提高病人的生活质量&#xff0c;降低致残率&#xff0c;我院康复治疗科在院领导的大力支持下&#xff0…

C语言之递归函数、例题详解以及注意事项

目录 前言 一、递归的概念 二、递归例题详解 例1&#xff1a;斐波那契数列 例2&#xff1a;求次方 例3&#xff1a;求各位数之和 例4&#xff1a;阶乘 例5&#xff1a;顺序打印 三、递归的注意事项 总结 前言 本文将和大家分享一些递归函数的相关知识&#xff0c;技巧…

EPAI手绘建模APP颜色、贴图、材质、样式

⑦ 颜色选择页面 1) 颜色环选色。 图 65 颜色选择器-颜色环 2) RGB选色。 图 66 颜色选择器-RGB 3) HSL选色。 图 67 颜色选择器-HSL 4) 国风颜色库选色。 图 68 颜色选择器-国风 5) CSS颜色库选色。 图 69 颜色选择器-CSS 6) 历史颜色&#xff1a;保存最近使用的多个颜色&…

vue快速入门(五十三)使用js进行路由跳转

注释很详细&#xff0c;直接上代码 上一篇 新增内容 几种常用的路由跳转方式演示 源码 App.vue <template><div id"app"><div class"nav"><!-- router-link 自带两个高亮样式类 router-link-exact-active和router-link-active区别&a…

3.SpringSecurity基本原理

SpringSecurity本质是一个过滤器链。十多个过滤器构成一个过滤器链。 这些过滤器在项目启动就会进行加载。每个过滤器执行放行操作才会执行下一个过滤器。 常见过滤器 FilterSecurityInterceptor 是一个方法级的权限过滤器&#xff0c;基本位于过滤器链的最底部。 Excepti…

Rust web简单实战

一、使用async搭建简单的web服务 1、修改cargo.toml文件添加依赖 [dependencies] futures "0.3" tokio { version "1", features ["full"] } [dependencies.async-std] version "1.6" features ["attributes"]2、搭…

HTML_CSS学习:CSS盒子模型

一、CSS中常用的长度单位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS中常用的长度单位</title><style>html{font-size: 40px;}#d1{/*第一种长度单位&…

开源模型应用落地-LangChain高阶-Tools工具-集成agents(四)

一、前言 LangChain 的 tools 是一系列关键组件&#xff0c;它们提供了与外部世界进行交互的能力。通过适当的使用这些组件&#xff0c;可以简单实现如执行网络搜索以获取最新信息、调用特定的 API 来获取数据或执行特定的操作、与数据库进行交互以获取存储的信息等需求。 本章…

安装vscode基础配置,es6基础语法,

https://code.visualstudio.com/ es6 定义变量 const声明常量&#xff08;只读变量&#xff09; // 1、声明之后不允许改变 const PI “3.1415926” PI 3 // TypeError: Assignment to constant variable. // 2、一但声明必须初始化&#xff0c;否则会报错 const MY_AGE /…

01-MySQL 基础篇笔记

一、MySQL 概述 1.1 数据库相关概念 数据库&#xff1a;&#xff08;DB&#xff1a;DataBase&#xff09; 存储数据的仓库&#xff0c;数据是有组织的进行存储 数据库管理系统&#xff1a;&#xff08;DBMS&#xff1a;DataBase Management System&#xff09; 操作和管理数…

java spring 09 Bean的销毁过程

1.Bean销毁是发送在Spring容器关闭过程中的 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) context.getBean("userService");userService.test();// 容器关闭cont…

手撕spring框架(5)

手撕spring框架(5) 相关系列 手撕spring框架&#xff08;1&#xff09; 手撕spring框架&#xff08;2&#xff09; 手撕spring框架&#xff08;3&#xff09; 手撕spring框架&#xff08;4&#xff09; 这是本专题最后一节了&#xff0c;主要是讲述自定义一个注解&#xff0c;实…

14_Scala面向对象编程_属性

属性 1.类中属性声明 // 1.给Scala声明属性&#xff1b;var name :String "zhangsan"val age :Int 302.系统默认赋值 scala由于初始化变量必须赋值&#xff0c;为了解决此问题可以采用下划线赋值&#xff0c;表示系统默认赋值 , –但是此方法局限于变量&…