数组习题参考答案2011
- 格式:ppt
- 大小:487.50 KB
- 文档页数:21
c语言数组练习题及答案第一题:在数组a中,存放有n个学生的成绩.试编一函数:将低于平均分的学生人数m由函数值返回,将低于平均分的分数由数组b带回. int fun(int a[],int n,int b[]) {int i,m=0,aver=0;for(i=0;i<n;i++) aver+=a[i];aver/=n;for(i=0;i<n;i++)if(a[i]<aver) b[m++]=a[i];return m;}第二题:试编一函数:求出1000之间能被7或11整除,但不能同时被7或11整除的所有整数的个数n由函数值返回,并将符合条件的数放在数组a中带回. int fun(int a[]){int i,n=0;for(i=1;i<1000;i++)if((i%7==0&&i%11!=0)||(i%7!=0&&i%11==0)) a[n++]=i;return n;}第三题:试编一函数:将大于整数m且紧靠m的k个素数存入数组a中. void fun(int m,int k,int a[]) {int i,n,data,flag;data=m+1; n=0;while(n<k){flag=1;for(i=2;i<=data/2;i++)if(data%i==0){flag=0; break;}if(flag) a[n++]=data;data++;}}第四题:试编一函数:在数组a中有n个整数,要求把下标从0到p(p小于等于n-1)的数平移到数组的最后.如:原始内容: 1,2,3,4,5,6,7,8,9,10; 当p=4时:移后内容: 6,7,8,9,10,1,2,3,4,5void fun(int a[],int n,int p) {int i,j,t;for(i=0;i<=p;i++){t=a[0];for(j=1;j<n;j++) a[j-1]=a[j];a[n-1]=t;}}第五题:试编一函数:在具有n个数据的数组a中,求出次最大值的下标并由函数值返回.int fun(int a[],int n){int i,j,max,may;if(a[0]>a[1]){max=0; may=1;}else {max=1; may=0;}for(i=2;i<n;i++)if(a[i]>a[max]){may=max;amx=i;}else if(a[i]>a[may]) may=i;return may;}第六题:在数组a中有n个四位数.试编一函数,要求按每个数的后三位的大小进行升序排列,当后三位等相同时,则对这些数值按原始四位数据进行降序排序.将排序后的前10个数存入数组b中.(提示:可采用选择排序)int fun(int a[],int n,int b[]) {int i,j,k,t,m=10;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]%1000<a[k]%1000) k=j;else if(a[j]%1000==a[k]%1000 && a[j]>a[k]) k=j;if(k!=i){t=a[i]; a[i]=a[k]; a[k]=t;}}for(i=0;i<m;i++) b[i]=a[i];return m;}第七题:在三位数(100至999)中寻找符合下面条件的整数.它即是完全平方数,又有两位数字相同.(如:144,676;)并将符合条件数的个数n由函数值返回,符合条件的数存入数组a中返回.int fun(int a[]){int i,j,hun,ten,data,n=0;for(i=10;i<32;i++){j=i*i;if(j>=100&&j<=999){hun=j/100;ten=j%100/10;data=j%10;if(hun==ten||ten==data||data==hun) a[n++]=j;}}return n;}第八题:判断一个长整型数是否为回文数(回文数是指其数字左右对称的整数).当该数是回文数时,函数值返回1,否则返回0.(提示:利用逻辑量flag进行操作). intfun(long m){int i=0,n=0,flag=1,a[20];while(m){a[n]=m%10; m=m/10; n++;}while(i<=n/2 && flag)if(a[i]!=a[--n] flag=0;else i++;return flag;}第九题:在数组a中存有n个数据,试编一函数:依次从数组中取出一个数据,如查该数连续大于该数以后的5个数且该数是奇数,统计出满足此条件数的个数m由函数值返回,并把这些数按从小到大的顺序存入数组b中.int fun(int a[],int n,int b[]) {int i,j,flag,m=0;for(i=0;i<n-5;i++){for(j=i+1;j<=i+5;j++)if(a[i]>a[j]) flag=1;else {flag=0; break;}if(flag==1 && a[i]%2==1) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]>b[j+1]){flag=b[j]; b[j]=b[j+1]; b[j+1]=flag;}return m;}第十题:在数组a中有n个四位数,试编一函数:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数m由函数值返回,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序排序.int fun(int a[],int n,int b[]) {int i,j,m,thou,hun,ten,data;for(i=0;i<n;i++){thou=a[i]/1000;hun=a[i]%1000/100;ten=a[i]%100/10;data=a[i]%10;if(thou+data==hun+ten) b[m++]=a[i];}for(i=0;i<m-1;i++)for(j=0;j<m-1-i;j++)if(b[j]<b[j+1]){data=b[j]; b[j]=b[j+1]; b[j+1]=data;}}第十一题:在数组a中有n=100个人围坐一圈并按顺时针方向从1到n编号,从第s=1个人开始进行从1到m=10的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止,现要求将出圈次序重新存入数组a中.void fun(int a[],int n,int s,int m) {int i,j,k,l,x;i=s-1; k=0; l=n;while(l>0){k++;if(k==m){x=a[i];for(j=i+1;j<n;j++) a[j-1]=a[j];a[n-1]=x;k=0; l--;}else i++;if(i==l) i=0;}}。
第六章 数组习题答案2、0 43、0 64、&a[i] i%4==0 printf("\n");5、i+j==3_ a[i][j]6、127、a[i][j]+b[i][j] printf(“\n ”)8、按行存放9、( a[i]>a[j])10、将串str2复制到串str1中后再将串str3连接到串str1之后三、阅读题1、如右图所示2、AQM3、AzyD4、91985、如右图所示6、927、1,2,5,7,8、29、v1=5,v2=8,v3=6,v4=110、a*b*c*d*四、编程题1(1)选择法排序#include <stdio.h>void main( ){int i,j,n=10,p,a[10];int temp;for(i=0;i<n;i++) scanf("%d",&a[i]);//输入十个数printf("\n 原始的一维数组是:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出原始的一维数组序列 */ for(i=0;i<n-1;i++){ p=i; /*假定第i 趟中最小数的位置是i*/for(j=i+1;j<n;j++)if(a[j]<a[p]) p=j;if(i!=p) {temp=a[i];a[i]=a[p];a[p]=temp;}}printf("\n排序后的一维数组:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出排序后的一维数组序列*/}(2)比较法排序#include<stdio.h>void main( ){int i,j,n=10,p,a[10];int temp;for(i=0;i<n;i++) scanf("%d",&a[i]);//输入十个数printf("\n 原始的一维数组是:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出原始的一维数组序列*/for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]) {temp=a[i];a[i]=a[j];a[j]=temp;}printf("\n排序后的一维数组:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出排序后的一维数组序列*/}2、以在十个数据(由小到大排列的十个数)中插入一个数为例#include <stdio.h>void main( ){int a[11],i,n=10,k; int point;printf("\n 请输入原始数据:\n");for(i=0;i<n;i++) scanf("%d",&a[i]); /*输入原始数据,输入的数据要从小到大*/ printf("\n 原始数据是:\n");for(i=0;i<n;i++) printf("%5d",a[i]); /* 输出原始的一维数组序列*/printf("\n请输入要插入的数");scanf("%d",&k); /*输入要插入的数据*/for(i=0;i<n;i++)if(a[i]>k) {point=i; break;}if(i!=n){for(i=n;i>point;i--) a[i]=a[i-1];a[point]=k;} /*从后向前方式*/elsea[n]=k;printf("插入后的数是:\n");for(i=0;i<n+1;i++) printf("%4d ",a[i]); /* 输出插入后的一维数组序列*/}3、#include <stdio.h>int main(){int i,j,upp,low,dig,spa,oth;char text[3][80];upp=low=dig=spa=oth=0;for (i=0;i<3;i++){ printf("please input line %d:\n",i+1);gets(text[i]);for (j=0;j<80 && text[i][j]!='\0';j++){if (text[i][j]>='A'&& text[i][j]<='Z')upp++;else if (text[i][j]>='a' && text[i][j]<='z')low++;else if (text[i][j]>='0' && text[i][j]<='9')dig++;else if (text[i][j]==' ')spa++;elseoth++;}}printf("\nupper case: %d\n",upp);printf("lower case: %d\n",low);printf("digit : %d\n",dig);printf("space : %d\n",spa);printf("other : %d\n",oth);return 0;}5、以5个数逆序存放为例,将n值修改,则可实现n个数逆序存放#include <stdio.h>#define n 5 //n为符号常量,值为5void main( ){int i,a[n],t;for(i=0;i<n;i++)scanf("%d",&a[i]);//输入n个数for(i=0;i<n/2;i++)//将a[0]与a[4]交换,a[1]与a[3]交换,a[i]与a[n-1-i]交换{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}for(i=0;i<n;i++)//输出n个数printf("%5d",a[i]);printf("\n");}6、杨辉三角#include <stdio.h>void main( ){int i,j,a[10][10];for(i=0;i<10;i++)for(j=0;j<=i;j++)if(j==0||i==j)a[i][j]=1;else 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("%5d",a[i][j]);printf("\n");}}7、提高题:编写程序:#include <stdio.h>#include <string.h>void main (){char s1[80]={0},s2[80]={0};char a;int i,j,k;printf("请输入一段字符s1\n");gets(s1);printf("======================(1)============================\n"); for(i=0;s1[i];i++);printf("%s的长度:%d\n",s1,i);printf("======================(2)============================\n"); for(j=0;s1[j];j++){s2[j]=s1[j];}printf("将一个字符串S1的内容复制给另一个字符串S2:\n");puts(s2);printf("i:%d\n",i);printf("======================(3)============================\n"); for(k=0;k<=j;k++){s1[i]=s2[k];i++;}printf("将两个字符串S1和S2连接起来,结果保存在S1字符串中:\n"); puts(s1);printf("======================(4)============================\n"); printf("请输入要寻找的字母:");scanf("%c",&a);for(i=0;s1[i];i++){if(s1[i]==a)break;}if(!s1[i])printf("\n-1\n");else printf("\n%c在第%d个位置\n",a,i+1);8、与第5题同9、Fibonacci数列前20项数值#include <stdio.h>int main( ){int i; long f[20];f[0]=1;f[1]=1;for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i<20;i++){if(i%5==0) printf("\n");//每行五个元素printf("%10ld",f[i]);}}10、输入10个元素,统计奇数的个数#include <stdio.h>void main( ){int i,num[10],count=0;for(i=0;i<10;i++){printf("请输入第%d个数: ",i+1); /*给予输入提示*/scanf("%d",&num[i]);if(num[i]%2!=0) count++;}printf("奇数个数是:%d\n",count );}11、下面程序的功能是从键盘输入一行字符,统计其中有多少单词。
第七章数组一、单项选择题1.若有说明“int a[3][4]={0};”,则下面正确的是_____。
A.只有元素a[0][0]可得到初值0B. 此说明语句不正确C. 数组a各元素都可得到初值,但其值不一定是0D. 数组a中每个元素均可得到初值02.以下不能正确定义二维数组的选项是_____。
A. int a[2][2]={{1},{2}}B. int a[2][2]={{1},2,3}C. int a[2][]={{1,2},{3,4}}D. int a[][2]={1,2,3,4}3.在下列对字符数组进行初始化中正确的是_____。
A.char s1[]=”abcd”B.char s2[3]=”xyz”C.char s3[][]={…a‟,‟x‟,‟y‟}D.char s4[2][3]={“xyz”,”mnp”}二、写出下列程序的运行结果有以下程序:1. #include <iostream.h>int main (){int a[]={4,0,2,3,1},i,j,t;for(i=1;i<5;i++){t=a[i];j=i-1;while(j>=0&&t>a[j]){a[j+1]=a[j];a[j]=t;j--;}}for(i=0;i<5;i++){cout<<a[i]<<‟…;}return 0;}三、编程题1. 任意输入15个正整数,将这15个数排成一圈,编程找出其中的连续4个数,使得它们的和最大(不小于任意其他连续4个数的和)。
2. 设有4行4列队数组b,其元素为b[i][j]=i+j+1(i,j=0,1,2,3)。
编程实现:(1)求第二列元素之和。
(2)求第三列元素的平均值。
(3)求数组b中的最大数,最小数及主对角线元素的平方和。
第七章数组一、单项选择题二、写出下列程序的运行结果1. 4 3 2 1三、编程题1.#include <iostream.h>void main(){const int n=15;int i,a[n];cout<<"Input"<<n<<"positive integers:"<<endl;for(i=0;i<n;i++)cin>>a[i];int max4=0,s4,start,t1,t2,t3,t4;for(i=0;i<n;i++){t1=i%n;t2=(i+1)%n;t3=(i+2)%n;t4=(i+3)%n;s4=a[t1]+a[t2]+a[t3]+a[t4];if(s4>max4){max4=s4;start=i;}}t1=start;t2=(start+1)%n;t3=(start+2)%n;t4=(start+3)%n;cout<<"max4="<<a[t1]<<"+"<<a[t2]<<"+"<<a[t3]<<"+"<<a[t4]<<"最大,这四个数的下标为"<<t1<<','<<t2<<','<<t3<<','<<t4<<endl;}输出结果:Input 15 positive integers:88 99 1 2 3 4 5 6 7 8 9 10 55 66 1max4=66+1+88+99 最大,这四个数的下标为13,14,0,12.#include <iostream.h>void main(){int b[4][4],i,j;/*为数组b各元素赋值*/for(i=0;i<4;i++){for(j=0;j<4;j++){b[i][j]=i+j+1;cout<<" "<<b[i][j];}cout<<endl;}cout<<"--The result--"<<endl;//求第二行元素之和int sum_line2=0;for(j=0;j<4;j++)sum_line2+=b[1][j];cout<<"sum_line2="<<sum_line2<<endl;//求第三行元素之平均值int sum_col3=0;for(i=0;i<4;i++)sum_col3+=b[i][2];cout<<"ave_col3="<<sum_col3/4.0<<endl;//求最大数,最小数及主对角线元素之平方和int max_elem=b[0][0],min_elem=b[0][0],sum_diag=0;for(i=0;i<4;i++){for(j=0;j<4;j++){if(b[i][j]>max_elem)max_elem=b[i][j];if(b[i][j]<min_elem)min_elem=b[i][j];if(i==j)sum_diag+=b[i][j]*b[i][j];}}cout<<"max_elem="<<max_elem<<endl;cout<<"min_elem="<<min_elem<<endl;cout<<"sum_diag="<<sum_diag<<endl;}输出结果:1 2 3 42 3 4 53 4 5 64 5 6 7--the result—sum_line2=14ave_col3=4.5max_elem=7min_elem=1sum_diag=84。
第六章数组习题参考答案6-1 请同学上机运行代码。
6-2Option ExplicitOption Base 1Private Sub Command1_Click()Dim i As Integer, t As IntegerDim a(15) As IntegerRandomizeFor i = 1 To 15a(i) = Int(100 * Rnd)Text1 = Text1 & Str(a(i))Next iFor i = 1 To 7t = a(i)a(i) = a(16 - i)a(16 - i) = tNext iFor i = 1 To 15Text2 = Text2 & Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Text1 = ""Text2 = ""End SubPrivate Sub Command3_Click()EndEnd Sub6-3Option ExplicitDim a(20) As IntegerPrivate Sub Command1_Click()Dim i As IntegerRandomizeFor i = 1 To 20a(i) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Dim i As Integer, j As Integer, f As BooleanDim n As IntegerFor i = 1 To 20f = TrueFor j = i + 1 To 20If a(i) = a(j) Then f = FalseNext jIf f = True Then n = n + 1Next iText2 = nEnd SubPrivate Sub Command3_Click()Text1 = ""End SubPrivate Sub Command4_Click()EndEnd Sub6-4Option ExplicitDim a(20) As IntegerPrivate Sub Command1_Click()Dim i As IntegerRandomizeFor i = 1 To 20a(i) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i))Next iEnd SubPrivate Sub Command2_Click()Dim i As Integer, j As Integer, max As IntegerDim n As Integer, w As Integer, p As IntegerFor i = 1 To 20n = 0: p = iFor j = 1 To 4If i > 20 Then p = p - 20n = n + a(p)Next jIf n > max Thenmax = nw = iEnd IfNext iText2 = maxPicture1.Print w & "--" & w + 4End SubPrivate Sub Command3_Click()Text1 = ""End SubPrivate Sub Command4_Click()EndEnd Sub6-5Dim a(5, 5) As IntegerPrivate Sub Command1_Click()For i = 1 To 4For j = 1 To 5a(i, j) = Int(9 * Rnd) + 1Picture1.Print a(i, j);Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()For j = 1 To 5s = 0For i = 1 To 4s = s + a(i, j)Next iText1 = Text1 & Str(s)Next jEnd SubPrivate Sub Command3_Click()For i = 1 To 4s = 0For j = 1 To 5s = s + a(i, j)Next jText2 = Text2 & Str(s) & Chr(13) & Chr(10)Next iEnd SubPrivate Sub Command4_Click()Text1 = ""Text2 = ""Picture1.ClsEnd SubPrivate Sub Command5_Click()EndEnd Sub6-6Option ExplicitPrivate Sub Command1_Click()Dim a(5, 5), i As Integer, j As IntegerDim n As Integer, m As Integer, t As IntegerRandomizeFor i = 1 To 5For j = 1 To 5 - 1a(i, j) = Int(40 * Rnd) * 2 + 10Next jNext iFor i = 1 To 5For j = 5 To 6 - i Step -1a(i, j) = Int(40 * Rnd) * 2 + 11Next jNext iFor i = 1 To 5For j = 1 To 5Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iEnd Sub6-7 同6-46-8Dim a(5, 5) As IntegerPrivate Sub Command1_Click()RandomizeFor i = 1 To 5For j = 1 To 5a(i, j) = Int(100 * Rnd) + 1Picture1.Print Right(" " & a(i, j), 4);Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()For i = 1 To 5For j = 1 To 5s = s + a(i, j)Next jNext iText1 = Str(s)End SubPrivate Sub Command3_Click()For i = 1 To 5For j = 1 To 5If i = 1 Or j = 1 Or i = 5 Or j = 5 Thens = s + a(i, j)End IfNext jNext iText2 = Str(s)End SubPrivate Sub Command4_Click()For i = 1 To 5For j = 1 To 5If i = j Or j = 6 - i Thens = s + a(i, j)End IfNext jNext iText3 = Str(s)End Sub6-9Option ExplicitPrivate Sub Command1_Click()Dim a() As Integer, i As Integer, j As IntegerDim max As Integer, k As Integer, f As BooleanDim n As Integer, m As Integer, t As Integern = InputBox("输入矩阵的行数:")m = InputBox("输入矩阵的列数:")ReDim a(n, m)RandomizeFor i = 1 To nFor j = 1 To ma(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To nmax = 0For j = 1 To mIf a(i, j) > max Thenmax = a(i, j)t = jEnd IfNext jFor k = 1 To nIf a(k, t) < max Then Exit ForNext kIf k > n ThenPicture1.Print "鞍点:"; a(i, t); "第"; i; "行"; t; "列"f = TrueEnd IfNext iIf f = False Then Picture1.Print "没有鞍点"End SubPrivate Sub Command2_Click()Text1 = ""Picture1.ClsEnd SubPrivate Sub Command3_Click()EndEnd Sub6-10Option ExplicitPrivate Sub Form_Click()Dim a() As Integer, n As IntegerDim i As Integer, j As Integern = InputBox("层数")ReDim a(n, n)For i = 1 To nPrint Tab(20 - 2 * i);For j = 1 To iIf i = 1 Or i = j Thena(i, j) = 1Elsea(i, j) = a(i - 1, j - 1) + a(i - 1, j)End IfPrint Left(a(i, j) & " ", 4);Next jPrintNext iEnd Sub6-11Option ExplicitPrivate Sub Command1_Click()Dim a(4, 5), i As Integer, j As IntegerDim b(4) As Integer, max As Integer, min As IntegerDim n As Integer, m As Integer, t As IntegerRandomizemax = 0: min = 32767For i = 1 To 4For j = 1 To 5a(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))b(i) = b(i) + a(i, j)Next jText1 = Text1 & vbCrLfIf max < b(i) Thenmax = b(i): m = iElseIf min > b(i) Thenmin = b(i): n = iEnd IfNext iLabel1.Caption = "max行和:" & max & " min行和:" & min & vbCrLf & "max 行:" & m & " min行:" & n & " 交换这两行"For j = 1 To 5t = a(m, j)a(m, j) = a(n, j)a(n, j) = tNext jFor i = 1 To 4For j = 1 To 5Text2 = Text2 & Str(a(i, j))Next jText2 = Text2 & vbCrLfNext iEnd Sub6-12Option ExplicitPrivate Sub Command1_Click()Dim a(), i As Integer, j As IntegerDim b(4) As Integer, max As Integer, min As IntegerDim n As Integer, m As Integer, t As IntegerRandomizen = InputBox("矩阵阶数n:")ReDim a(n, n)For i = 1 To nFor j = 1 To na(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To nFor j = 1 To nText2 = Text2 & Str(a(j, i))Next jText2 = Text2 & vbCrLfNext iEnd SubPrivate Sub Command2_Click()Text1 = ""Text2 = ""End SubPrivate Sub Command3_Click()EndEnd Sub6-13Option ExplicitOption Base 1Private Sub Command1_Click()Dim a(3, 3) As Integer, i As Integer, j As Integer Dim max As Long, k As Long, f As IntegerDim n As Integer, m As IntegerRandomizeFor i = 1 To 3For j = 1 To 3a(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To 3 '主对角线方向m = ik = 1For j = 1 To 3k = k * a(m, j)m = m + 1If m > 3 Then m = 1Next jIf k > max Thenmax = kn = if = 1End IfNext iFor i = 1 To 3 '辅对角线方向m = ik = 1For j = 1 To 3k = k * a(j, m)m = m - 1If m < 1 Then m = 3Next jIf k > max Thenmax = kn = if = 2End IfNext iPicture1.Print "最大组元素:"If f = 1 ThenFor i = 1 To 2Picture1.Print "a("; n; ","; i; ")="; a(n, i); " ";n = n + 1If n > 3 Then n = 1Next iPicture1.Print "a("; n; ","; i; ")="; a(n, i)ElseIf f = 2 ThenFor i = 1 To 2Picture1.Print "a("; i; ","; n; ")="; a(i, n); " ";n = n - 1If n < 1 Then n = 3Next iPicture1.Print "a("; i; ","; n; ")="; a(i, n)End IfPicture1.Print "乘积="; maxEnd SubPrivate Sub Command2_Click()Text1 = ""Picture1.ClsEnd SubPrivate Sub Command3_Click()EndEnd Sub6-14Option ExplicitPrivate Sub Command1_Click()Dim a(3, 3) As Integer, i As Integer, j As IntegerDim k As Integeri = 3: j = 2: a(i, j) = 1: k = 1Do Until k > 9k = k + 1If i + 1 > 3 And j + 1 <= 3 Theni = 1: j = j + 1ElseIf i + 1 <= 3 And j + 1 > 3 Theni = i + 1: j = 1ElseIf i + 1 > 3 And j + 1 > 3 Theni = i - 1ElseIf i + 1 <= 3 And j + 1 <= 3 And a(i + 1, j + 1) <> 0 Theni = i - 1Elsei = i + 1: j = j + 1End Ifa(i, j) = kLoopFor i = 1 To 3For j = 1 To 3Picture1.Print a(i, j);Next jPicture1.PrintNext iEnd SubPrivate Sub Command2_Click()Dim a() As Integer, i As Integer, j As IntegerDim k As IntegerDim n As Integern = InputBox("幻方阶数:")ReDim a(n, n)i = n: j = (n + 1) / 2: a(i, j) = 1: k = 1Do Until k > n * nk = k + 1If i + 1 > n And j + 1 <= n Theni = 1: j = j + 1ElseIf i + 1 <= n And j + 1 > n Theni = i + 1: j = 1ElseIf i + 1 > n And j + 1 > n Theni = i - 1ElseIf i + 1 <= n And j + 1 <= n And a(i + 1, j + 1) <> 0 Theni = i - 1Elsei = i + 1: j = j + 1End Ifa(i, j) = kLoopFor i = 1 To nFor j = 1 To nPicture1.Print Right(" " & a(i, j), 4);Next jPicture1.PrintNext iEnd Sub6-15Option ExplicitOption Base 1Private Sub Command1_Click()Dim a() As Integer, i As Integer, j As IntegerDim max As Long, k As Long, f As IntegerDim n As Integer, m As IntegerRandomizef = InputBox("输入方阵阶数:")ReDim a(f, f)For i = 1 To fFor j = 1 To fa(i, j) = Int(90 * Rnd) + 10Text1 = Text1 & Str(a(i, j))Next jText1 = Text1 & vbCrLfNext iFor i = 1 To f '副对角线方向m = ik = 0For j = 1 To fk = k + a(j, m)m = m - 1If m < 1 Then m = fNext jIf k > max Thenmax = kn = iEnd IfNext iPicture1.Print "max:"; maxFor i = 1 To fPicture1.Print "a("; i; ","; n; ")="; a(i, n)n = n - 1If n < 1 Then n = fNext iEnd SubPrivate Sub Command2_Click()Text1 = ""Picture1.ClsEnd SubPrivate Sub Command3_Click()EndEnd Sub。
第五章数组练习题及答案一、选择题1、判断字符串a和b是否相等,应当使用()A、if(a==b)B、if(a=b)C、if(strcpy(a,b))D、if(strcmp(a,b))2、以下正确的定义语句是()A、int a[1][4]={1,2,3,4,5};B、float x[3][]={{1},{2},{3}};C、long b[2][3]={{1},{1,2},{1,2,3}};D、double y[][3]={0};3、以下各组选项中,均能正确定义二维实型数组a的选项是()A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}};B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}};C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}};D、float a[3][4]; float a[3][ ]; float a[ ][4];4、下面程序的运行结果是()1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB#include "stdio.h"main(){ char str[]="SSSWLIA",c;int k;for(k=2;(c=str[k]!='\0');k++){ switch(c){case 'I':++k;break;case 'L':continue;default:putchar(c);continue;}putchar('*');}}A、SSW*B、SW*C、SW*AD、SW5、下面程序段是输出两个字符串中对应相等的字符。
习题4一、单项选择题1.若有说明inta[3][4];则a数组元素的非法引用是【】A.a[0][2*1]B.a[1][3]C.a[4-2][0]D.a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。
2.在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A.整型常量B.整型表达式C.整型常量或整型表达式D.任何类型的表达式【答案】C3.以下不正确的定义语句是【】A.doublex[5]={2.0,4.0,6.0,8.0,10.0};B.inty[5]={0,1,3,5,7,9};C.charc1[]={′1′,′2′,′3′,′4′,′5′};D.charc2[]={x1′0′x,a′′x,8′′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4.对以下说明语句的正确理解是【】inta[10]={6,7,8,9,10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5.若有说明:inta[][4]={0,0};则下面不正确的叙述是【】A.数组a的每个元素都可得到初值0B.二维数组a的第一维大小为1C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。
元素a[0][0]和a[0][1]赋初值为0,其余元素初值系统默认为0。
6.以下能对二维数组c进行正确的初始化的语句是【】A.intc[3][]={{3},{3},{4}};B.intc[][3]={{3},{3},{4}};C.intc[3][2]={{3},{3},{4},{5}};D.intc[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。
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. 习题四:数组元素逆序排列题目描述:编写一个程序,将给定整型数组的元素逆序排列,并输出结果。
习题 4一、单项选择题1. 若有说明int a[3][4];则a数组元素的非法引用是【】A. a[0][2*1]B. a[1][3]C. a[4-2][0]D. a[0][4]【答案】D【解析】数组下标从0开始,a[0][4]的列下标越界。
2. 在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式【答案】C3. 以下不正确的定义语句是【】A. double x[5]={2.0,4.0,6.0,8.0,10.0};B. int y[5]={0,1,3,5,7,9};C. char c1[]={′1′,′2′,′3′,′4′,′5′};D. char c2[]={′\x10′,′\xa′,′\x8′};【答案】B【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4. 对以下说明语句的正确理解是【】int a[10]={6,7,8,9,10};A. 将5个初值依次赋给a[1]至a[5]B. 将5个初值依次赋给a[0]至a[4]C. 将5个初值依次赋给a[6]至a[10]D. 因为数组长度与初值的个数不相同,所以此语句不正确【答案】B5. 若有说明:int a[ ][4]={0,0};则下面不正确的叙述是【】A. 数组a的每个元素都可得到初值0B. 二维数组a的第一维大小为1C. 当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小D. 只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值【答案】D【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。
元素a[0][0]和a[0][1]赋初值为0 ,其余元素初值系统默认为0。
6. 以下能对二维数组c进行正确的初始化的语句是【】A. int c[3][]={{3},{3},{4}};B. int c[][3]={{3},{3},{4}};C. int c[3][2]={{3},{3},{4},{5}};D. int c[][3]={{3},{},{3}};【答案】B【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。
一、单选题1、若有定义 char s[10];则在下面表达式中不表示s[1]的地址的是()。
A.s++B.&s[0]+1C.&s[1]D.s+1正确答案:A2、若有定义int a[5],*p=a;则对a数组元素的正确引用是()。
A.a+2B.*(a+2)C.*&a[5]D.*(p+5)正确答案:B3、若有定义int a[5],*p=a;则对a数组元素地址的正确引用是()。
A.p+5B.&a+1C.*a+1D.&a[0]正确答案:D4、若要对a进行合法的自减运算,则之前应有下面()的说明。
A.int b[10];int *a=b+1;B.int k;int *a=&k;C.int p[3];int *a=p;D.char *a[3];正确答案:A5、若有定义int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是()。
A.p1=x+3,*p1++B.x[3]C.p1=x+2,*++p1D.p1=x+2,*(p1++)正确答案:D6、设int x[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 0},*p=x,k;且0≤k<10, 则对数组元素x[k]的错误引用是()。
A.x[p-x+k]B.p+kC.*(&x[k])D.*(x+k)正确答案:B7、设double *p[6];则()。
A.p是指针数组,其元素是指向double型变量的指针B.p是指向double型变量的指针C.p是double型数组D.p是数组指针,指向double型数组正确答案:A8、若有定义int x[6]={2,4,6,8,5,7},*p=x,i;要求依次输出x数组6个元素中的值,不能完成此操作的语句是()。
A.for(i=0;i<6;i++) printf("%2d",*p++);B.for(i=0;i<6;i++) printf("%2d",*(p+i));C.for(i=0;i<6;i++) printf("%2d",*(p++));D.for(i=0;i<6;i++) printf("%2d",(*p)++);正确答案:D9、下面程序执行后的输出结果是()。