Perl语言教程:数组内插与历史发展

需积分: 44 0 下载量 196 浏览量 更新于2024-07-12 收藏 2.75MB PPT 举报
"这篇资料主要介绍了Perl语言的学习,包括其历史发展、基本概念以及Perl的特点和适用场景。Perl是一种结合了多种程序语言特性的脚本语言,尤其在文本处理方面表现出色,并拥有丰富的第三方代码库CPAN。" Perl语言自1987年首次发布以来,历经多次迭代和发展,成为了一种广泛使用的脚本语言。Perl 1.0的推出标志着该语言的诞生,随后在1988年的perl2.0中,它经历了一次重要的更新。Perl的历史与黑客事件、公开教程和书籍出版紧密相关,这些事件推动了Perl的普及。1994年发布的perl5.0引入了对象和模块,显著增强了语言的面向对象编程能力。此外,1995年,Perl社区创建了CPAN( Comprehensive Perl Archive Network),为Perl开发者提供了大量的模块和库。 Perl语言设计时借鉴了C、sed、awk和shell脚本等语言,集成了正则表达式功能,使得它在文本处理任务中尤为强大。由于其设计初衷是为了Unix环境,Perl被成功移植到多种操作系统上,受到系统程序员和Web开发者的喜爱。Perl试图在低级语言和高级语言之间找到平衡,提供了一种既高效又易于使用的编程工具。 Perl分为编译类和解释类语言的一种,它的源代码不需要预先编译,而是直接解释执行。这使得Perl在编写和执行速度上有优势,但相对地,执行效率可能不如编译型语言。尽管如此,Perl的脚本语言特性使得它在快速原型开发和自动化任务中非常有用。 Perl的主要特点包括:使用简单、更新频繁、开源免费,并且能够在众多操作系统上无缝运行。然而,Perl的语法有时被认为不够优雅,甚至有些“丑陋”。Perl在处理文字处理任务时特别有效,大约90%的应用场景与此相关,其余10%则用于其他各种事务。 Perl是一种强大的脚本语言,尤其适合于文本处理和系统管理任务,而且得益于CPAN,用户可以方便地找到大量现成的模块来扩展其功能。无论是初学者还是经验丰富的开发者,都可以从学习Perl中受益。

#include <stdio.h> #include <stdlib.h> #define Max 20 int find(int arr[],int n,int x); int del(int arr[],int n,int i); int getData(int arr[]); int saveData(int arr[],int n); int insertX(int arr[] ,int n,int i); void pntArray(int arr[],int n); int main(void) { char c; int n,i,x,j,m; int a[Max]; do{ printf("\n\n系统菜单*******\nV:浏览 D:删除 I:插入 Q:退出\n*********************************\n\n"); printf("请输入菜单项(仅接受大写):"); scanf("%c",&c); getchar(); if(c=='V'||c=='D'||c=='I'||c=='Q') { n=getData(a); switch(c){ case'V':pntArray(a,n);break; case'D': printf("请输入待删除的值:"); scanf("%d",&x); for(i=0;i<n;i++) { j=find(a,n,x); if(j==-1) { if(m==0){printf("待删除%d不存在!",x); break;} else break; } else { n=del(a,n,j); m++; } } pntArray(a,n); break; case'I': insertX(a,n,i); printf("插入后的数组:"); pntArray(a,n); break; case'Q':exit(0); } continue; } else printf("选项不存在!"); }while(c!='V'||c!='D'||c!='I'||c!='Q'); return 0; } int find(int arr[],int n,int x) { int i; for(i=0;i<n;i++) if(x==arr[i]) return i; return -1; } int del(int arr[],int n,int i) { int j; for(j=i+1;j<n;j++) arr[j-1]=arr[j]; return n-1; } int getData(int arr[]) { FILE *fp; int n=0; if((fp=fopen("data.txt","r"))==NULL) { printf("can not open file!"); return 0; } while(!feof(fp)) { if(n==Max) { printf("存储空间已满,读入数据失败"); return 0; } fscanf(fp,"%d",&arr[n]); n++; } fclose(fp); return n-1; } int saveData(int arr[],int n) { FILE *fp; int i; if((fp=fopen("data.txt","w"))==NULL) { printf("can not open file!"); return 0; } for(i=0;i<n;i++) fprintf(fp,"%d\t",arr[i]); fclose(fp); return 1; } int insertX(int arr[] ,int n,int i) { int x; int j; printf("请输入待插入数据:"); scanf("%d",&x); for(j=n-1;j>=i;j--) arr[j+1]=arr[j]; arr[i]=x; return n+1; } void pntArray(int arr[],int n) { int i; for(i=0;i<n;i++) { printf("%d\t",arr[i]); if((i+1)%10==0)//每10个记录一行 printf("\n"); } }

2023-05-10 上传

请用C++解决这个leetcode的问题:2653. 滑动子数组的美丽值 提示 中等 26 相关企业 给你一个长度为 n 的整数数组 nums ,请你求出每个长度为 k 的子数组的 美丽值 。 一个子数组的 美丽值 定义为:如果子数组中第 x 小整数 是 负数 ,那么美丽值为第 x 小的数,否则美丽值为 0 。 请你返回一个包含 n - k + 1 个整数的数组,依次 表示数组中从第一个下标开始,每个长度为 k 的子数组的 美丽值 。 子数组指的是数组中一段连续 非空 的元素序列。 示例 1: 输入:nums = [1,-1,-3,-2,3], k = 3, x = 2 输出:[-1,-2,-2] 解释:总共有 3 个 k = 3 的子数组。 第一个子数组是 [1, -1, -3] ,第二小的数是负数 -1 。 第二个子数组是 [-1, -3, -2] ,第二小的数是负数 -2 。 第三个子数组是 [-3, -2, 3] ,第二小的数是负数 -2 。 示例 2: 输入:nums = [-1,-2,-3,-4,-5], k = 2, x = 2 输出:[-1,-2,-3,-4] 解释:总共有 4 个 k = 2 的子数组。 [-1, -2] 中第二小的数是负数 -1 。 [-2, -3] 中第二小的数是负数 -2 。 [-3, -4] 中第二小的数是负数 -3 。 [-4, -5] 中第二小的数是负数 -4 。 示例 3: 输入:nums = [-3,1,2,-3,0,-3], k = 2, x = 1 输出:[-3,0,-3,-3,-3] 解释:总共有 5 个 k = 2 的子数组。 [-3, 1] 中最小的数是负数 -3 。 [1, 2] 中最小的数不是负数,所以美丽值为 0 。 [2, -3] 中最小的数是负数 -3 。 [-3, 0] 中最小的数是负数 -3 。 [0, -3] 中最小的数是负数 -3 。 提示: n == nums.length 1 <= n <= 105 1 <= k <= n 1 <= x <= k -50 <= nums[i] <= 50

2023-05-24 上传