6.4 课后习题
6.4.1 项目练习
一.练习目的
1.进一步巩固一维数组的定义与数组元素的引用方法
2.进一步巩固二维数组的定义与数组元素的引用方法
3.进一步巩固字符数组的定义与引用方法
二.练习内容
1.用起泡法对10个数由大到小进行排序。
分析:起泡法的算法思想是,n个数排序,将相邻两个数依次进行比较,将大数调在前头,逐次比较,直至将最小的数移至最后,然后再将n-1个数继续比较,重复上面操作,直至比较完毕。
可采用双重循环实现起泡法排序,外循环控制进行比较的次数,内循环实现出最小的数,并放在最后位置上(即沉底)。
#include "stdio.h"
main()
{
int a[10];
int i,j,t;
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(a[j]<a[j+1])
{ t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序后的数为::\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
getch();
}
2.从键盘输入10个整数,检查整数3是否包含在这些数据中,若是的话,它是第几个被输入的。
#include "stdio.h"
main()
{
int i,a[10];
printf("请输入这10个整数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
if(a[i]==3) printf("3包含于数列中,输入顺序号是:%d",i+1);
else
printf("3不包含于此数列中");
}
getch();
}
3.编程:一个3*5的数组,要求每行都进行降序排列,并求出每行的平均值。#include "stdio.h"
#define N 5
#define M 3
main()
{
int x,i,j,k,t,a[M][N];
float sum=0.0,avg[M];
/
/输入数组:
for(x=0;x<M;x++)
for(i=0;i<N;i++)
scanf("%d",&a[x][i]);
//数组排序:
for(x=0;x<M;x++)
{
for(i=0;i<N;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(a[x][j]>a[x][k])
k=j;
if(k!=i)
{
t=a[x][i];
a[x][i]=a[x][k];
a[x][k]=t;
} } }
for(x=0;x<M;x++)
{
sum=0.0;
for(i=0;i<N;i++)
{
printf("%d ",a[x][i]);
sum+=a[x][i];
}
avg[x]=sum/N;
printf("第%d行的平均值是:%f\n",x,avg[x]);
}
getch();
}
c语言程序设计教材答案4.定义一个二维字符数组,并从键盘上输入字符串的值,将这些字符串按字典顺序升序排列后分行输出。
#include "stdio.h"
main()
{
int m,n,i,j;
printf("请行列上限不超100的m和n的值:");
scanf("%d%d",&m,&n);
char tmp[100]="\0",s[m][n];
for(i=0;i<m;i++)
scanf("%s",s[i]);
for (i=0;i<m-i;i++)
{
for(j=0;j<m-i-1;j++)
{
if(strcmp(s[j],s[j+1])>0)
{
strcpy(tmp,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],tmp);
}
}
}
for(i=0;i<m;i++)
printf("%s\n",s[i]);
getch();
}
6.4.2 练习题
一.选择题
1.在C语言中,引用数组元素时,其数组下标的数据类型允许是( C )。
(A)整型常量 (B)整型表达式
(C)整形常量或整型表达式 (D)任何类型的表达式
2.若有定义:int a[10],则对数组a元素的正确引用是( D )。
(A)a[10] (B)a[3.5] (C)a(5) (D)a[10-10]
3.基本int a[4]类型变量所占的字节数是( D )。
(A)1 (B)2 (C)4 (D)8
4.合法的数组定义是( C )。
(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}
5.下列对数组操作不正确的语句是( D )。
(A)int a[5]; (B)char b[ ]={'h','e','l','l','o'};
(C)int a[ ]={2,3,4,5}; (D)char b[3 ][ ]={1,2,3,4,5,6};
6. 以下对二维数组a的正确定义是( C )。
(A)int a[3][] (B)float a(3,4)
(C)double a[1][4] (D)float a(3)(4)
7.以下能对二维数组a进行正确初始化的语句是( B )。
(A)int a[2][]={{1,0,1},{5,2,3}} ;
(B)int a[][3]={{1,2,3},{4,5,6}} ;
(C)int a[2][4]={{1,2,3},{4,5},{6}} ;
(D)int a[][3]={{1,0,1},{},{1,1}} ;
8.以下不能对二维数组a进行正确初始化的语句是( C )。
(A)int a[2][3]={0} ;
(B)int a[][3]={{1,2},{0}} ;
(C)int a[2][3]={{1,2},{3,4},{5,6}} ;
(D)int a[][3]={1,2,3,4,5,6} ;
9.若有说明:int a[][3]={1,2,3,4,5,6,7};则数组a第一维大小是( B )。
(A)2 (B)3 (C)4(D)无确定值
10.下面程序段的输出结果是( A )。
int k,a[3][3]={1,2,3,4,5,6,7,8,9};
for (k=0;k<3;k++) printf(“%d”,a[k][2-k]);
(A)3 5 7 (B)3 6 9 (C)1 5 9 (D)1 4 7
11.若有说明语句:char a[ ]=“this is a book”。则该数组占了( D )个字节。
(A)11 (B)12(C)14(D)15
二.填空题
1.C语言数组的下标总是从( 0 )开始,不可以为负数;构成数组各个元素具有相同的(基类型)。
2.C语言中数组的下标必须是正整数、0或(整型表达式)。
3.设有如下定义:
double a[180] ;则数组a的下标下界是( 0 ),上界是( 179 )。
4.在C语言中,二维数组的元素在内存中的存放顺序是(按行存放)。
5. 若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是( 0 ),a[2][2]得到的初值是( 8 )。
6.当运行下面程序时,从键盘上输入AabD↙,则写出下面程序的运行结果( AzyD )。
main ( )
{char s[80];
int i=0;
gets(s); /*从键盘上输入字符串*/
while (s[i]!='\0') {
if (s[i]<='z'&&s[i]>='a')
s[i]='z'+'a'-s[i] ;
i++;}
puts(s);
getch(); }
7.写出下面程序的运行结果( 3 )。
#include "stdio.h"
main( )
{int n[3],i,j,k;
for(i=0;i<3;i++) n[i]=0 ;
k=2 ;
for(i=0;i<k;i++)
for(j=0;j<k;j++) n[j]=n[i]+1 ;
printf("%d\n",n[1]) ; getch( ); }
8.下面程序的输出结果是( 21 )。
#include "stdio.h"
main( )
{ 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);getch();}
9.写出下面程序的运行结果( 1 0 0 0 0 )。
main ( )
{ int a[6][6],i,j ;
for (i=1; i<6 ; i++)
for (j=1 ; j<6 ; j++)
a[i][j]=(i/j)*(j/i) ;
for (i=1;i<6 ; i++)
{for (j=1 ; j<6 ; j++)
printf(“%2d”,a[i][j]) ;
printf(“\n”); getch();}}
10.写出下面程序的运行结果
( FGH
KL )。
#include "stdio.h"
#include "string.h"
main( )
{char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"},k;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论