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.hqwc.cn/news/659976.html

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

相关文章

visionPro链接相机

搜索Cognex GigE Vision Configura… 修改子网掩码为255.255.255.0 配置驱动程序 更新驱动&#xff08;如果能够选择9014Bytes&#xff0c;跳过此步骤&#xff09; 更新更改 相机ip配置 打开visionPro 选择照相机 查看实时画面 运行保存图像

TiDB 利用binlog 恢复-反解析binlog

我们知道TiDB的binlog记录了所有已经执行成功的dml语句&#xff0c;类似mysql binlog row模式 &#xff0c;TiDB官方也提供了reparo可以进行解析binlog&#xff0c;如下所示: [2024/04/26 20:58:02.136 08:00] [INFO] [config.go:153] ["Parsed start TSO"] [ts449…

邦注科技 激光切水口设备 车灯水口切割

激光切水口是一种利用激光技术进行切割的设备&#xff0c;通常用于汽车灯具制造中的水口切割工艺。水口是指汽车灯具表面上的透气孔或者排水孔&#xff0c;用于排除灯具内部的水汽&#xff0c;防止灯具起雾或者受潮。激光切水口设备通过激光束对汽车灯具进行精确切割&#xff0…

【论文阅读】IPT:Pre-TrainedImageProcessingTransformer

Pre-TrainedImageProcessingTransformer 论文地址摘要1. 简介2.相关作品2.1。图像处理2.2。 Transformer 3. 图像处理3.1. IPT 架构3.2 在 ImageNet 上进行预训练 4. 实验4.1. 超分辨率4.2. Denoising 5. 结论与讨论 论文地址 1、论文地址 2、源码 摘要 随着现代硬件的计算能…

手持LED弹幕,超炫特效,让你的每一次出场都耀眼夺目!

在这个快节奏的数字时代&#xff0c;沟通不再局限于言语和文字&#xff0c;就连表白、追星、晚会互动&#xff0c;甚至日常的提词都需要一点科技的火花来点燃气氛。于是&#xff0c;手持LED弹幕滚动屏&#xff0c;这个集实用与趣味于一身的神器&#xff0c;悄然成为了社交场上的…

【linuxC语言】fcntl和ioctl函数

文章目录 前言一、功能介绍二、具体使用2.1 fcntl函数2.2 ioctl函数 三、拓展&#xff1a;填写arg总结 前言 在Linux系统编程中&#xff0c;经常会涉及到对文件描述符、套接字以及设备的控制操作。fcntl和ioctl函数就是用来进行这些控制操作的两个重要的系统调用。它们提供了对…

【安卓13】谷歌桌面Launcher3屏蔽全部应用里面的部分app

1、需求 我们在做谷歌桌面时&#xff0c;移植了一些我们自己的应用&#xff0c;但是有些应用是服务型的app&#xff0c;不需要显示在主页&#xff0c;要隐藏掉 2、解决方案 方法1&#xff1a; 解决办法很简单&#xff0c;阅读源码发现&#xff0c;谷歌桌面添加全部应用的源…

2024年必应bing广告推广开户有什么条件?

必应Bing作为全球领先的搜索引擎之一&#xff0c;其广告平台正为无数企业开辟着新的市场蓝海。如果您正寻求在必应Bing上投放广告&#xff0c;提升品牌影响力和市场份额&#xff0c;那么了解开户条件并找到一位可靠的合作伙伴至关重要。云衔科技&#xff0c;作为数字营销领域的…

Android CalendarView助你打造精美的Android日历应用

Android CalendarView助你打造精美的Android日历应用 1. 引言 移动应用中的日历功能对于用户来说至关重要&#xff0c;它不仅是时间管理的工具&#xff0c;还能帮助用户记录重要事件和安排活动。因此&#xff0c;一个高效、易用的日历控件对于移动应用的成功至关重要。 传统…

场景文本检测识别学习 day06(Vi-Transformer论文精读)

Vi-Transformer论文精读 在NLP领域&#xff0c;基于注意力的Transformer模型使用的非常广泛&#xff0c;但是在计算机视觉领域&#xff0c;注意力更多是和CNN一起使用&#xff0c;或者是单纯将CNN的卷积替换成注意力&#xff0c;但是整体的CNN 架构没有发生改变VIT说明&#x…

《HCIP-openEuler实验指导手册》1.6 Apache静态资源配置(目录访问)

知识点 常用用途&#xff1a; 软件仓库镜像及提供下载服务&#xff1a; 配置步骤 删除网站主目录中的文件&#xff08;本实验机目录为/home/source ip为192.168.12.137 端口为81&#xff09; cd /home/source rm -rf *在主目录中新建6个文件夹如下图 mkdir test{1..6}新建…

情感类ppt素材

小清新手绘插画风毕业季毕业相册同学录画册纪念册PPT下载 - 觅知网这是一张关于清新毕业相册的PPT模板&#xff0c;清新风格设计&#xff0c;加上风为装饰元素&#xff0c;包含毕业相册、毕业季、毕业、同学、纪念等主题内容&#xff0c;也可用作毕业相册PPT、毕业季PPT、毕业P…