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

这篇具有很好参考价值的文章主要介绍了C语言刷题(1)----指针数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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++;	
	}

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

#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;

}
这个题目中,不知道数组具体的长度(不必过度纠结),可以将数组的长度设置的适当,保证数据不会溢出即可。
C语言刷题(1)----指针数组

代码实现

#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再重新对它赋值。
C语言刷题(1)----指针数组
#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个数,将第一个元素和最后一个元素交换,第二个元素与倒数第二个元素交换……文章来源地址https://www.toymoban.com/news/detail-435744.html

#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;
}

到了这里,关于C语言刷题(1)----指针数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】数组和指针刷题练习

    指针和数组我们已经学习的差不多了,今天就为大家分享一些指针和数组的常见练习题,还包含许多经典面试题哦! 一、求数组长度和大小 普通一维数组 字符数组 字符串数组 指向字符串的字符指针 二维数组 总节: 数组名的意义: sizeof(数组名),这里的数组名表示整个数

    2024年02月07日
    浏览(30)
  • LeetCode刷题系列之《双指针解数组》

    各位csdn的友友们好啊,今天阿博给大家分享几道leetcode上的经典数组题,通过这次的学习,相信友友们可以更全面的认识指针和数组🍉🍉🍉 一.题目描述 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。

    2023年04月26日
    浏览(30)
  • 【剑指offer刷题记录 java版】数组双指针 之 滑动窗口

    本系列文章记录labuladong的算法小抄中剑指offer题目 题目链接:https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/ 题目链接:https://leetcode.cn/problems/MPnaiL/ 题目链接:https://leetcode.cn/problems/VabMRr/ 题目链接:https://leetcode.cn/problems/wtcaE1/ 题目链接:https://leetcode.cn/pr

    2024年02月09日
    浏览(43)
  • 【剑指offer刷题记录 java版】数组双指针 之 其它题目

    本系列文章记录labuladong的算法小抄中剑指offer题目 题目链接:https://leetcode.cn/problems/XltzEq/ 题目链接:https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/ 题目链接:https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/ 题目链接:https://leetcode.cn/problems/he-wei-sde-

    2024年02月11日
    浏览(37)
  • 算法刷题营【Day2】:: 双指针算法应用:滑动窗口 :209. 长度最小的子数组

    本内容是笔者结合《代码随想录》总结所得,记录学习过程,分享知识! 目录: 1. 开篇例题:209. 长度最小的子数组 2. 题解参考 - - 2.1 方法一:暴力法 - - 2.2 方法二:滑动窗口 3. 方法思路点拨:滑动窗口 - - 3.1 直白解释 - - 3.2 本题思路点拨 4. 相关题集 1. 开篇例题:209. 长度

    2024年02月04日
    浏览(35)
  • 【C语言进阶】指针数组 —— 数组指针

    🎬 鸽芷咕 : 个人主页  🔥 个人专栏 : 《C语言进阶篇》 《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,前面我们已经把指针大部分内容给学完了,今天就给大家带来数组指针or指针数组!    ⛳️ 很多说这俩名字不是差不

    2024年02月14日
    浏览(26)
  • C语言 ——指针数组与数组指针

    目录 一、二维数组 二、指针数组 (1)概念  (2)书写方式 (3)指针数组模拟二维数组 三、数组指针 (1)概念 (2)使用数组指针打印一维数组  (3)模拟二维数组的传参 首先,我们要理解一下二维数组和指针变量之间的一些相关概念。 二维数组 : int arr [ 3 ][ 5 ]  

    2024年02月13日
    浏览(37)
  • C语言--指针详解(下)--字符指针、数组指针、指针数组、函数指针、函数指针数组(转移表)

    在C语言中有一种指针类型为字符指针 char*,常用其来表示字符,使用如下: 除了上述用法之外,还可以有以下的用法: 在上面的代码中,字符 \\\" hello word \\\"是常量字符串,将\\\"hello word\\\"放入 pstr 指针的实质是将第一个字符 “ h \\\" 的地址传递给了 pstr ,通过首字符 ” h \\\" 就可以访问

    2024年02月03日
    浏览(36)
  • 【go语言基础】指针数组和数组指针

    (1)指针数组: 存储指针的数组,也叫存储地址的数组,简单说就是存储地址的。 首先它是一个数组,数组中的元素都是指针(地址)。 (2)数组指针: 首先它是一个指针,存储的是指向数组的指针。 (1)指针数组 定义: 注意:首先是一个数组,将数组中的元素定义为

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包