C语言指针基础题(二)

news2024/11/23 22:28:51

目录

  • 例题一
    • 题目解析及答案
  • 例题二
    • 题目解析及答案
  • 例题三
    • 题目解析及答案
  • 例题四
    • 题目解析及答案
  • 例题五
    • 题目解析及答案

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐓🏀 python

例题一

写一个函数打印arr数组的内容,不使用数组下标,使用指针。
arr是一个整形一维数组

题目解析及答案

这道题的核心就在于数组名是数组首元素地址,也就是*(arr+1)=arr[1]
详细可以看C语言深入理解指针(非常详细)(二)
方法一

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int* p = arr;
	int sz = sizeof(arr) / sizeof(int);
	for(int i=0;i<sz;i++)
	{
		printf("%d ", *(p + i));
	}
	return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/41234a3286624acaa07f5c850ae06052.png)

方法二

int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int* p = arr; 
    for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
    {
        printf("%d ", *p);  
        ++p;                 
    }
    
   	return 0;
}

在这里插入图片描述

例题二

写一个函数,可以逆序一个字符串的内容

题目解析及答案

方法一

void Reverse(char* str)
{
    char* left = str;
    char* right = str + strlen(str)-1;
    while(left < right)
    {
        char temp = *left;
        *left = *right;
        *right = temp;
        ++left;
        --right;
    }
}
int main()
{
    char str[] = "hello jack";
    Reverse(str);
    return 0;
}

在这里插入图片描述

这个方法其实就是找到字符串中左右字符的地址,通过解引用实现交换

注意:如果是在线OJ时,必须要考虑循环输入,因为每个算法可能有多组测试用例进行验证,参考以下main函数写法

方法二

int main()
{
    char str[101] = {0};
    while(gets(str))
    {
        Reverse(str);
        printf("%s\n", str);
        memset(str, 0, sizeof(str)/sizeof(str[0]));
    }
    return 0;
}

关于memset的实现在之前C语言内存函数有写过

例题三

用C语言在屏幕上输出以下图案:
在这里插入图片描述

题目解析及答案

这是一个对称图形,其中有图形由空格符号还有*号组成

号以奇数的规律变化,空格符号和号在同一排的总数加起来为13

通过图形规律可以知道上半图形中 *号可以以循环for(i=1;i<=13;i=i+2)来表示

对于空格符号,左半部分的规律是j<=(13-i)/2,j++,右半部分则是j>=(14-(13-i)/2)

方法一

int main()
{
	int i = 1, j = 1;
	for (i = 1; i <= 13; i = i + 2)
	{
		while (j <= 13)
		{
			if (j<=(13 - i) / 2 || j>=(14 - (13 - i) / 2))
			{
				printf(" ");
				j++;
			}
			else
			{
				printf("*");
				j++;
			}
		}
		printf("\n");
		j = 1;
	}
	for (i = 11; i >= 1; i = i - 2)
	{
		while (j <= 13)
		{
			if (j <= (13 - i) / 2 || j >= (14 - (13 - i) / 2))
			{
				printf(" ");
				j++;
			}
			else
			{
				printf("*");
				j++;
			}
		}
		printf("\n");
		j = 1;
	}
	return 0;
	}

在这里插入图片描述
方法二

int main()
{
	int line = 0;
	int i = 0;
	scanf("%d", &line);//输入7
	for(i=0; i<line; i++)
	{
		int j = 0;
		for(j=0; j<line-1-i; j++)
		{
			printf(" ");
		}
		for(j=0; j<2*i+1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	for(i=0; i<line-1; i++)
	{
		int j = 0;
		for(j=0; j<=i; j++)
		{
			printf(" ");
		}
		for(j=0; j<2*(line-1-i)-1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

例题四

求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5 ^3+3 ^3,则153是一个“水仙花数”。

题目解析及答案

我们用i来表示水仙花数,通过for循环来表示0到100000的水仙花数

为了知道水仙花数有多少位,我们需要用到一个while循环,循环判断条件位水仙花数的余数不为0,因此我们使用一个变了j来保存水仙花数i,然后再进行判断,既while(j%10)

而为了计算有多少位,我们需要对每次循环用count来记录,然后每次循环让水仙花数减少一位数,也就是count++,j=j/10

之后我们再让j重新等于i,来进行判断是否是水仙花数

我们用一个变量sum来计算每位数的n次方总和,也就是sum=sum+pow(j%10,count)

最后就是判断了

#include<math.h>
int main()
{
	int i = 0, j = 0, sum = 0,count=0;
		for (i = 0; i < 100000; i++)
		{
			j = i;
			while (j % 10)
			{
				count++;
				j = j / 10;
			}
			j = i;
			for (int k = count; k >= 0; k--)
			{
				sum = sum + pow(j % 10, count);//pow数计算一个数的次方是多少
				j = j / 10;
			}
			if (i == sum)
				printf("%d ", i);
			sum = 0;
			count = 0;
	    }
	return 0;
}

在这里插入图片描述
这道题for循环用的比较多,如果对for循环有疑惑的可以看我之前写的一篇文章for和do-while循环以及break和continue语句

例题五

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,

例如:2+22+222+2222+22222

题目解析及答案

我们可以看到aa只是在a10的基础上再加上a,也就是aa=a10+a,aaa=aa*10+a

int main()
{
	int n = 0,a=0,b=0,Sn=0;
	scanf("%d %d", &n,&a);
	b = a;
	for (int i = 0; i < n; i++)
	{
		Sn = Sn + b;
		b = b * 10 + a;
	}
	printf("%d", Sn);
	return 0;
}

在这里插入图片描述

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

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

相关文章

C++ Java 嵌入式选哪个,该走哪个方向?

看一下最近几年的C Java 嵌入式薪资水平 图片来源&#xff1a;牛客2023校招春季与秋季白皮书 总结一下各届平均值&#xff0c;供大家参考&#xff0c;整体上薪资还是能反应一定的供需关系。 浅浅分析下&#xff1a; C领跑&#xff0c;整体波动不大&#xff0c;主要因为岗位较…

C语言之基本数据类型和数

目录 算数类型和基本数据类型 基数 基数转换 由八进制数、十六进制数、二进制数向十进制数转换 由十进制数向八进制数、十六进制数、二进制数转换 二进制和十六进制的基数转换 在学习基本数据类型之前我们先来学习数。 算数类型和基本数据类型 在前面的学习中我们可以使用…

Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案

生产环境中热 key 处理 热 key 问题就是某一瞬间可能某条内容特别火爆&#xff0c;大量的请求去访问这个数据&#xff0c;那么这样的 key 就是热 key&#xff0c;往往这样的 key 也是存储在了一个 redis 节点中&#xff0c;对该节点压力很大 那么对于热 key 的处理就是通过热…

Source Tree回滚 重置 贮藏操作

回滚提交 source tree的回滚提交: 在执行该操作时将会对history中提交的指定节点直接进行回滚,将该节点执行的提交操作撤销(如当前节点是提交文件,执行回滚提交时将会删除该文件,如果当前节点的前面的节点对该节点内容进行修改后,执行回滚提交时需要执行冲突解决),同时生成一次…

【Axure高保真原型】能增删改的树形表格

今天和大家分享能增删改的树形表格的原型模板&#xff0c;包括展开、折叠、增加、修改、删除表格内容&#xff0c;那这个原型模板是通过中继器制作的&#xff0c;所以使用简单&#xff0c;只需要填写中继器表格&#xff0c;即可自动生成对应的树形表格。这个模板最高支持6级树形…

Prompt提示优化工具

在大模型使用过程中,Prompt尤为重要。一个好的Prompt可以解决很多的问题。那么如何撰写一个完美的Prompt? 下面汇总了一些Prompt工具,可以辅助日常Prompt的编写。 欢迎关注公众号 1. prompt perfect 可以自动优化已有的提示,比较多个模型的输出,运行智能体等。 https:…

操作系统复习资料【简答题】

分页和分段管理有何区别&#xff1f; 分页和分段都采用离散分配的方式&#xff0c;且都要通过地址映射机构来实现地址的转换&#xff0c;这是他们的共同点&#xff1b; 对于他们的不同点有三&#xff1a; 第一&#xff0c;从功能上看&#xff0c;也是信息的物理化单位&#…

想学精MySQL,得先捋一捋高可用架构

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Java实现机考程序界面

机考界面如下&#xff08;单选题&#xff09;&#xff0c;上方是题目状态&#xff0c;下方是题目&#xff0c;1/5/1是已做题目数量、总共题目数量和答对题目数量。 再看一下多选题的界面。 判断题的界面。 回答正确时的反馈&#xff0c;会给出用时。 回答错误时的反馈&#xff…

社会不教,精英不讲,坎儿还得自己过(揭秘人才成长规律)

推荐大家去看看天涯社区的精华帖子&#xff1a;《社会不教&#xff0c;精英不讲&#xff0c;坎儿还得自己过&#xff08;揭秘人才成长规律&#xff09;》 原出处天涯精华帖&#xff1a;《社会不教&#xff0c;精英不讲&#xff0c;坎儿还得自己过&#xff08;揭秘人才成长规律&…

多模态AI:技术深掘与应用实景解析

多模态AI&#xff1a;技术深掘与应用实景解析 在当今人工智能技术的快速发展中&#xff0c;多模态AI凭借其独特的数据处理能力&#xff0c;成为了科技创新的前沿。这项技术结合了视觉、听觉、文本等多种感知模式&#xff0c;开辟了人工智能处理和理解复杂信息的新纪元。本文旨…

SpringBootWeb入门、HTTP协议、Web服务器-Tomcat

目录 一、SpringBootWeb入门 二、HTTP协议 HTTP-请求协议 HTTP-响应协议 HTTP-协议解析 三、Web服务器-Tomcat 服务器概述 Tomcat 一、SpringBootWeb入门 直接基于SpringFramework进行开发&#xff0c;存在两个问题&#xff1a;配置繁琐、入门难度大 通过springboot就…

最新鸿蒙HarmonyOS4.0开发登陆的界面1

下载deveco-studio 说明一下&#xff0c;本人只是学习中&#xff0c;现在只是拿着vue及uniapp的经验在一点一点的折腾&#xff0c;不过现在看来&#xff0c;鸿蒙入门并不是很难。也许是自己没有深入下去。 https://developer.harmonyos.com/cn/develop/deveco-studio#download…

对比SPI、UART、I2C通信的区别与应用

SPI、UART、I2C通信是常用的数字通信协议&#xff0c;它们在不同的场景下有不同的应用。下面&#xff0c;我将分别介绍它们的特点、区别与应用。 SPI通信 SPI通信是一种串行同步通信协议&#xff0c;它的全称为“Serial Peripheral Interface”。SPI通信是一种单主多从的通信方…

Ubuntu22.04终端设置白底黑字

概要&#xff1a;有两种白底黑字 第一种&#xff1a; 第二种&#xff1a; 一、第一种白底黑字 1、打开偏爱 先点击终端右上角的三个短横线的按钮&#xff0c;在展开中选择Preferences 2、设置终端的顶部为light 3、设置白底黑字 默认是使用来自系统主题的颜色&#xff0c;我…

点评项目——用户签到模块

2023.12.13 通常app为了吸引用户每天登陆app&#xff0c;会设定一个签到模块&#xff0c;本章就来实现用户签到模块&#xff0c;包含签到功能和签到统计功能。 BitMap用法 通常使用二进制位来记录每个月的签到情况&#xff0c;签到记录为1&#xff0c;未签到记录为0。每一个bi…

tcp的聊天室

注意&#xff1a;要加库文件&#xff0c;服务端客户端都要加 network 客户端的头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket>//客户端类 #include <QMessageBox>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } Q…

js实现excel里面的PMT函数

// 辅助函数&#xff0c;保留两位小数function roundToTwoDecimal(value) {return Math.round(value * 100) / 100;}function calculatePMT(rate, nper, pv, fv, type) {// rate: 年利率// nper: 总期数// pv: 现值&#xff08;贷款或投资的初始金额&#xff09;// fv: 未来值&…

Leetcode—783.二叉搜索树节点最小距离【简单】

2023每日刷题&#xff08;五十八&#xff09; Leetcode—783.二叉搜索树节点最小距离 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ void dfs(struct TreeNode* roo…

Next.js ts redux/toolkit状态管理

目录 介绍 安装依赖 初始化store 1、在src下创建store文件夹&#xff0c; 2、创建最简单的slice切片 3、创建入口文件index.ts 4、创建hooks.ts 在_app.tsx中注入store tsx中使用store payload createAsyncThunk 效果 介绍 reduxjs/toolkit是Redux 官方提供的一个…