C语言刷题(1)----指针数组

news2024/11/25 22:43:08

下面指针选题来源于教材、牛客网。

1.键盘输入一个字符串,编写代码获取字符串的长度并输出,要求使用字符指针实现。
示例:
输入:
helloworld
返回值:
10

代码实现

#include<stdio.h>
int main (void)
{
	char str[128]={0};//给字符串数组初始化为一个空字符串
	char *p=str;int i;
	printf("请输入一个字符串:\n");
	gets(str);//将从键盘输入的字符串存入到str;
	for (i=1;*p!=0;i++)
		p++;
	printf("%d",i-1);
	return 0;
}
在这个题目中,循环是一个关键。可能写成while循环更好理解。当p所指向的地址的内容不为空,即*p!=0时,这时计数器计一个数,然后指针移动到字符串数组的下一个元素。
#include<stdio.h>
int main (void)
{
	char str[128]={0};//给字符串数组初始化为一个空字符串
	char *p=str;int i=0; //此时注意i初始化为0
	printf("请输入一个字符串:\n");
	gets(str);//将从键盘输入的字符串存入到str;
	while(*p!=0)
	{
		i+=1;
		p++
	}
	printf("%d",i-1);
	return 0;
}

键盘输入一个长度为len的字符串(1=<len<30),再输入一个正整数m(1=<m<=30),将此字符串中从第m个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针处理字符串。
示例:
输入:
helloworld
返回值:
world

代码实现

#include <stdio.h>
int main (void)
{
	char str[30]={0};//将str初始化为一个空字符串
	char *p;
	int m;
	printf("请输入一个字符串:\n");
	gets(str);
	printf("请输入一个正整数:\n");
	scanf("%d",&m);
	p=str+m-1;//第m个字符,它是第[m-1](编号)个元素,地址是首地址+编号,即str+m-1
	while(*p!=0)
	{
		printf("%c",*p);//依次对第m个元素之后进行输出
		p++;
	}
	printf("\n");
	return 0;
}

编写一个函数,实现两个整数的互换,要求采用指针的方式实现。
示例:
输入:
2
3
返回值:
3 2

#include <stdio.h>
void swap(int *p,int *q);
int main (void)
{
	int a,b,*p=&a,*q=&b;
	scanf("%d%d",&a,&b);
	swap(p,q);
	printf("a=%d,b=%d",a,b);
	return 0;
}
void swap(int *p,int *q)//函数功能实现两个数的交换
{
	int t;
	t=*p;
	*p=*q;
	*q=t;
}
实现两个数的互换,不能通过return返回值实现。因为通过函数return,只能得到一个返回值。 两个数互换,实际上就是对两个变量重新赋值,只不过赋的值是特殊的(另一个数)。
若想通过被调函数改变主调函数中变量的值,就使用指针做函数形参,把主调函数中要改变的变量的地址传递给指针,在被调函数中改变形参指针所指向的变量的值。
```c #include

键盘随机输入6个整数,将这些数据保存到数组中,利用指针遍历数组中的元素并打印。
示例:
10
20
30
40
50
60
返回值:
10 20 30 40 50 60

代码实现

#include <stdio.h>
int main (void)
{
	int a[6]={0},i;\\给数组完成初始化
	int *p=a;\\数组名即数组首元素的地址
	printf("Please input 6 integer numbers:\n");
	for (i=0;i<6;i++)
		scanf("%d",&*(p+i));\\给数组元素赋值
	for (i=0;i<6;i++)
		printf("%d\t",*(p+i));\\依次输出
	return 0;
}
我的一些改进: 关于数组元素的赋值 scanf是输入,它的参数应该是一个指针即地址,表示把输入的值存放在改地址中。
	for (i=0;i<6;i++)
	{
		scanf("%d",p);   \\给数组元素赋值
		p++;	
	}

在这里插入图片描述

#include<stdio.h>
int cal(int n,int*p);
int main(void)
{
    int n,a[50]={0},sum=0,i;\\定义数组,保证数组的长度。\\并将数组元素全部初始化为0
    scanf("%d",&n);
    for (i=0;i<n;i++)\\对数组元素进行重新赋值
    scanf("%d",&a[i]);
    for (i=0;i<n;i++)\\将数组中的重新赋过值的元素依次加到sum中
    sum+=a[i];
    printf("%d",sum);
    return 0;

}
这个题目中,不知道数组具体的长度(不必过度纠结),可以将数组的长度设置的适当,保证数据不会溢出即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb0f804f99c24215ad570f635bf67e6e.png)

代码实现

#include<stdio.h>
int main (void)
{
	int a[50]={0},n,x,i,k=0;
	printf("请输入一个整数\n");
	scanf("%d",&n);
	printf("请输入这%d个数:\n",n);
	for (i=0;i<n;i++)
		scanf("%d",&a[i]);
	printf("请输入要删除的整数:\n");
	scanf("%d",&x);
	for (i=0;i<n;i++)
		if (a[i]!=x)
		{
			a[k]=a[i];
			k++;
		}
	for (i=0;i<k;i++)
		printf("%d\t",a[i]); 
	return 0;
}

对于这个删除指定数字后再输出数组序列的题目,刚开始接触理解这个题目时,我的想法是再建立一个和a相同长度的数组b,然利用循环对数组a中的每一个元素(i=0 to n)进行遍历,若不是要删除的元素,则将这个元素移到数组b中,数组b的下标从0开始,依次被赋值(直到k),然后将数组b中的元素打印出来。
听过老师的讲解,这个数组b也可以是它自己,节省内存空间。即对数组a再重新对它赋值。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0453e437cb664df6b1f53329ccf1048b.png)
#include<stdio.h>
int main (void)
{
	int n,a[50]={0},x,i,index;
	printf("请输入一个整数n:\n");
	scanf("%d",&n);
	printf("请输入%d个整数:\n",n);
	for (i=0;i<n;i++)
	scanf("%d",&a[i]);
	printf("请输入一个想插入的整数:\n");
	scanf("%d",&x);
	if (x<a[0] ||x==a[0])
	{
		a[0]=x;
		for (i=1;i<=n;i++)
			a[i]=a[i-1];
	}
	else if (x>a[n-1] || x==a[n-1])
	{
		a[n]=x;
	}
	else
		for (i=0;i<n;i++)
			if (x>=a[i] && x<a[i+1])
			{
				a[i+1]=x;
				index=i+1;
				for (i=n;i>index;i--)
					a[i]=a[i-1];
			}
	for (i=0;i<=n;i++)
		printf("%d",a[i]);
	return 0;
}

输入10个数,将第一个元素和最后一个元素交换,第二个元素与倒数第二个元素交换……

#include <stdio.h>
void swap(int *p,int *q);
int main (void)
{
	int a[10],*p,*head,*end;
	for (p=a;p<=a+9;p++)
		scanf("%d",p); //利用指针对数组中的每一个元素赋初值
	head=a;end=a+9;
	while(end>head)
	{
		swap(head,end);
		head--;
		end++;
	}
	for (p=a;p<a+10;p++)
		printf("%d",*p);
	return 0;
}
void swap(int *p,int *q)//函数功能实现两个数的交换
{
	int t;
	t=*p;
	*p=*q;
	*q=t;
}

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

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

相关文章

117-Linux_数据库_事务

事务 一.什么是事务?二.事务的四大特性1.原子性(atomicity)2.一致性(consistency)3.隔离性(isolation)4.持久性(durability) 三.隔离级别1.READ UNCOMMITTED 未提交读2.READ COMMITTED 提交读3.REPEATABLE READ 可重复读4.SERIALIZABLE 可串行化5.查看隔离级别(1)查看当前会话…

HTML5 FormData 方法介绍

XMLHttpRequest 是一个浏览器接口&#xff0c;通过它&#xff0c;我们可以使得 Javascript 进行 HTTP (S) 通信。XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式。2008年 2 月&#xff0c;XMLHttpRequest Level 2 草案提出来了&#xff0c;相对于上一代&#…

MySQL之约束讲解

1. 主键约束 主键约束要求列的数据唯一&#xff0c;并且不能为空。 主键能够唯一地标识表中的一条记录。 主键和记录之间的关系如同身份证和人之间的关系&#xff0c;它们之间是一一对应的。 1.1 单字段主键 直接在定义列的时候指定主键即可。 create table temp1( num int …

高通 Android 13 兼容extfat模式

Android本身不支持extfat格式 需要通过nofuse 打kernel补丁方式去实现 1、kernel/msm-4.19/arch/arm64/configs/vendor/device-perf_defconfig 增加 diff --git a/kernel/msm-4.19/arch/arm64/configs/vendor/device-perf_defconfig b/kernel/msm-4.19/arch/arm64/configs/ve…

导航栏模糊背景 out 了? 来看看这种模糊是否合你胃口? 并且学习 backdrop-filter

导航栏模糊背景 out 了? 来看看这种模糊是否合你胃口? 并且学习 backdrop-filter 传统情况模糊导航栏效果 &#x1f19a; 一种比较新的模糊导航栏效果(比如 Element-Plus 官网的导航栏效果, 有些类似密集点阵式) 导航栏要实现这个效果必须设置背景为有透明的颜色并且通过 ba…

Docker安装常用软件-Apollo

零&#xff1a;apollo概念介绍 官网网站&#xff1a;GitHub - apolloconfig/apollo: Apollo is a reliable configuration management system suitable for microservice configuration management scenarios. gitee网址&#xff1a;mirrors / ctripcorp / apollo GitCode …

家用电器-电磁炉加热原理及实现

目录 一、历史 二、基本原理 三、电路组成 3.1 控制电路 3.2 电源电路 3.3 电磁线圈及驱动电路 3.4 传感器电路 3.5 散热-风扇 四、电磁炉的核心部件 五、电磁炉特点 5.1 加热速度快 5.2 热效率高 5.3 加热的均匀性 六、国内电磁炉市场 参考资料 一、历史 电磁炉…

【Python入门】Python的判断语句(if else 语句)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

idea调优|maven调优

一、idea调优 1、idea启动优化 首先打开idea->Help->Edit Custom VM Options 按如下配置调整既有参数&#xff0c;参数数值不固定&#xff0c;需根据开发环境配置适当调整。针对如下配置#号后面的为注释&#xff0c;配置时需删除 # 启动堆大小 -Xms2048m # 最大运行堆…

SpringCloud-OpenFeign案例实战

关于Spring Cloud Open Feign的介绍可以参考这两篇博客 OpenFeign服务接口调用 使用Feign作为服务消费者 本博客参考gitee开源项目代码&#xff0c;结合自己的理解&#xff0c;记录下微服务场景下的使用。Talk is cheap. Show me the code&#xff01; 一、项目结构 这里使用…

FJUT第17届校赛题解

致歉 由于出题人经验不足&#xff0c;给大家带来不好的体验&#xff0c;实在抱歉。在赛中忘记开答疑&#xff0c;发不了公告&#xff0c;发现的问题已经在尽量修补。出现的问题如下&#xff08;均修复&#xff09;&#xff1a; 1.薛薛的简单数学题&#xff0c;没写spj&#xf…

【Python从入门到进阶】18、文件内容序列化和反序列化操作

接上篇《17、文件的读写操作》 上一篇我们学习了Python文件对象包含哪些方法&#xff0c;并学习了文件如何进行读、写、定位和删除。本篇我们来学习文件读取及写入数据序列化和反序列化的操作。 一、什么是序列化和反序列化 通过文件操作&#xff0c;我们可以将字符串写入到一…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_8.7p1(亲测无问题,建议收藏)

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 文章声明前述安装一些必要的命令&…

MySQL数据库学习(进阶篇)

1.存储引擎 1.1 MySQL体系结构 连接层 最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 服务层 第二层家口主要完成大多数的核心服务功能&#xff0c;如SQL接口…

二挡起步——pythonweb开发Django框架,前端原生+Django后端框架+python网络抓包(代替数据库数据)(附带小案例)

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

Java8新特性—Stream API

前言 Java 8引入了Stream API&#xff0c;这是一种新的API&#xff0c;可让开发人员更轻松地处理集合数据。 Stream API提供了丰富的操作&#xff0c;如过滤、映射、排序和规约。下面将对Stream API的基本语法、使用场景和示例进行介绍。 基本语法 Stream API是Java 8中处理…

玄子Share- Maven 3 安装配置教程(含安装包)

玄子Share- Maven 3 安装配置教程&#xff08;含安装包&#xff09; 下载 下载链接 官网 https://maven.apache.org/index.html 下载教程 进入 Maven 官网&#xff0c;点击左侧导航栏&#xff0c;Download下载。 下方选择安装类型&#xff0c;选择.zip后缀文件&#xff0c…

Linux系统通过Docker安装Elasticsearch、部署kibana

Docker安装和基本操作 一、安装Elasticsearch 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.拉取 docker pull elasticsearch:7.12.11.3.运行 运行docker命令…

8-3分治

引入 分治算法&#xff08;divide and conquer&#xff09;是五大常用算法(分治算法、动态规划算法、贪心算法、回溯法、分治界限法)之一。其实&#xff0c;很多人在平时学习中已经不知不觉就用到了分治算法&#xff0c;只是不知道那就是分治算法&#xff0c;今天&#xff0c;…

Word Embedding

One-hot-encoding 缺点 1.向量维度和向量个数很大&#xff0c;假设有1w个token的话&#xff0c;向量个数和维度就都是1w 2. 语义相近的词的向量并不相似 Word Embedding 核心思想&#xff1a;可以通过上下文理解单词的语义 predection-based方法 使用前一个单词预测下一个…