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};//长度设为50printf("输入字符串:");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.rhkb.cn/news/321998.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

323_C++_QT_QProcess执行cmd解压、压缩、删除tar.gz等等其他压缩包文件到指定目录,不需要外部库,QT自带API的就行

// decompressPath : 解压到此目录 // fileName : 解压的tar.gz文件名executeCommand(decompressPath , QString::fromStdString(fileName));// 开始解压 void executeCommand

获取和修改线程的id和名称

当创建两个线程时&#xff0c;需要获取线程的id和名称&#xff0c;这样可以知道是哪个线程执行的 方式1&#xff1a;this.getId()和this.getName() 写代码注意点&#xff1a;要写对类名 方式2&#xff1a;Thread.currentThread().getId()和Thread.currentThread().getName() 修…

初识Node.js-REPL(详解交互式解释器)

目录 一、REPL介绍 1.概念 2.主要特点和用途 3.应用 二、 REPL语法 1.简单的表达式运算 2.使用变量 3.多行表达式 下划线(_)变量 三、REPL 命令 四、停止 REPL 五、Gif 实例演示 六、REPL应用实例 七、总结 一、REPL介绍 1.概念 Read&#xff08;读取&#xff09…

类和对象、this指针、类里的默认生成函数

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

如何恢复回收站中被删除的文件?3个恢复策略,实测有用!

“刚刚一不小心把回收站清空了&#xff0c;大家有什么好用的方法可以帮我恢复回收站中删除的文件吗&#xff1f;快帮帮我吧&#xff01;” 在使用电脑的过程中&#xff0c;我们有时可能会不小心将重要的文件或文件夹删除到回收站&#xff0c;并且随后可能进一步从回收站中彻底删…

【Git】Git学习-17:git rebase,且解决合并冲突

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 理论 git rebase 目标分支&#xff1a;把当前分支的提交&#xff0c;从与目标分支的共同主祖先处断开…

【linux】dmesg工具

dmesg介绍 dmesg工具用途&#xff1a; dmesg - print or control the kernel ring buffer kernel ring buffer, 内核环形缓冲区&#xff0c;也叫环形队列&#xff0c;Linux内核日志就存储在一个环形队列中&#xff0c;环形队列满的时候&#xff0c;新的消息会覆盖掉旧的消息。…

UE5自动生成地形一:地形制作

UE5自动生成地形一&#xff1a;地形制作 常规地形制作地形编辑器地形管理添加植被手动修改部分地形的植被 置换贴图全局一致纹理制作地貌裸露岩石地形实例 常规地形制作 地形制作入门 地形导入部分 选择模式&#xff1a;地形模式。选择地形子菜单&#xff1a;管理->导入 …

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解&#xff1a; HarmonyOS NEXT Preview系列教程基于Api11讲解-IT营大地老师 1 、电脑要求以及注意事项 操作系统 &#xff1a; Windows10 64 位、 Windows11 64 位 内存 &#xff1a; 8GB 及以上&#xff0c;推荐 16G…

“情况不明,对子先行”攻略

掼蛋作为一种策略性极强的游戏&#xff0c;不仅考验牌技&#xff0c;更考验玩家的智慧和策略布局。这里主要介绍一下当牌力不足的时候的普通策略—情况不明&#xff0c;对子先行。 当你的牌力不强&#xff0c;或者牌局情况不明朗时&#xff0c;自己手上有有比较多的对子&#x…

【Ansible】ansible-playbook剧本

playbook 是ansible的脚本 playbook的组成 1&#xff09;Tasks&#xff1a;任务&#xff1b;通过tasks 调用ansible 的模板将多个操作组织在一个playbook中运行 2&#xff09;Variables&#xff1a;变量 3&#xff09;Templates&#xff1a;模板 4&#xff09;Handles&#xf…

如何开发自己的深度学习优化算法

深度学习优化算法 如何开发自己的深度学习优化算法理解优化算法的基础**核心组件**&#xff1a; 设计自定义优化算法的步骤**步骤 1: 定义问题和目标****步骤 2: 研究现有算法****步骤 3: 开发初步想法****步骤 4: 创建原型****步骤 5: 系统测试与优化** 关键建议 如何开发自己…

C 语言指针怎么理解?

在今天的学习中&#xff0c;我注意到有位学员似乎对 C 语言指针的理解有些困惑。为了帮助大家更好地理解&#xff0c;我来举个例子。 C 语言指针就好比 Windows 桌面上常见的快捷方式。快捷方式可以指向某个游戏&#xff0c;这就是普通指针&#xff1b;它也可以指向另一个快捷…

Apache DolphinScheduler 3.3.0 版本重磅更新提前看!

Apache DolphinScheduler 3.3.0版本终于要在万众期待中发布啦&#xff01;本次发版将有重大功能更新&#xff0c;包括架构上的调整。 为了让广大用户提前尝鲜&#xff0c;社区特别准备了直播活动提前揭秘3.3.0版本中的重要更新&#xff0c;到时候你将会了解到这些信息&#xf…

(四)小程序学习笔记——自定义组件

1、组件注册——usingComponents &#xff08;1&#xff09;全局注册&#xff1a;在app.json文件中配置 usingComponents进行注册&#xff0c;注册后可以在任意页面使用。 &#xff08;2&#xff09;局部注册&#xff0c;在页面的json文件中配置suingComponents进行注册&#…

vector、heap数组、stack数组访问性能验证

测试目的 本次测试旨在比较不同数据结构&#xff08;vector、数组&#xff09;以及不同访问方法&#xff08;[]、at()、offset&#xff09;在性能上的差异&#xff0c;从而为开发者提供在特定情境下做出最佳选择的依据。 测试代码 测试网址:Quick C Benchmarks 使用GCC9.5 …

pxe远程安装

PXE 规模化&#xff1a;可以同时装配多台服务器 自动化&#xff1a;自动安装操作系统和各种配置 不需要光盘U盘 前置需要一台PXE服务器 pxe是预启动执行环境&#xff0c;再操作系统之前运行 实验&#xff1a; 首先先关闭防火墙等操作 [rootlocalhost ~]# systemc…

C++成员初始化列表

我们在类的构造函数中使用成员初始化列表可以带来效率上的提升&#xff0c;那么成员初始化列表在编译后会发生什么就是这篇文章要探究的问题 文章目录 引入成员初始化列表用成员初始化列表优化上面的代码成员初始化列表展开成员初始化列表的潜在危险 参考资料 引入 考虑下面这…

电脑提示mfc140u.dll文件丢失了?怎么快速修复mfc140u.dll文件

当你的电脑提示你的mfc140u.dll文件丢失了&#xff0c;那么就要小心了&#xff0c;可能你的某些程序出问题了&#xff01;这时候需要我们去进行相关的修复&#xff0c;只有修复了这个mfc140u.dll文件&#xff0c;才能正常的使用某些程序。下面一起来了解一下mfc140u.dll文件吧。…

【JavaEE精炼宝库】计算机是如何工作的

目录 前言&#xff1a; 一、冯诺依曼体系 二、CPU基本知识 2.1 硬盘|内存|CPU关系&#xff1a; 2.2 指令&#xff1a; 2.3 CPU是如何执行指令的&#xff08;重点&#xff09;&#xff1a; 2.4 小结&#xff1a; 三、编程语言 3.1 程序&#xff1a; 3.2 编程语言发展&a…