实验5数组 习题及答案
- 格式:doc
- 大小:85.00 KB
- 文档页数:10
数组练习及答案数组练习121、合法的数组定义是___ _____.A) int a[6]={"string"};B) int a[5]={0,1,2,3,4,5};C) char a={"string"};D) char a[]={0,1,2,3,4,5};122、要求下⾯的程序运⾏后,显⽰如下结果:2 10 4 61 52 32 4 7 85 1 3 2则程序中的划线处应填⼊___ _____.#include <>void main( ){ int a[4][4]={ ________ };int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++) printf("%4d",a[i][j]);printf("\n"); }}A) {1,5,2,3},{2,4,7,8},{5,1,3,2}B) {2,10,4,6},{1,5,2,3},{2,4,7,8},{5,1,3,2}C) {5,1,3,2},{2,4,7,8},{1,5,2,3}D) {2,1,2,5},{10,5,4,1},{4,2,7,3},{6,3,8,2}123、给出以下定义:char x[ ]="abcdefg";char y[ ]={'a','b','c','d','e','f','g'};则正确的叙述为___ _____.A) 数组x和数组y等价B) 数组x和数组y的长度相同C) 数组x的长度⼤于数组y的长度D) 数组x的长度⼩于数组y的长度124、定义如下变量和数组:int i;int x[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};则下⾯语句的输出结果是___ _____.for(i=0;i<4;i++) printf("%3d",x[i][3-i]);A) 1 5 9 13 B) 1 6 11 16C) 4 7 10 13 D) 4 8 12 16126、若希望下⾯的程序运⾏后输出45,程序空⽩处的正确选择是___ _____.#include <>void main( ){ int i,j=10,a[ ]={1,3,5,7,9,11,13,15};for( ____________ )j+=a[i];printf("%d\n",j);}A) i=5;i>1;i-- B) i=0;i<7;++iC) i=5;i>=1;--i D) i=2;i<6;++i127、若有以下说明:char s1[ ]={"tree"},s2[]={"flower"}; ,则以下对数组元素或数组的输出语句中,正确的是__ ___.A) printf("%s%s",s1[5],s2[7]);B) printf("%c%c",s1,s2);C) puts(s1);puts(s2); D) puts(s1,s2);128、下列⼀维数组初始化语句中,正确且与语句float a[ ]={0,3,8,0,9};等价的是_____ ___.A) float a[6]={0,3,8,0,9};B) float a[4]={0,3,8,0,9};C) float a[7]={0,3,8,0,9};D) float a[5]={0,3,8,0,9};129、运⾏下⾯程序段的输出结果是___ _____.char s1[10]={'S','e','t','\0','u','p','\0'};printf("%s",s1);A) Set B) Setup C) Set up D) 'S''e''t'130、以下程序段的输出结果是____ ____.char s[ ]="an apple";printf("%d\n",strlen(s));A) 7 B) 8 C) 9 D) 10131、若有说明:char c[10]={'E','a','s','t','\0'};,则下述说法中正确的是_____ _____.A) c[7]不可引⽤B) c[6]可引⽤,但值不确定C) c[4]不可引⽤D) c[4]可引⽤,其值为空字符132、下列初始化语句中,正确且与语句char c[ ]="string";等价的是____ ____.A) char c[ ]={'s','t','r','i','n','g'};B) char c[ ]='string';C) char c[7]={'s','t','r','i','n','g','\0'};D) char c[7]={'string'};133、若有说明char c[7]={'s','t','r','i','n','g'};则对元素的⾮法引⽤是____ ____.A) c[0] B) c[9-6] C) c[4*2] D) c[2*3]134、如有说明:char s1[5],s2[7]; ,要给数组s1和s2整体赋值,下列语句中正确的是____ ____.A) s1=getchar(); s2=getchar();B) scanf("%s%s",s1,s2);C) scanf("%c%c",s1,s2);D) gets(s1,s2);135、下列⼀组初始化语句中,正确的是___ _____.A) int a[8]={ }; B) int a[9]={0,7,0,4,8};C) int a[5]={9,5,7,4,0,2}; D) int a[7]=7*6;136、以下程序输出的结果是____ _____.#include <>void main( ){ char str[ ]="1a2b3c"; int i;for(i=0;str[i]!='\0';i++)if(str[i]>='0'&&str[i]<='9') printf("%c",str[i]);printf("\n");}A) 9 B) 1a2b3cC) abc D) 123137、以下程序输出的结果是___ _____.#include <>void main( ){ int a[ ]={5,4,3,2,1},i,j;long s=0;for(i=0;i<5;i++) s=s*10+a[i];printf("s=%ld\n",s);}A) s=12345 B) s=5 4 3 2 1C) s=54321 D) 以上都不对138、以下程序输出的结果是____ ____.#include <>void main( ){ int a[ ]={1,2,3,4,5},i,j,s=0;for(i=0;i<5;i++) s=s*10+a[i];printf("s=%d\n",s);}A) s=12345 B) s=1 2 3 4 5C) s=54321 D) s=5 4 3 2 1139、在定义int a[5][6];后,数组a中的第10个元素是.________(设a[0][0]为第⼀个元素)A) a[2][5] B) a[2][4] C) a[1][3] D) a[1][5]140、当接受⽤户输⼊的含有空格的字符串时,应使⽤____ ____函数.A) gets( ) B) getchar( )C) scanf( ) D) printf( )141、以下程序执⾏时输⼊Language Programming<回车>,输出结果是____ ____.#include <>void main( ){ char str[30];gets(str);printf("str=%s\n",str);}A) Language ProgrammingB) LanguageC) str=LanguageD) str=Language Programming142、以下⼀维数组a的正确定义是___ _____ .A) int a(10); B) int n=10,a[n];C) int n; D) #define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];143、以下对⼆维数组a进⾏正确初始化的是__ _____.A) int a[2][3]={ {1,2},{3,4},{5,6} };B) int a[ ][3]={1,2,3,4,5,6 };C) int a[2][ ]={1,2,3,4,5,6}; D) int a[2][ ]={ { 1,2},{3,4}};144、以下关于数组的描述正确的是____ ______.A) 数组的⼤⼩是固定的,但可以有不同类型的数组元素。
实验2答案五.程序改错#include<stdi o.h>int main(void){int x=3,y;y = x*x;printf("%d = %d * %d\n",y,x,x); /* 输出*/printf("%d * %d = %d\n",x,x,y);return 0;}六、一般编程题6.1#include<stdio.h>int main(void){int x,y;printf("Input x: ");scanf("%d",&x);printf("Input y: ");scanf("%d",&y);printf("%d + %d = %d\n",x,y,x+y);printf("%d - %d = %d\n",x,y,x-y);printf("%d * %d = %d\n",x,y,x*y);printf("%d / %d = %d\n",x,y,x/y);printf("%d %% %d = %d\n",x,y,x%y);return 0;}6.2#include<stdio.h>int main(void){ float x; double y;printf("Input x: ");scanf("%f",&x);printf("Input y: ");scanf("%lf",&y);printf("%f + %f = %f\n",x,y,x+y);printf("%f - %f = %f\n",x,y,x-y);printf("%f * %f = %f\n",x,y,x*y);printf("%f / %f = %f\n",x,y,x/y);return 0;}6.3#include<stdio.h>int main(void){ char c;printf("Input c: ");scanf("%c",&c);printf("%c\n",c+32);return 0;}6.4#include<stdio.h>int main(void){int celsius,fahr;fahr = 150;celsius = 5*fahr/9 - 5*32/9;printf("fahr = %d, celsius = %d\n", fahr, celsius);return 0;} 如果使用公式9)32(5-⨯=f c 计算结果不一样,celsius = 65。
《Visual Basic 6.0程序设计》实验报告(五)一、实验名称:数组的应用(4学时)二、实验目的:1.掌握数组的声明和数组元素的引用;2.掌握静态数组和动态数组的声明和使用;3.学会应用数组解决与数组有关的常用算法问题;4.掌握控件数组的建立和应用。
三、实验环境多媒体计算机WindowsXP操作系统Visual Basic 6.0四、实验内容及实验步骤(或记录)1.输入10名同学的成绩,求平均分、最高分和最低分。
设计步骤如下:①在窗体上添加3个标签(Label1、Label2和Label3)和3个文本框(Text1、Text2和Text3),设计界面如图7.2所示。
各控件的主要属性和作用如表1所示。
控件的属性和作用②编写程序代码如下:Private Sub Command1_Click()Dim Score(1 To 10) As Integer '声明存放成绩的数组ScoreDim i As Integer,Max As Integer,Min As Integer,Average As SingleFor i = 1 To 10 '逐一输入每个同学的成绩Score (i) = Val (InputBox ("输入第" & Str(i)& "个学生的成绩","成绩统计",""))Next iEnd SubPrivate Sub Command2_Click()Dim i As IntegerDim sum As Single, aver As Singlesum = Score (1) ' sum 用于存放总成绩,初值为数组中的第一个元素Max = Score (1) ' 设变量Max的初值为数组中的第一个元素Min = Score (1) ' 设变量Min的初值为数组中的第一个元素For i = 2 To 10 ' 通过循环依次比较,求最大、最小值;求总和If Score(i) > Max Then Max = Score(i)If Score(i) < Min Then Min = Score(i)sum = sum + Score(i)Next iaver = sum / 10 ' 求平均值Text1.Text = Format (Average, "0.00 " ) ' 以两位小数显示平均值Text2.Text = MaxText3.Text = MinEnd Sub2.生成20个0到100之间的随机整数存于数组A,然后将这20个数按递增顺序排序。
C程序设计(数组)习题与答案C程序设计(数组)习题与答案数组是C语言中常用的数据结构之一,它可以存储多个相同类型的元素。
掌握数组的使用对于C程序设计至关重要,下面将为大家介绍一些关于C数组的习题及其答案。
1. 习题一:计算数组元素的和题目描述:编写一个程序,计算给定数组中所有元素的和,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个元素的整型数组int sum = 0; // 用于存储和的变量// 遍历数组,累加每个元素的值for (int i = 0; i < 5; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);return 0;}```2. 习题二:查找数组中的最大值题目描述:编写一个程序,找出给定整型数组中的最大值,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[7] = {4, 7, 2, 9, 1, 5, 8}; // 定义一个包含7个元素的整型数组int max = arr[0]; // 假设第一个元素为最大值// 遍历数组,比较每个元素的值与当前最大值的关系for (int i = 1; i < 7; i++) {if (arr[i] > max) {max = arr[i];}}printf("数组中的最大值为:%d\n", max);return 0;}```3. 习题三:查找数组中的特定元素题目描述:编写一个程序,在给定整型数组中查找是否存在指定元素,并输出结果。
解题思路:```c#include <stdio.h>int main() {int arr[6] = {3, 6, 9, 2, 5, 8}; // 定义一个包含6个元素的整型数组 int target = 2; // 指定要查找的元素int found = 0; // 用于标记是否找到目标元素的变量// 遍历数组,比较每个元素的值与目标值的关系for (int i = 0; i < 6; i++) {if (arr[i] == target) {found = 1;break;}}if (found) {printf("数组中存在目标元素:%d\n", target);} else {printf("数组中不存在目标元素:%d\n", target);}return 0;}```4. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。
VB程序设计实验五实验目的●掌握一维数组和二维数组的操作●学习跟数组相关的控件:列表框和组合框复习1.列表框列表框(ListBox)控件允许用户查看和选择列表中的多个元素。
表5-11 列表框的常用属性和事件2.组合列表框(ComboBox)整合了列表框和文本框的功能,以一个文本框控件(TextBox)右边加上一个向下箭头的样式显示。
有Simple(简单组合框)、DropDown(下拉组合框)和DropDownList(下拉列表框)。
其中,Simple选项不显示下拉箭头,而是在控件的旁边显示一个滚动条;DropDown风格(默认值)在单击向下箭头时显示一个下拉列表,且在ComboBox中输入一个值;DropDownList显示一个下拉列表,但不允许用户在ComboBox中输入。
表5-13 组合列表框的常用属性和事件(1) Items.Count属性:列表框或组合框中项目数量。
最后一项的序号为Items.Count-1,该属性只能在程序中设置或引用。
(2) Text属性:被选定的选项的文本内容。
该属性只能在程序中设置或引用。
注意:ListBox1.Items(ListBox1.SelectedIndex)等于ListBox1.Text。
(3) Items.Add方法把一个选项加入列表框,格式:对象.Items.Add(选项);如:ListBox1.Items.Add("周海涛")(4) Insert方法在指定位置插入一个项目。
格式:对象.Items.Insert(序号, 添加项内容)(5)Items.Remove方法从列表框中删除指定的项。
格式:对象. Items.Remove (选项)。
例如:ListBox1.Items.Remove ("华成")(6)Items.RemoveAt方法格式:对象.RemoveAt(Index)从列表框中删除指定的项。
Index表示被删除项目在列表框中的位置,从0开始。
数据结构-第5章--数组练习题第5章数组一、选择题3.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(A)。
A.BA+141B.BA+180C.BA+222D.BA+2254.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(A)。
A.808B.818C.1010D.10205.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是()。
1195A.1175B.1180C.1205D.12107.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。
供选择的答案:A.198B.195C.1972+64某3=19410.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(iA.i某(i-1)/2+jB.j某(j-1)/2+iC.i某(i+1)/2+jD.j某(j+1)/2+i11.设A是n某n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为(C)。
A.i(i-l)/2+jB.j(j-l)/2+iC.j(j-l)/2+i-1D.i(i-l)/2+j-112.A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(AB)。
数组题参考答案数组题参考答案在计算机科学中,数组是一种用于存储和管理一组相同类型数据的数据结构。
它是一种非常重要的数据结构,被广泛应用于各种编程语言和算法中。
在编程中,经常会遇到与数组相关的题目,这些题目既有基础的数组操作,也有一些较为复杂的问题。
下面,我将为大家提供一些常见数组题目的参考答案。
1. 数组反转题目描述:给定一个数组,将其反转。
解题思路:可以使用双指针法,一个指针指向数组的起始位置,另一个指针指向数组的末尾位置。
然后交换两个指针所指向的元素,并分别向中间移动,直到两个指针相遇。
```pythondef reverse_array(arr):left = 0right = len(arr) - 1while left < right:arr[left], arr[right] = arr[right], arr[left]left += 1right -= 1return arr```2. 数组去重题目描述:给定一个数组,删除其中重复的元素。
解题思路:可以使用一个集合来存储已经出现过的元素,然后遍历数组,将未出现过的元素添加到集合中。
```pythondef remove_duplicates(arr):unique_elements = set()result = []for num in arr:if num not in unique_elements:unique_elements.add(num)result.append(num)return result```3. 数组求和题目描述:给定一个数组,计算其中所有元素的和。
解题思路:可以使用一个变量来记录累加的和,然后遍历数组,将每个元素加到累加和中。
```pythondef array_sum(arr):sum = 0for num in arr:sum += numreturn sum```4. 数组中的最大值和最小值题目描述:给定一个数组,找出其中的最大值和最小值。
第5章数组习题参考答案第1题'方法1Dim a(), b(), c() '定义a,b数组用于存放两组数据,C数组存放a,b相加的结果a = Array(1, 3, 5, 2, 4, 18, 50, 25) 'a数组赋值b = Array(5, 27, 30, 35, 60, 41, 87, 33) 'b数组赋值n = UBound(a) '计算数组最大下标For i = 0 To n '输出数组aPrint a(i);Next iPrintFor i = 0 To n '输出数组bPrint b(i);Next iPrintReDim c(0 To n) '定义(确定)数组c实际大小For i = 0 To nc(i) = a(i) + b(i)Next iFor i = 0 To n '输出数组cPrint c(i);Next iPrint'方法2Dim a(0 To 7), b(0 To 7), c() '定义a,b数组存放两组数据,C数组存放a,b相加的结果n = UBound(a) '计算数组最大下标For i = 0 To n '数组a赋值、输出a(i) = Val(InputBox("输入数据"))Print a(i);Next iPrintFor i = 0 To n '输出数组bb(i) = Val(InputBox("输入数据"))Print b(i);Next iPrintReDim c(0 To n) '定义(确定)数组c实际大小For i = 0 To nc(i) = a(i) + b(i)Next iFor i = 0 To n '输出数组cPrint c(i);Next iPrint第2题'方法1Dim a() '定义a,b数组用于存放两组数据,C数组存放a,b相加的结果x = Val(InputBox("输入行数"))y = Val(InputBox("输入列数"))ReDim a(1 To x, 1 To y)For i = 1 To x '数组a赋值For j = 1 To ya(i, j) = Int(Rnd() * 100)Next jNext iFor i = 1 To x '输出a数组For j = 1 To yPrint a(i, j);Next jPrintNext iPrintMax = a(1, 1) '设最大数为a(1,1)row = 1 '则最大数行下标为1col = 1 '则最大数列下标为1For i = 1 To x '求最大数max及其所在的行row、列colFor j = 1 To yIf Max < a(i, j) ThenMax = a(i, j)row = icol = jEnd IfNext jNext iPrint "最大数为:"; Max; "行为:"; row; "列为:"; col'方法2Dim a() '定义a,b数组用于存放两组数据,C数组存放a,b相加的结果x = Val(InputBox("输入行数"))y = Val(InputBox("输入列数"))ReDim a(1 To x, 1 To y)For i = 1 To xFor j = 1 To ya(i, j) = Int(Rnd() * 100) '数组a赋值Print a(i, j); '数组a输出Next jPrintNext iMax = a(1, 1) '设最大数为a(1,1)row = 1 '则最大数行下标为1col = 1 '则最大数列下标为1For i = 1 To x '求最大数max及其所在的行row、列col For j = 1 To yIf Max < a(i, j) ThenMax = a(i, j)row = icol = jEnd IfNext jNext iPrint "最大数为:"; Max; "行为:"; row; "列为:"; col第3题'方法1Dim a(1 To 10) '定义a数组存放10个数据For i = 1 To 10 '数组a赋值a(i) = Int(Rnd() * 100)Next iFor i = 1 To 10 '输出数组aPrint a(i);Next iPrint'数组元素数值交换For i = 1 To 5t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To 10 '输出交换后a数组各元素值Print a(i);Next iPrint'方法2Dim a(1 To 10) '定义a数组存放10个数据For i = 1 To 10 '数组a赋值a(i) = Int(Rnd() * 100)Print a(i); '输出数组aNext iPrint'数组元素数值交换For i = 1 To 5t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To 10 '输出交换后a数组各元素值Print a(i);Next iPrint'方法3Dim a(1 To 10) '定义a数组存放10个数据For i = 1 To 10 '数组a赋值a(i) = Val(InputBox("输入数据"))Print a(i); '输出数组aNext iPrint'数组元素数值交换For i = 1 To 5t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To 10 '输出交换后a数组各元素值Print a(i);Next iPrint'方法4 任意多个元素值交换Dim a()n = Val(InputBox("输入数据个数"))ReDim a(1 To n) '定义a数组存放n个数据For i = 1 To n '数组a赋值a(i) = Int(Rnd() * 100)Print a(i); '输出数组aNext iPrint'数组元素数值交换For i = 1 To n \ 2t = a(i)a(i) = a(11 - i)a(11 - i) = tNext iFor i = 1 To n '输出交换后a数组各元素值Print a(i);Next iPrint第4题'方法1Dim a(0 To 10) As Integer '定义a数组存放各分数段统计结果n = Val(InputBox("输入学生人数"))For i = 1 To n '数组a赋值score = Val(InputBox("输入学生成绩"))Print score;If score < 60 Thena(5) = a(5) + 1ElseIf score <= 69 Thena(6) = a(6) + 1ElseIf score <= 79 Thena(7) = a(7) + 1ElseIf score <= 89 Thena(8) = a(8) + 1ElseIf score <= 100 Thena(9) = a(9) + 1End IfNext iPrintPrint "输出各分数段统计结果如下:"Print "<60人数"; a(5)Print "60~69人数"; a(6)Print "70~79人数"; a(7)Print "80~89人数"; a(8)Print "90~100人数"; a(9)'方法2Dim a(0 To 10) As Integer '定义a数组存放各分数段统计结果n = Val(InputBox("输入学生人数"))For i = 1 To n '数组a赋值score = Val(InputBox("输入学生成绩"))Print score;m = score \ 10 '构造m与数组a元素下标对应If m < 6 Thena(5) = a(5) + 1ElseIf m < 7 Thena(6) = a(6) + 1ElseIf score < 8 Thena(7) = a(7) + 1ElseIf score < 9 Thena(8) = a(8) + 1ElseIf score <= 10 Thena(9) = a(9) + 1End IfNext iPrintPrint "输出各分数段统计结果如下:"Print "<60人数"; a(5)Print "60~69人数"; a(6)Print "70~79人数"; a(7)Print "80~89人数"; a(8)Print "90~100人数"; a(9)'方法3Dim a(0 To 10) As Integer '定义a数组存放各分数段统计结果n = Val(InputBox("输入学生人数"))For i = 1 To n '数组a赋值score = Val(InputBox("输入学生成绩"))Print score;m = score \ 10 '构造m与数组a元素下标对应a(m) = a(m) + 1 'm对应的分数段数组元素累加Next iFor i = 0 To 5 '<60分的分数段数组元素累加s = s + a(i)Next iPrintPrint "输出各分数段统计结果如下:"Print "<60人数"; sPrint "60~69人数"; a(6)Print "70~79人数"; a(7)Print "80~89人数"; a(8)Print "90~100人数"; a(9)第5题身份证号码数字编码表'方法1Dim ID As String '定义ID存放身份证号码Dim a(0 To 16) '定义a数组存放身份证号码数字Dim w() '定义w数组存放加权因子Dim y() '定义y数组存放第18位编码表校验码w = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) 'a数组赋值y = Array(1, 0, x, 9, 8, 7, 6, 5, 4, 3, 2) 'b数组赋值ID = InputBox("输入身份证号码")n = Len(ID) '计算身份证号码长度For i = 1 To n '输出数组aChar = Mid(ID, i, 1) '获得身份证号码每一位字符a(i - 1) = Val(Char) '将身份证号码字符转化为数值s = s + a(i - 1) * w(i - 1) '计算权求和sum(ai*wi)Next iy18 = s Mod 11 '计算模y=mod(s,11)Print y(y18) '输出校验码第6题Dim a(1 To 30) As Long '定义a数组存放数列各项a(1) = 1a(2) = 1For i = 3 To 30 '计算数列各项a(i) = a(i - 1) + a(i - 2)Next iFor i = 1 To 30 '输出数列各项Print a(i);Next i第7题Dim a(1 To 15) As String '定义a数组存放产生的字符a(1) = Chr(Int(Rnd() * (90 - 65 + 1) + 65)) '产生第一个字符For i = 2 To 15 '产生其它的字符,比较相同后重新产生a(i) = Chr(Int(Rnd() * (90 - 65 + 1) + 65)) '产生一个新的字符,For j = 1 To i - 1 '新产生的字符与其前产生的字符比较If a(i) = a(j) Then '若与其前产生的字符相同i = i - 1 '则i值减1,达到重新产生的目的Exit ForEnd IfNext jNext iFor i = 1 To 15 '输出数组Print a(i);Next iPrint第8题Dim a() '定义a数组存放数据n = Val(InputBox("数组大小")) '输入数组大小ReDim a(1 To n) '定义实际数组大小For i = 1 To na(i) = Int(Rnd() * 100) '数组赋值Next iFor i = 1 To n '数组输出Print a(i);Next iPrintx = Val(InputBox("插入数组的位置"))y = Val(InputBox("输入插入的数据"))n = n + 1 '计算新数组大小ReDim Preserve a(1 To n) '重新定义新数组大小,保留原数组元素值For i = n To x + 1 Step -1 '从后向前,数组元素值依次后移a(i) = a(i - 1) '数组元素值后移动1位Next ia(x) = y '将数据插入到指定的数组元素For i = 1 To n '数组输出Print a(i);Next iPrint第9题Dim a() '定义a数组存放数据n = Val(InputBox("数组大小")) '输入数组大小ReDim a(1 To n) '定义实际数组大小For i = 1 To na(i) = Int(Rnd() * 100) '数组赋值Next iFor i = 1 To n '数组输出Print a(i);Next iPrinty = Val(InputBox("输入删除的数据"))p = 0 '默认删除的数不在数组中For i = 1 To n '查找删除的数是否在数组中If a(i) = y Then '若删除的数在数组中存在p = 1 '则标记p为1m = i '记录删除的数在数组中的位置m(下标)Exit For '结束查找End IfNext iIf p = 1 Then '若删除的数在数组中存在,则进行删除n = n - 1 '重新设定数组元素个数For i = m To n '从m位置处,数组元素值依次前移a(i) = a(i + 1) '数组元素值前移动1位Next iReDim Preserve a(1 To n) '重新定义新数组大小,保留原数组元素值End IfFor i = 1 To n '数组输出赋值Print a(i);Next iPrint第10题'方法1Dim a() '定义a数组用于存放m*n矩阵数据m = Val(InputBox("输入行数没m"))n = Val(InputBox("输入列数n"))ReDim a(1 To m, 1 To n)For i = 1 To m '数组a赋值For j = 1 To na(i, j) = Int(Rnd() * 100)Next jNext iFor i = 1 To m '输出a数组For j = 1 To nPrint a(i, j);Next jPrintNext iPrints1 = 0 's1存放所有元素的和For i = 1 To m '求所有元素的和For j = 1 To ns1 = s1 + a(i, j) '所有元素累加Next jNext is2 = 0 's2存放非四周的所有元素和For i = 2 To m - 1 '求除去四周的所有元素的和For j = 2 To n - 1s2 = s2 + a(i, j) '非四周元素累加Next jNext is = s1 - s2 '求四周元素的和Print "四周元素和为:"; s'方法2Dim a() '定义a数组用于存放m*n矩阵数据m = Val(InputBox("输入行数没m"))n = Val(InputBox("输入列数n"))ReDim a(1 To m, 1 To n)For i = 1 To m '数组a赋值For j = 1 To na(i, j) = Int(Rnd() * 100)Next jNext iFor i = 1 To m '输出a数组For j = 1 To nPrint a(i, j);Next jPrintNext iPrints1 = 0 's1存放第一行所有元素的和s2 = 0 's2存放最后一行所有元素的和For j = 1 To n '求第一行、最后一行元素的和s1 = s1 + a(1, j) '第一行所有元素累加s2 = s2 + a(m, j) '最后一行所有元素累加Next js3 = 0 's3存放第一列、最后一列元素和For i = 2 To m - 1 '求第一列、最后一列除去第一行、最后一行元素的和s3 = s3 + a(i, 1) + a(i, n) '第一列、最后一列元素累加Next is = s1 + s2 + s3 '求四周元素和Print "四周元素和为:"; s, s1, s2, s3第11题'方法1 定义a、b分别存放运动员号码、成绩Dim a() '定义a数组号码Dim b() '定义b数组存放成绩a = Array("011", "095", "041", "070", "008", "009", "021", "061", "006", "004") 'a数组赋值b = Array(12.4, 11.1, 13.4, 12.1, 12.4, 10.4, 14.4, 15.1, 15.4, 11.4) 'b数组赋值n = UBound(a) '计算数组长度For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'比较交换法排序For i = 0 To n - 1For j = i + 1 To nIf b(i) > b(j) Thent = b(i): b(i) = b(j): b(j) = t '成绩交换s = a(i): a(i) = a(j): a(j) = s '对应的号码交换End IfNext jNext iPrint "排序后成绩为:"For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'方法2 选择法排序,定义a、b分别存放运动员号码、成绩Dim a() '定义a数组号码Dim b() '定义b数组存放成绩a = Array("011", "095", "041", "070", "008", "009", "021", "061", "006", "004") 'a数组赋值b = Array(12.4, 11.1, 13.4, 12.1, 12.4, 10.4, 14.4, 15.1, 15.4, 11.4) 'b数组赋值n = UBound(a) '计算数组长度For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'选择法排序For i = 0 To n - 1k = iFor j = i + 1 To nIf b(k) > b(j) Thenk = jEnd IfNext jt = b(i): b(i) = b(k): b(k) = t '成绩交换s = a(i): a(i) = a(k): a(k) = s '对应的号码交换Next iPrint "排序后成绩为:"For i = 0 To n '输出数组a,bPrint a(i); b(i)Next i'方法3 选择法排序,定义a数组为自定义数据类型,数组元素存放运动员号码与成绩Private Type sport '自定义数据类型,ID存放运动员号码、score存放运动员成绩id As String * 3 '定义运动员号码字段score As Single '定义运动员成绩字段End TypePrivate Sub Command1_Click()Dim a(1 To 10) As sport '定义a数组为自定义类型Dim s As sport '定义s变量自定义类型n = 3 'UBound(a) '计算数组长度For i = 1 To n '数组a元素赋值a(i).id = InputBox("输入第" & i & "个号码")a(i).score = Val(InputBox("输入第" & i & "个成绩"))Next iPrint "排序前成绩为:"For i = 1 To n '输出数组a元素值Print a(i).id; a(i).scoreNext i'比较交换法排序For i = 1 To n - 1k = iFor j = i + 1 To nIf a(k).id > a(j).id Thenk = jEnd IfNext js = a(i): a(i) = a(k): a(k) = s 'a数组元素值交换Next iPrint "排序后成绩为:"For i = 1 To n '输出数组aPrint a(i).id; a(i).scoreNext iEnd Sub。
实验5 数组班级:学号:姓名:日期:一、实验目的(1)掌握一维数组和二维数组的定义、赋值和输入输出方法;(2)掌握字符数组和字符串函数的使用;(3)掌握与数组有关的算法(特别是排序算法)。
二、实验内容1.阅读下面程序,写出程序运行结果,并且上机进行验证。
(1) #include "stdio.h"void main(){int i,n[4]={0,0,0,0};for(i=1;i<4;i++){if (i==3) break;n[i]=n[i-1]+1;}printf("n[i-1]=%d n[i]=%d\n",n[i-1],n[i]);}(2)#include "stdio.h"void main(){char ch[]={'0','1','2','3','4','5','6','7','8','9'};int i=0,m=2,r,x=42; char b[80];while(x){r=x%m; x/=m;b[i++]=ch[r];}for(--i;i>=0;i--)printf("%c",b[i]);printf("\n");}(3)#include "stdio.h"void main(){int a[][3]={9,7,5,3,1,2,4,6,8};int i,j,s1=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++){if(i==j) s1=s1+a[i][j];if(i+j==2) s2=s2+a[i][j];}printf("s1=%d s2=%d",s1,s2);}(4)#include "stdio.h"void main(){int r[5]={1,2,3,4,5};int i,j,a[5][5];for(i=0;i<=4;i++){ for(j=i;j<=4;j++)a[i][j]=r[j-i];for(j=0;j<i;j++)a[i][j]=r[i-j];}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%2d",a[i][j]);printf("\n");}}2.程序填空(根据题意在空白处填入适当的内容,使程序变得完整。
并上机进行调试验证)(1)程序说明:下列程序完成的是插入排序功能:数组a 中存放一个递增数列,输入一个整数x,将它插入到数组中,使之仍为一个有序数列。
#include "stdio.h"#define N 10void main(){int a[11]={1,10,20,30,40,50,60,70,80,90} ,x,i,p;scanf("%d",&x);for(i=0,p=N;i<N;i++)if(x<a[i]){p=i;_break_;}for(i=N-1;i>=p; _i--__)a[i+1]=a[i];_a[p]=x___;printf("%d",x);for(i=0;i<=N;i++)printf("%5d",a[i]);printf("\n");}(2)程序说明:下面程序完成的是折半查找。
A 数组中存放的是n 个由大到小已经排好序的数列,从这n 个数中查找x 的值是否存在。
其基本思想是:在查找范围里,将x 与处于中间位置上的数比较,如果相等,则查找成功,如果小于该元素,则在较小的一半元素里再进行折半查找;如果x大于该元素,则在较大的一半元素里再进行折半查找。
变量top,bottom,mid 分别指向查找范围的顶部、底部和中间位置。
#include "stdio.h"#define n 10main(){int a[n],find;int x,i,top,bottom,mid;printf("input the sorted numbers:\n");for(i=0;i<n;i++)scanf("%d",__&a[i]___);printf("input the number to find:\n");scanf("%d",&x);find=0;top=0;bottom=n-1;if(x<=a[0] && top<=bottom)while(!find && top<=bottom){mid=mid=(bottom+top)/2;if(x==a[mid]){find=1;printf("x=%d position=%d\n",x,mid);}else if(x>a[mid])bottom=mid-1;elsetop=mid+1;}if(find==0) printf("the number %d is not in the table",x);}(3)程序说明:下面程序分别输出方阵中主对角线、副对角线上元素的和suml 和sum2(主对角线为从矩阵的左上角至右下角的连线,副对角线为从矩阵的右上角至左下角的连线).#include"stdio.h"#define SIZE 5void main(){int a[SIZE][SIZE],m,n,sum1,sum2;for(m=0;m<SIZE;m++)for(n=0;n<SIZE;n++)scanf("%d",&a[m][n]);sum1=sum2=__0__;for(m=0;m<SIZE;m++){sum1=sum1+a[m][m];sum2=sum2+a[m][SIZE-1-m];}printf("sum1=%d sum2=%d\n",sum1,sum2);}(4)程序说明:下面程序打印出如下所示的杨辉三角行(打印10 行)。
11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1…….#include"stdio.h"void main(){int i,j,a[10][10]={{1},{1,1}};for(i=2;i<10;i++){a[i][0]=1;_ a[i][i]=1;for(j=0;j<i;j++)a[i][j]=a[i-1][j]+ a[i-1][j-1];}for(i=0;i<10;i++){for(j=0;j<=i;j++)printf("%4d",a[i][j]);printf("\n");}}3.程序设计(根据题意编写程序并上机进行调试)。
(1)编写程序完成如下功能:输入10 个数存入一维数组,然后再按逆序重新存放后输出。
#include <stdio.h>void main(){int a[10],i,temp;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");for(i=0;i<5;i++){temp=a[i];a[i]=a[9-i];a[9-i]=temp;}for(i=0;i<10;i++)printf("%5d",a[i]);printf("\n");}(2)编写程序完成如下功能:从键盘输入两个字符串ch2、ch1,然后将字符串ch2 连接到字符串ch1 的后面,并输出连接后的字符串。
#include <stdio.h>#include <string.h>void main(){char ch1[20],ch2[10];int i,j;scanf("%s",ch1);scanf("%s",ch2);j=strlen(ch1);for(i=0;i<strlen(ch2);i++,j++)ch1[j]=ch2[i];ch1[j]='\0';printf("%s\n",ch1);}(3)编写程序完成如下功能:现有两个已按升序排好的数组,将它们合并为一个升序排序的数组(归并排序)。
算法:两个数组合并时,可为每个数组各安排一个指针,从第一个元素开始依次比较两数组对应元素,小的取下来顺序放入新的数组,取下所指元素的指针后移,再比较,依此类推,直到其中一个数组的元素已全部放入新数组,再把另一数组余下的元素全部顺序放入新数组,归并完成。
编程并上机调试运行。
(1)用选择法对10个整数排序。
10个整数用scanf函数输入。
#include <stdio.h>void main(){int i,j,min,temp,a[11];printf("enter data:\n");for(i=1;i<=10;i++){printf("a[%d]=",i);scanf("%d",&a[i]);}printf("The orginal numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=9;i++){min=i;for(j=i+1;j<=10;j++)if(a[min]>a[j]) min=j;temp=a[i];a[i]=a[min];a[min]=temp;}printf("\n The sorted numbers:\n");for(i=1;i<=10;i++)printf("%5d",a[i]);printf("\n");}(2)有15个数存放在一个数组中,输入一个数,要求用对半查找法找出该数是数组中第几个元素的值。