C语言小练习(伍)

news2024/9/28 10:17:00

练习:

  1. 利用指针变量将一个数组中的数据反向输出。
void renew(int *p,int len)
{
	for(int i = len - 1;i >= 0;i--)
	{
		printf("%d",*(p+i));
	}
}

int main()
{
	int a[5] = {1,2,3,4,5};
	int len1 = sizeof(a) / sizeof(int);
	
	renew(a,len1);
	
	return 0;
}

运行结果:

在这里插入图片描述

  1. 利用指针变量计算下标为奇数的数组的和;
#include <stdio.h>

//计算下标为奇数和的函数
int fun(int *p,int len)
{
	int sum = 0;
	
	for(int i = 0;i < len;i++)
	{
		if(i % 2 != 0)
		{
			sum += *(p+i);
		}
	}
	return sum;
}

int main()
{
	int arr[8] = {1,2,3,4,5,6,7,8};
	int len1 = sizeof(arr) / sizeof(int);
	
	printf("计算的结果为:%d",fun(arr,len1));
	
	return 0;
}

运行结果:

在这里插入图片描述

  1. 确认整型,字符型,浮点型指针变量的大小;
#include <stdio.h>

int main()
{
	int a = 5;
	float b = 6.0;
	
	int *p = &a;
	float *p2 = &b;
	const char *p3 = "c";
	
	printf("%zu,%zu,%zu",sizeof(p),sizeof(p2),sizeof(p3));
	
}

运行结果:

在这里插入图片描述

  1. 利用指针变量输出字符数组中的所有字符。
#include <stdio.h>

int main()
{
	char s1[] = {'H','E','L','L','O',' ','W','O','R','L','D'};
	char *p = &s1[0];
	int len = sizeof(s1) / sizeof(char);
	for(int i = 0;i < len;i++)
	{
		printf("%c",*(p+i));
	}
	return 0;
}

运行结果:

在这里插入图片描述

  1. 编写一个函数,用指针变量做参数,用于求出一个浮点型数组元素的平均值。
#include <stdio.h>
//计算平均值
float fun(float *p,int len)
{
	float sum = 0,avg;
	
	for(int i = 0;i < len;i++)
	{
		sum += *(p+i);
	}
	avg = sum / len;
	
	return avg;
}

int main()
{
	float arr[5] = {2.0,3.0,5.5,6.5,9.7};
	int len1 = sizeof(arr) / sizeof(float);
	
	printf("计算的结果为:%.2f",fun(arr,len1));
	
	return 0;
}

运行结果:

在这里插入图片描述

  1. 编写函数,要求用指针做形参,分别实现以下功能:

(1)求一个字符串长度

(2)在一个字符串中统计大写字母的个数

(3)在一个字符串中统计数字字符的个数

#include <stdio.h>

//统计大写字母个数的函数
char fun(char *p,int len)
{
	int k = 0;
	for(int i = 0;i < len;i++)
	{
		if(*(p+i) >= 65 && *(p+i) <= 90) k++;
		
	}
	return k;
}
//统计小写字母个数的函数
char fun1(char *p,int len)
{
	int r = 0;
	for(int i = 0;i < len;i++)
	{
		if(*(p+i) >= 97 && *(p+i) <= 122) r++;
		
	}
	return r;
}
int main()
{
	char arr[9] = {'A','B','C','D','e','f','g','1','5'};
	int len1 = sizeof(arr) / sizeof(char);
	int n,n2;
	
	n2 = fun(arr,len1);
	n = len1 - fun(arr,len1) - fun1(arr,len1);
	
	printf("字符串的长度为%d,大写字母的个数为%d,数字字符的个数为%d",len1,n2,n);
	
	return 0;
}

运行结果:

在这里插入图片描述

  1. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换): int(*p) [N]
#include <stdio.h>

// 转置函数
void fun(int (*p)[3], int len1, int len2) 
{
    int temp[len1][len2]; // 临时矩阵来存储转置后的结果

    // 转置矩阵
    for (int i = 0; i < len1; i++) 
	{
        for (int j = 0; j < len2; j++) 
		{
            temp[j][i] = p[i][j]; // 将元素放入临时矩阵
        }
    }

    // 打印转置后的矩阵
    for (int i = 0; i < len2; i++) 
	{
        for (int j = 0; j < len1; j++) 
		{
            printf("%d ", temp[i][j]);
        }
        printf("\n");
    }
}

int main() 
{
    int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int len1 = sizeof(arr) / sizeof(arr[0]);
    int len2 = sizeof(arr[0]) / sizeof(int);

    printf("转置的结果为\n");

    fun(arr, len1, len2);

    return 0;
}

运行结果:

在这里插入图片描述

  1. 编写函数,要求用指针做形参,实现统计二维数组上三角中的0 的数量:
#include <stdio.h>

int fun(int (*p)[4],int len1,int len2)
{
	int sum = 0;
	
	for(int i = 0;i < len1;i++)
	{
		for(int j = 0;j < len2;j++)
		{
			if(j > i && i == i && p[i][j] == 0)
			{
				sum++;
			}
		}
	}
	
	return sum;
}

int main()
{
	int arr[4][4] = {{1,2,3,0},{5,0,7,0},{9,0,1,0},{3,0,5,6}};
	int len1 = sizeof(arr) / sizeof(arr[0]);
	int len2 = sizeof(arr[0]) / sizeof(int);
	
	printf("上三角中0的个数为%d",fun(arr,len1,len2));
	
	return 0;
}

运行结果:

在这里插入图片描述

  1. 编写一个指针函数,返回二维数组中最大元素的地址。
#include <stdio.h>

int *fun(int arr1[][3],int len1,int len2)
{
	int max = 0;
	int *fun1 = &max;
	
	for(int i = 0;i < len1;i++)
	{
		for(int j = 0;j < len2;j++)
		{
			if(arr1[i][j] > max)
			{
				max = arr1[i][j];
			}
		}
	}
	return fun1;
}
	
int main()
{
	int arr[2][3] = {1,2,3,4,5,6};
	int len1 = sizeof(arr) / sizeof(arr[0]);
	int len2 = sizeof(arr[0]) / sizeof(int);
	int *n = fun(arr,len1,len2);
	
	printf("最大元素%d的地址为:%p",*n,n);
	
	
	return 0;
}

运行结果:

在这里插入图片描述

1)定义整形变量i; int i;

2)p为指向整形变量的指针变量; int *p;

3)定义整形一维数组p,它有n 个整形元素; int p[n];

4)定义一维指针数组p,它有n个指向整形变量的指针元素; int p[n];

5)定义p为指向(含有n个整形元素的一维数组)的指针变量;*int(*p)[n];

6)p为返回整形函数值的函数; int p();

7)p为返回一个指针的函数,该指针指向整形数据; int* p();

8)p为指向函数的指针变量,该函数返回一个整形值; int(*p)();

9)p是一个指向整形指针变量的指针变量; int **p;

int i;

int *p;

#define n 10  
int arr[n];

int *p[n];

int (*p)[n];

int p();

int* p();

int (*p)();

int **p;
  1. 动态申请一个具有10个float类型元素的内存空间,从一个已有的数组中拷贝数据,并找出第一次出现 12.35 的下标位置,并输出。
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
#include <math.h> 
 
int main()  
{  
    float arr[10] = {1.2, 1.5, 1.6, 12.35, 0, 0, 0, 0, 0, 0}; // 初始化所有元素以避免未定义行为  
    float *p = (float*)malloc(10 * sizeof(float));  
  
    if (p == NULL) 
	{  
        printf("内存分配失败\n");  
        return 1;  
    }  
  
    // 拷贝所有元素,包括前四个  
    memcpy(p, arr, 10 * sizeof(float));  
  
    int index = -1; // 初始化下标为-1,表示未找到  
    for (int i = 0; i < 10; i++) 
	{  
        if (fabs(*(p + i) - 12.35) < 0.0001) 
		{ // 使用fabs函数比较浮点数  
            index = i;  
            break;  
        }  
    }  
  
    if (index != -1) 
	{  
        printf("12.35首次出现的下标为:%d\n", index);  
    } else {  
        printf("12.35未找到\n");  
    }  
  
    free(p);  
    p = NULL;  
  
    return 0;  
}

运行结果:

在这里插入图片描述

  1. 动态申请一个整型数组,并给每个元素赋值,要求删除第3个元素;
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int *p = (int*)malloc(5 * sizeof(int));
	
	if(!p)
	{
		puts("内存分配失败!");
	}
	
	printf("请输入5个值\n");
	
	for(int i = 0;i < 5;i++)
	{
		scanf("%d",&p[i]);
	}

	for(int i = 2;i < 4;i++)
	{
		p[i] = p[i + 1];
	}
	
	int *temp = (int*)realloc(p,4 * sizeof(int));
	if(!temp)
	{
		printf("内存再分配失败!");
		free(p);
		return 1;
	}
	
	p = temp;

	printf("删除后的数组为\n");
	for(int i = 0;i < 4;i++)
	{
		printf("%2d",p[i]);
	}
	
	free(p);
	
	p = NULL;
	
	return 0;
}

运行结果:

在这里插入图片描述

  1. 动态申请一个整型数组,并给每个元素赋值,要求在第4个元素后插入100;
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int *p = (int*)malloc(5 * sizeof(int));
	
	if(!p)
	{
		printf("内存申请失败!");
	}
	
	//数组赋值
	printf("请输入5个数\n");
	for(int i = 0;i < 5;i++)
	{
		scanf("%d",&p[i]);
	}
	
	//内存重新分配
	int *temp = (int*)realloc(p,6 * sizeof(int));	
	if(!temp)
	{
		printf("内存再分配失败!");
		
		free(temp);
		return 1;
	}
	p = temp;
	//存储值
	for (int i = 5; i > 4; i--) 
	{  
        p[i] = p[i - 1];
    }  
    p[4] = 100;
	//打印输出
	printf("插入后的数组为\n");
	for(int i = 0;i < 6;i++)
	{
		printf("%4d",p[i]);
	}
	//内存释放
	free(p);
	p = NULL;
	
	return 0;
}

运行结果:

在这里插入图片描述

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

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

相关文章

AI文生图新纪元:FLUX.1领衔,多款顶尖模型汇聚趋动云社区

前言 近期&#xff0c;SD(Stable Diffusion)原班人马(跳槽后新成立团队——Black Forest Lab)开源模型 FLUX.1&#xff0c;或成文生图模型新霸主&#xff01; FLUX.1 系列包含 pro、dev、schnell 3 个模型。主要在文字生成、复杂指令遵循和人手生成上具备优势。 FLUX.1pro&a…

爆学C++之类和对象(上)

1.类的定义 类定义格式 • class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。 • …

IDEA中设置类和方法的注释

分两步设置&#xff1a; 第一个设置是创建类的时候自动加的注解 第二个设置是快捷键为方法增加的注解 类的时候自动加的注解设置 注释模版 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end /** * Description: TODO * Auth…

IOPaint部署,在服务器Ubuntu22.04系统下——点动科技

这里写目录标题 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表&#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有驱动2.3 安装驱动2.4 安装CUDA2.5 环境变量配置 二、安装miniconda环境…

2024年第九届机器人与自动化工程国际会议(ICRAE 2024)即将召开!

2024年第九届机器人与自动化工程国际会议(ICRAE 2024)将于11月15-17日在新加坡举办。ICRAE 2024会议旨在为机器人与自动化工程等领域的专家学者建立一个广泛有效的学术交流平台&#xff0c;以便让参会人员及时了解行业发展动态、掌握最新技术&#xff0c;促使我们快速、准确地解…

在scss中如何使用hover(Vue项目)

在scss中如何使用hover&#xff08;Vue项目&#xff09; 最近在Vue项目中&#xff0c;想实现在鼠标悬浮时&#xff0c;修改鼠标指向的模块样式&#xff0c;但使用的是scss&#xff0c;写法是什么样的呢&#xff1f; 效果图&#xff1a; 实现代码&#xff1a; .content {widt…

Android系统和开发--安全性和权限管理 SELinux 策略 安全架构

学习android权限知识 SElinux chmod -R 777 ./ setenforce 0 adb root su fastboot oem at-unlock-vboot adb disable-verity Android权限 Android系统是基于Linux内核构建的&#xff0c;因此它继承了Linux的权限管理机制。Android应用需要通过声明权限来访问系统的某些功能&…

使用docker compose一键部署redis服务

使用docker compose一键部署redis服务 1、创建安装目录 mkdir /data/redis/ -p && cd /data/redis2、创建docker-compose.yml文件 version: 3 services:redis:image: registry.cn-hangzhou.aliyuncs.com/xiaopangpang/redis:7.0.5container_name: redisrestart: al…

Cpython解释器下实现并发编程——多进程、多线程、协程、IO模型

一、背景知识 进程即正在执行的一个过程。进程是对正在运行的程序的一个抽象。 进程的概念起源于操作系统&#xff0c;是操作系统最核心的概念&#xff0c;也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 一&#xff09…

专利审查信息查询

1 登录国知局 国家知识产权局 政务服务平台 (cnipa.gov.cn) 进入网上办事 2 中国及多国专利审查信息查询 3 输入条件 弹出窗口 下载。 我们学校没有授权电子申请&#xff0c;没有办法&#xff0c;得自己关注&#xff01;

MySQL-进阶篇-存储引擎

文章目录 1. MySQL 的体系结构1.1 连接层1.2 服务层1.3 存储引擎层1.4 存储层 2. 存储引擎2.1 存储引擎简介2.2 查看数据库支持的引擎2.3 指定存储引擎2.4 InnoDB 引擎2.4.1 InnoDB 的特点2.4.2 与 InnoDB 有关的磁盘文件2.4.3 InnoDB 的逻辑结构 2.5 MyISAM 引擎2.5.1 MyISAM …

虚拟机安装centos7-NAT网络模式安装

1、打开虚拟机&#xff0c;点击编辑&#xff0c;选择虚拟网络配置器 2、选择VMnet8的NAT类型 3、点击NAT设置&#xff0c;修改网关 4、点击应用及确定&#xff0c;如果你的子网IP及子网掩码没有的情况下&#xff0c;请优先设置 5、点击文件&#xff0c;选择新建虚拟机 6、选择典…

42、Python之面向对象:元类应用于定义检查、动态注入、插件注册

引言 在上一篇文章中&#xff0c;我们简单聊了一下Python中元类的概念&#xff0c;以及如何定义一个简单的元类。虽然&#xff0c;我们已经学会了定义元类&#xff0c;但是&#xff0c;相信不少刚接触Python的同学&#xff0c;大多会产生这样的疑问&#xff1a;这个不太好理解…

【Leetcode 1189 】 “气球” 的最大数量 —— 数组模拟哈希表

给你一个字符串 text&#xff0c;你需要使用 text 中的字母来拼凑尽可能多的单词 "balloon"&#xff08;气球&#xff09;。 字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "balloon"。 示例 1&#xff1a; 输入&#…

YOLOv5改进 | 融合改进 | C3融合重写星辰网络之Rewrite the Stars⭐【CVPR2024】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 改…

Positional Encoding | 位置编码【详解】

文章目录 1、位置编码的2种方案2、位置编码3、公式详解 &#xff1a; 绝对位置 、 相对位置4、代码4.1 代码14.2 代码2 1、位置编码的2种方案 transformer的作者刚开始说固定的位置编码和可学习的位置编码的效果是差不多的&#xff0c;后来证明可学习的位置编码没有太大的必要&…

聊一下订单超时自动关闭的几种方式以及使用场景

订单超时自动关闭的本质其实是一种延时的功能实现&#xff0c;具体实现方式有很多种&#xff0c;但是我们方式的选择是需要结合业务场景的&#xff0c;没有更好的方案&#xff0c;只有更适合的方案&#xff0c;所以我们必须要结合自己的实际业务&#xff0c;以及业务的后续发展…

政务大数据解决方案(六)

政务大数据解决方案通过构建全面的数据集成平台&#xff0c;将来自不同政府部门和公共服务领域的多维度数据汇聚起来&#xff0c;运用先进的数据分析和人工智能技术进行深度挖掘与预测&#xff0c;从而为政府提供实时、精准的信息支持&#xff0c;优化决策流程&#xff0c;提高…

工业4.0下的防勒索病毒策略:主机加固在工控机防病毒中前行

MCK主机加固产品是一款专注于数据安全解决方案的软件&#xff0c;它在防勒索病毒和工控机防病毒方面具备一系列独特的功能和优势。 防勒索病毒方面&#xff1a; 内核级签名校验技术&#xff1a;MCK系统通过这项技术对操作系统启动及加载的所有模块进行可信认证&#xff0c;确…

电脑只有一个盘怎么分区?单盘电脑的解决方案

在现代计算机使用中&#xff0c;硬盘分区是一个重要的环节&#xff0c;它有助于我们更好地管理数据、提高系统运行效率&#xff0c;并在一定程度上保护数据的安全。 然而&#xff0c;当我们购买了一台新电脑后发现电脑里只有一个硬盘分区&#xff0c;这时候我们可能就需要对电…