计算与人工智能概论-问题求解、科学计算与AI应用方法 课件 第6章:数组_第1页
计算与人工智能概论-问题求解、科学计算与AI应用方法 课件 第6章:数组_第2页
计算与人工智能概论-问题求解、科学计算与AI应用方法 课件 第6章:数组_第3页
计算与人工智能概论-问题求解、科学计算与AI应用方法 课件 第6章:数组_第4页
计算与人工智能概论-问题求解、科学计算与AI应用方法 课件 第6章:数组_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算与人工智能概论问题求解、科学计算与AI应用方法第6章数组信息科学与工程学院数组是一种容器类型的数据结构,数组可以有效地存储多个相同类型的元素;通过索引(下标),可以快速访问和操作数组中的元素;数组是许多其他数据结构和算法的基础,比如链表、栈、队列、堆、排序算法等等。任务1:一维数组的定义与使用

任务2:一维数组的遍历

任务3:数组应用(筛法求素数)

任务4:一维数组排序

任务5:二维数组(杨辉三角的计算与输出)

任务6:字符数组 目录任务1:一维数组的定义与使用内容概要1、任务描述2、相关知识3、设计思路4、问题求解任务1:一维数组的定义与使用任务描述为了描述炮弹的飞行轨迹,每隔0.1秒计算并输出了炮弹从时刻0到时刻tmax的坐标信息,但是坐标每次计算出来并输出之后就丢弃了。本任务要求将计算出的坐标存储到一个数组中。任务1:一维数组的定义与使用相关知识1、数组的基本特征2、一维数组的定义3、一维数组的初始化以及元素访问规则4、一维数组的数组元素在内存中如何存储任务1:一维数组的定义与使用相关知识:数组的基本特征长度固定:数组的长度在创建时被确定,并且通常不能动态改变随机访问:数组中的元素可以通过索引来访问,索引通常从0开始类型相同:数组中的元素必须是相同类型的连续存储:数组的元素在内存中是连续存储的固定的下标范围:数组的下标范围从0到长度减1,数组下标越界会导致错误快速插入和删除效率较低:由于数组的长度固定,插入和删除操作需要移动其他元素来腾出位置或填补空缺,因此效率较低任务1:一维数组的定义与使用相关知识:一维数组的定义定义方式:数据类型数组名[元素个数];Example:intarr[5];创建一个数组名为arr的整数数组,可以存储5个整数。数组的成员(元素)相当于一个普通的变量,前面的定义相当于定义了5个整型变量,分别是arr[0]、arr[1]、arr[2]、arr[3]和arr[4]。任务1:一维数组的定义与使用相关知识:一维数组的初始化以及元素访问规则全部元素初始化intarr[5]={1,2,3,4,5};部分元素初始化intarr[5]={1,2,3};#arr[3]、arr[4]初值为0不显式初始化,数组元素值不确定intarr[5];元素访问规则:一维数组的元素可以通过索引访问,索引从0开始计数

intarr[5]={1,2,3,4,5};

intelement=arr[2];

arr[3]=80;任务1:一维数组的定义与使用相关知识:一维数组的数组元素在内存中如何存储一维数组的元素在内存中是连续存储的。当定义一个一维数组并为其分配内存时,编译器会在内存中为数组元素分配一块连续的空间。元素的存储顺序取决于数组的声明顺序。元素地址值arr[0]20001arr[1]20042arr[2]20083arr[3]20124arr[4]20165intarr[5]={1,2,3,4,5};元素地址可以用&获取,例如&arr[2],就是元素arr[2]在存储空间的地址。特别注意,数组名是数组的首地址,常量,上面的例子,arr就是数组的首地址,值为第一个元素的地址,就是&arr[0]。元素的地址也可以用arr+i获得,例如arr+2就是arr[2]的地址。任务1:一维数组的定义与使用设计思路数组定义由于炮弹飞行的时间与初速度和角度相关,因此需要存储的坐标信息总数是变化的,为了容纳足够多的坐标信息,可以定义一个容量足够大的数组,例如容量为1000。由于每个坐标包含横坐标和纵坐标,因此需要定义2个数组,分别用来存储横坐标和纵坐标。数据存储在对时间的循环结构中,可以增加变量i用于数组的下标,每次循环后进行i++,使得下次计算的坐标存储到数组的下一个位置:doubleX[1000],Y[1000];//存储坐标信息的数组for(t=0,i=0;t<=t_max;t+=0.1,i++){X[i]=ComputeX(v0,theta,t);//计算炮弹的横标Y[i]=ComputeY(v0,theta,t);//计算炮弹的纵坐标}任务1:一维数组的定义与使用设计思路:自然语言描述Step1:定义数组X和Y分别用于存储横坐标和纵坐标;Step2:以0.1的间隔产生0到tmax之间的浮点数t,同时整数i从0开始递增1;Step3:计算时刻t的横坐标和纵坐标,分别存入X[i]和Y[i]。任务1:一维数组的定义与使用问题求解#include<stdio.h>#include<math.h>#definePI3.14159265#defineg9.8doubleComputeX(doublev0,doubletheta,doublet){returnv0*cos(theta)*t;//计算炮弹的横坐标}doubleComputeY(doublev0,doubletheta,doublet){returnv0*sin(theta)*t-0.5*g*t*t;//计算炮弹的纵坐标}intmain(){doublev0=50.0;//初速度m/sdoubletheta=45.0*(PI/180.0);//角度弧度doublet;//时间doubleX[1000],Y[1000];//坐标值doublet_max=(2.0*v0*sin(theta))/g;//计算炮弹的落地时间;inti;//数组的下标for(t=0,i=0;t<=t_max;t+=0.1,i++){ X[i]=ComputeX(v0,theta,t);//炮弹的x坐标值Y[i]=ComputeY(v0,theta,t);//炮弹的y坐标值printf("炮弹在时间%.2lf秒时的坐标为:(%.2lf,%.2lf)\n",t,X[i],Y[i]);}return0;}任务1:一维数组的定义与使用结果分析程序第14行定义了两个长度为1000的数组X和Y,分别用来存储横坐标和纵坐标;第17行除了对时间t进行循环之外,还增加了整型变量i的循环,用作数组的下标;18和19分别将计算粗的横坐标和纵坐标存入数组。程序的输出结果为(省略中间结果):炮弹在时间0.00秒时的坐标为:(0.00,0.00)炮弹在时间0.10秒时的坐标为:(3.54,3.49)炮弹在时间0.20秒时的坐标为:(7.07,6.88)......炮弹在时间7.10秒时的坐标为:(251.02,4.01)炮弹在时间7.20秒时的坐标为:(254.56,0.54)任务1:一维数组的定义与使用

任务2:一维数组的遍历

任务3:数组应用(筛法求素数)

任务4:一维数组排序

任务5:二维数组(杨辉三角的计算与输出)

任务6:字符数组 目录任务2:一维数组的遍历任务描述中国三军仪仗队队员的身高范围在185~192厘米之间,某中队有10名队员,现在需要挑选一名身高190厘米的队员参加升旗仪式。任务2:一维数组的遍历相关知识:一维数组元素遍历一维数组元素遍历方法,采用循环(for、while)从前往后或者从后往前依次访问数组的每一个元素intarr[]={1,2,3,4,5};intlength=sizeof(arr)/sizeof(arr[0]);for(inti=0;i<length;i++){printf("%d",arr[i]);//打印数组元素}intarr[]={1,2,3,4,5};intlength=sizeof(arr)/sizeof(arr[0]);inti=0;while(i<length){printf("%d",arr[i]);i++;}intlength=sizeof(arr)/sizeof(arr[0]);该语句用于求出数组元素个数,避免访问数组时下标越界任务2:一维数组的遍历设计思路数据存储:使用长度为10的一维数组表示队员的身高数据,数组元素的下标就是对应队员的编号。元素遍历:挑选一名身高190厘米的队员,可能数组中有多名队员满足要求,可以从前往后遍历数组,找到满足要求的数据就结束查找并记录该数据在数组中位置(数组元素下标)。也就是说,问题转换为在数组中查找满足要求的第一个数据并记录对应下标。如果遍历完整个数组,都没有找到满足要求的数据,输出-1表示找不到。任务2:一维数组的遍历设计思路:自然语言描述Step1:定义一个长度为10的整型数组heightArr,用来存储10名队员对应的身高数据。Step2:定义一个整型i用作循环变量,作为下标遍历数组heightArr。Step3:定义一个整型变量ind用来存储找到满足要求的数据对应的下标,初始值为-1,表示没有找到满足要求的数据。Step4:循环遍历数组heightArr,如果找到满足要求的数据,把对应下标赋值给ind,退出循环。Step5:输出结果。任务2:一维数组的遍历问题求解#include<stdio.h>intmain(){intheightArr[]={192,185,188,190,192,185,188,187,191,189};//定义一个长度为10的整型数组,存储队员的身高数据inti;//循环变量,用作下标遍历数组heightArrintind=-1;//存储找到满足要求的数据对应的下标,初始值为-1,表示没有找到满足要求的数据for(i=0;i<10;i++){if(heightArr[i]==190){//判断身高是否190cmind=i;//找到满足要求的身高数据,将对应的下标赋值给indbreak;//退出循环}}if(ind!=-1){printf("选中身高为%d厘米的队员,在数组中的下标为%d,参加升旗仪式。\n",heightArr[ind],ind);//输出结果,给出选中队员的身高}else{printf("未找到满足身高要求的队员。\n");//输出结果,未找到满足要求的队员}return0;}练习:找出最大身高及位置任务1:一维数组的定义与使用

任务2:一维数组的遍历

任务3:数组应用(筛法求素数)

任务4:一维数组排序

任务5:二维数组(杨辉三角的计算与输出)

任务6:字符数组 目录任务3:筛法求素数内容概要1、任务描述2、相关知识3、设计思路4、问题求解任务3:筛法求素数任务描述

任务3:筛法求素数相关知识1、数组越界问题2、数组容器功能任务3:筛法求素数相关知识:数组索引越界问题数组越界是指访问数组时超出了数组的有效索引范围。这种行为是未定义的,意味着编译器的行为是不确定的,可能会导致程序出现崩溃、产生错误结果或者莫名其妙的行为读取越界与写入越界访问元素下标在有效索引范围内;循环操作时,索引下标不越界;复制数组时,目标数组要有足够的空间存储任务3:筛法求素数相关知识:数组容器功能在程序设计中,若需管理一组同类数据,逐一定义变量会显得繁琐且难以维护。此时,数组作为一种容器类型的数据结构,便能大显身手。数组能够集中存储多个相同类型的元素,并通过索引高效访问和操作这些元素,极大简化了数据管理流程。数组可轻松存储和操作这些数据集合,不仅提升了代码的可读性和可维护性,还使得批量数据处理变得更为高效。任务3:筛法求素数设计思路埃拉托斯特尼筛法是一种经典的高效素数筛选方法,其核心思想是通过逐步排除合数来保留素数。要找出小于等于n的所有素数,可以定义一个大小为n+1(便于使用序号n)的数组,将数组视为一个标记表,即数组序号代表待筛选的自然数,元素值表示该序号是否为素数(1表示素数,0表示非素数)。将数组的所有元素初始化为1,即假设所有的数均为素数,随后从2开始遍历数组,对每个找到的素数,将其所有倍数标记为非素数。最终未被标记的数即为素数。任务3:筛法求素数设计思路:自然语言描述Step1:创建一个大小为n+1的整型数组A,将所有元素初始化为1(表示初始时所有数均视为素数)。Step2:从第一个素数2开始遍历数组,若当前数i被标记为素数(即A[i]==1),则从i*i开始,以步长i遍历数组,将所有i的倍数位置标记为0。只需从i*i开始标记,因为更小的倍数已被更小的素数标记过。Step3:当遍历到sqrt(n)时即可停止外层循环,因为此时所有合数已被其最小素因子标记完毕。Step4:遍历数组,将从2开始的所有元素值为1的序号输出,即为所有小于等于n的素数。任务3:筛法求素数问题求解#include<stdio.h>intmain(){ intn=1000; intA[n+1]; for(inti=2;i<=n;i++)A[i]=1;//假设2~n都是素数

for(inti=2;i*i<=n;i++){//i是合数的因子

if(A[i]==0)continue;//i是合数,跳过 for(intj=i;i*j<=n;j++){//j是合数的因子 A[i*j]=0;//i*j是合数,筛掉

} } for(inti=2;i<=n;i++){ if(A[i]==1)printf("%d\n",i); }}任务1:一维数组的定义与使用

任务2:一维数组的遍历

任务3:数组应用(筛法求素数)

任务4:一维数组排序

任务5:二维数组(杨辉三角的计算与输出)

任务6:字符数组 目录任务4:一维数组排序内容概要1、任务描述2、相关知识3、设计思路4、问题求解任务4:一维数组排序任务描述给定10位仪仗队员的身高分别为192、185、188、190、192、185、188、187、191、189,要求从小到大排列并输出身高数据。任务4:一维数组排序相关知识一维数组排序是指对一个包含多个元素的一维数组按照一定的规则进行重新排列,使得数组中的元素按照特定的顺序排列。排序可以按照升序(从小到大)或降序(从大到小)进行。排序算法有多种,包括冒泡排序、插入排序、选择排序、快速排序等等,不同的算法有不同的特点和性能,选择合适的算法取决于具体的需求和数据规模。任务4:一维数组排序相关知识:冒泡排序冒泡排序是一种基本的排序算法,其核心思想是依次比较相邻的两个元素,如果它们的顺序错误,则交换它们的位置。重复这个过程直到整个数组排序完成。任务4:一维数组排序相关知识:冒泡排序示例(1)以未排序区间[5,2,9,1,3]为例,每一轮遍历从区间起始位置开始,依次比较相邻元素的大小关系,若当前元素大于后继元素,则交换两者的位置。这一过程如同气泡在水中上浮,较小的元素会逐步“浮”向区间的首部,而较大的元素则“沉”向区间的尾部。经过一轮完整遍历后,区间的最大元素必然被交换到末尾位置,此时该元素即可划入已排序区。为了将最大元素9移动到最后,共发生了3次交换。任务4:一维数组排序相关知识:冒泡排序示例(2)以数组[5,2,9,1,3]为例,使用冒泡排序进行升序排序的步骤如下:(1)第1轮:初始状态:数组[5,2,9,1,3],未排序区为[5,2,9,1,3],已排序区为[];动作:未排序区的最大的元素9移动到该区的最后;结束状态:数组[2,5,1,3,9],未排序区为[2,5,1,3],已排序区为[9];(2)第2轮:初始状态:数组[2,5,1,3,9],未排序区为[2,5,1,3],已排序区为[9];动作:未排序区的最大的元素5移动到该区的最后;结束状态:数组[2,1,3,5,9],未排序区为[2,1,3],已排序区为[5,9];。。。任务4:一维数组排序相关知识:选择排序这种方法的核心要素是每一轮都从当前未排序区选择出最大元素然后交换到区域的最右边,因此被称为选择排序。当然,也可以从当前未排序区选择出最小元素然后交换到区域的最左边。选择排序的详细过程如下:(1)首先,在未排序的部分中找到最小(或最大)的元素。(2)将找到的最大元素与未排序部分最右边的元素交换位置。(3)这样,已排序部分就增加了一个元素,而未排序部分减少了一个元素。(4)接下来,继续从剩余的未排序部分中找到最大的元素,并与未排序部分最右边的元素交换位置。(5)重复以上步骤,直到未排序部分的元素全部处理完毕。任务4:一维数组排序相关知识:选择排序示例原始数组:[5,2,9,1,3](1)第1轮:初始状态:数组[5,2,9,1,3],未排序区为[5,2,9,1,3],已排序区为[];动作:未排序区的最大的元素9与该区末尾元素3交换位置;结束状态:数组[5,2,3,1,9],未排序区为[5,2,3,1],已排序区为[9];(2)第2轮:初始状态:数组[5,2,3,1,9],未排序区为[5,2,3,1],已排序区为[9];动作:未排序区的最大的元素5与该区末尾元素1交换位置;结束状态:数组[1,2,3,5,9],未排序区为[1,2,3],已排序区为[5,9];。。。任务4:一维数组排序设计思路1、可以用一维数组保存队员的身高数据。2、采用相应的排序算法对身高数据排序。3、排序完成后,输出排序后的身高数据。任务4:一维数组排序设计思路:自然语言描述(冒泡排序)Step1:定义外循环变量i=0;Step2:定义内循环变量j=0;Step3:若A[j]>A[j+1],交换两个元素;Step4:j加1,若j<=n-i-2,跳转到Step3;Step5:i加1,若i<=n-2,跳转到Step2。任务4:一维数组排序设计思路:自然语言描述(选择排序)Step1:定义外循环变量i=0;Step2:定义maxh=A[0],maxp=0;Step3:定义内循环变量j=1;Step4:若A[j]>maxh,令maxh=A[j],maxp=j;Step5:j加1,若j<=n-i-1,跳转到Step4;Step6:若maxp不等于n-i-1,交换序号为maxp和n-i-1的元素;Step7:i加1,若i<=n-2,跳转到Step2。任务4:一维数组排序问题求解:冒泡排序#include<stdio.h>voidBubbleSort(intA[],intn){for(inti=0;i<=n-2;i++){//轮次循环for(intj=0;j<=n-i-2;j++){//遍历未排序区if(A[j]>A[j+1]){//交换身高数据inttemp=A[j];A[j]=A[j+1];A[j+1]=temp;}}}}intmain(){intA[]={185,192,190,188,190,191,188,192,188,190}; intn=sizeof(A)/sizeof(A[0]);BubbleSort(A,n);//调用冒泡排序函数进行排序printf("身高排序结果:\n");for(inti=0;i<n;i++)printf("%d",A[i]);return0;}任务4:一维数组排序问题求解:选择排序#include<stdio.h>voidSelectionSort(intA[],intn){for(inti=0;i<=n-2;i++){//轮次循环intmaxh=A[0],maxp=0;//假设第一个身高为最大身高,记录身高值及其位置for(intj=1;j<=n-i-1;j++){//遍历未排序区if(A[j]>maxh){//打擂台maxh=A[j];maxp=j;//替换擂主

}}//未排序区最大身高与该区最右边元素交换if(A[maxp]!=A[n-i-1]){inttemp=A[maxp];A[maxp]=A[n-i-1];A[n-i-1]=temp;}}}intmain(){intA[]={185,192,190,188,190,191,188,192,188,190}; intn=sizeof(A)/sizeof(A[0]);SelectionSort(A,n);//调用冒泡排序函数进行排序printf("身高排序结果:\n");for(inti=0;i<n;i++)printf("%d",A[i]);return0;}任务1:一维数组的定义与使用

任务2:一维数组的遍历

任务3:数组应用(筛法求素数)

任务4:一维数组排序

任务5:二维数组(杨辉三角的计算与输出)

任务6:字符数组 目录任务5:二维数组(杨辉三角的计算与输出)

内容概要1、任务描述2、相关知识3、设计思路4、问题求解任务5:二维数组(杨辉三角的计算与输出)

任务描述杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国数学史上的一个伟大成就。杨辉三角是一个由数字排列成的三角形数阵,被广泛应用于等差数列的相关问题中。具体来说,杨辉三角的第n行为C(n-1,0),C(n-1,1),C(n-1,2),...,C(n-1,n-1),其中C(n,k)表示组合数,即从n个元素中选取k个元素的方案数。(百度百科)编写程序,输入整数n,输出一个n层的杨辉三角。任务5:二维数组(杨辉三角的计算与输出)

相关知识1、二维数组的定义2、二维数组元素在内存中的存储形式3、二维数组元素的访问与初始化4、二维数组元素的遍历任务5:二维数组(杨辉三角的计算与输出)

相关知识:二维数组的定义定义:

typearrayName[rows][columns];

type

是数组中元素的数据类型(如int,float,char等),arrayName

是给数组起的名字,rows

是数组的行数,columns

是数组的列数示例:

intarray[3][4];

创建一个3行4列的整数数组,数组名为array任务5:二维数组(杨辉三角的计算与输出)

相关知识:二维数组元素在内存中的存储形式C语言中的二维数组实际上是利用一维数组的原理来实现的。在内存中,二维数组是按照行优先的顺序进行存储的。具体来说,假设一个二维数组arr有m行n列,那么在内存中的存储顺序就是按照从左到右,从上到下的顺序,即先存储第一行的所有元素,再存储第二行的所有元素,以此类推,直到最后存储第m行的所有元素。例如,对于二维数组arr[3][4],它的内存存储顺序如下:arr[0][0],arr[0][1],arr[0][2],arr[0][3]arr[1][0],arr[1][1],arr[1][2],arr[1][3]arr[2][0],arr[2][1],arr[2][2],arr[2][3]任务5:二维数组(杨辉三角的计算与输出)

相关知识:二维数组元素的访问与初始化访问:双下标,arr[0][0],arr[2][1]…全部初始化:

intarr[2][3]={1,2,3,4,5,6};

intarr[2][3]={{1,2,3},{4,5,6}};部分初始化:

intarr[2][3]={{1},{2}};只初始化了元素arr[0][0](值为1)和arr[1][0](值为2),其他元素未被初始化,值为0使用memset函数:

intarr[3][4];

memset(arr,0,sizeof(arr));

这将以0将整个数组进行初始化。需要注意的是,这种方式只能将整个数组初始化为同一个值,不能对个别元素进行特定的初始化任务5:二维数组(杨辉三角的计算与输出)

相关知识;二维数组元素的遍历二维数组可以看作是一个表格,其中包含行和列。可以使用嵌套的for循环来遍历二维数组的所有元素。#include<stdio.h>intmain(){//定义一个3x3的二维数组

intarr[3][3]={{1,2,3},{4,5,6},{7,8,9}};

//使用嵌套的for循环遍历数组元素

for(inti=0;i<3;i++){//行

for(intj=0;j<3;j++){//列printf("%d",arr[i][j]);}printf("\n");}return0;}任务5:二维数组(杨辉三角的计算与输出)

设计思路数据表示与存储杨辉三角形数据可以看成一张二维数据表格,存放的都是整数,可以定义一个二位整形数组表示和存储数据。杨辉三角数据计算根据杨辉三角形的特点,可以现将定义好的二维数组初始化为0;然后将数组的第一列和对角线的数据全部设置为1;通过观察杨辉三角形特征可以发现,从第三行开始,每行的第二个数到倒数第二个数都满足相同的特点,都等于上一行相同列的值与上一行前一列的值的和,可以公式化为:arr[i][j]=arr[i-1][j-1]+arr[i-1][j],可以通过循环计算出对应所有项的值。杨辉三角形输出输出杨辉三角形,可以使用循环嵌套将前面计算好的数组里面的非零元素输出,每输出一行换行。任务5:二维数组(杨辉三角的计算与输出)

设计思路:自然语言描述Step1.定义一个二维整型数组arr,表示和存储杨辉三角形数据。Step2.初始化数组,将所有元素设置为0。Step3.将数组的第一列和对角线的元素设置为1。Step4.从第三行开始,每行的第二个数到倒数第二个数都等于上一行相同列的值与上一行前一列的值的和,可以根据公式arr[i][j]=arr[i-1][j-1]+arr[i-1][j]计算出杨辉三角形的其他数值。Step5.使用嵌套循环输出杨辉三角形数值,每行输出非零元素,并输出一行数据后换行。任务5:二维数组(杨辉三角的计算与输出)

问题求解#include<stdio.h>#include<string.h>//引入字符串处理库intmain(){intROWS;printf("请输入杨辉三角形的行数:");scanf("%d",&ROWS);//输入行数intarr[ROWS][ROWS];//定义一个二维整型数组,存储杨辉三角形数据inti,j;memset(arr,0,sizeof(arr));//初始化数组,将所有元素设置为0//将数组的第一列和对角线的元素设置为1for(i=0;i<ROWS;i++){arr[i][0]=1;arr[i][i]=1;}//计算并输出杨辉三角形的其他数值for(i=2;i<ROWS;i++){for(j=1;j<i;j++){arr[i][j]=arr[i-1][j-1]+arr[i-1][j];}}//输出杨辉三角形for(i=0;i<ROWS;i++){for(j=0;j<=i;j++)printf("%d",arr[i][j]);printf("\n");}return0;}任务1:一维数组的定义与使用

任务2:一维数组的遍历

任务3:数组应用(筛法求素数)

任务4:一维数组排序

任务5:二维数组(杨辉三角的计算与输出)

任务6:字符数组 目录任务6:字符数组内容概要1、任务描述2、相关知识3、设计思路4、问题求解任务6:字符数组任务描述WebofScience(科学引文索引,简称WoS)是由ClarivateAnalytics(前身为汤森路透)开发和管理的一个综合性学术数据库。它是全球最权威、最全面的学术引文数据库之一,涵盖包括科学、技术、医学、社会科学和人文科学在内的多个学科领域。WebofScience汇集了全球各个学术期刊、会议论文和专利等的引文数据,以及相关的学术指标和分析工具。它提供了广泛的搜索功能,使用户能够追踪和分析学术文献的引用情况、作者的影响力、期刊的声誉等信息。通过WebofScience,研究人员可以进行文献检索、引文分析、学术排名和趋势分析等操作,从而帮助他们找到相关的研究文献、了解学术领域的最新动态、评估研究成果的影响等。它也被广泛用于学术界的科研评估、大学排名、学术出版等领域。WebofScience作为一个综合性学术数据库,为研究人员提供了丰富的学术资源和分析工具,帮助他们进行学术研究和决策。

本任务要求在webofscience下载2023年Nature期刊文章发表数据,通过在webofscience网站(Documentsearch-AllDatabases())搜索,截止到2023年8月30日,2023年在Nature期刊上发文数量靠前的国家以及对应的发文数量如下表所示,要求按照发文数量采用选择排序算法进行排降序,并且显示对应国家名称以及发文数量。国家ChinaCanadaFanceUSAEnglandGermany数量201118116692211229任务6:字符数组相关知识1、一维字符数组的含义与定义2、字符串3、C语言中字符数组与字符串的联系与区别4、二维字符数组的含义及定义5、字符数组的初始化6、C语言字符串处理的常用函数及使用方法任务6:字符数组相关知识:一维字符数组的含义与定义C语言中,一维字符数组是由一系列字符组成的数据结构。它可以用来存储和处理字符串。在定义一维字符数组时,需要指定数组的大小示例: charmyArray[5];

在这个示例中,myArray是一个包含5个字符的一维字符数组。

你可以通过索引来访问数组中的每个字符,索引从0开始,最

大索引为数组大小减1。例如,要访问数组中的第一个字符,

可以使用myArray[0]。任务6:字符数组相关知识:字符串C语言中,字符串通常被表示为一个字符数组,其中包含了一个以空字符('\0')结尾的字符序列。这个特性使得我们可以使用字符数组来存储和操作字符串。示例:

charstr[]="HelloWorld!";

在C语言中,字符串常量(如“HelloWorld!”)在内存中是以字符数组

形式存储的,并且在末尾自动添加空字符('\0')以标识字符串的结束。C 语言中的字符串通常是通过字符数组和字符串函数进行处理的,而不

是直接通过字符串常量进行操作。任务6:字符数组相关知识:C语言中字符数组与字符串的联系与区别联系:字符数组可以存储字符串,即一个字符串可以存储在一个字符数组中。字符串的存储方式和字符数组类似,都是以字符数组的形式存储的。区别:字符数组是一个普通的字符数组,而字符串则是一个以空字符'\0'结尾的字符数组。字符数组的元素可以是任何字符,而字符串必须是一个以空字符结尾的字符序列。任务6:字符数组相关知识:二维字符数组的含义及定义C语言中的二维字符数组是一个包含多个字符串的数组,每个字符串都是一个一维字符数组。定义: char数组名[第一维大小][第二维大小];

其中,第一维大小表示数组的行数,第二维大小表示数组的列数。示例:charc[3][5];该数组可以存储3个长度为4的字符串。可以使用下标运算符

[]

来访问数组中的元素。例如,要访问第一行第一列的元素,可以使用

c[0][0]。需要注意的是,二维字符数组中的每一行必须以空字符

\0

结尾,以表示字符串的结束。在上面的示例中,数组

c

中的每个字符串都需要在末尾添加一个空字符,以便在读取或输出时正确识别字符串的结束位置。任务6:字符数组相关知识:字符数组的初始化直接赋值:

chararr[6]={'H','e','l','l','o',‘\0’};采用字符串常量初始化:

chararr[6]=“Hello”; chararr[]="Hello";任务6:字符数组相关知识:C语言字符串处理的常用函数及使用方法strlen()函数:用于计算字符串的长度strcpy():将一个字符串复制到另一个字符数组中strcmp():比较两个字符串strcat():将两个字符串拼接起来#include<string.h>intmain(){charsrc[]="hello";chardest[6];strcpy(dest,src);printf("Copiedstring:%s\n",dest);return0;}任务6:字符数组设计思路数据存储任务中国家有6个字符串,可以采用二维字符数组表示;对应的文章数量用一维整型数组表示。charcountries[][20]={"China","Canada",

"France","USA","England","Germany"};任务6:字符数组设计思路排序算法任务中明确要求用选择排序算法,算法已经在前面章节中具体描述。需要注意,按文章数量排序,进行数据交换时,相对应的国家也需要进行位置交换。任务4:字符数组设计思路任务6:字符数组设计思路:自然语言描述Step1.创建两个数组,一个用于存储国家名称,一个用于存储发文数量。数组的长度应与国家数量相同。Step2.初始化国家名称数组和发文数量数组,将每个国家的名称和发文数量存储到相应的数组中。Step3.使用选择排序算法对发文数量数组进行降序排序。选择排序算法通过每次选择最大的元素并将其放置在正确的位置来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论