c语言编程有关数组的几道例题

合集下载

C语言数组例题

C语言数组例题

6.1.1 Fibonacci数列/* Fibonacci数列递推求解 */main(){int k,n; long s,f[50];printf("求数列的第n项与前n项和,请输入n:");scanf("%d",&n);f[1]=1;f[2]=1;s=2; /* 数组元素与和变量赋初值 */ for(k=3;k<=n;k++){f[k]=f[k-1]+f[k-2]; /* 实施递推 */s+=f[k];} /* 实施求和 */printf("F数列第%d项为:%ld\n",n,f[n]);printf("F数前%d项之和为:%ld\n",n,s);}6.1.2 幂序列/* 幂序列程序 */main(){int k,n; long a,b,s,f[100];printf("求数列的第n项与前n项和,请输入n:");scanf("%d",&n);a=2;b=3;s=0;for(k=1;k<=n;k++){if(a<b){f[k]=a;a=a*2;} /* 用2的幂给f[k]赋值 */else {f[k]=b;b=b*3;} /* 用3的幂给f[k]赋值 */ s+=f[k];}printf("数列的第%d项为:%ld\n",n,f[n]);printf("数列的前%d项之和为:%ld\n",n,s);}6.1.3 双关系递推数列/* 双关系2x+1,3x+1递推 */main(){int n,i,j,h,m[1500];m[1]=1;scanf("%d",&n);for(i=1;i<=n;i++){m[2*i]=2*m[i]+1;m[2*i+1]=3*m[i]+1;for(j=i+2;j<=2*i+1;j++){if(m[i+1]>m[j]) /* m(i+1)与m(j)比较 */{h=m[j]; m[j]=m[i+1];m[i+1]=h;} /* 交换,使m(i +1)最小 */if(m[i+1]==m[j])m[j]=20000+j;}} /* 置m(j)为一出界大数,以避免重复 */for(i=1;i<=n;i++){printf(" %4d",m[i]);if(!(i%10)) printf("\n");}}6.1.4 复杂递推数列/* 2x+3y递推程序 */main(){int m,n,t,k,i,h,j,w,a[30000];printf("\n input m:");scanf("%d",&m);a[1]=1;a[2]=2;t=2;n=0;for(k=2;k<=m;k++){for(i=1;i<=k-1;i++){w=2*a[k]+3*a[i];if(w<=m && a[k]!=a[i]) a[++t]=w;/* 判断 w是否为递推项 */w=2*a[i]+3*a[k];if(w<=m && a[k]!=a[i]) a[++t]=w;}} /* 判断 w是否为递推项 */for(j=1;j<=m;j++){for(k=1;k<=t;k++)if(a[k]==j){n++;printf("%4d(%3d) ",j,n);break;}}printf("\n n=%d",n);}6.2.1 折叠方阵/* 层叠方阵 */main(){ int a,i,j,m,n,x,y,z[20][20];printf("输入方阵的行数m:\n");scanf("%d",&m);printf("输入方阵的起始数a:\n");scanf("%d",&a);z[1][1]=a;n=a;for(i=2;i<=m;i++){x=1;y=i;n++;z[x][y]=n; /* 每一层的起始元素赋值*/while(x<i){n++;x++;z[x][y]=n;} /* 每一层的纵元素赋值*/while(y>1){n++;y--;z[x][y]=n;} /* 每一层的横元素赋值*/}for(x=1;x<=m;x++){for(y=1;y<=m;y++)printf("%4d",z[x][y]); /* 循环打印层叠方阵 * /printf("\n"); }}6.2.2 矩阵的和与转置main(){ int i,j,m,n,x,y,a[4][5],b[4][5];printf("输入a矩阵:\n");for(i=1;i<=3;i++)for(j=1;j<=4;j++)scanf("%d",&a[i][j]); /* 输入a矩阵的元素 */ printf("输入b矩阵:\n");for(i=1;i<=3;i++)for(j=1;j<=4;j++)scanf("%d",&b[i][j]); /* 输入b矩阵的元素 */ printf("a矩阵:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%3d",a[i][j]);} /* 打印a矩阵 */ printf("\n"); }printf("b矩阵:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%3d",b[i][j]);} /* 打印b矩阵 */printf("\n");}printf("a,b矩阵之和:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%4d",a[i][j]+b[i][j]);} /* 计算并打印a+b 的元素 */printf("\n");}printf("a矩阵的转置:\n");for(j=1;j<=4;j++) /* 打印a矩阵的转置 */{{for(i=1;i<=3;i++)printf("%4d",a[i][j]);}printf("\n");}}6.2.3 矩阵的积/* 求a,b矩阵的积 */main(){ int i,j,k,d,a[4][5],b[5][3];printf("输入a矩阵:\n");for(i=1;i<=3;i++)for(j=1;j<=4;j++)scanf("%d",&a[i][j]); /* 输入a矩阵的元素 */printf("输入b矩阵:\n");for(i=1;i<=4;i++)for(j=1;j<=2;j++)scanf("%d",&b[i][j]); /* 输入b矩阵的元素 */printf("a矩阵:\n");for(i=1;i<=3;i++){{for(j=1;j<=4;j++)printf("%3d",a[i][j]);} /* 打印a矩阵 */printf("\n"); }printf("b矩阵:\n");for(i=1;i<=4;i++){{for(j=1;j<=2;j++)printf("%3d",b[i][j]);} /* 打印b矩阵 */printf("\n");}printf("a,b矩阵之积:\n");for(i=1;i<=3;i++){{for(j=1;j<=2;j++){for(d=0,k=1;k<=4;k++)d+=a[i][k]*b[k][j]; /* 求和计算积矩阵元素d (i,j) */printf("%6d",d);}} /* 打印a,b积矩阵元素d */printf("\n");}}6.2.4 杨辉三角形3.程序设计与运行/* 杨辉三角形 */main(){int n,i,j,k,a[20][20];scanf("%d",&n);for(i=1;i<=n;i++){a[i][1]=1;a[i][i]=1;} /* 确定初始条件 */for(i=3;i<=n;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j]; /* 递推得到每一数组元素 */for(i=1;i<=n;i++) /* 控制输出n行 */{printf("\n");for(k=1;k<=40-3*i;k++) printf(" ");for(j=1;j<=i;j++) /* 控制输出第i行的i个数组元素 */printf("%6d",a[i][j]);}}6.3.1 猴子爬山/* 猴子爬山n级,一步跨1级或3级台阶 */main(){int k,n;long f[1000];printf("请输入台阶总数n:");scanf("%d",&n);f[1]=1;f[2]=1;f[3]=2; /* 数组元素赋初值 */for(k=4;k<=n;k++)f[k]=f[k-1]+f[k-3]; /* 按递推关系实施递推 */printf("s=%ld",f[n]);}6.3.2 整币兑零main(){int x,f,t,n;x=0;for(t=0;t<=50;t++) /* 变量t为2元币的张数*/ for(f=0;f<=20;f++) /* 变量f为5元币的张数*/ {n=100-f*5-t*2; /* 变量n为1元币的张数*/if(n>=0) x++;} /* 变量n为非负时,用x统计兑零种数 */printf("%d",x);}6.3.3 整数拆分/* 连续数1-ms组合ss */#include <stdio.h>#define MAXN 100int a[MAXN],t,n=0;comb(int m,int k,int s) /* 建立递归函数comb(m, k, s) */{int i,j;for(i=m;i>=k;i--){a[k]=i;if(k>1)comb(i-1,k-1,s);else {for(t=0,j=a[0];j>0;j--)t=t+a[j];if(t==s) {n++;printf(“%d=”,s); /* 满足条件时输出*/for(j=a[0];j>1;j--){printf("%2d+",a[j]); }printf("%2d\n",a[1]); }}}}main(){int ms,ss,i,h,k,wmin,wmax;scanf("%d,%d",&ms,&ss);for(h=0,i=1;i<=ms;i++){h=h+i;if(h>ss) {wmax=i-1;break;}}for(h=0,i=1;i<=ms;i++){h=h+(ms-i+1);if(h>ss) {wmin=i-1;break;}}for(k=wmin;k<=wmax;k++){a[0]=k;comb(ms,k,ss);}printf("n=%d\n",n); } /* 输出拆分种数n */6.4.1 分类统计main(){int k,m,sm,i,j,h,t,f[1000],s[9],n[9],d[10][100];float x;sm=0;printf("请输入m个分数:\n");scanf("%d",&m);for(k=1;k<=m;k++){printf("请输入第%d个数:",k);scanf("%d",&f[k]);sm+=f[k]; /* sm统计总分 */t=f[k]/10;if(t<6) t=5;if(t>9) t=9; /* 计算确定分类号t */s[t]+=f[k]; n[t]++; d[t][n[t]]=f[k];}printf("所有%d个原始数据为:\n",m);for(k=1;k<=m;k++){printf("%4d",f[k]); /* 每行10个打印原始数据*/if(k%10==0) printf("\n");}printf("\n");for(t=5;t<=9;t++)for(i=1;i<=n[t]-1;i++) /* 分段按逐个比较法从小到大排序 */for(j=i+1;j<=n[t];j++)if(d[t][i]>d[t][j]){h=d[t][i];d[t][i]=d[t][j];d[t][j]=h;}for(t=9;t>=5;t--){printf("%d段共%3d个数据,从小到大依次为:",t,n[t]);for(k=1;k<=n[t];k++)printf("%4d",d[t][k]);x=(float)s[t]/n[t];printf(", 该段平均分为:%8.2f\n",x);}x=sm/m;printf("所有%d个数据的平均值为:%8.2f\n",m,x); }6.4.2 大赛现场统分/* 竞赛现场统分排序 */#include<stdio.h>#include<math.h>main(){int i,j,n,m,u,sh[40];float max,min,uf,sf[40], f[40][20];printf("请输入选手个数(1<n<40):");scanf("%d",&n);printf("请输入评委个数(2<m<20):");scanf("%d",&m);for(i=1;i<=n;i++) /* 现场为选手评分,报分 */{printf("\n第%d个上场选手编号为:",i);scanf("%d",&sh[i]);sf[i]=0;max=0;min=10000; /* 数组元素与变量赋初值 */for(j=1;j<=m;j++){printf("第%d个评委评分为:",j);scanf("%f",&f[i][j]);sf[i]+=f[i][j];if(max<f[i][j]) max=f[i][j];if(min>f[i][j]) min=f[i][j];}printf("\n去掉一个最高分:%.2f",max);printf("\n去掉一个最低分:%.2f",min);sf[i]=(sf[i]-max-min)/(m-2); /* 计算第i个选手的最后得分 */printf("\n编号为%d号选手",sh[i]);printf("最后得分为:%.2f\n",sf[i]);}for(i=1;i<=n-1;i++) /* 选手最后得分按冒泡法排序,打印名次表 */for(j=1;j<=n-i;j++)if(sf[j]<sf[j+1]){uf=sf[j];sf[j]=sf[j+1];sf[j+1]=uf; /* 交换sf 同时交换sh */u=sh[j];sh[j]=sh[j+1];sh[j+1]=u;}printf("\n 参赛选手得分名次表:"); /* 输出名次表 */printf("\n选手编号得分名次");for(i=1;i<=n;i++)printf("\n %d %.3f %d",sh[i],sf[i],i);printf("\n");printf("\n\n竞赛现场统分结束,谢谢!\n");}6.4.3 数制转换/* 十进制整数转换为P进制 */main(){long n;int c,m,k,p,s[100];char r[16];r[10]='A';r[11]='B';r[12]='C';r[13]='D';r[14]='E';r[15]='F';m=0;printf("\n请输入十进制数n:");scanf("%ld",&n);printf("\n请输入转换数制p(2-16):");scanf("%d",&p);printf("(%ld)10=(",n);while(n!=0){c=n%p;n=n/p;m++;s[m]=c;} /* 实施除P取余*/for(k=m;k>=1;k--) /* 从后往前逐位打印输出 */if(s[k]>9) printf("%c",r[s[k]]); /* 超过9时打印相应字母 */else printf("%d",s[k]);printf(")%d\n",p);}/* 十进制小数转换为P进制 */main(){float n;int c,m,k,p,t,s[100];char r[16];r[10]='A';r[11]='B';r[12]='C';r[13]='D';r[14]='E';r[15]='F';m=0;printf("\n请输入十进制纯小数n:");scanf("%f",&n);printf("\n请输入转换数制p(2-16):");scanf("%d",&p);printf("\n请输入最多转换的位数t:");scanf("%d",&t);printf("(%f)10=(0.",n);while(n!=0 && m<t){n=n*p;c=n;n=n-c;m++;s[m]=c;} /* 实施乘P取整 */ for(k=1;k<=m;k++) /* 从前往后逐位打印输出 */if(s[k]>9) printf("%c",r[s[k]]); /* 每一位超过9时打印相应字母 */else printf("%d",s[k]);printf(")%d\n",p);}6.4.4 真分数序列/* 求分母为[a,b]的最简真分数的增序列 */main(){int a,b,k,n,i,j,h,t,u,c[3000],d[3000];scanf("%d,%d",&a,&b); /* 输入区间的上下限*/scanf("%d",&k); /* 输入指定序号k */n=0;for(j=a;j<=b;j++){for(i=1;i<=j-1;i++){for(t=0,u=2;u<=i;u++)if(j%u==0 && i%u==0) {t=1;break;} /* 分子分母有公因数舍去 */if(t==0) {n++;c[n]=i;d[n]=j;}}}for(i=1;i<=n-1;i++) /* 应用冒泡法排序 */for(j=1;j<=n-i;j++)if(c[j]*d[j+1]>c[j+1]*d[j]) /* 若c(j)/d(j)>c(j+1)/d(j+1),交换 */{h=c[j];c[j]=c[j+1];c[j+1]=h;h=d[j];d[j]=d[j+1];d[j+1]=h;}printf("n=%d \n",n);printf("%d:%d/%d \n",k,c[k],d[k]);}6.5.1 优美乘积main(){long int x,y,t,i,k,m[4],f[11],a,b,c,n=0;for(a=2;a<=98;a++)for(b=102;b<=9876;b++) /* 对a,b 实施穷举 */{c=a*b;m[1]=a;m[2]=b;m[3]=c;for(i=0;i<=9;i++) f[i]=0;for(k=1;k<=3;k++){y=m[k];while(y>0){x=y%10;f[x]=f[x]+1;y=y/10;}} /* 分离数字,f 数组统计 */for(t=0,i=0;i<=9;i++)if(f[i]!=1) t=1; /* 检验数字0--9各只出现一次 */if(t==0){printf("%3ld*%4ld=%5ld ",a,b,c);n++; /* 用n 统计个数 */if(n%4==0) printf("\n");}}printf("\n n=%d.\n",n);}6.5.2 优美和/* 优美和程序 */main(){int a,b,c,x,y,t,i,k,m[4],f[11],n=0;for(a=10;a<=987;a++)for(b=102;b<=9876;b++) /* 对a,b 实施穷举 */{c=a+b;m[1]=a;m[2]=b;m[3]=c;for(i=0;i<=9;i++) f[i]=0;for(k=1;k<=3;k++){y=m[k];while(y>0){x=y%10;f[x]=f[x]+1;y=y/10;}} /* 分离数字,用f 数组统计 */for(t=0,i=0;i<=9;i++)if(f[i]!=1) t=1; /* 检验数字0——9是否各出现一次 */if(t==0 && a<b){printf("%3d+%4d=%4d ",a,b,c);n++; /* 打印,用n 统计个数 */if(n%5==0) printf("\n");}}printf("\n n=%d.\n",n);}6.5.3 桥本等式/* 桥本等式探求 */main(){ int g,i,j,k,n,a[10]; long m1,m2,m3;i=1;a[1]=1;n=0;while (1){g=1;for(k=i-1;k>=1;k--)if(a[i]==a[k]) g=0; /* 两数相同,标记g=0 */if(i==9 && g==1 && a[1]<a[4]){m1=a[2]*10+a[3];m2=a[5]*10+a[6];m3=a[8]*10+a[9];if(a[1]*m2*m3+a[4]*m1*m3==a[7]*m1*m2) /* 判断是否满足等式 */{n++;printf("(%2d). ",n);printf("%d/%ld+%d/",a[1],m1,a[4]);printf("%ld=%d/%ld\n",m2,a[7],m3);}}if(i<9 && g==1) {i++;a[i]=1;continue;} /* 不到9个数,往后继续 */for(j=1;j<=9;j++)if(a[i]==9 && i>1) i--;else break; /* 往前返回 */if(a[i]==9 && i==1) break;else a[i]++; /* 至第1个数为9,结束 */}}6.6.1 阶乘的右边非零位/* 求n!右边第一个非零数字 */main(){int n,k;long f[1000];f[1]=1;printf("n=");scanf("%d",&n);for(k=2;k<=n;k++){f[k]=(f[k-1]*k); /* 实施递推 */while(f[k]%10==0)f[k]=f[k]/10; /* 除去f[k]的右边零 */f[k]=f[k]%10000;} /* 取f[k]右边四位 */printf("\n f[%d]=%d ",n,f[n]%10);}6.6.2 筛法求素数/* 筛法求指定区间上的素数 */#include"math.h"main(){ long int c,d,i,j,k;static long int a[11000];int e,n;printf("求区间[c,d]上的素数\n");printf("请输入 c,d(c>2):");scanf("%ld,%ld",&c,&d);if (c%2==0) c++;e=(d-c)/2;i=1; /* 确定区间上e+1个奇数 */while (i<=sqrt(d)) /* 在[c,d]中筛选素数 */{i=i+2;j=i;while (j<=d){j=j+2*i; if(j>=c) a[(j-c)/2]=-1;}} /* 筛去标记-1 */for(n=0,k=0;k<=e;k++)if(a[k]!=-1) /* 输出所得素数 */{n++; printf("%ld ",c+2*k);if(n%10==0) printf("\n");}printf("\n[%ld,%ld]共%d个素数.\n",c,d,n);}6.6.3 最小的连续n个合数/* 求最小的连续n个合数*/#include"math.h"main(){ long int c,d,f,g,i,j,k,m,x;long int a[11000];int e,n,s,u,t;printf("求最小的n个连续合数,");printf("输入n(2--100):");scanf("%d",&n);c=3;d=c+20000;u=1;f=2;t=0;while (u) /* 在[c,d]中筛选素数 */{for(i=0;i<=10999;i++) a[i]=0;e=(d-c)/2;i=1;while (i<=sqrt(d)){i=i+2;g=2*(c/(2*i))+1;if(g*i>d) continue;if(g==1) g=3;j=i*g;while (j<=d){if(j>=c) a[(j-c)/2]=-1; /* 筛去标记-1 */j=j+2*i;}}for(u=1,k=0;k<=e;k++){if(a[k]!=-1){m=c+2*k; /* m即筛选所得素数 */if(m-f>=n+1 && t==0) /* 寻求最小的n个连续素数 */{printf("最小的%d个连续合数为:",n);printf("[%ld,%ld]",f+1,f+n);t=1;}f=m;}}c=m;d=c+20000;} /* 最大素数m赋给c,继续探求 */}6.6.4 圆周率π的高精度计算/* 高精度计算圆周率π */#include "math.h"main(){float s;int b,x,n,c,i,j,d,l,a[5000];printf("\n 输入精确位数:");scanf("%d",&x);for (s=0,n=1;n<=5000;n++) /* 累加确定计算的项数 */{s=s+log((2*n+1)/n);if (s/log(10)>x) break;}for (i=0;i<=x+1;i++) a[i]=0;for (c=1,j=n;j>=1;j--) /* 按公式分步计算 */{d=2*j+1;for (i=0;i<=x;i++){a[i]=c/d; c=(c%d)*10+a[i+1];}a[x+1]=c/d;for (b=0,i=x+1;i>=0;i--){a[i]=a[i]*j+b; b=a[i]/10;a[i]=a[i]%10;}a[0]=a[0]+1;c=a[0];}for (b=0,i=x+1;i>=0;i--){a[i]=a[i]*2+b; b=a[i]/10;a[i]=a[i]%10;}printf("\n pi=%d.",a[0]); /* 遂位输出计算结果 */for (l=10,i=1;i<=x;i++){ printf("%d",a[i]);l++;if (l%10==0) printf(" ");if (l%50==0) printf("\n");}}。

c语言数组试题及答案

c语言数组试题及答案

c语言数组试题及答案1. 请编写一个程序,要求用户输入10个整数,然后将其存储在一个数组中,并输出这个数组的内容。

答案:```c#include <stdio.h>int main() {int numbers[10];int i;printf("请输入10个整数:\n");for (i = 0; i < 10; i++) {scanf("%d", &numbers[i]);}printf("数组内容为:\n");for (i = 0; i < 10; i++) {printf("%d ", numbers[i]);}return 0;}```2. 请编写一个程序,要求用户输入一个整数n(n>0),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中所有元素的和。

答案:```c#include <stdio.h>int main() {int n;int numbers[100];int sum = 0;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);sum += numbers[i];}printf("数组元素之和为:%d\n", sum);return 0;}```3. 请编写一个程序,要求用户输入一个整数n(n>1),然后分别输入n个整数存储在一个数组中,计算并输出这个数组中最大和最小的元素。

答案:```c#include <stdio.h>int main() {int n;int numbers[100];int max, min;int i;printf("请输入整数n:\n");scanf("%d", &n);printf("请输入%d个整数:\n", n);for (i = 0; i < n; i++) {scanf("%d", &numbers[i]);}max = numbers[0];min = numbers[0];for (i = 1; i < n; i++) {if (numbers[i] > max) {max = numbers[i];}if (numbers[i] < min) {min = numbers[i];}}printf("数组中的最大元素为:%d\n", max);printf("数组中的最小元素为:%d\n", min);return 0;}```4. 请编写一个程序,要求用户输入两个整数m和n(1<=m<=n<=100),然后生成并输出m到n之间(包含m和n)的所有整数。

C语言数组练习及答案

C语言数组练习及答案

第四部分数组4.1 选择题1. 以下关于数组的描述正确的是(c )。

A. 数组的大小是固定的,但可以有不同的类型的数组元素B. 数组的大小是可变的,但所有数组元素的类型必须相同C. 数组的大小是固定的,所有数组元素的类型必须相同D. 数组的大小是可变的,可以有不同的类型的数组元素2. 以下对一维整型数组a的正确说明是(d )。

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];3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c )。

A. 整型常量B. 整型表达式C. 整型常量或整型表达式D. 任何类型的表达式4. 以下对一维数组m进行正确初始化的是(c )。

A. int m[10]=(0,0,0,0) ;B. int m[10]={ };C. int m[ ]={0};D. int m[10]={10*2};5. 若有定义:int bb[ 8];。

则以下表达式中不能代表数组元bb[1]的地址的是(c )。

A. &bb[0]+1B. &bb[1]C. &bb[0]++D. bb+16. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是(d )。

A. 3B. 6C. 10D. 207. 若有以下说明:int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};char c='a',d,g;则数值为4的表达式是(d )A. a[g-c]B. a[4]C. a['d'-'c']D. a['d'-c]8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a )。

#include<stdio.h>main(){int a[10],i=0;while(i<10) scanf("%d",________ );┇}A. a+(i++)B. &a[i+1]C. a+iD. &a[++i]9. 执行下面的程序段后,变量k中的值为(a )。

C语言编程数组应用实例面试问题大全

C语言编程数组应用实例面试问题大全

C语言编程数组应用实例面试问题大全1. 数组的定义和初始化在C语言中,数组是一种用于存储相同类型数据的数据结构。

数组的定义形式为:类型名数组名[数组大小]。

数组大小可以是一个常量,也可以是一个变量。

数组的初始化可以通过两种方式进行:静态初始化和动态初始化。

静态初始化示例:```int numbers[5] = {1, 2, 3, 4, 5};```动态初始化示例:```int size;printf("请输入数组大小:");scanf("%d", &size);int *numbers = (int*)malloc(size * sizeof(int));```2. 数组的元素访问和修改数组的元素可以通过索引值来进行访问和修改。

数组的索引从0开始,一直到数组大小减1。

元素访问示例:```int numbers[5] = {1, 2, 3, 4, 5};int thirdNumber = numbers[2]; // 访问索引为2的元素,即第三个元素printf("第三个数字为:%d\n", thirdNumber);```元素修改示例:```int numbers[5] = {1, 2, 3, 4, 5};numbers[2] = 10; // 修改索引为2的元素,即第三个元素的值为10 printf("修改后的第三个数字为:%d\n", numbers[2]);```3. 数组的遍历和求和通过循环语句,可以遍历数组中的所有元素,并进行某种处理,例如求和、求最大值、求平均值等。

遍历数组元素示例:int numbers[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("%d ", numbers[i]);}```求和示例:```int numbers[5] = {1, 2, 3, 4, 5};int sum = 0;for (int i = 0; i < 5; i++) {sum += numbers[i];}printf("数组元素之和为:%d\n", sum);```4. 数组作为函数参数数组可以作为函数的参数传递,通过传递数组的地址,可以在函数内对数组进行修改。

数组c语言试题库及答案

数组c语言试题库及答案

数组c语言试题库及答案1. 请解释C语言中数组的概念。

答:在C语言中,数组是一种数据结构,它允许将多个相同类型的数据项存储在连续的内存位置。

数组可以是一维的,也可以是多维的。

2. 如何声明一个整型数组?答:声明一个整型数组的语法是 `int array_name[size];`,其中`array_name` 是数组的名字,`size` 是数组中元素的数量。

3. 请写出一个程序,用于计算一个整型数组中所有元素的和。

```c#include <stdio.h>int main() {int array[] = {1, 2, 3, 4, 5};int sum = 0;for(int i = 0; i < 5; i++) {sum += array[i];}printf("Sum of array elements: %d\n", sum);return 0;}```4. 如果一个数组的元素数量是动态的,应该如何声明?答:在C语言中,可以使用指针来处理动态数组。

声明方式为`int *array_name;`,然后在程序中使用 `malloc` 或 `calloc` 函数分配内存。

5. 请解释数组的索引。

答:数组的索引是从0开始的,它表示数组中元素的位置。

例如,对于一个名为 `array` 的数组,`array[0]` 是数组的第一个元素。

6. 如何初始化一个整型数组?答:可以使用花括号 `{}` 来初始化数组,例如 `int array[] = {1, 2, 3, 4, 5};`。

7. 请写出一个程序,用于交换数组中的两个元素。

```c#include <stdio.h>int main() {int array[] = {1, 2, 3, 4, 5};int temp;int index1 = 1; // 第二个元素int index2 = 3; // 第四个元素temp = array[index1];array[index1] = array[index2];array[index2] = temp;for(int i = 0; i < 5; i++) {printf("%d ", array[i]);}return 0;}```8. 在C语言中,数组的元素可以是什么数据类型?答:数组的元素可以是任何数据类型,包括整型、浮点型、字符型、结构体等。

C语言数组练习及答案

C语言数组练习及答案

第四部分数组4.1选择题1.以下关于数组的描述正确的是(c}A.数组的大小是固定的,但可以有不同的类型的数组元素B.数组的大小是可变的,但所有数组元素的类型必须相同C.数组的大小是固定的,所有数组元素的类型必须相同D.数组的大小是可变的,可以有不同的类型的数组元素2.以下对一维整型数组a的正确说明是(d)。

A.inta(10);C.intn;scanf("%d",&n);inta[n];B.intn=10,a[n];D.#defineSIZE10inta[SIZE];3.在C语言中,引用数组元素时,其数组下标的数据类型允许是(c)。

A.整型常量B.整型表达式C.整型常量或整型表达式D.任何类型的表达式页脚内容14.以下对一维数组m进行正确初始化的是(c)。

A.intm[10]=(0,0,0,0);B.intm[10]={};C.intm[]={0};D.intm[10]={10*2};5.若有定义:intbb[8];。

则以下表达式中不能代表数组元bb[1的地址的是(c>A.&bb[0]+1B.&bb[1]C.&bb[0]++D.bb+16.假定int类型变量占用两个字节,具有定义:intx[10]={0,2,4};,则数组x在内存中所占字节数是(d)A.3B.6C.10D.207.若有以下说明:inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};charc='a',d,g;则数值为4的表达式是(d)A.a[g-c]B.a[4]C.a['d'-'c']D.a['d'-c]8.以下程序段给数组所有的元素输入数据,请选择正确答案填入(a)。

#include<stdio.h>main(){inta[10],i=0;while(i<10)scanf("%d",);页脚内容2)A.a+(i++)B.&a[i+1]C.a+iD.&a[++i]9.执行下面的程序段后,变量k中的值为(a)。

c语言数组 编程题

c语言数组 编程题

c语言数组编程题含解答共5道1. 求数组元素的和题目:编写一个程序,计算给定整数数组中所有元素的和。

解答:```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int sum = 0;for (int i = 0; i < n; i++) {sum += arr[i];}printf("数组元素的和为:%d\n", sum);return 0;}```2. 查找数组中的最大值题目:编写一个程序,找到给定整数数组中的最大值。

解答:```c#include <stdio.h>int main() {int arr[] = {3, 7, 1, 9, 4};int n = sizeof(arr) / sizeof(arr[0]);int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}printf("数组中的最大值为:%d\n", max);return 0;}```3. 数组元素逆序题目:编写一个程序,将给定整数数组中的元素逆序。

解答:```c#include <stdio.h>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);printf("原始数组:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}// 逆序for (int i = 0; i < n / 2; i++) {int temp = arr[i];arr[i] = arr[n - 1 - i];arr[n - 1 - i] = temp;}printf("\n逆序后的数组:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```4. 查找元素在数组中的位置题目:编写一个程序,查找给定整数数组中某个元素的位置(索引)。

C语言例题解析数组

C语言例题解析数组

(2)其中continue语 句的作用是_____;
(3)标记红色语句的 作用是____.
for (i=16;i<1000;i++)
{ if (i%17!=0) continue;
j++;
printf((j==4)?j=0,”%d\n”:”%d\t”,i);
}
}
2. 以下程序分别在a数组和b数组 中放入an+1和bn+1个由小到大的 有序数,程序把两个数组中的数按 由小到大的顺序归并到c数组中.
#include <stdio.h> main() { int a[10]={1,2,5,8,9,10};an=5;
int b[10]={1,3,4,8,12,18};bn=5; int i,j,k,c[20],max=9999; a[an+1]=b[bn+1]=max; i=j=k=0; while ((a[i]!=max)||(b(j)!=max))
3. 若有以下说明语句,则输出结果是:___ char sp[]=“\x69\082\n”; printf(“%d”,strlen(sp));
A.3 B. 5 C. 1 D. 字符串中有非法字符,输出值不定
4. int x=3; do {printf(“%2d\n”,x-=2);}while (!(--x)
的输出是_____ A. 1 B. 1, -2 C. 3, 0 D. 是死循环
填充题
1. 以下程序把一由小到大的数列放在 a[1]到a[n]中,a[0]用做工作单元,程序 把读入的x值插入到a 数组中,插入后, 数组中的数仍然有序,请填充.
#include <stdio.h> main() { int a[10]={0,12,17,20,25,28},x,i,n=5;

c语言 数组编程题

c语言 数组编程题

以下是一个简单的 C 语言数组编程题示例,要求实现一个函数,用于将一个整数数组按照升序排序。

```c
#include <stdio.h>
void sort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main() {
int arr[] = {3, 5, 1, 4, 2};
int n = sizeof(arr) / sizeof(arr[0]);
int i;
sort(arr, n);
printf("Sorted array: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个示例中,我们定义了一个`sort` 函数,该函数接收一个整数数组和数组长度作为参数,并使用冒泡排序算法将数组元素按升序排序。

在`main` 函数中,我们定义了一个整数数组 `arr`,并使用 `sort` 函数对其进行排序。

最后,我们打印出排序后的数组元素。

C语言数组百道练习题含解答

C语言数组百道练习题含解答
6.1 选择题
6.1 在 c 语言中,引用数组元素时,其数组下标的数据类型是 C 。
A)整型常量
B)整型表达式
C)整型常量或常量表达式 D)任何类型的表达式
6.2 以下对一维数组 a 的正确说明是 D 。
A) int n; scanf("%d",&n); int a[n]; B)int n=10,a[n];
B)float a(3,4); float a[3][4]; float a[][]={{0},{0}};
D)float a[3][4]; float a[3][]; float a[][4];
6.15 下面程序有错误的行是 D (行前数字表示行号)。
1 main() 2 { int a[3]={3*0}; 3 int i; 4 for(i=0;i<3;i++) 5 scanf("%d",&a[i]); 6 for(i=1;i<3;i++) a[0]=a[0]+a[i]; 7 printf("%d\n",a[0]); 8}
A)没有错误
B)第 3 行有错误
C)第 5 行有错误 D)第 7 行有错误
6.17 下面程序有错误的行是 D (行前数字表示行号)。
1 main() 2{ 3 int a[3]={1}; 4 int i; 5 scanf("%d",&a); 6 for(i=1;i<3;i++) a[0]=a[0]+a[i]; 7 printf("a[0]=%d\n",a[0]); 8} A)3 B)6 C)7 D)5
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]

C语言复习题数组

C语言复习题数组

C语言复习题_数组一、填空1、若定义char a[] = ”\3Love\3”; 则strlen(a)的值为 6 , sizeof(a)的值为7 。

2、若定义char a[]= ”Hello!\n”;则strlen(a)的值为7 ,sizeof(a)的值为8 。

二、选择1、设有数组定义:char array [ ]="China";则数组array所占的空间为(C)。

A、4个字节B、5个字节C、6个字节D、7个字节2、为了判断两个字符串s1和s2是否相等,应当使用(D)。

A、if (s1= =s2)B、if (s1=s2)C、if(strcpy(s1,s2))D、if (strcmp(sl,s2)==0)3、下列描述中,合法的数组定义是(D)。

A、int a[]={"String”};B、int a[5]={0,1,2,3,4,5};C、char a={”String”};D、char a[ ]={0,1,2,3,4,5};4、若有定义int a[10]; ,则对数组a的引用正确的是(D)。

A、a[10]B、a[6、3]C、a(6)D、a[10-10]5、以下对一维数组a的定义中正确的是(C)。

A、char a(10);B、int a[0、、100];C、int a[5];D、int k=10; int a[k];6、以下对一维数组的定义中不正确的是(B)。

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 ch1[]={'1',’2’,'3', ’4',’5'};D、char ch2[]={’\x10', '\xa’, '\x8’};7、假定一个int型变量占用四个字节,若有定义:int x[10]={0,2,4};则数组x在内存中所占字节数是(D).A、3B、6C、10D、408、若定义一个名为s且初值为"123"的字符数组,则下列定义错误的是(C)。

字符数组练习题

字符数组练习题

字符数组练习题字符数组是C语言中常用的数据类型之一,用于存储一系列字符。

在本文中,我们将探讨一些字符数组的练习题,以帮助提升对字符数组的理解和运用。

1. 字符串拷贝题目描述:给定两个字符数组str1和str2,请编写一个函数,将str2的内容拷贝到str1中。

要求:不使用标准库函数strcpy(),而是自己编写实现。

解题思路:遍历str2,将每个字符逐个拷贝到str1的对应位置。

代码示例:```cvoid stringCopy(char str1[], char str2[]) {int i = 0;while (str2[i] != '\0') {str1[i] = str2[i];i++;}str1[i] = '\0'; // 添加字符串结束符}2. 字符串连接题目描述:给定两个字符数组str1和str2,请编写一个函数,将str2的内容连接到str1的末尾。

要求:不使用标准库函数strcat(),而是自己编写实现。

解题思路:先找到str1的末尾位置,然后从该位置开始,逐个拷贝str2的字符到str1。

代码示例:```cvoid stringConcat(char str1[], char str2[]) {int i = 0;while (str1[i] != '\0') {i++;}int j = 0;while (str2[j] != '\0') {str1[i] = str2[j];i++;j++;str1[i] = '\0'; // 添加字符串结束符}```3. 字符串长度题目描述:给定一个字符数组,请编写一个函数,计算该字符数组表示的字符串的长度。

要求:不使用标准库函数strlen(),而是自己编写实现。

解题思路:遍历字符数组,直到遇到字符串结束符'\0'时停止,并记录经过的字符个数。

数组经典例题

数组经典例题

1、以下哪个操作可以实现将数组arr中的所有元素向右旋转一个位置?A. arr.rotate(1)B. arr.shift()C. temp = arr.pop(); arr.unshift(temp);D. arr.push(arr.shift());(答案)D2、给定一个已排序的数组arr和一个目标值target,下列哪个方法能最高效地查找target在arr中的位置?A. 顺序查找B. 二分查找C. 哈希查找D. 插值查找(在均匀分布时)(答案)B(二分查找在已排序数组中通常最高效)3、以下哪个JavaScript方法可以用来合并两个数组arr1和arr2?A. arr1.merge(arr2)B. arr1.concat(arr2)C. arr1 + arr2D. arr1.join(arr2)(答案)B4、在Python中,如何创建一个包含10个元素,每个元素都初始化为0的列表?A. zeros_list = * 10B. zeros_list = [0 for _ in range(10)]C. zeros_list = list(0 * 10)D. zeros_list = (0,) * 10(虽然这是元组,但为干扰项)(答案)A, B(两者均可)5、下列哪项不是数组的优点?A. 随机访问速度快B. 插入和删除操作效率高C. 数据类型可以一致D. 可以存储大量数据(答案)B(插入和删除操作效率依赖于位置,通常在中间时较低)6、假设有一个整数数组nums,你想找到其中出现次数最多的元素,应该使用以下哪个数据结构来辅助?A. 栈B. 队列C. 哈希表D. 二叉搜索树(答案)C7、在C语言中,如何声明一个名为numbers,包含5个整数的数组?A. int numbers;B. int numbers;C. int numbers = ;D. int numbers[ ] = 5;(答案)A8、给定一个数组arr,你需要找到两个数使得它们的和等于一个给定的数k,以下哪种算法最适合解决这个问题?A. 暴力枚举法,检查每对组合B. 快速排序后双指针法C. 动态规划D. 二分查找(答案)B(快速排序后双指针法可以在O(n)时间内解决问题,前提是数组已排序)。

C语言数组练习题

C语言数组练习题

C语言数组练习题一、选择题1、有定义语句“int a[ ][3]={1,2,3,4,5,6};”,则a[1][0]的值是。

A、4B、1C、2D、52、执行char str[10]=“China\0”;strlen(str)的结果是。

A、5B、6C、7D、93、执行下面的程序段后,变量k的值为。

A、不定值B、33C、30D、104、有如下程序:main( ){int n[6]={0,0,0},I,k=2;for (i=0;i<k;i++) n[i]=n[i]+1;printf(“%d\n”,n[k]);}该程序的输出结果是。

A、在确定的值B、2C、1D、05、有如下程序:main(){int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=I;j++) s+=a[i][j];printf(“%d\n”,s);}该程序的输出结果是。

A、18B、19C、20D、216、以下程序的输出结果是。

A、20B、21C、22D、23main(){int i,k,a[10],p[3];k=5;for(i=0;i<10;i++) a[i]=I;for(i=0;i<3;i++) p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf(“%d\n”,k);}7、以下程序的输出结果是。

A、A VCDB、ABCDC、EFGD、EFGHFGH EFG JK IJKLKL IJ OM main(){char w[][10]={“ABCD”,”EFGH”,”IJKL”,”MNOP”},K;for(k=1;k<3;k++) printf(“%s\n”,w[k]);}8、当执行下面的程序时,如果输入ABC,则输出结果是。

A、ABC6789B、ABC67C、12345ABC6D、ABC456789#include”stdio.h”#include”string.h”main(){char ss[10]=”1,2,3,4,b”;gets(ss);strcat(ss,”6789”);printf(%s\n”,ss);}9、假定int类型变量占用两个字节,其定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是。

c语言数组练习题

c语言数组练习题

c语言数组练习题C语言数组练习题在学习C语言的过程中,数组是一个非常重要的概念。

数组可以用来存储一系列相同类型的数据,它能够提供快速访问和处理数据的能力。

为了巩固对数组的理解和运用,我们可以进行一些练习题。

1. 数组的初始化数组的初始化是指在定义数组的同时给数组元素赋初值。

例如,我们可以定义一个长度为5的整型数组,并给它的元素赋初值:```cint arr[5] = {1, 2, 3, 4, 5};```请尝试定义一个长度为10的字符型数组,并给它的元素赋初值。

2. 数组元素的访问数组的元素可以通过下标来进行访问。

数组的下标从0开始,最大下标为数组长度减1。

例如,我们可以通过下标访问数组的元素:```cint num = arr[2]; // 获取arr数组中下标为2的元素```请尝试定义一个长度为6的浮点型数组,并访问其中的第4个元素。

3. 数组的遍历数组的遍历是指依次访问数组中的每个元素。

我们可以使用循环语句来遍历数组。

例如,我们可以使用for循环遍历数组并打印每个元素:```cfor (int i = 0; i < 5; i++) {printf("%d ", arr[i]);}```请尝试定义一个长度为8的整型数组,并使用循环语句遍历数组并打印每个元素。

4. 数组的求和数组的求和是指将数组中的所有元素相加。

我们可以使用循环语句遍历数组,并将每个元素累加到一个变量中。

例如,我们可以计算数组中所有元素的和:```cint sum = 0;for (int i = 0; i < 5; i++) {sum += arr[i];}```请尝试定义一个长度为7的整型数组,并计算数组中所有元素的和。

5. 数组的逆序数组的逆序是指将数组中的元素颠倒顺序。

我们可以使用两个指针分别指向数组的首尾元素,并交换它们的值,然后逐步向中间移动。

例如,我们可以将数组逆序:```cint start = 0;int end = 4;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}```请尝试定义一个长度为6的整型数组,并将数组逆序。

C语言编程数组应用实例面试题解析

C语言编程数组应用实例面试题解析

C语言编程数组应用实例面试题解析在面试过程中,经常会遇到关于C语言数组的应用实例题。

掌握数组的使用方法对于想要在面试中脱颖而出的程序员来说至关重要。

下面将以一组常见的C语言数组应用实例面试题为例进行解析,帮助读者更好地理解和掌握数组的使用。

1. 题目一:反转数组题目描述:编写一个函数,实现将给定数组中的元素反转。

题目分析:反转数组是一个常见的面试题,可以通过交换首尾元素的方式实现。

需要注意的是数组的长度以及奇偶性。

解题思路:定义两个指针,一个指向数组的首元素,一个指向数组的尾元素。

通过循环交换两个指针所指向的元素,并且首指针向后移动,尾指针向前移动,直到两个指针相遇。

代码示例:```cvoid reverseArray(int arr[], int length) {int start = 0, end = length - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}```2. 题目二:合并两个有序数组题目描述:编写一个函数,实现将两个有序数组合并为一个有序数组。

题目分析:合并有序数组需要考虑两个数组的长度以及如何确定元素的插入位置。

解题思路:定义三个指针,一个指向第一个数组的末尾,一个指向第二个数组的末尾,一个指向合并后的数组的末尾。

从后往前遍历两个数组,将较大的元素依次插入合并后的数组中。

代码示例:```cvoid mergeArrays(int arr1[], int length1, int arr2[], int length2, int merged[]) {int i = length1 - 1, j = length2 - 1, k = length1 + length2 - 1;while (i >= 0 && j >= 0) {if (arr1[i] >= arr2[j]) { merged[k] = arr1[i]; i--;} else {merged[k] = arr2[j]; j--;}k--;}while (i >= 0) {merged[k] = arr1[i]; i--;k--;}while (j >= 0) {merged[k] = arr2[j]; j--;k--;}}```3. 题目三:删除重复元素题目描述:编写一个函数,实现从数组中删除重复的元素,并返回删除后的数组长度。

C语言编程数组应用实例面试问题答案

C语言编程数组应用实例面试问题答案

C语言编程数组应用实例面试问题答案在面试过程中,C语言的数组应用是常见的考点之一。

以下是一些常见C语言编程数组应用实例面试问题以及详细的答案解析。

问题一:什么是数组?回答:数组是一种可以容纳固定数量元素的数据结构。

在C语言中,数组是由相同数据类型的元素组成的有序集合。

数组中的每个元素可以通过索引值访问,索引从0开始递增。

问题二:如何声明和初始化数组?回答:声明数组的语法为:类型名称[大小];例如,int numbers[5];数组的初始化可以是静态的或动态的。

静态初始化可以在声明数组时同时为每个元素指定初始值,如:int numbers[5] = {1, 2, 3, 4, 5};动态初始化可以在程序执行期间使用循环或其他方式为每个元素赋值。

问题三:如何访问数组元素?回答:数组元素可以通过索引值来访问,索引从0开始。

例如,要访问数组numbers中的第一个元素,可以使用numbers[0]。

问题四:如何计算数组的长度?回答:C语言中的数组没有内置的长度属性。

可以通过sizeof运算符来计算数组的长度,例如:sizeof(numbers) / sizeof(numbers[0])。

问题五:数组和指针之间有什么关系?回答:数组名可以看作是数组第一个元素的地址。

因此,可以使用指针来访问和操作数组。

例如,int* ptr = numbers; 表示ptr指向数组numbers的第一个元素。

问题六:如何在函数中传递数组?回答:可以通过指针来传递数组给函数。

函数参数中的数组形式参数实际上是指针,可以使用指针来操作传递进来的数组。

例如,void myFunction(int* arr)。

问题七:如何在动态内存中创建数组?回答:可以使用malloc函数在堆上动态分配内存来创建数组。

例如,int* arr = (int*)malloc(5 * sizeof(int));问题八:如何在多维数组中访问元素?回答:多维数组是一个数组的数组。

C语言练习题库----数组

C语言练习题库----数组

C语⾔练习题库----数组有如下语句 int a[10] = {1,2,3,4,5,6,7,8,9,10};int *p = a;则数值为9的表达式是______*p+9 b) *(p+8) c) *p+=9 d) p+7解析:B数组的下标是从 0 开始的,9 在 a [ 8 ] 这个位置上,p当前指向 a [ 0 ] ,所以需要向后移动8位,a和c 都是移动9位,d是地址偏移 7 位 .若有定义语句:int a[3][6];按在内存中存放的顺序,a数组的第10个元素是_____a[0][3] b) a[1][4] c) a[0][4] d) a[1][3]解析:D这个⼆维数组的正确理解⽅式应该是:定义了⼀个名字为a的数组,a数组⾥⾯有三个元素,每个元素包含6个int类型的变量,数组的第⼗个元素应该是a[0][6]之后的a[1][3],这个知识点的考察点在于要认识⼆维数组中的元素和指针都是怎么存储和指向的,指针是如何偏移的。

以下数组定义中错误的是______A. int x[][3] = {0};B. int x[2][3] = {{1,2}, {3,4}, {5, 6}};C. int x[][3] = {{1,2,3}, {4,5,6}};D. int x[2][3] = {1,2,3,4,5,6};解析:B第⼀个中括号表⽰数组当中元素的个数,第⼆个中括号表⽰每个元素中(类似⼀维数组的)变量的个数。

在定义⼆维数组的时候第⼆个中括号(元素的个数)是必须被定义的。

B中等号右边的正确定义应该是a[][2].若有说明:int i,j=2, *p=&i;, 则能完成i=j赋值功能的语句是_____A)*p=*&j; B)i=*p C)i+&j; D)i=**p;解析: A下列程序的运⾏结果是______int main(){int a[5][2] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int* p = a; //p指向0 ,偏移量是int字节int (*p2)[2] = &a[1]; // p2指向{2,3}中的⾸地址,偏移量是int*[2]字节(两个int字节)++p; //p向后偏移⼀个int字节指向1++p2; //p2向后偏移两个int字节指向4printf("%d\n", *p);printf("%d\n", **p2);printf("%d\n", p2[1][2]); //p2 先向后偏移⼀个int*2字节(两个int) p2[1]再向后偏移两个int字节得到p2[1][2] 指向8return 0;}下⾯的程序输出结果为________#include <stdio.h>int main(){int a[] = {10,20,30,40,50};int *p = (int*)(&a+1); // &a的含义为a[]的地址,偏移量为5个int *p指向50后⾯的⼀个元素printf("%d %d\n",*(a+1),*(p-1)); // a为⾸元素的地址,偏移量为⼀个,所以指向20 p-1指向50的地址,间接引⽤后的结果为50 return 0;}。

c语言数组练习题及答案

c语言数组练习题及答案

5*5 矩阵中每行的绝对值最大值,与同行对角线互换*/ #include "stdio.h"#include "math.h"void main(){int a[5][5]={{1,2,3,4,-5},{3,5,-2,4,2},{4,1,2,3,-2},{1,3,-2,4,6},{2,2,0,7,4}} ;int i,k,max,sub,temp;/* i循环变量,控制行,k 循环变量,控制列, max目前最大绝对值, sub目前最大绝对值元素的下标temp 暂时用于互换的变量*/printf("互换以前,输出\n"); /* 互换以前,输出*/for(i=0;i<=4;i++){for(k=0;k<=4;k++)printf("%4d",a[i][k]);printf("\n");}/* 互换 */for(i=0;i<=4;i++){/* 假定第一个元素最大 */max=fabs(a[i][0]);sub=0;/* 找寻绝对值最大的元素记下下标*/for(k=1;k<=4;k++){if(fabs(a[i][k])>max){max=fabs(a[i][k]);sub=k;}}/* 互换 */temp=a[i][i];a[i][i]=a[i][sub];a[i][sub]=temp;}/* 互换以后,输出 */printf("互换以后,输出\n");for(i=0;i<=4;i++){for(k=0;k<=4;k++)printf("%4d",a[i][k]);printf("\n");}}/* 在一个一维数组中寄存随意4 个数,如: 5 ,1 ,8 ,6 ,生成以下矩阵5555555511111551888155186815518881551111155555555*/#include "stdio.h"#include "conio.h"void main(){int FourNumbers[4], array[7][7], i , row, column;printf(" 请输入 4 个整数 \n");scanf("%d%d%d%d",&FourNumbers[0],&FourNumbers [1],&FourNumbers[2],&FourNumbers[3]);for(i=0;i<=3;i++){for(row=i;row<=6-i;row++){for(column=i;column<=6-i;column++)array[row][column]=FourNumbers[i];}}/* 输出矩阵*/for(row=0;row<=6;row++){for(column=0;column<=6;column++)printf("%4d",array[row][column]);printf("\n");}getch();}/*习题对一行电文加密,每个字母变换为字母表中循环右移的第三个字母,a-d, b-e, ......z-c */#include "stdio.h"void main(){int c;while((c=getchar())!='\n'){if( (c>='a' && c<='z') || (c>='A' && c<='Z') ){c=c+3;if ((c>'Z' && c<='Z'+3) || c>'z')c=c-26;}putchar(c);}}。

c语言编程有关数组的几道例题

c语言编程有关数组的几道例题

实验四一维数组、二维数组一、实验目的与要求1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。

2、掌握与数组有关的算法。

二、实验内容1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。

include "stdafx.h"#in clude<stdio.h>void swap2(int*,int*);void bubble(int aQ,int n);int main(void){int n,a[8];inti;printf("Enter n(n<=8):");scanf("%d",&n);printf("Enter a[%d]:", n);for(i=0;i< n;i++)scanf("%d", &a[i]);bubble(a,n);printf(H After sorted,a[%d]=", n);for(i=0;i< n;i++)pnntf(H%3d n,a[i]);return 0;}void bubble(int a[],int n) /*n是数组a中待排序元素的数量*7int i,j;for(i=1;i<n;i++) 广外部循环…请问这个嵌套循环怎么理解?? */ for0=O;j<n-i;j++)广内部循环…请问这个嵌套循环怎么理解?? */ if(aU]>a[j+1])swap2(&aD],&aD+1]);广交换*/}void swap2(int *px,int *py){int t;t=*px;*px=*py;*py=t;}单向冒泡排序法:〃输入10个整数,按从大到小输出〃#iiiclude<stdio.h>void main()intij,t,a[10];pimtf(n请输入10个整数\n“); for(i=0;i<10;i++)scanf(H%d,\&a[i]);for(j=l;j<10;j++)〃10个数要來回做(10・l)趟次//fbr(i=l ;i< 11 -j ;i++)〃第j趟要做(10・j)次比较//if(a[i]>a[i-l])〃每做完一趟,就会将数组中较小的一个数沉淀下來,较大的数不断往上冒〃{t=a[i] ;a[i]=a [i-1] ;a[i-1 ]=t;}pHntfC按从大到小排序输出结果是:\n“);for(i=0;i<10;i++)prmtf("%-3d n,a[i]);}双向冒泡排序法:〃输入10个整数,按从大到小输出〃#include<stdio.h>void main(){iiit ij,t,k,a[10];priiitfC*请输入10个整数\n“);for(i=0;i<10;i++)scanf("%d”,&a[ij);for(j=l;j<10;j++) //10 个数要來回做(10-1)趟次〃{for(i=l;i<ll-j;i++) 〃第j趟要做(10・j)次比较,双向冒泡法,是先从上至下两两比较一次〃if(a[i]>a[i-l]) 〃每做完一趟,就会将数组中较小的一个数沉淀下來,较大的数不断往上冒〃{t=a[i] ;a[i]=a[i-1 ] ;a[i-1 ]=t;}for(k=i-l ;k>0 ;k-) //与单向冒泡不同的是,这是双向冒泡的关键,每一次从顶至下比较完一次后,同时再从下//if(a[k]>a[k-l]) 〃至上比较一次,也就是说每一趟数组中的元素两两比较了两次,这就是双向冒泡排序了〃{t=a[k] ;a [k]=a [k-1 ] ;a [k-1 ]=t;}}priiitfC*按从大到小排序输出结果是:\n“);fbr(i=O;i<l 0;i++)pHntf(”%・3d”卫[i]);}$ (2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四一维数组、二维数组一、实验目的与要求1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。

2、掌握与数组有关的算法。

二、实验内容1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。

#include ""#include<>void swap2(int*,int*);void bubble(int a[],int n);int main(void){int n,a[8];int i;printf("Enter n(n<=8):");scanf("%d",&n);printf("Enter a[%d]:", n);for(i=0;i<n;i++)scanf("%d", &a[i]);bubble(a,n);printf("After sorted,a[%d]=", n);for(i=0;i<n;i++)printf("%3d",a[i]);return 0;}void bubble(int a[],int n) /*n是数组a中待排序元素的数量*/{int i,j;for(i=1;i<n;i++) /*外部循环---请问这个嵌套循环怎么理解*/ for(j=0;j<n-i;j++) /*内部循环---请问这个嵌套循环怎么理解*/ if(a[j]>a[j+1])swap2(&a[j],&a[j+1]); /*交换*/}void swap2(int *px,int *py){int t;t=*px;*px=*py;*py=t;}单向冒泡排序法://输入10个整数,按从大到小输出//#include<>void main(){int i,j,t,a[10];printf("请输入10个整数\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=1;j<10;j++) //10个数要来回做(10-1)趟次//for(i=1;i<11-j;i++) //第j趟要做(10-j)次比较//if(a[i]>a[i-1]) //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//{t=a[i];a[i]=a[i-1];a[i-1]=t;}printf("按从大到小排序输出结果是:\n");for(i=0;i<10;i++)printf("%-3d",a[i]);printf("\n");}双向冒泡排序法://输入10个整数,按从大到小输出//#include<>void main(){int i,j,t,k,a[10];printf("请输入10个整数\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=1;j<10;j++) //10个数要来回做(10-1)趟次//{for(i=1;i<11-j;i++) //第j趟要做(10-j)次比较,双向冒泡法,是先从上至下两两比较一次//if(a[i]>a[i-1]) //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//{t=a[i];a[i]=a[i-1];a[i-1]=t;}for(k=i-1;k>0;k--) //与单向冒泡不同的是,这是双向冒泡的关键,每一次从顶至下比较完一次后,同时再从下//if(a[k]>a[k-1]) //至上比较一次,也就是说每一趟数组中的元素两两比较了两次,这就是双向冒泡排序了//{t=a[k];a[k]=a[k-1];a[k-1]=t;}}printf("按从大到小排序输出结果是:\n");for(i=0;i<10;i++)printf("%-3d",a[i]);printf("\n");}$(2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出。

#include ""#include<>void swap2(int*,int*);void bubble(int a[],int n);int main(void){int n,a[8];int i;printf("Enter n(n<=8):");scanf("%d",&n);printf("Enter a[%d]:", n);for(i=0;i<n;i++)scanf("%d", &a[i]);bubble(a,n);printf("After sorted,a[%d]=", n);for(i=0;i<n;i++)printf("%3d",a[i]);return 0;}void bubble(int a[],int n) /*n是数组a中待排序元素的数量*/{int i,j;for(i=1;i<n;i++) /*外部循环---请问这个嵌套循环怎么理解*/for(j=0;j<n-i;j++) /*内部循环---请问这个嵌套循环怎么理解*/if(a[j]>a[j+1])swap2(&a[j],&a[j+1]); /*交换*/}void swap2(int *px,int *py){int t;t=*px;*px=*py;*py=t;}2、*******输入N-1个整数组成一数列,再输入某数x,先将数列排序,根据x的值插入到有序数列中。

#include<>main (){void Rank(int N,int n[]);int i,j,k;int n[11];printf("请输入10个整数:");for(i=0;i<10;i++)scanf("%d",&n[i]);Rank(10,n); //调用函数对输入的数组排序printf("\n请输入需要插入的整数:");scanf("%d",&k);if(k>n[9])n[10]=k;else{for(i=0;n[i]<=k;i++);for(j=9;j>=i;j--)n[j+1]=n[j]; //腾出位置,用以插入所输入的数n[i]=k;}printf("\n排序后此数列按升序排列为:");for(i=0;i<=10;i++)printf("%-4d",n[i]);}void Rank(int N,int n[]){int i,k,iTemp;for(k=1;k<=N-1;k++)for(i=N-1;i>=k;i--)if(n[i-1]>n[i]){iTemp=n[i];n[i]=n[i-1];n[i-1]=iTemp;}printf("排序后此数列按升序排列为:");for(i=0;i<=N-1;i++)printf("%-4d",n[i]);printf("\n");}3、输入行数n,打印出杨辉三角。

#include <> int main() { int yh[101][101]={{},{0,1}},i,n,m; scanf("%d",&m); /*输入要打印的行数,,,不能太大。

我水平不高。

*/ for(i=2;i<=m;i++) { yh[i][1]=yh[i][i]=1; for(n=2;n<i;n++) { yh[i][n]=yh[i-1][n-1]+yh[i-1][n]; } } for(i=1;i<=m;i++) { for(n=1;n<=i;n++) { printf("%d ",yh[i][n]); } printf("\n"); } return 0; }#include<>#include<>main(){ int a[8][8],i,j;for(i=0;i<8;i++){for(j=0;j<8;j++)if(j==0)a[i][j]=1;else if(i==j)a[i][j]=1;else if(i>j&&j>=1)a[i][j]=a[i-1][j]+a[i-1][j-1];elsea[i][j]=0;}for(i=0;i<8;i++){for(j=0;j<=i;j++)printf("%3d",a[i][j]);printf("\n");}}4、青年歌手参加歌曲大奖赛计分系统(1)有N个评委进行打分,求这位选手的平均得分(去掉一个最高分和一个最低分)。

#include <>#include <>#include <>void bubble_sort(int a[],int n){int i,j, itmp;for (i =0; i<n;i++){for(j=i+1 ;j<n;j++){if( a[i] >= a[j]){itmp = a[j];a[j] = a[i];a[i] = itmp;}}}}int main( int argc, char **argv){int iguide[10] = {0};srand((unsigned )time(NULL));for (int i = 0 ; i< 8;i++){int isum = 0;for (int j = 0 ; j< 10; j++){iguide[j] = rand()%10 +1;}bubble_sort(iguide,10);for (int l = 1;l<=8; l++){isum += iguide[l];}printf("The avg score the %d singer get is %d \n" ,i+1,isum/8); }return 0;}$(2)有N个评委进行打分,求M个选手每个人的平均得分(去掉一个最高分和一个最低分),并按平均得分由高到低排序输出。

相关文档
最新文档