C语言实验-数组、字符串以及指针

一:

求一个N×N矩阵主、次对角线上所有元素之和。矩阵输入、矩阵输出、矩阵对角线求和分别用三个子函数实现。(N的值由用户从键盘输入)

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void print(int(*arr)[3], int N)
{
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			printf("%d ", *(arr[i] + j));
		}
		printf("\n");
	}
	printf("\n");
}

void input(int(*arr)[3], int N)
{
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			scanf("%d", (arr[i] + j));
		}
	}
}

int fun(int (*arr)[3], int N)//指针数组的形式传参
{
	int ret = 0;
	for (int i = 0; i < N; i++)
	{
		ret += *(arr[i] + i);
	}
	return ret;
}

int main()
{
	printf("输入数组行列数:\n");
	int N = 0;
	scanf("%d", &N);
	int(*arr)[3] = (int(*)[3])malloc(sizeof(int) * N * N);//数组指针,[3]中的3没有任何意义,但是不能去掉
	printf("输入数组:\n");
	input(arr, N);
	print(arr, N);

	printf("对角线之和为%d", fun(arr, N));

	return 0;
}

二: 

编写程序,将一个数列实现循环右移一位。

例如:  输入数列的长度:6

输入原始数列:1  2  3  4  5  6

循环右移一位后变为:6  1  2  3  4  5

数列输入、数列输出、数列右移分别用三个子函数实现。(数列的个数由用户从键盘输入)

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void print(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

void input(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
}

void fun(int* arr, int N)
{
	int* arr2 = (int*)malloc(sizeof(int) * N);
	for (int i = 1; i < N; i++)
	{
		arr2[i] = arr[i - 1];
	}
	arr2[0] = arr[N - 1];
	print(arr2, N);
}

int main()
{
	printf("请输入数组长度:");
	int N = 0;
	scanf("%d", &N);
	int* arr = (int*)malloc(sizeof(int) * N);//动态开辟空间
	input(arr, N);
	fun(arr, N);

	return 0;
}

三:

在2题的基础上,改写程序,实现数列右移n位。数列输入、数列输出、数列右移分别用三个子函数实现。(数列的个数、右移的位数由用户从键盘输入)

例如:  输入数列的长度:6

输入原始数列:1  2  3  4  5  6

        输入右移的位数:3

循环右移3位后变为:4  5  6  1  2  3 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void print(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

void input(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
}

void fun(int* arr, int N, int a)
{
	int* arr2 = (int*)malloc(sizeof(int) * N);
	for (int i = a; i < N; i++)
	{
		arr2[i] = arr[i - a];
	}
	for (int i = 0; i < a; i++)
	{
		arr2[i] = arr[N - a + i];
	}
	print(arr2, N);
}

int main()
{
	printf("请输入数组长度:");
	int N = 0;
	scanf("%d", &N);
	int* arr = (int*)malloc(sizeof(int) * N);
	input(arr, N);
	printf("右移的位数:");
	int a = 0;
	scanf("%d", &a);
	fun(arr, N, a);


	return 0;
}

四: 

编写程序,删除数列中的某个数。数列输入、数列输出、数列删除分别用三个子函数实现。(数列、要删除的数值都由用户从键盘输入,有则删除——所谓删除就是后序的元素往前覆盖,无则提示“该数不存在。”)

例如:  输入数列的长度:11

输入原始数列:1  2  3  4  5  6  2  8  -5  2  7

        输入要删除的数: 2

删除以后的数列长度:8

删除以后的数列:1  3  4  5  6  8  -5  7

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void print(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
}

void input(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
}

void fun(int* arr, int N, int a)//N位数组长度 a为要删除元素
{
	int num = N;
	int* arr2 = (int*)malloc(sizeof(int) * N);
	int j = 0;
	int i = 0;
	while (j < N)
	{
		if (arr[j] == a)
		{
			j++;
			num--;
		}
		arr2[i++] = arr[j++];
	}
	printf("删除以后的数列长度:%d\n", num);
	print(arr2, num);
}

int main()
{
	printf("输入数组长度:");
	int N = 0;
	scanf("%d", &N);
	int* arr = (int*)malloc(sizeof(int) * N);
	input(arr, N);
	printf("输入要删除的数:");
	int a = 0;
	scanf("%d", &a);
	fun(arr, N, a);

	return 0;
}

五:

编写程序,将数列中大于平均值的元素往前放,小于平均值的数往后放。数列输入、数列输出、数列求平均值、数列重排分别用四个子函数实现。(数列长度由用户从键盘输入)

例如:  输入数列的长度:10

输入原始数列:1  5  15  23  7  9  19  10  -5  22

其平均值为:10.6

重排以后的数列:15  23  19  22  1  5  7  9  10  -5

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

void print(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{


		printf("%d ", arr[i]);
	}
	printf("\n");
}

void input(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
}

double average(int* arr, int N)
{
	int ret = 0;
	double sum = 0;
	for (int i = 0; i < N; i++)
	{
		sum += arr[i];
	}
	return sum / N;
}

void fun(int* arr, int N)
{
	int ave = average(arr, N);
	int i = 0;
	int j = N;
	while (j > i)//当i位置的数小于平均值,j位置的值大于平均值,交换i 和j指向的值
	{
		while (arr[j] < ave)
		{
			j--;
		}
		while (arr[i] > ave)
		{
			i++;
		}
		if (j > i)
		{
			int tmp = arr[i];
			arr[i] = arr[j];
			arr[j] = tmp;
		}
	}
}

int main()
{
	printf("输入数组元素个数:");
	int N = 0;
	scanf("%d", &N);
	int* arr = (int*)malloc(sizeof(int) * N * N);
	printf("输入数组:");
	input(arr, N);
	printf("其平均值为:%.1lf\n", average(arr, N));
	fun(arr, N);
	printf("重拍之后的数组:");
	print(arr, N);
	return 0;
}

六: 

编写子函数fun,其功能是将形参数列中小于平均值且最接近平均值的数返回,main函数负责输入、输出。

例如:   输入数列的长度:10

输入数列:46、30、32、40、6、17、45、15、48、26

         数列的平均值:30.50

         小于平均值且最接近平均值的数为:30

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void print(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{


		printf("%d ", arr[i]);
	}
	printf("\n");
}

void input(int* arr, int N)
{
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
}

double average(int* arr, int N)
{
	double sum = 0;
	for (int i = 0; i < N; i++)
	{
		sum += arr[i];
	}
	return sum / N;
}

int fun(int* arr, int N)
{
	double ave = average(arr, N);
	double gap = 0;
	int ret = arr[0];
	for (int i = 1; i < N; i++)
	{
		gap = fabs(arr[i] - ave);
		if (gap < fabs(ret - ave))
		{
			ret = arr[i];
		}
	}

	return ret;

}

int main()
{
	printf("输入数列的长度:");
	int N = 0;
	scanf("%d", &N);
	int* arr = (int*)malloc(sizeof(int) * N * N);
	printf("输入数组:");
	input(arr, N);
	printf("平均值为:%.2lf\n", average(arr, N));
	printf("小于平均值且最接近平均值的数为:%d", fun(arr, N));
	return 0;
}

七: 

编写程序,将用户输入的字符串中从第i个到第j个之间的字符逆序颠倒。(字符串、i、j的值都由用户从键盘输入)

例如: 输入字符串:abcdefgh

       输入i:3

       输入j:7

颠倒以后的字符串为:abgfedch

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void swap(char* ch1, char* ch2)
{
	char tmp = *ch1;
	*ch1 = *ch2;
	*ch2 = tmp;
}

void reverse(char* str, int i, int j)
{
	while (i < j)
	{
		swap(&str[i], &str[j]);
		i++;
		j--;
	}
}

int main()
{
	char str[50] = {0};//长度设为50
	printf("输入字符串:");
	scanf("%s", str);//输入
	int i = 0; int j = 0;
	printf("\n输入i:");
	scanf("%d", &i);
	printf("\n输入j:");
	scanf("%d", &j);
	reverse(str,i-1,j-1);
	printf("\n颠倒以后的字符串为:%s", str);
	return 0;
}

 

 八:

编写程序,删除字符串中的某个字符。(字符串、要删除的字符都由用户从键盘输入,有则删除——所谓删除就是后序的元素往前覆盖,无则提示“该字符不存在。”)

例如:  输入原始字符串:abcebacebaghbf

        输入要删除的字符: b

删除以后的字符串:aceaceaghf

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void fun(char *str,char a)
{
	char str1[50] = "\0";
	int i = 0;
	int j = 0;
	while (str[i] != '\0')
	{
		while(str[i] == a)
		{
			i++;
		}
		str1[j] = str[i];
		i++;
		j++;
	}
	str[++j] = '\n';
	for (int i = 0; i < j; i++)
	{
		str[i] = str1[i];
	}
}

int main()
{
	printf("输入字符串:\n");
	char str[50] = "\0";
	scanf("%s", str);
	getchar();
	char a = '\0';
	printf("输入要删除的字符: ");
	scanf("%c", &a);
	fun(str,a);
	printf("删除以后的字符串:%s",str);	
	return 0;
}

九:

编写程序,将一个数字字符串转换成面值相同的整数输出。(假设全是整数,不需要考虑小数情况)

例如:  输入数字字符串:21459     (这里输入的是一个字符串,放在一个char型数组里。)

        输出整数: 21459     (这里输出的是一个int型变量)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int fun(char *str)
{
	int ret = 0;
	int i = 0;
	while (str[i] != '\0')
	{
		ret = (str[i]-'0') + ret * 10;
		i++;
	}
	return ret;
}

int main()
{
	printf(" 输入数字字符串:\n");
	char str[50] = "\0";
	scanf("%s", str);
	getchar();

	
	printf("输出整数:%d", fun(str));
	return 0;
}

 

十: 

编写程序,将一个字符串中的数字字符串转换成对应的整数输出 (假设全是整数,不需要考虑小数情况)

例如:  输入字符串:abs123efe45sefe89sef

            输出整数:123  45  89       (输出的是3个整数)

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

void fun(char* str)
{
	int i = 0;
	printf("输出整数:\n");
	while (str[i] != '\0')
	{
		int ret = 0;
		int flag = 0;
		while (str[i] <= '9' && str[i] >= '0')
		{
			flag = 1;
			ret = str[i] - '0' + ret * 10;
			i++;
		}
		if (flag != 0)
		{
			printf("%d ", ret);
		}
		i++;
	}
}

int main()
{
	printf("输入字符串:\n");
	char str[50] = "\0";
	scanf("%s", str);
	getchar();
	fun(str);


	return 0;
}

取码点赞👍!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

添砖Java之路其一——Java跨平台原理,JRE与JDK(为什么要安装)。

目录 前言&#xff1a; Java跨平台工作原理简单的理解&#xff1a; JRE与JDK&#xff1a; 前言&#xff1a; 最近又开始学Java了&#xff0c;所以又开一个板块来记录我Java的笔记。 Java跨平台工作原理简单的理解&#xff1a; 简单概括&#xff1a;简单来说Java跨平台原理…

【喜讯】热烈祝贺蒋林华教授当选玻利维亚国家科学院院士

2024年4月29日&#xff0c;人工智能领域知名专家蒋林华教授受邀出席北京中关村论坛侨海创新发展平行论坛&#xff0c;在玻利维亚国家参议院参议员马马尼纳瓦罗希拉里昂&#xff08;Mamani Navarro Hilarion&#xff09;和拉莫斯索帕萨桑托斯&#xff08;Ramos Socpaza Santos&a…

2024年51cto下载的视频怎么导出

如果你喜欢在51cto上观看各种专业技术视频&#xff0c;那么你可能想将喜欢的视频保存到本地设备中&#xff0c;以便随时随地观看。今天&#xff0c;我们就来探讨一下如何在2024年将51cto下载的视频导出到你的设备中 下载51cto的工具我已经打包好了&#xff0c;有需要的自己下载…

Cheetah3D for Mac - 轻松打造专业级3D作品

对于追求专业级3D作品的设计师来说&#xff0c;Cheetah3D for Mac无疑是一款不可多得的工具。 这款软件拥有强大的建模、渲染和动画功能&#xff0c;能够满足您在3D设计方面的各种需求。通过简单的操作&#xff0c;您可以轻松构建出复杂的3D模型&#xff0c;并为其添加逼真的材…

道可道,非常道,名可名,非常名;学习道德经新解读!打破思想钢印——早读(逆天打工人爬取热门微信文章解读)

你读过道德经吗? 引言Python 代码第一篇 洞见 原来这就是&#xff1a;穷人的思想钢印第二篇 人民日报 来了&#xff01;新闻早班车要闻社会政策 结尾 知识始于好奇 终于智慧 好奇心驱使我们探索 而智慧则是自由思想的结晶 引言 玄之又玄 众妙之门 今天真的是大开我的眼界 我之…

卡尔曼滤波实战

入门内容 假如有个超声波&#xff0c;它传回的数据是这样的&#xff0c;这样的数据是用不了的 我们想要的是稳定的数据 此时我们引入滤波&#xff0c;把里面的噪声去掉&#xff0c;使得数据更平滑 适用系统&#xff1a; 符合两个特质&#xff1a;线性和高斯。 也叫线性高斯…

力扣顺序表思路讲解

本篇文章&#xff0c;我给大家带来的是顺序表题目讲解&#xff0c;希望大家看完有所收获&#xff0c;废话不多说&#xff0c;我们现在开始 审题 大白话&#xff1a;给了一个数组和一个目标值。如果数组里的两个元素相加 目标值&#xff0c;则返回这两个元素的下标。那么大家需…

中霖教育:考下注册会计师能从事哪些工作?

考下注册会计师能够从事哪些工作&#xff1f; 1 企业从事会计和财务工作 大部分的CPA持证人&#xff0c;会在企业里&#xff0c;从事会计和财务工作。但是能拿到多少薪资&#xff0c;也要看你所进入的平台。如果是小企业&#xff0c;实力一般&#xff0c;也就几干块工资。如果…

AI大模型应用与实践指南

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

系统图表:洞察数据的价值与魅力

在数字化、信息化迅猛发展的今天&#xff0c;数据已经成为企业决策、科学研究、社会管理等领域的核心资源。而如何高效、准确地理解和利用这些数据&#xff0c;成为摆在我们面前的重要课题。系统图表作为数据可视化的重要呈现工具&#xff0c;不仅能帮助我们洞察数据的内在规律…

Transformer详解:从放弃到入门(完结)

前几篇文章中&#xff0c;我们已经拆开并讲解了Transformer中的各个组件。现在我们尝试使用这些方法实现Transformer的编码器。   如图所示&#xff0c;编码器(Encoder)由N个编码器块(Encoder Block)堆叠而成&#xff0c;我们依次实现。 class EncoderBlock(nn.Module):def …

粤港澳青少年信息学创新大赛 Python 编程竞赛(初中部分知识点整理)

一、考试大纲梳理 知识内容 知识目标 计算机基础与编程环境&#xff0c;历史&#xff0c;存储与网络变量定义和使用基本数据类型&#xff08;整型&#xff0c;浮点型&#xff0c;字符型&#xff0c;布尔型&#xff09;&#xff0c;数据类型的转换控制语句结构&#xff08;顺序…

车规级低功耗汽车用晶振SG-9101CGA

车规级晶振SG-9101CGA属于爱普生9101系列&#xff0c;是一款可编程晶振。SG-9101CGA车规级晶振采用2.5x2.0mm封装&#xff0c;利用PLL技术生产&#xff0c;此款振荡器的频率范围从0.67M~170MHZ任一频点可选&#xff0c;步进1ppm&#xff0c;采用标准CMOS输出&#xff0c;最大输…

极验4 一键解混淆

提示&#xff01;本文章仅供学习交流&#xff0c;严禁用于任何商业和非法用途&#xff0c;未经许可禁止转载&#xff0c;禁止任何修改后二次传播&#xff0c;如有侵权&#xff0c;可联系本文作者删除&#xff01; AST简介 AST&#xff08;Abstract Syntax Tree&#xff09;&a…

【Redis7】10大数据类型之Zset类型

文章目录 1.Zset类型2.常用命令3.示例3.1 ZADD,ZRANGE和ZREVRANGE3.2 ZSCORE,ZCARD和ZREM3.3 ZRANGEBYSCORE和ZCOUNT3.4 ZRANK和ZREVRANK3.5 Redis7新命令ZMPOP 1.Zset类型 Redis的Zset&#xff08;Sorted Set&#xff0c;有序集合&#xff09;是一种特殊的数据结构&#xff0…

【教学类-18-03】20240508《蒙德里安“红黄蓝黑格子画”-A4横版》(大小格子)

作品展示 背景需求&#xff1a; 2年前制作了蒙德里安随机线条 【教学类-18-02】20221124《蒙德里安“红黄蓝黑格子画”-A4竖版》&#xff08;大班)_蒙德里安模版-CSDN博客文章浏览阅读1k次。【教学类-18-02】20221124《蒙德里安“红黄蓝黑格子画”-A4竖版》&#xff08;大班)…

ChIP-seq or CUTTag,谁能hold住蛋白质与DNA互作主战场?

DNA与蛋白质的相互作用作为表观遗传学中的一个重要领域&#xff0c;对理解基因表达调控、DNA复制与修复、表观遗传修饰&#xff08;组蛋白修饰&#xff09;及染色质结构等基本生命过程至关重要。 自1983年James Broach首次公布染色质免疫共沉淀&#xff08;ChIP&#xff09;技…

Docker-Compose 容器集群的快速编排

Docker-compose 简介 Docker-Compose项目是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是 工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#xff09;以及容器&…

LLM 安全 | 大语言模型应用安全入门

一、背景 2023年以来&#xff0c;LLM 变成了相当炙手可热的话题&#xff0c;以 ChatGPT 为代表的 LLM 的出现&#xff0c;让人们看到了无限的可能性。ChatGPT能写作&#xff0c;能翻译&#xff0c;能创作诗歌和故事&#xff0c;甚至能一定程度上做一些高度专业化的工作&#x…

滤除纹波的方法:

空载时看起来纹波比较小但是一加负载的时候纹波一下子上来是因为空载时候电流比较小MOS大部分时间处于关断状态&#xff0c;而加上负载后电流变大MOS打开关闭更为频繁&#xff0c;因而纹波更大。 下图中的尖峰可能是因为电路的寄生电感导致的&#xff0c;理论上只能削弱不能避…
最新文章