数组_习题参考答案

合集下载

第六~八章 概念练习题-附参考答案

第六~八章 概念练习题-附参考答案

第六~第八章基本概念练习题第6章数组一、选择题。

1. 以下对一维数组a的正确定义是:A)char a(10);B) int a[];C)int k=5,a[k];D)char a[3]={‘a’,’b’,’c’};2.以下能对一维数组a进行初始化的语句是: ( )A. int a[5]=(0,1,2,3,4,)B. int a(5)={}C. int a[3]={0,1,2}D. int a{5}={10*1};3.在C语言中对一维整型数组的正确定义为。

A)int a(10); B)int n=10,a[n];C)int n;a[n]; D)#define N 10int a[N];4. 若二维数组a有m列,则在a[i][j]之前的元素个数为A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1*5. 下列说法中错误的是A 构成数组的所有元素的数据类型必须是相同的B 用指针法引用数组元素允许数组元素的下标越界C 一维数组元素的下标依次是1、2、3……·D 定义数组时的长度可以是整型常量表达式6. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是A) 3 B) 6 C) 10 D) 207.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( )A. 2B. 3C. 4D.无确定值8.以下定义语句中,错误的是( )A) int a[]={1,2}; B) char *a;C) char s[10]=“test”; D) int n=5,a[n];9.下面程序段的输出结果是: ( )int i;、int x[3][3]={1,2,3,4,5,6,7,8,9};for (i=0;i<3;i++)printf("%d ",x[i][2-i]);A) 1 5 9 B) 1 4 7 C) 3 5 7 D) 3 6 9二.分析题。

c语言数组练习题及答案

c语言数组练习题及答案

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;}}。

C语言程序设计第六章数组习题及答案

C语言程序设计第六章数组习题及答案

1.以下对一维整型数组a的定义,正确的是_。

(2分)A.int a(10) ;B.int n = 10 , a[n] ;C.int n ;scanf( "%d" , &n ) ;int a[n] ;D.int a[10] ;2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。

(2分)A.a[10]B.a[3.5]C.a(5)D.a[10-10]3.对定义int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。

(2分)A.将5个初值依次赋给a[1]--a[5]B.将5个初值依次赋给a[0]--a[4]C.将5个初值依次赋给a[6]--a[10]D.因为数组长度与初值个数不相同,所以此语句不正确4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。

(2分)A.a[3][4]B.a[1,3]C.a[1+1][0]D.a(2)(1)5.以下对二维数组a初始化正确的语句是_。

(2分)A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};6.对二维数组a进行如下初始化:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};则a[1][1]的值是_。

(2分)A.0B.3C.4D.17.下面程序段的运行结果是_。

(2分)#include<stdio.h>int main( ){int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;for( i = 0 ; i < 3 ; i++ )printf( "%2d" , x[i][2-i] ) ;return 0 ;}A.1 5 9B.1 4 7C.3 5 7D.3 6 98.以下对数组s的初始化,错误的是_。

第4章_数组c++_习题答案解析

第4章_数组c++_习题答案解析

习题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习题答案解析

习题 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答案错误。

Java数组练习题(带答案)

Java数组练习题(带答案)

一填空题1)数组的元素通过下标来访问,数组Array的长度为Array.length 。

2)数组复制时,"="将一个数组的引用传递给另一个数组。

3)JVM将数组存储在栈(堆或栈)中。

4)数组的二分查找法运用的前提条件是数组已经排序。

5)Java中数组的下标的数据类型是整型。

6)数组最小的下标是0 。

7)arraycopy()的最后一个参数指明复制元素的个数。

8)向方法传递数组参数时,传递的是数组的引用。

9)数组初始化包括数组的申明,创建和初始化。

10)数组下标访问超出索引范围时抛出数组越界异常11)浮点型数组的默认值是0.0f 。

12)数组创建后其大小不能改变。

二选择题1.下面错误的初始化语句是_ABD__A. char str[]="hello";B. char str[100]="hello";C. char str[]={'h','e','l','l','o'};D. char str[]={'hello'};2.定义了一维int型数组a[10]后,下面错误的引用是_B__A. a[0]=1;B. a[10]=2;C. a[0]=5*2;D. a[1]=a[2]*a[0];3.下面的二维数组初始化语句中,正确的是____A. float b[2][2]={0.1,0.2,0.3,0.4};B. int a[][]={{1,2},{3,4}};C. int a[2][]= {{1,2},{3,4}};D. float a[2][2]={0};4.引用数组元素时,数组下标可以是_D___A. 整型常量B. 整型变量C. 整型表达式D. 以上均可5.定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数为____A. 24B. 25C. 18D. 176.下列初始化字符数组的语句中,正确的是__B__A. char str[5]="hello";B. char str[]={'h','e','l','l','o','\0'};C. char str[5]={"hi"};D. char str[100]="";7.数组在Java中储存在 C 中A. 栈B. 队列C. 堆D. 链表8.下面程序的运行结果是____main() {int a[][]={{1,2,3},{4,5,6}};System.out.printf("%d", a[1][1]);}A. 3B. 4C. 5D. 69.下面程序的运行结果是_C___main() {int x=30;int[] numbers=new int[x];x=60;System.out.println(numbers.length);}A. 60B. 20C. 30D. 5010.下面程序的运行结果是__BDF__main() {char s1[]="ABCDEF".toCharArray();int i=0;while(s1[i++]!='\0')System.out.println(s1[i++]);}A. ABCDEFB. BDFC. ABCDED. BCDE11.下面不是创建数组的正确语句CA.float f[][]=new float[6][6];B.float f[]=new float[6];C.float f[][]=new float[][6];D.float [][]f=new float[6][];12.下面不是数组复制方法的是(C)A. 用循环语句逐个复制数组B. 用方法arraycopyC. 用"="进行复制D. 用clone方法13.数组a的第三个元素表示为DA. a(3)B. a[3]C.a(2)D. a[2]14.当访问无效的数组下标时,会发生BA. 中止程序B. 抛出异常C. 系统崩溃D. 直接跳过15.使用arraycopy()方法将数组a复制到b正确的是AA. arraycopy(a,0,b,0,a.length)B. arraycopy(a,0,b,0,b.length)C.. arraycopy(b,0,a,0,a.length)D. arraycopy(a,1,b,1,a.length)16.关于数组默认值,错误的是BA. char--'"u0000'B. Boolean--trueC. float--0.0fD. int-- 017.关于数组作为方法的参数时,向方法传递的是AA. 数组的引用B. 数组的栈地址C. 数组自身D. 数组的元素18.关于数组复制,下列说法错误的是ACA. "="可以实现数组复制B. 运用循环语句进行数组复制必须两个数组长度相同C. arraycopy()方法没有给目标数组分配内存空间D. 数组复制是数组引用的传递19.下列语句会造成数组new int[10]越界是DA. a[0] += 9;B. a[9]=10;C. —a[9]D. for(int i=0;i<=10;i++) a[i]++;20.在JDK环境下编译JAVA源程序使用的命令是(B )A.javaB.javacC.jvmD.tomcatD. 子类不能使用父类的构造方法21.main方法是java Application 程序执行的入口点。

C程序设计(数组)习题与答案

C程序设计(数组)习题与答案

一、单选题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、下面程序执行后的输出结果是()。

数据结构(数组和广义表)习题与答案

数据结构(数组和广义表)习题与答案

1、以行序优先顺序存储数组A[5][5];假定A[0][0]的地址为1000, 每个元素占4个字节,下标变量A[4][3]的地址是____。

A.1069B.1092C.1023D.1046正确答案:B2、数组a[1..6][1..5] (无0行0列)以列序优先顺序存储,第一个元素a[1][1]的地址为1000,每个元素占2个存储单元,则a[3][4]的地址是____。

A.1040B.1026C.1046D.1038正确答案:A3、设有一个5行4列的矩阵A,采用行序优先存储方式,A[0][0]为第一个元素,其存储地址为1000,A[2][2]的地址为1040,则A[3][0]的地址为_________。

A.1048B.1024C.1096D.1060正确答案:A4、设有一个10行10列的矩阵A,采用行序优先存储方式,存储全部数据需要400个字节的空间。

如果A[0][0]为第一个元素,其存储地址为1000,则A[3][6]的地址为_________。

A.1036B.1144C.1014D.10565、设有一个10行10列的矩阵A,采用行序优先存储方式。

如果A[0][0]为第一个元素,其存储地址为1000,A[2][3]的存储地址为1069,则存储一个元素需要的单元数是_________。

A.4B.1C.2D.3正确答案:D6、不能够对数据元素进行随机访问的物理结构是_________。

A.三元组顺序表B.对称矩阵的压缩存储C.三对角矩阵的压缩存储D.数组的顺序存储正确答案:A7、对特殊矩阵采用压缩存储的目的主要是_________。

A.表达变得简单B.去掉矩阵中的多余元素C.对矩阵元素的存储变得简单D.减少不必要的存储空间正确答案:D8、对n*n的对称矩阵进行压缩存储,需要保存的数据元素的个数是_________。

A.nB.n(n+1)/2C.n2D.n(n+1)9、设10*10的对称矩阵下三角保存SA[1..55]中,其中A[1][1]保存在SA[1]中,A[5][3] 保存在SA[k]中,这里k等于_________。

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

4
word[i][0]=toupper(word[i][0]); for(j=1;j<strlen(word[i]);j++) } for(i=0;i<M;i++) for(j=0;j<M-1;j++)
/*将每个单词的第一个字母转换为大写*/ /*将每个单词的剩余字母转换为小写*/
word[i][j]=tolower(word[i][j]); /*用冒泡法对单词排序*/
#include “stdio.h” #include “string.h” void main() { char s[100]; int length; printf("输入一个字符串:"); gets(s); for(length=0;s[length]!='\0';length++) ; printf("字符串的长度为:%d\n",length); }
数组 习题参考答案
一、选择题。 1. D 。在 C 语言中,若一维数组有 n 个元素,则其元素的下标从 0 到 n-1。 2. B。选项 A 和 C 在定义二维数组时,省略了第一维下标,但却没有给出初始值,D 选项所 定义的数组的第一维下标为 2,即该二维数组有两行,但后面却给了三行的初始值。 3. D。从定义可知,数据 a 有三行四列元素,但只给了 5 个初始值,分别赋给数组前 5 个元 素,其它元素的初值为 0。而 a[2][3]是数组的最后一个元素,所以其值为 0。 4. B。这里要注意区分字符数组与字符串。Ch1 的初值是用一个一个的字符进行初始华的, 它有多少个元素,长度就是多少,而 ch2 是用字符串来初始化的,除了要存储指定的字符之 外,还要存储字符串结束标志’\0’,所以其长度为字符个数再加 1。 5.B。在 C 语言中定义数组,数组名也为变量名,所以不能和已有的变量同名;定义数组时, 下标表达式只能是常量表达式,当然也包括符号常量;数组定义好后,C 语言在编译时会为 其分配存储空间。 6.A。 7.C。字符串一定要有结束标志’\0’,而字符数组不一定有,所以二都不能等同。 8.D。由于 C 语言中字符型数据可以当成整型数据来处理,所以在赋值时与整型数据的处理 一样。 9.C。 10.D。数组下标只能为整数。 二、读程序。 1. A 2. B 3. B 4.A 5. B 6.C 7.C 8.D 9.A 10.C 11.B 12.C 13.A 14.C 三、填空题。 1.①&b[k]。该题要求掌握如何向数组元素输入数据以及如何正确表示数组元素的地址。 2.① s[i] (或 s[i]!= '\0 ' 或 i<strlen(s) ) ② '0' ( 或 48 ) 该题的基本思路中对字符串中的每个字符进行判断,如果是数字字符,就将其加到 sum 中。由此可知①处为循环终止条件,有多种表示方法;②处是要将数字的值加到 sum 中, 但数组元素中存放的是该数字字符的 ASCII 值,要将得到该数字字符数值的大小,需要用 其 ASCII 值减去字符’0’的 ASCII 值,即 48。 3.①4 ② i-1 ③ a[j][i] ④a[j][i] 外循环用来表示二维数组的行数,内循环用来表示每行需要处理的元素个数。二维数组 行列互换,只需要将对角线以下的元素与对角线以上的元素进行互换就可以了,所以第 i 行 只需处理 i-1 个元素就可以了,因为对角线上的元素不用交换。 循环体是典型的两个元素互换 的操作。 4.①i%j==0 (或 !(i%j) ) ② N ①处的条件语句表示:如果在[2,i/2]中有 i 的因子,则表明 i 不是素数,则将标志 f 赋 值为 0;后面的 if 语句即对 f 的值进行判断,如果 f 为 0,表示该数 i 不是素数,否则,i 就 是素数,此时应该将 i 的值存入数组元素 prime[n]中,同时 n 加 1。 5.①strlen(str1) ② i++ ③i 6.①a[i][i] ② a[i][10-i-1] 7.①a[i]%2!=0 (或 !a[i]%2) 8。①25 (或 ‘z’-‘a’ 或 ‘Z’-‘A’)
#include.h” void main() { char s[200]; int word=0,i; printf("输入一个英文句子:\n"); gets(s); for(i=0;s[i]!='\0';i++) if(s[i]==' ') word++; word++; } /*判断该字符是否是空格符*/ /*如果是则单词数加 1*/ /*计算最后一个单词*/
#include "stdio.h" #define N 10 void main() { int a[N],t,i; printf("请输入%d 个数:",N); for(i=0;i<N;i++) scanf("%d",&a[i]); for(i=0;i<=N/2;i++) { t=a[i]; a[i]=a[N-1-i]; a[N-1-i]=t; } printf("逆序输出数组为:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); } /*下标为 i 的元素与下标为 N-1-i 的元素互换*/
3
s3[d3]='\0'; }
/*给新字符串 s3 末尾添加结束标志*/
printf("合并后的字符串是:%s\n",s3);
4.分析:这里假设输入的英文句子开始和结束的地方均不含空格符号,在程序中安排一个 计数器变量,初始值为0,然后用一循环扫描整个句子,对每个字符进行判断,如果遇到空 格字符,则计数器加 1,直到句子结束。但这样处理,句子最后一个单词则没有计算在计数 器中,所以在退出循环后计数器还要加 1 将最后一个单词计算进去。
#include “stdio.h” #include “string.h” void main() { char s1[100],s2[100],s3[100]; int d1,d2,d3; printf("输入二个字符串:\n"); gets(s1); gets(s2); d1=d2=d3=0; while(s1[d1]!='\0' && s2[d2]!='\0') { s3[d3]=s1[d1]; s3[d3+1]=s2[d2]; d1++; d2++; d3+=2; } while(s1[d1]!='\0') { s3[d3]=s1[d1]; d1++; d3++; } while(s2[d2]!='\0') { s3[d3]=s2[d2]; d2++; d3++; } /*处理源字符串 s2 中剩余字符*/ /*处理源字符串 s1 中剩余字符*/ /*两个字符串都没结束时进行交替合并*/
6.分析:本题可定义一个二维字符数组 word 来存放单词;定义一个有 26 个元素的一维数 组 charcnt 来存放每个字母在这些单词中出现的次数,字母 a 出现的次数存放在 charcnt[0] 中,字母 b 出现的次数存放在 charcnt[1]中,字母 c 出现的次数存放在 charcnt[2]中,……, 字母 z 出现的次数存放在 charcnt[25]中; 定义一个变量 totalchar 来统计这些单词共有多少个 字母。 在程序中,用一个一重循环来输入M个单词,一个一重循环来将数组 charcnt 各元素赋 初值 0,用一个二重循环来对所有单词中的每个字母进行扫描,在二重循环中,一是要统计 所输入的单词中一共有多少个字母,二是要统计每个字母(不分大小写)出现的次数。在统 计各个字母不分大小写出现的次数的时候, 使用了语句 charcnt[tolower(word[i][j])-97]++; 这 里 charcnt 的下标 tolower(word[i][j])-97 表示将数组元素 word[i][j]的小写字母的 ASCII 再减 速去 97,即是数组 charcnt 中存放该字母出现次数的元素对应的下标。
2.分析:本小题可定义一个整型变量 length 来存放字符串中字符的个数,即为字符串的长 度,让该变量从初始值 0 开始以 1 为单位递增,每取一个值,就判断字符字符数组的元素 s[length]是否是字符串结束标志’\0’:如果不是结束标志,则继续让 length 递增;如果是结束 标志,则退出循环。此时 length 的值即为字符串的长度。由于循环体中不对字符串做任何操 作,所以循体为空,字符的计数操作在 for 循环的括号中就可完成。程序如下:
#include “stdio.h” #include “string.h” #include “ctype.h” #define M 10 void main() { char word[M][20],tmp[20]; int i,j; printf("输入%d 个单词,每行一个:\n",M); for(i=0;i<M;i++) gets(word[i]); for(i=0;i<M;i++) { /*对 M 个单词*/ /*输入 M 个单词*/
3.分析:假设两个源字符串存放在字符数组 s1 和 s2 中,合并的结果放在字符数组 s3 中,
2
这里可定义三个下标变量 d1、d2 和 d3 分别用来表示上面三个字符数组的某个元素的下标, 取值均从 0 开始变化。在合并字符串的时候有两种情况: (1)两个字符串中的字符个数相等。这种情况下,只需要一个循环结构就可以完成字 符串的交替合并,循环条件为 s1[d1]!='\0' && s2[d2]!='\0',即二个字符串均未结束。这里先 把 s1[d1]复制到 s3[d3]中, 再把 s2[d2]复制到 s3[d3+1]中, 然后 d1、 d2 分别移到下一个字符, 而 d3 此时则要增加 2, 因为 d3+1 的元素中已经放了 s2[d2]的值。 这样直到字符串结束为止。 (2)两个字符串中的字符个数不等。这里可以先按(1)所说的方法处理两个字符串 都未结束的字符, 然后再用一个循环来处理另一个较长字符串中剩下来的字符。 由于事先不 知道哪个字符串长,哪个字符串短,所以字符串 s1 比 s2 长或 s2 比 s1 长都有可能,所以两 种情况都要考虑, 所以后面还要用二个循环来处理较长的字符串中剩余字符的复制。 虽然处 理较长字符串中剩余字符的复制需要书写二个循环结构, 但在执行的时候, 由于其中一个字 符串已经到了末尾处, 所以实际执行时只一个循环会被执行, 另一个由于一开始就不满足循 环条件而退出。这二个循环结构形式一样,只是针对不同的源字符串进行处理,只不过这时 候只有一个源串了,所以下标变量的增量均为 1。
相关文档
最新文档