寒假作业Day 04

2024-03-03 21:04
文章标签 04 day 寒假作业

本文主要是介绍寒假作业Day 04,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

寒假作业Day 04

一、选择题

在这里插入图片描述

首先我们分析一下,char *str[3]是字符指针数组,其三个字符指针分别指向"stra",“strb”,“strc”,而char *p则是字符指针,被赋值stra字符串的首地址,所以一开始输出的是stra,而p++之后则是跳过一个字符的位置,输出tra,最后输出ra
故输出结果为stra tra ra

2、下列代码输出的结果是什么( )

#include <stdio.h>
int main() {
int m[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
int(*p)[4] = (int(*)[4])m;
printf("%d", p[1][2]);
return 0;
}

首先创建了一个整形数组m,存储了10个元素;

3、下列程序的输出结果是( )

int main()
{char p1[15]="abcd", *p2="ABCD", str[50]="xyz";strcpy(str + 2, strcat(p1+2, p2+1));printf("%s", str);return 0;
}

strcpy是一个拷贝函数,用于复制一个字符串到另一个字符串后,strcat则是一个拼接函数,将两个函数拼接起来
p1+2的位置在cd,而p2+1则是BCD,所以strcat的结果就是cdBCD,而str+2的位置则是z,拷贝则是从z的位置开始,于是z变成cdBCD,所以最后str就变成了xycdBCD

在这里插入图片描述

A:错误。字符串不可以用关系运算符进行大小比较,而是strcmp
B:错误。返回的是字符串中的元素个数,而不是内存大小
C: 正确。C语言标准库中提供了一系列字符串处理函数(如strcpy, strcat, strlen等),但并没有为字符串定义特殊的运算符来进行整体操作。字符串在C语言中通常是通过字符数组来表示的,对字符串的操作主要通过这些库函数来实现。
D: 错误。当拼接两个字符串时,结果字符串占用的内存空间应该是两个原串长度之和再加上1(为了存储结尾的空字符\0)。如果原句指的是两个原串各自占用的内存块大小的和,那么这并不准确,因为拼接后的字符串需要一个连续的内存空间来存储,这个空间大小等于两个原串字符数总和加1。

5、程序的结果是什么( )

#include<stdio.h>
char* f(char* str, char ch)
{char* it1 = str;char* it2 = str;while(*it2 != '\0'){while (*it2 == ch){it2++;}*it1++ = *it2++;}return str;
}
int main() 
{char a[10];strcpy(a, "abcdcccd");printf("%s", f(a, 'c'));return 0;
}

先看主函数,strcpy,字符数组a中copy了abcdcccd8个元素,故a中的元素是就是abcdcccd,接下来我们分析f这个函数
it2与it1指针都是指向str函数的首地址,外面套一个while循环,当it2走向str的结尾时结束;而里面嵌套的一个循环,则是在*it2指向的元素==ch时才会触发it2++,而一直会实现的代码是it2当前位置的元素赋值给it1,并两个都向前走。最后it2走到结尾时,返回str。
现在我们看看f(a,‘c’),str就是abcdcccd的首地址,ch=‘c’,it2走到c的时候,it2会额外++,我们把过程都详细说说

it2a   b   c   d   c   c   c   d
it1it2a   b   c   d   c   c   c   dit1it2a   b   c   d   c   c   c   dit1it2a   b   d   d   c   c   c   dit1it2a   b   d   d   c   c   c   dit1it2a   b   d   d   c   c   c   d	\0it1

it2最后走到\0结束,而最后的数组变成了这个样子,所以最后输出的结果就是abddcccd

二、编程题

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include<string.h>int main() {int n = 0;scanf("%d", &n);while (n) {char arr[100] = {0};scanf("%s", arr);int len = strlen(arr);if (len >= 10) {printf("%c%d%c\n", arr[0], len - 2, arr[len - 1]);}else{printf("%s\n",arr);}n--;}return 0;
}

我们来解析一下,要求是字母大于等于10个的称作长单词,这就需要用特殊方法来输出,前后是首字符和尾字符,中间是去掉首字符和尾字符的字符个数;而不是长单词的则是直接输出就可以了。
换到程序里,我们首先用scanf输入我们需要的字符串个数,并创建一个while循环用来处理之后的输出;创建一个arr数组用来存储我们的字符串,并用strlen截取长度,如果字符串长度大于10,则用特殊方法输出,如果不是,就直接输出,最后n–。

在这里插入图片描述

char* replaceSpaces(char* S, int length){  if (S == NULL) {  return NULL;//如果字符串为空}  int spaceCount = 0;  for (int i = 0; i < length; i++) {  if (S[i] == ' ') {  spaceCount++;//收集空格个数 }  }  int newLength = length + 2 * spaceCount; // 每个空格替换为 '%20'  char* a = (char*)malloc(sizeof(char) * (newLength + 1)); // +1 为 '\0'  if (a == NULL) {  perror("malloc fail");  return NULL;  }  char* p = a;//用来代替a进行处理的 while (*S && p - a < newLength) {  if (*S == ' ') {  *p++ = '%';  *p++ = '2';  *p++ = '0';  } else {  *p++ = *S;  }  S++;  }  *p = '\0'; // 添加字符串终止符  return a;  
}

这篇关于寒假作业Day 04的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/770909

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

day-50 求出最长好子序列 I

思路 二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1 解题过程 状态转换方程: 1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1) 2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo

[Day 73] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在健康管理中的應用實例 1. 引言 隨著健康管理需求的提升,人工智能(AI)在該領域的應用越來越普遍。AI可以幫助醫療機構提升效率、精準診斷疾病、個性化治療方案,以及進行健康數據分析,從而改善病患的健康狀況。這篇文章將探討AI如何應用於健康管理,並通過具體代碼示例說明其技術實現。 2. AI在健康管理中的主要應用場景 個性化健康建議:通過分析用戶的健康數據,如飲食、運動、睡眠等,AI可

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

[苍穹外卖]-04菜品管理接口开发

效果预览 新增菜品 需求分析 查看产品原型分析需求, 包括用到哪些接口, 业务的限制规则 业务规则 菜品名称必须是唯一的菜品必须属于某个分类下, 不能单独存在新增菜品时可以根据情况选择菜品的口味每个菜品必须对应一张图片 接口设计 根据类型查询分类接口 文件上传接口 新增菜品接口 数据表设计 设计dish菜品表 和 dish_fl