第七章 数组
7.1 选择题
【题7.1】在C语言中,引用数组元素时,其数组下标的数据类型允许是 。
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式
【题7.2】以下对一维整型数组a的正确说明是 。
A)int a(10); B)int n=10,a[n];
C)int n; D)#define SIZE 10
scanf(“%d”,&n); int a[SIZE];
int a[n];
【题7.3】若有说明:int a[10];则对a数组元素的正确引用是 。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]
【题7.4】在C语言中,一维数组的定义方式为:类型说明符 数组名 ;
A)[常量表达式] B)[整型表达式]
C)[整型常量] 或[整型表达式] D)[整型常量]
【题7.5】以下能对一维数组a进行正确初始化的语句是 。
A)int a[10]=(0,0,0,0,0); B)int a[10]={};
C)int a[]={0}; D)int a[10]={10*1};
【题7.6】以下对二维数组a的正确说明是 。
A)int a[3][]; B)float a(3,4);
C)double a[1][4]; D)float a(3)(4);
【题7.7】若有说明:int a[3][4];则对a数组元素的正确引用是 。
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
【题7.8】若有说明:int a[3][4];则对a数组元素的非法引用是 。
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]
【题7.9】以下能对二维数组a进行正确初始化的语句是 。
int a[2][]={{1,0,1},{5,2,3}};
int a[][3]={{1,2,3},{4,5,6}};
int a[2][4]={{1,2,3},{4,5},{6}};
int a[][3]={{1,0,1},{},{1,1}};
【题7.10】以下不能对二维数组a进行正确初始化的语句是 。
int a[2][3]={0};
int a[][3]={{1,2},{0}};
int a[2][3]={{1,2},{3,4},{5,6}};
int a[][3]={1,2,3,4,5,6};
【题7.11】若有说明:int a[3][4]={0};则下面正确的叙述是 。
只有元素a[0][0]可得到初值0
此说明语句不正确数组a中各元素都可得到初值,但其值不一定为0
数组a中每个元素均可得到初值0
【题7.12】若有说明:int a[][4]={0,0};则下面不正确的叙述是 。
数组a的每个元素都可得到初值0
二维数组a的第一维大小为1
因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1
只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
【题7.13】若有说明:int a[3][4];则数组a中各元素 。
可在程序的运行阶段得到初值0
可在程序的编译阶段得到初值0
不能得到确定的初值可在程序的编译或运行阶段得到初值0
【题7.14】以下各组选项中,均能正确定义二维实型数组a的选项是 。
A)float a[3][4]; B)float a(3,4);
float a[][4]; float a[3][4];
float a[3][]={{1},{0}}; float a[][]={{0};{0}};
C)float a[3][4]; D)float a[3][4];
static float a[][4]={{0},{0}}; float a[3][];
auto float a[][4]={{0},{0},{0}}; float a[][4];
【题7.15】下面程序 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float a[3]={3*0};
4 int i;
5 for(i=0;i<3;i++) 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)第3行有错误 B)第7行有错误
C)第5行有错误 D)没有错误
【题7.16】下面程序 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float a[10]={0.0};
4 int i;
5 for(i=0;i<3;i++) scanf(“%d”,&a[i]);
6 for(i=1;i<10;i++) a[0]=a[0]+a[i];
7 printf(“%f\n”,a[0]);
8 }
A)没有错误 B)第3行有错误
C)第5行有错误 D)第7行有错误
【题7.17】下面程序中有错误的行是 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float 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
【题7.18】下面程序 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float a[3]={0};
4 int i;
5 for(i=0;i<3;i++) scanf(“%d”,&a[i]);
6 for(i=1;i<4;i++) a[0]=a[0]+a[i];
7 printf(“%d\n”,a[0]);
8 }
A)没有错误 B)第3行有错误
C)第5行有错误 D)第6行有错误
【题7.19】若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为 。(假设a[0][0]位于数组的第一个位置上。)
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
【题7.20】对以下说明语句的正确理解是 。
int a[10]={6,7,8,9,10};
将5个初值依次赋给a[1]至a[5]
将5个初值依次赋给a[0]至a[4]
将5个初值依次赋给a[6]至a[10]
因为数组长度与初值的个数不相同,所以此语句不正确
【题7.21】以下不正确的定义语句是 。
double x[5]={2.0,4.0,6.0,8.0,10.0};
int y[5]={0,1,3,5,7,9};
char c1[]={‘1’,‘2’,‘3’,‘4’,‘5’};
char c2[]={‘\x10’,‘\xa’,‘\x8’};
【题7.22】若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是 。
A)2 B)3 C)4 D)无确定值
【题7.23】若二维数组a有m列,则在a[i][j]前的元素个数为 。
A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1
【题7.24】定义如下变量和数组:
int k;
int 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
【题7.25】若有以下程序段:
… …
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]; j--; }
a[j+1]=t;
}
… …
则该程序段的功能是 。
对数组a进行插入排序(升序)
对数组a进行插入排序(降序)
对数组a进行选择排序(升序)
对数组a进行选择排序(降序)
【题7.26】以下正确的定义语句是 。
int a[1][4]={1,2,3,4,5};
float x[3][]={{1},{2},{3}};
long b[2][3]={{1},{1,2},{1,2,3}};
double y[][3]={0};
【题7.27】下面程序的运行结果是 。
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”);
}
}
A)1 1 1 1 1 B)0 0 0 0 1 C)1 0 0 0 0 D)1 0 0 0 1
1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0
1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0
1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0
1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1
【题7.28】下面程序的运行结果是 。
main()
{
int a[6],i;
for(i=1;i<6;i++)
{
a[i]=9*(i-2+4*(i>3))%5;
printf(“%2d”,a[i]);
}
}
A)-4 0 4 0 4 B)-4 0 4 0 3
C)-4 0 4 4 3 D)-4 0 4 4 0
【题7.29】下面是对s的初始化,其中不正确的是 。
A)char s[5]={“abc”}; B)char s[5]={‘a’,‘b’,‘c’};
C)char s[5]=“”; D)char s[5]=“abcdef”;
【题7.30】下面程序段的运行结果是 。
char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};
printf(“%s”,c);
A)‘a’‘b’ B)ab C)ab c
【题7.31】对两个数组a和b进行如下初始化
char a[]=“ABCDEF”;
char b[]={‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};
则以下叙述正确的是 。
A)a与b数组完全相同 B)a与b长度相同
C)a和b中都存放字符串 D)a数组比b数组长度长
【题7.32】有两个字符数组a、b,则以下正确的输入格式是 。
A)gets(a,b); B)scanf(“%s %s”,a,b);
C)scanf(“%s %s”,&a,&b); D)gets(“a”),get(“b”);
【题7.33】有字符数组a[80]和b[80],则正确的输出形式是 。
A)puts(a,b); B)printf(“%s %s”,a[],b[]);
C)putchar(a,b); D)puts(a),puts(b);
【题7.34】下面程序段的运行结果是 。
char a[7]=“abcdef”;
char b[4]=“ABC”;
strcpy(a,b);
printf(“%c”,a[5]);
A)空格 B)\0 C)e D)f
【题7.35】有下面的程序段
char a[3],b[]=“China”;
a=b;
printf(“%s”,a);
则 。
A)运行后将输出China B)运行后将输出Ch
C)运行后将输出Chi D)编译出错
【题7.36】下面程序段的运行结果是 。
char c[]=“\t\v\\\0will\n”;
printf(“%d”,strlen(c));
A)14 B)3 C)9 D)字符串中有非法字符,输出值不确定
【题7.37】判断字符串a和b是否相等,应当使用 。
A)if(a==b) B)if(a=b)
C)if(strcpy(a,b)) D)if(strcmp(a,b))
【题7.38】判断字符串s1是否大于字符串s2,应当使用 。
A)if(s1>s2) B)if(strcmp(s1,s2))
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
【题7.39】下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。
char x[]=“programming”;
char y[]=“Fortran”;
int i=0;
while(x[i]!=‘\0’&&y[i]!= ‘\0’)
{
if(x[i]==y[i]) printf(“%c”,【1】);
else i++;
}
【1】 A)x[i++] B)y[++i] C)x[i] D)y[i]
【题7.40】下面描述正确的是 。
两个字符串所包含的字符个数相同时,才能比较字符串字符个数多的字符串比字符个数少的字符串大字符串“STOP,与“STOP”相等字符串“That”小于字符串“The”
【题7.41】下述对C语言字符数组的描述中错误的是 。
字符数组可以存放字符串字符数组的字符串可以整体输入、输出可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值不可以用关系运算符对字符数组中的字符串进行比较
【题7.42】有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素的规律插入到a中。请选择填空。
#include <stdio.h>
main()
{
char a[20]=“cehiknqtw”;
char s[]=“fbla”;
int i,k,j;
for(k=0;s[k]!=‘\0’;k++)
{
j=0;
while(s[k]>=a[j]&&a[j]!=‘\0’) j++;
for(【1】) 【2】;
a[j]=s[k];
}
puts(a);
}
【1】 A)i=strlen(a)+k; i>=j; i-- B)i=strlen(a); i>=j; i--
C)i=j; i<=strlen(a)+k; i++ D)i=j; i<=strlen(a); i++
【2】 A)a[i]=a[i+1] B)a[i+1]=a[i]
C)a[i]=a[i-1] D)a[i-1]=a[i]
【题7.43】下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中。请选择填空。
#include <stdio.h>
main()
{
char a[]=“acegikm”;
char b[]=“bdfhjlnpq”;
char c[80],*p;
int i=0,j=0,k=0;
while(a[i]!=‘\0’&&b[j]!=‘\0’)
{
if(a[i]<b[j]) { 【1】 }
else { 【2】 }
k++;
}
c[k]= ‘\0’;
if(【3】) p=b+j;
else p=a+i;
strcat(c,p);
puts(c);
}
【1】 A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;
C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;
【2】 A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;
C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;
【3】 A)a[i]==‘\0’ B)a[i]!=‘\0’
C)a[i-1]==‘\0’ D)a[i-1]!=‘\0’
【题7.44】下面程序的功能是将字符串s中所有的字符c删除。请选择填空。
#include <stdio.h>
main()
{
char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!=‘\0’;i++)
if(s[i]!=‘c’) 【1】;
s[j]=‘\0’;
puts(s);
}
【1】 A)s[j++]=s[i] B)s[++j]=s[i]
C)s[j]=s[i]; j++ D)s[j]=s[i]
【题7.45】下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。
#include <stdio.h>
main()
{
char s[80],c1,c2=‘’;
int i=0,num=0;
gets(s);
while(s[i]!=‘\0’)
{
c1=s[i];
if(i==0) c2=‘’;
else c2=s[i-1];
if(【1】) num++;
i++;
}
printf(“There are %d words.\n”,num);
}
【1】 A)c1==‘’&&c2==‘’ B)c1!=‘’&&c2==‘’
C)c1==‘’&&c2!=‘’ D)c1!=‘’&&c2!=‘’
【题7.46】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char ch[7]={“12ab56”};
int i,s=0;
for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i+=2)
s=10*s+ch[i]-‘0’;
printf(“%d\n”,s);
}
A)1 B)1256 C)12ab56 D)1
2
5
6
【题7.47】当运行以下程序时,从键盘输入:aa bb<CR>
cc dd<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a1[5],a2[5],a3[5],a4[5];
scanf(“%s %s”,a1,a2);
gets(a3); gets(a4);
puts(a1); puts(a2);
puts(a3); puts(a4);
}
A)aa B)aa C)aa D)aa bb
bb bb bb cc
cc cc dd dd
cc dd dd ee
【题7.48】当运行以下程序时,从键盘输入:ab<CR>
c<CR>
def<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
#define N 6
main()
{
char c[N];
int i=0;
for(;i<N;c[i]=getchar(),i++);
for(i=0;i<N;i++) putchar(c[i]);
}
A)abcdef B)a C)b D)ab
b c c
c d d
d
e
f
【题7.49】当运行以下程序时,从键盘输入:AhaMA Aha<CR>(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
main()
{
char s[80],c=‘a’;
int i=0;
scanf(“%s”,s);
while(s[i]!=‘\0’)
{
if(s[i]==c) s[i]=s[i]-32;
else if(s[i]==c-32) s[i]=s[i]+32;
i++;
}
puts(s);
}
A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA
【题7.50】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a[80]=“AB”,b[80]=“LMNP”;
int i=0;
strcat(a,b);
while(a[i++]!=‘\0’) b[i]=a[i];
puts(b);
}
A)LB B)ABLMNP C)AB D)LBLMNP
【题7.51】下面程序的运行结果是 。
#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*A D)SW
【题7.52】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a[]=“morning”,t;
int i,j=0;
for(i=1;i<7;i++) if(a[j]<a[i]) j=i;
t=a[j]; a[j]=a[7];
a[7]=a[j]; puts(a);
}
A)mogninr B)mo C)morning D)mornin
7.2 填空题
【题7.53】在C语言中,二维数组的定义方式为:类型说明符数组名[【1】][【2】];
【题7.54】在C语言中,二维数组元素在内存中的存放顺序是【 】。
【题7.55】若有定义:double x[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。
【题7.56】若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为:【 】。
(假设a[0][0]位于数组的第一个位置上。)
【题7.57】若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】。
【题7.58】若有以下输入(<CR>代表回车符),则下面程序的运行结果是 。
7 10 5 4 6 7 9 8 3 2 4 6 12 2 -1<CR>
main()
{
int b[51],x,i,j=0,n=0;
scanf(“%d”,&x);
while(x>-1) { b[++n]=x; scanf(“%d”,&x); }
for(i=1;i<=n;i++)
if(b[i]%2==0) b[++j]=b[i];
for(i=1;i<=j;i++) printf(“%3d”,b[i]);
printf(“\n”);
}
【题7.59】下面程序以每行4个数据的形式输出a数组,请填空。
#define N 20
main()
{
int a[N],i;
for(i=0;i<N;i++) scanf(“%d”,【1】);
for(i=0;i<N;i++)
{
if(【2】) 【3】
printf(“%3d”,a[i]);
}
printf(“\n”);
}
【题7.60】下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。
main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf(“array a:\n”);
for(i=0;i<=1;i++)
{
for(j=0;【1】;j++)
{
printf(“%5d”,a[i][j]);
【2】;
}
printf(“\n”);
}
printf(“array b:\n”);
for(i=0;【3】;i++)
{
for(j=0;j<=1;j++)
printf(“%5d”,b[i][j]);
printf(“\n”);
}
}
【题7.61】下面程序的运行结果是 。
main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf(“array a:\n”);
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf(“%5d”,a[i][j]);
b[j][i]=a[i][j];
}
printf(“\n”);
}
printf(“array b:\n”);
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf(“%5d”,b[i][j]);
printf(“\n”);
}
}
【题7.62】下面程序可求出矩阵a的两条对角线上的元素之和。请填空。
main()
{
int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j) sum1=sum1+a[i][j];
for(i=0;i<3;i++)
for(【1】;【2】;j--)
if((i+j)==2) sum2=sum2+a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}
【题7.63】下面程序的运行结果是 。
main()
{
int a[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(i=0;i<5;i++)
a[i][j]=n++;
printf(“The result is:\n”);
for(i=0;i<5;i++)
{
for(j=0;j<=i;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
}
【题7.64】下面程序可求出矩阵a的主对角线上的元素之和。请填空。
main()
{
int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(【1】) sum=sum+【2】;
printf(“sum=%d\n”,sum);
}
【题7.65】以下程序可求出所有的水仙花数。(提示:所谓水仙花数是指一个三位正整数,其各位数字的立方之和等于该正整数。例如:407=4×4×4+0×0×0+7×7×7,故407是一个水仙花数。)请填空。
main()
{
int x,y,z,a[8],m,i=0;
printf(“The special numbers are(in the arrange of 1000):\n”);
for(【1】;m++)
{
x=m/100;
y=【2】;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{ 【3】; i++; }
}
for(x=0;x<i;x++)
printf(“%6d”,a[x]);
}
【题7.66】下面程序的功能是生成并打印某数列的前20项,该数列第1,2项分别为0和1,以后每个奇数编号的项是前两项之和,偶数编号的项是前两项差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。请填空。
main()
{
int x[21],i,j;
x[1]=0; x[2]=1;
i=3;
do{
x=【1】;
x[i+1]=【2】;
i=【3】;
}while(i<20);
for(i=1;i<=20;i++)
{
printf(“%5d”,x[i]);
if(i%4==0)
printf(“\n”);
}
}
【题7.67】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
1 4 2 3 3 4 1 2 3 3 2 2 2 3 3 1 1 1 4 1 1 1 -1<CR>
#define M 50
main()
{
int a[M],c[5],i,n=0,x;
printf(“Enter 0 or 1 or 2 or 3 or 4,to end with -1\n”);
scanf(“%d”,&x);
while(x!=-1)
{
if(x>=0&&x<=4)
{ a[n]=x; n++; }
scanf(“%d”,&x);
}
for(i=0;i<5;i++) c[i]=0;
for(i=0;i<n;i++) c[a[i]]++;
printf(The result is:\n”);
for(i=1;i<=4;i++) printf(“%d:%d\n”,i,c[i]);
printf(“\n”);
}
【题7.68】下面程序的运行结果是 。
main()
{
int i,j,a[2][3]={{2,4,6},{8,10,12}};
printf(“The original array is:\n”);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
printf(“\nthe result is:\n”);
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf(“%4d”,a[j][i]);
printf(“\n”);
}
}
【题7.69】设数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空。
main()
{
int a[10],b[10],i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(【1】;i<10;i++)
【2】
for(i=1;i<10;i++)
{
printf(“%3d”,b[i]);
if(【3】==0) printf(“\n”);
}
}
【题7.70】下面程序将十进制整数转换成n进制。请填空。
main()
{
int i,base,n,j,num[20];
printf(“Enter data that will be converted\n”);
scanf(“%d”,&n);
printf(“Enter base\n”);
scanf(“%d”,&base);
do{
i++;
num[i]=n【1】base;
n=n【2】base;
}while(n!=0);
printf(“The data %d has been converted into the %d--base
data:\n”,n,base);
for(【3】)
printf(“%d”,num[j]);
}
【题7.71】下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。请填空。
main()
{
int a[5],max,min,i,j,k;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
min=a[0];
for(i=1;i<5;i++)
if(a[i]<min) { min=a[i]; 【1】; }
max=a[0];
for(i=1;i<5;i++)
if(a[i]>max) { max=a[i]; 【2】; }
【3】
printf(“\nThe position of min is:%3d\n”,k);
printf(“The position of max is:%3d\n”,j);
for(i=0;i<5;i++)
printf(“%5d”,a[i]);
}
【题7.72】下面程序的运行结果是 。
main()
{
int i,f[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{
if(i%4==0) printf(“\n”);
printf(“%3d”,f[i]);
}
}
【题7.73】下面程序的运行结果是 。
main()
{
int a[10]={1,2,2,3,4,3,4,5,1,5};
int n=0,i,j,c,k;
for(i=0;i<10-n;i++)
{
c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{
for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;
}
}
for(i=0;i<(10-n);i++)
printf(“%d”,a[i]);
printf(“\n”);
}
【题7.74】下面程序的功能是给一维数组a输入任意6个整数,假设为:
7 4 8 9 1 5
然后建立一个具有以下内容的方阵并打印。请填空。
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
main()
{
int a[6],i,j,k,m;
for(i=0;i<6;i++)
scanf(“%d”,&a[i]);
for(i=5;i>=0;i--)
{
k=a[5];
for(【1】;j>=0;j--)
a[j+1]=a[j];
【2】;
for(m=0;m<6;m++)
printf(“%d”,a[m]);
printf(“\n”);
}
}
【题7.75】下面程序的功能是输出以下9*9阶方阵。请填空。
1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1
main()
{
int a[10][10],n,i,j,m;
scanf(“%d”,&n);
if(n%2==0) m=n/2;
else 【1】;
for(i=0;i<m;i++)
for(j=i;j<n-i;j++)
{
a[i][j]=i+1;
a[【2】][j]=i+1;
a[j][i]=i+1;
a[j][【3】]=i+1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(“%d,,a[i][j]);
printf(“\n”);
}
}
【题7.76】当从键盘输入18时,下面程序的运行结果是 。
main()
{
int x,y,i,a[8],j,u,v;
scanf(“%d”,&x);
y=x; i=0;
do{
u=y/2;
a[i]=y%2;
i++; y=u;
}while(y>=1);
for(j=i-1;j>=0;j--)
printf(“%d”,a[j]);
}
【题7.77】下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b。请填空。
例如:array a: array b:
4 5 6 6 4 5
1 2 3 3 1 2
main()
{
int a[2][3]={4,5,6,1,2,3},b[2][3];
int i,j;
printf(“array a:\n”);
for(i=0;i<=1;i++)
{
for(j=0;j<3;j++)
{
printf(“%5d”,a[i][j]);
【1】;
}
printf(“\n”);
}
for(【2】;i++) b[i][0]=a[i][2];
printf(“array b:\n”);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf(“%5d”,b[i][j]);
【3】;
}
}
【题7.78】下面程序的功能是统计年龄在16~31岁之间的学生人数。请填空。
main()
{
int a[30],n,age,i;
for(i=0;i<30;i++) a[i]=0;
printf(“Enter the number of the students(<30)\n”);
scanf(“%d”,&n);
printf(“Enter the age of each student:\n”);
for(i=0;i<n;i++)
{ scanf(“%d”,&age); 【1】; }
printf(“the result is\n”);
printf(“age number\n”);
for(【2】;i++)
printf(“%3d %6d\n”,i,a[i-16]);
}
【题7.79】下面程序的功能是检查一个二维数组是否对称(即:对所有ij都有a[i][j]=a[j][i])。请填空。
main()
{
int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};
int i,j,found=0;
for(j=0;j<4;j++)
for(【1】;i<4;i++)
if(a[j][i]!=a[i][j])
{ 【2】; break; }
if(found) printf(“No”);
else printf(“Yes”);
}
【题7.80】下面程序中数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。请填空。
main()
{
int a[10],b[10],i;
for(i=0;【1】;i++)
scanf(“%d”,&a[i]);
for(i=1;【2】;i++)
b[i]=a[i]-a[i-1];
for(i=1;i<10;i++)
{
printf(“%3d”,b[i]);
if(【3】) printf(“\n”);
}
}
【题7.81】下面程序的运行结果是 。
main()
{
int i=1,n=3,j,k=3;
int a[5]={1,4,5};
while(i<=n&&k>a[i]) i++;
for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)
printf(“%3d”,a[i]);
}
【题7.82】下面程序的运行结果是 。
main()
{
int num_list[]={6,7,8,9},k,j,b,u=0,m=4,w;
w=m-1;
while(u<=w)
{
j=num_list[u];
k=2; b=1;
while(k<=j/2&&b)
b=j%++k;
if(b) printf(“%d\n”,num_list[u++]);
else
{
num_list[u]=num_list[w];
num_list[w--]=j;
}
}
}
【题7.83】设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int k,s,i;
float ave;
for(k=s=i=0;i<10;i++)
{
if(a[i]%2!=0) 【1】;
s+=【2】;
k++;
}
if(k!=0) { ave=s/k; printf(“%d,%f\n”,k,ave); }
}
【题7.84】以下程序是求矩阵a,b的和,结果存入矩阵c中并按矩阵形式输出。请填空。
main()
{
int a[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}};
int b[3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}};
int i,j,c[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=【1】;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf(“%3d”,c[i][j]);
【2】;
}
}
【题7.85】以下程序是求矩阵a,b的乘积,结果存入矩阵c中并按矩阵形式输出。请填空。
main()
{
int a[3][2]={2,-1,-4,0,3,1};
int b[2][2]={7,-9,-8,10};
int i,j,k,s,c[3][2];
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{
for(【1】;k<2;k++)
s+=【2】;
c[i][j]=s;
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf(“%6d”,c[i][j]);
【3】
}
}
【题7.86】已知以下矩阵:
=×
下面程序的功能是求出Y1,Y2,Y3,Y4的值。请填空。
main()
{
float a[4][4]={{1,-0.2,0,0},{-0.8,1,-0.2,-0.2},
{0,-0.8,1,-0.2},{0,-0.8,-0.8,1},};
float x[4]={1,1,1,1},y[4];
int i,j,k;
for(i=0;i<4;i++)
{
y[i]=0;
for(j=0;j<4;j++)
【1】
}
for(k=0;k<4;k++)
printf(“\nY[%d]=%-6.2f”,k+1,【2】);
}
【题7.87】以下程序的功能是求数组num中小于零的数据之和。请填空。
main()
{
int num[20]={10,20,1,-20,203,-21,2,-2,-2,11,-21,22,12,
-2,-234,-90,22,90,-45,20};
int sum=,i;
for(i=0;i<=19;i++)
{
if(【1】)
sum=【2】;
}
printf(“sum=%6d”,sum);
}
【题7.88】以下程序的功能是 。
main()
{
int num[10]={10,1,-20,-203,-21,2,-2,-2,11,-21};
int sum=0,i;
for(i=0;i<10;i++)
{
if(num[i]>0)
sum=num[i]+sum;
}
printf(“sum=%6d”,sum);
}
【题7.89】下面程序的运行结果是 。
main()
{
int i,j,row,col,min;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}};
min=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]<min)
{ min=a[i][j]; row=i; col=j; }
printf(“min=%d,row=%d,col=%d\n”,min,row,col);
}
【题7.90】若有以下输入(<CR>代表回车),则下面程序的运行结果是 。
52<CR>
main()
{
int a[8]={6,12,18,42,44,52,67,94};
int low=0,mid,high=7,found,x;
found=0;
scanf(“%d”,&x);
while((low<=high)&&(found==0))
{
mid=(low+high)/2;
if(x>a[mid]) low=mdi+1;
else if(x<a[mid]) high=mid-1;
else
{ found=1; break; }
}
if(found==1) printf(“Search Successful!The index is:%d\n”,mid);
else printf(“Can’t search!\n”);
}
【题7.91】下面程序的运行结果是 。
main()
{
int a[9]={0,6,12,18,42,44,52,67,94};
int x=52,i,n=9,m;
i=n/2+1;
m=n/2;
while(m!=0)
{
if(x<a[i])
{ i=i-m/2-1; m=m/2; }
else if(x>a[i])
{ i=i+m/2+1; m=m/2; }
else break;
}
printf(“The index is:%d”,i);
}
【题7.92】下面程序用“顺序查找法”查找数组a中是否存在某一关键字。请填空。
main()
{
int a[8]={25,57,48,37,12,92,86,33};
int i,x;
scanf(“%d”,&x);
for(i=0;i<8;i++)
if(x==a[i])
{ printf(“Found! The index is:%d\n”,--i); 【1】; }
if(【2】)
printf(“Can’t found!”);
}
【题7.93】下面程序用“快速顺序查找法”查找数组a中是否存在某一关键字。请填空。
main()
{
int a[9]={25,57,48,37,12,92,86,33};
int i,x;
scanf(“%d”,&x);
【1】; i=0;
while(a[i]!=x) i++;
if(【2】) printf(“Found! The index is:%d\n”,i);
else printf(“Can’t found!\n”);
}
【题7.94】下面程序用插入法对数组a进行降序排序。请填空。
main()
{
int a[5]={4,7,2,5,1};
int i,j,m;
for(i=1;i<5;i++)
{
m=a[i];
j=【1】;
while(j>=0&&m>a[j])
{
【2】;
j--;
}
【3】=m;
}
for(i=0;i<5;i++)
printf(“%d”,a[i]);
printf(“\n”);
}
【题7.95】下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请填空。
main()
{
int a[3]={5,9,19};
int b[5]={12,24,26,37,48};
int c[10],i=0,j=0,k=0;
while(i<3&&j<5)
if(【1】) { c[k]=b[j]; k++; j++; }
else { c[k]=a[i]; k++; i++; }
while(【2】) { c[k]=a[i]; i++; k++; }
while(【3】) { c[k]=b[j]; k++; j++; }
for(i=0;i<k;i++)
printf(“%3d”,c[i]);
}
【题7.96】下面程序的运行结果是 。
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”);
}
}
【题7.97】若有以下输入(<CR>代表回车),则下面程序的运行结果是 。
3245<CR>
8<CR>
main()
{
int i=0,base,n,j,old,num[20];
printf(“Enter data that will be converted\n”);
scanf(“%d”,&n);
old=n;
printf(“Enter base\n”);
scanf(“%d”,&base);
do{
i++;
num[i]=n%base;
n=n/base;
}while(n!=0);
printf(“The data %d has been converted into the %d – base
data:\n”,old,base);
for(j=i;j>=1;j--)
printf(“%5d”,num[j]);
}
【题7.98】若有以下输入(<CR>代表回车),则下面程序的运行结果是 。
7 4 8 9 1 5
main()
{
int a[6],i,j,k,m;
for(i=0;i<6;i++)
scanf(“%d”,&a[i]);
for(i=5;i>=0;i--)
{
k=a[5];
for(j=4;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<6;m++)
printf(“%d”,a[m]);
printf(“\n”);
}
}
【题7.99】下面程序的运行结果是 。
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int k,s,i;
float ave;
for(k=s=i=0;i<10;i++)
{
if(a[i]%2==0) continue;
s+=a[i];
k++;
}
if(k!=0)
{
ave=s/k;
printf(“The number is:%d,The average is:%f\n”,k,ave);
}
}
【题7.100】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
3 1 2 3 2 2 2 1 1 3 0<CR>
main()
{
int a[4],x,i;
for(i=1;i<=3;i++) a[i]=0;
scanf(“%d”,&x);
while(x>0) { a[x]+=1; scanf(“%d”,&x); }
for(i=1;i<=3;i++) printf(“a[%2d]=%4d\n”,i,a[i]);
}
【题7.101】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
5<CR>
9 7 5 3 1<CR>
5<CR>
#define M 10
main()
{
int a[M],x,i,n;
printf(“Enter n(n<10):”;
scanf(“%d”,&n);
for(i=1;i<=n;i++)
scanf(“%d”,a+i);
printf(“Enter x:”);
scanf(“%d”,&x);
a[0]=x; i=n;
while(x>a[i]) { a[i+1]=a[i]; i--; }
a[i+1]=x;
n++;
for(i=1;i<=n;i++) printf(“%3d”,a[i]);
printf(“\n”);
}
【题7.102】下面程序的运行结果是 。
#define SIZE 30
main()
{
float a[SIZE],b[SIZE/5],sum;
int i,k;
for(k=2,i=0;i<SIZE;i++)
{ a[i]=k; k+=2; }
sum=0;
for(k=0,i=0;i<SIZE;i++)
{
sum+=a[i];
if((i+1)%5==5)
{
b[k]=sum/5;
sum=0;
k++;
}
}
printf(“The result is:\n”);
for(i=0;i<SIZE/5;i++) printf(“%5.2f”,b[i]);
printf(“\n”);
}
【题7.103】下面程序的功能是求出矩阵x的上三角元素之积。其中矩阵x的行、列数和元素值均由键盘输入。请填空。
#define M 10
main()
{
int x[M][M];
int n,i,j;
long s=1;
printf(“Enter a integer(<=10):\n”);
scanf(“%d”,&n);
printf(“Enter %d data on each line for the array x\n”,n);
for(【1】)
for(j=0;j<n;j++)
scanf(“%d”,&x[i][j]);
for(i=0;i<n;i++)
for(【2】)
【3】
printf(“%ld\n”,s);
}
【题7.104】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
4<CR>
1 2 3 4<CR>
1 2 3 4<CR>
1 2 3 4<CR>
1 2 3 4<CR>
#define M 10
main()
{
int x[M][M];
int n,i,j;
long s=1;
printf(“Enter a integer(<=10):\n”);
scanf(“%d”,&n);
printf(“Enter %d data on each line for the array x\n”,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf(“%d”,&x[i][j]);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
s*=x[i][j];
printf(“The result=%ld\n”,s);
}
【题7.105】字符串“ab\n\\012\\\””的长度是 。
【题7.106】下面程序段的运行结果是 。
char ch[]=“600”;
int a,s=0;
for(a=0;ch[a]>=‘0’&&ch[a]<=‘9’;a++)
s=10*s+ch[a]-‘0’;
printf(“%d”,s);
【题7.107】下面程序段将输出computer,请填空。
char ch[]=“It’s a computer”;
for(i=0;【1】;i++)
{ 【2】; printf(“%c”,c[j]; )
【题7.108】下面程序段的运行结果是 。
char x[]=“the teacher”;
i=0;
while(x[++i]!=‘\0’) if(x[i-1]==‘t’) printf(“%c”,x[i]);
【题7.109】下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。请填空。
#include <stdio.h>
#include <string.h>
main()
{
char c=‘a’,t[50];
int n,k,j;
gets(t);
n=【1】;
for(k=0;k<n;k++)
if(【2】) { j=k; break; }
else j=-1;
printf(“%d”,j);
}
【题7.110】下面程序的功能是在三个字符串找出最小的。请填空。
#include <stdio.h>
#include <string.h>
main()
{
char s[20],str[3][20];
int i;
for(i=0;i<3;i++) gets(str[i]);
strcpy(s,【1】);
if(strcmp(str[2],s)<0) strcpy(s,str[2]);
printf(“%s\n”,【2】);
}
【题7.111】下面程序的功能是从键盘输入一个大写英文字母,要求按字母的顺序打印出3个相邻的字母,指定的字母在中间。若指定的字符为Z,则打印YZA;若为A则打印ZAB。请填空。
#include <stdio.h>
main()
{
char a[3],c;
int i;
c=getchar();
a[1]=c;
if(c==‘Z’) { a[2]=‘A’; 【1】; }
else if(c==‘A’) { a[0]=‘Z’; 【2】; }
else { a[0]=c-1; a[2]=c+1; }
for(i=0;i<3;i++) putchar(a[i]);
}
【题7.112】下面程序的功能是将字符数组a[6]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’}变为a[6]= {‘f’,‘a’,‘b’,‘c’,‘d’,‘e’}。请填空。
#include <stdio.h>
main()
{
char t,a[6]= {‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};
int i;
【1】;
for(i=0;i<5;i++)
{
【2】;
for(i=0;i<=5;i++) printf(“%c”,a[i]);
}
}
【题7.113】下面程序的功能是将字符数组a下标值为偶数的元素由小到大排序,其它元素不变。请填空。
#include <stdio.h>
main()
{
char a[]=“labchmfye”,t;
int i,j;
for(i=0;i<7;i+=2)
for(j=i+2;j<9;【1】)
if(【2】)
{ t=a[i]; a[i]=a[j]; a[j]=t; j++; }
puts(a);
printf(“\n”);
}
【题7.114】下面程序的功能是在任意的字符串a中将与字符c相等的所有元素的下标值分别存放在整型数组b中。请填空。
#include <stdio.h>
main()
{
char a[80];
int i,b[80],k=0;
gets(a);
for(i=0;a[i]!=‘’;i++)
if(【1】) { b[k]=i; 【2】; }
for(i=0;i<k;i++) printf(“%3d”,b[i]);
【题7.115】有十个字符串。下面程序的功能是在每个字符串中,找出最大字符按一一对应的顺序放入一维数组a中,即第i个字符串中的最大字符放入a[i]中,输出每个字符串中的最大字符。请填空。
#include <stdio.h>
main()
{
char s[10][20];
int a[10],i,j;
for(i=0;i<10;i++)
gets(s[i]);
for(i=0;i<10;i++)
{
【1】;
for(j=1;s[i][j]!=‘\0’;j++)
if(a[i]<s[i][j]) 【2】;
}
for(i=0;i<10;i++)
printf(“%d %c”,i,a[i]);
}
【题7.116】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i;
char a[]=“Time”,b[]=“Tom”;
for(i=0;a[i]!=‘\0’&&b[i]!=‘\0’;i++)
if(a[i]==b[i])
if(a[i]>=‘a’&&a[i]<=‘z’)
printf(“%c”,a[i]-32);
else printf(“%c”,a[i]+32);
else printf(“*”);
}
【题7.117】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a[2][6]={“Sun”,“Moon”};
int i,j,len[2];
for(i=0;i<2;i++)
{
for(j=0;j<6;j++)
if(a[i][j]==‘\0’)
{ len[i]=j; break; }
printf(“%6s:%d\n”,a[i],len[i]);
}
}
【题7.118】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i,r;
char s1[80]=“bus”;
char s2[80]=“book”;
for(i=r=0;s1[i]!=‘\0’&&s2[i]!=‘\0’;i++)
if(s1[i]==s2[i]) i++;
else { r=s1[i]-s2[i]; break; }
printf(“%d”,r);
}
【题7.119】下面程序的运行结果是 。
#include <stdio.h>
#define LEN 4
main()
{
int j,c;
static char n[2][LEN+1]={“8980”,“9198”};
for(j=LEN-1;j>=0;j--)
{
c=n[0][j]+n[1][j]-2*‘0’;
n[0][j]=c%10+‘0’;
}
for(j=0;j<=1;j++) puts(n[j]);
}
【题7.120】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i=5;
char c[6]=“abcd”;
do{ c[i]=c[i-1]; }while(--i>0);
puts(c);
}
【题7.121】当运行以下程序时,从键盘输入AabD<CR>(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
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);
}
【题7.122】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char s[]=“ABCCDA”;
int k; char c;
for(k=1;(c=s[k])!=‘\0’;k++)
{
switch(c)
{
case ‘A’,putchar(‘%’); continue;
case ‘B’,++k; break;
default,putchar(‘*’);
case ‘C’,putchar(‘&’); continue;
}
putchar(‘#’);
}
}
【题7.123】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i=0;
char a[]=“abm”,b[]=“aqid”,c[10];
while(a[i]!=‘\0’&&b[i]!=‘\0’)
{
if(a[i]>=b[i]) c[i]=a[i]-32;
else c[i]=b[i]-32;
++i;
}
c[i]=‘\0’;
puts(c);
}
【题7.124】当运行以下程序时,从键盘输入:BOOK<CR>
CUT<CR>
GAME<CR>
PAGE<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
#include <string.h>
main()
{
int i;
char str[10],temp[10]=“Control”;
for(i=0;i<4;i++)
{
gets(str);
if(strcmp(temp,str)<0) strcpy(temp,str);
}
puts(temp);
}
【题7.125】当运行以下程序时,从键盘输入:girl<CR>
boy<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
#include <string.h>
main()
{
char a[2][80],t;
int i,j,m,n,l,max;
for(i=0;i<=1;i++) gets(a[i]);
t=a[0][0];
for(i=0;i<=1;i++)
{
l=strlen(a[i]);
for(j=0;j<=1;j++)
if(a[i][j]>t) { max=a[i][j]; m=i; n=j; }
}
printf(“%c %d %d\n”,max,m,n);
}
7.3 编程题
【题7.126】从键盘输入若干整数(数据个数应至少于50),其值在0至4的范围内,用-1作为输入结束的标志。统计每个整数的个数。试编程。
【题7.127】若有说明:int a[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二维数组b中。试编程。
【题7.128】定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
【题7.129】通过赋初值按行顺序给2×3的二维数组赋予2、4、6、…等偶数,然后按列的顺序输出该数组。试编程。
【题7.130】通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。
【题7.131】下面是一个5×5阶的螺旋方阵。试编程打印出此形式的n×n(n<10)阶的方阵(顺时针方向旋进)。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
【题7.132】数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,并按每行3个元素的格式输出数组b。试编程。
【题7.133】从键盘输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。若该字符不在a中,则打印出**。试编程。
【题7.134】从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b中的所有元素都连接到a中。试编程。
【题7.135】从键盘输入一个字符串a,并在a串中的最大元素后边插入字符串b(b[]=“ab”)。试编程。
7.1 选择题
【题7.1】在C语言中,引用数组元素时,其数组下标的数据类型允许是 。
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式
【题7.2】以下对一维整型数组a的正确说明是 。
A)int a(10); B)int n=10,a[n];
C)int n; D)#define SIZE 10
scanf(“%d”,&n); int a[SIZE];
int a[n];
【题7.3】若有说明:int a[10];则对a数组元素的正确引用是 。
A)a[10] B)a[3.5] C)a(5) D)a[10-10]
【题7.4】在C语言中,一维数组的定义方式为:类型说明符 数组名 ;
A)[常量表达式] B)[整型表达式]
C)[整型常量] 或[整型表达式] D)[整型常量]
【题7.5】以下能对一维数组a进行正确初始化的语句是 。
A)int a[10]=(0,0,0,0,0); B)int a[10]={};
C)int a[]={0}; D)int a[10]={10*1};
【题7.6】以下对二维数组a的正确说明是 。
A)int a[3][]; B)float a(3,4);
C)double a[1][4]; D)float a(3)(4);
【题7.7】若有说明:int a[3][4];则对a数组元素的正确引用是 。
A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1)
【题7.8】若有说明:int a[3][4];则对a数组元素的非法引用是 。
A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4]
【题7.9】以下能对二维数组a进行正确初始化的语句是 。
int a[2][]={{1,0,1},{5,2,3}};
int a[][3]={{1,2,3},{4,5,6}};
int a[2][4]={{1,2,3},{4,5},{6}};
int a[][3]={{1,0,1},{},{1,1}};
【题7.10】以下不能对二维数组a进行正确初始化的语句是 。
int a[2][3]={0};
int a[][3]={{1,2},{0}};
int a[2][3]={{1,2},{3,4},{5,6}};
int a[][3]={1,2,3,4,5,6};
【题7.11】若有说明:int a[3][4]={0};则下面正确的叙述是 。
只有元素a[0][0]可得到初值0
此说明语句不正确数组a中各元素都可得到初值,但其值不一定为0
数组a中每个元素均可得到初值0
【题7.12】若有说明:int a[][4]={0,0};则下面不正确的叙述是 。
数组a的每个元素都可得到初值0
二维数组a的第一维大小为1
因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1
只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
【题7.13】若有说明:int a[3][4];则数组a中各元素 。
可在程序的运行阶段得到初值0
可在程序的编译阶段得到初值0
不能得到确定的初值可在程序的编译或运行阶段得到初值0
【题7.14】以下各组选项中,均能正确定义二维实型数组a的选项是 。
A)float a[3][4]; B)float a(3,4);
float a[][4]; float a[3][4];
float a[3][]={{1},{0}}; float a[][]={{0};{0}};
C)float a[3][4]; D)float a[3][4];
static float a[][4]={{0},{0}}; float a[3][];
auto float a[][4]={{0},{0},{0}}; float a[][4];
【题7.15】下面程序 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float a[3]={3*0};
4 int i;
5 for(i=0;i<3;i++) 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)第3行有错误 B)第7行有错误
C)第5行有错误 D)没有错误
【题7.16】下面程序 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float a[10]={0.0};
4 int i;
5 for(i=0;i<3;i++) scanf(“%d”,&a[i]);
6 for(i=1;i<10;i++) a[0]=a[0]+a[i];
7 printf(“%f\n”,a[0]);
8 }
A)没有错误 B)第3行有错误
C)第5行有错误 D)第7行有错误
【题7.17】下面程序中有错误的行是 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float 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
【题7.18】下面程序 (每行程序前面的数字表示行号)。
1 main()
2 {
3 float a[3]={0};
4 int i;
5 for(i=0;i<3;i++) scanf(“%d”,&a[i]);
6 for(i=1;i<4;i++) a[0]=a[0]+a[i];
7 printf(“%d\n”,a[0]);
8 }
A)没有错误 B)第3行有错误
C)第5行有错误 D)第6行有错误
【题7.19】若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为 。(假设a[0][0]位于数组的第一个位置上。)
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
【题7.20】对以下说明语句的正确理解是 。
int a[10]={6,7,8,9,10};
将5个初值依次赋给a[1]至a[5]
将5个初值依次赋给a[0]至a[4]
将5个初值依次赋给a[6]至a[10]
因为数组长度与初值的个数不相同,所以此语句不正确
【题7.21】以下不正确的定义语句是 。
double x[5]={2.0,4.0,6.0,8.0,10.0};
int y[5]={0,1,3,5,7,9};
char c1[]={‘1’,‘2’,‘3’,‘4’,‘5’};
char c2[]={‘\x10’,‘\xa’,‘\x8’};
【题7.22】若有说明:int a[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是 。
A)2 B)3 C)4 D)无确定值
【题7.23】若二维数组a有m列,则在a[i][j]前的元素个数为 。
A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1
【题7.24】定义如下变量和数组:
int k;
int 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
【题7.25】若有以下程序段:
… …
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]; j--; }
a[j+1]=t;
}
… …
则该程序段的功能是 。
对数组a进行插入排序(升序)
对数组a进行插入排序(降序)
对数组a进行选择排序(升序)
对数组a进行选择排序(降序)
【题7.26】以下正确的定义语句是 。
int a[1][4]={1,2,3,4,5};
float x[3][]={{1},{2},{3}};
long b[2][3]={{1},{1,2},{1,2,3}};
double y[][3]={0};
【题7.27】下面程序的运行结果是 。
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”);
}
}
A)1 1 1 1 1 B)0 0 0 0 1 C)1 0 0 0 0 D)1 0 0 0 1
1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0
1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0
1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0
1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1
【题7.28】下面程序的运行结果是 。
main()
{
int a[6],i;
for(i=1;i<6;i++)
{
a[i]=9*(i-2+4*(i>3))%5;
printf(“%2d”,a[i]);
}
}
A)-4 0 4 0 4 B)-4 0 4 0 3
C)-4 0 4 4 3 D)-4 0 4 4 0
【题7.29】下面是对s的初始化,其中不正确的是 。
A)char s[5]={“abc”}; B)char s[5]={‘a’,‘b’,‘c’};
C)char s[5]=“”; D)char s[5]=“abcdef”;
【题7.30】下面程序段的运行结果是 。
char c[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};
printf(“%s”,c);
A)‘a’‘b’ B)ab C)ab c
【题7.31】对两个数组a和b进行如下初始化
char a[]=“ABCDEF”;
char b[]={‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};
则以下叙述正确的是 。
A)a与b数组完全相同 B)a与b长度相同
C)a和b中都存放字符串 D)a数组比b数组长度长
【题7.32】有两个字符数组a、b,则以下正确的输入格式是 。
A)gets(a,b); B)scanf(“%s %s”,a,b);
C)scanf(“%s %s”,&a,&b); D)gets(“a”),get(“b”);
【题7.33】有字符数组a[80]和b[80],则正确的输出形式是 。
A)puts(a,b); B)printf(“%s %s”,a[],b[]);
C)putchar(a,b); D)puts(a),puts(b);
【题7.34】下面程序段的运行结果是 。
char a[7]=“abcdef”;
char b[4]=“ABC”;
strcpy(a,b);
printf(“%c”,a[5]);
A)空格 B)\0 C)e D)f
【题7.35】有下面的程序段
char a[3],b[]=“China”;
a=b;
printf(“%s”,a);
则 。
A)运行后将输出China B)运行后将输出Ch
C)运行后将输出Chi D)编译出错
【题7.36】下面程序段的运行结果是 。
char c[]=“\t\v\\\0will\n”;
printf(“%d”,strlen(c));
A)14 B)3 C)9 D)字符串中有非法字符,输出值不确定
【题7.37】判断字符串a和b是否相等,应当使用 。
A)if(a==b) B)if(a=b)
C)if(strcpy(a,b)) D)if(strcmp(a,b))
【题7.38】判断字符串s1是否大于字符串s2,应当使用 。
A)if(s1>s2) B)if(strcmp(s1,s2))
C)if(strcmp(s2,s1)>0) D)if(strcmp(s1,s2)>0)
【题7.39】下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。
char x[]=“programming”;
char y[]=“Fortran”;
int i=0;
while(x[i]!=‘\0’&&y[i]!= ‘\0’)
{
if(x[i]==y[i]) printf(“%c”,【1】);
else i++;
}
【1】 A)x[i++] B)y[++i] C)x[i] D)y[i]
【题7.40】下面描述正确的是 。
两个字符串所包含的字符个数相同时,才能比较字符串字符个数多的字符串比字符个数少的字符串大字符串“STOP,与“STOP”相等字符串“That”小于字符串“The”
【题7.41】下述对C语言字符数组的描述中错误的是 。
字符数组可以存放字符串字符数组的字符串可以整体输入、输出可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值不可以用关系运算符对字符数组中的字符串进行比较
【题7.42】有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素的规律插入到a中。请选择填空。
#include <stdio.h>
main()
{
char a[20]=“cehiknqtw”;
char s[]=“fbla”;
int i,k,j;
for(k=0;s[k]!=‘\0’;k++)
{
j=0;
while(s[k]>=a[j]&&a[j]!=‘\0’) j++;
for(【1】) 【2】;
a[j]=s[k];
}
puts(a);
}
【1】 A)i=strlen(a)+k; i>=j; i-- B)i=strlen(a); i>=j; i--
C)i=j; i<=strlen(a)+k; i++ D)i=j; i<=strlen(a); i++
【2】 A)a[i]=a[i+1] B)a[i+1]=a[i]
C)a[i]=a[i-1] D)a[i-1]=a[i]
【题7.43】下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中。请选择填空。
#include <stdio.h>
main()
{
char a[]=“acegikm”;
char b[]=“bdfhjlnpq”;
char c[80],*p;
int i=0,j=0,k=0;
while(a[i]!=‘\0’&&b[j]!=‘\0’)
{
if(a[i]<b[j]) { 【1】 }
else { 【2】 }
k++;
}
c[k]= ‘\0’;
if(【3】) p=b+j;
else p=a+i;
strcat(c,p);
puts(c);
}
【1】 A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;
C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;
【2】 A)c[k]=a[i]; i++; B)c[k]=a[j]; i++;
C)c[k]=a[i]; j++; D)c[k]=a[j]; j++;
【3】 A)a[i]==‘\0’ B)a[i]!=‘\0’
C)a[i-1]==‘\0’ D)a[i-1]!=‘\0’
【题7.44】下面程序的功能是将字符串s中所有的字符c删除。请选择填空。
#include <stdio.h>
main()
{
char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!=‘\0’;i++)
if(s[i]!=‘c’) 【1】;
s[j]=‘\0’;
puts(s);
}
【1】 A)s[j++]=s[i] B)s[++j]=s[i]
C)s[j]=s[i]; j++ D)s[j]=s[i]
【题7.45】下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。请选择填空。
#include <stdio.h>
main()
{
char s[80],c1,c2=‘’;
int i=0,num=0;
gets(s);
while(s[i]!=‘\0’)
{
c1=s[i];
if(i==0) c2=‘’;
else c2=s[i-1];
if(【1】) num++;
i++;
}
printf(“There are %d words.\n”,num);
}
【1】 A)c1==‘’&&c2==‘’ B)c1!=‘’&&c2==‘’
C)c1==‘’&&c2!=‘’ D)c1!=‘’&&c2!=‘’
【题7.46】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char ch[7]={“12ab56”};
int i,s=0;
for(i=0;ch[i]>=‘0’&&ch[i]<=‘9’;i+=2)
s=10*s+ch[i]-‘0’;
printf(“%d\n”,s);
}
A)1 B)1256 C)12ab56 D)1
2
5
6
【题7.47】当运行以下程序时,从键盘输入:aa bb<CR>
cc dd<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a1[5],a2[5],a3[5],a4[5];
scanf(“%s %s”,a1,a2);
gets(a3); gets(a4);
puts(a1); puts(a2);
puts(a3); puts(a4);
}
A)aa B)aa C)aa D)aa bb
bb bb bb cc
cc cc dd dd
cc dd dd ee
【题7.48】当运行以下程序时,从键盘输入:ab<CR>
c<CR>
def<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
#define N 6
main()
{
char c[N];
int i=0;
for(;i<N;c[i]=getchar(),i++);
for(i=0;i<N;i++) putchar(c[i]);
}
A)abcdef B)a C)b D)ab
b c c
c d d
d
e
f
【题7.49】当运行以下程序时,从键盘输入:AhaMA Aha<CR>(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
main()
{
char s[80],c=‘a’;
int i=0;
scanf(“%s”,s);
while(s[i]!=‘\0’)
{
if(s[i]==c) s[i]=s[i]-32;
else if(s[i]==c-32) s[i]=s[i]+32;
i++;
}
puts(s);
}
A)ahAMa B)AhAMa C)AhAMa ahA D)ahAMa ahA
【题7.50】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a[80]=“AB”,b[80]=“LMNP”;
int i=0;
strcat(a,b);
while(a[i++]!=‘\0’) b[i]=a[i];
puts(b);
}
A)LB B)ABLMNP C)AB D)LBLMNP
【题7.51】下面程序的运行结果是 。
#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*A D)SW
【题7.52】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a[]=“morning”,t;
int i,j=0;
for(i=1;i<7;i++) if(a[j]<a[i]) j=i;
t=a[j]; a[j]=a[7];
a[7]=a[j]; puts(a);
}
A)mogninr B)mo C)morning D)mornin
7.2 填空题
【题7.53】在C语言中,二维数组的定义方式为:类型说明符数组名[【1】][【2】];
【题7.54】在C语言中,二维数组元素在内存中的存放顺序是【 】。
【题7.55】若有定义:double x[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。
【题7.56】若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为:【 】。
(假设a[0][0]位于数组的第一个位置上。)
【题7.57】若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】。
【题7.58】若有以下输入(<CR>代表回车符),则下面程序的运行结果是 。
7 10 5 4 6 7 9 8 3 2 4 6 12 2 -1<CR>
main()
{
int b[51],x,i,j=0,n=0;
scanf(“%d”,&x);
while(x>-1) { b[++n]=x; scanf(“%d”,&x); }
for(i=1;i<=n;i++)
if(b[i]%2==0) b[++j]=b[i];
for(i=1;i<=j;i++) printf(“%3d”,b[i]);
printf(“\n”);
}
【题7.59】下面程序以每行4个数据的形式输出a数组,请填空。
#define N 20
main()
{
int a[N],i;
for(i=0;i<N;i++) scanf(“%d”,【1】);
for(i=0;i<N;i++)
{
if(【2】) 【3】
printf(“%3d”,a[i]);
}
printf(“\n”);
}
【题7.60】下面程序将二维数组a的行和列元素互换后存到另一个二维数组b中。请填空。
main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf(“array a:\n”);
for(i=0;i<=1;i++)
{
for(j=0;【1】;j++)
{
printf(“%5d”,a[i][j]);
【2】;
}
printf(“\n”);
}
printf(“array b:\n”);
for(i=0;【3】;i++)
{
for(j=0;j<=1;j++)
printf(“%5d”,b[i][j]);
printf(“\n”);
}
}
【题7.61】下面程序的运行结果是 。
main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf(“array a:\n”);
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf(“%5d”,a[i][j]);
b[j][i]=a[i][j];
}
printf(“\n”);
}
printf(“array b:\n”);
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf(“%5d”,b[i][j]);
printf(“\n”);
}
}
【题7.62】下面程序可求出矩阵a的两条对角线上的元素之和。请填空。
main()
{
int a[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j) sum1=sum1+a[i][j];
for(i=0;i<3;i++)
for(【1】;【2】;j--)
if((i+j)==2) sum2=sum2+a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}
【题7.63】下面程序的运行结果是 。
main()
{
int a[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(i=0;i<5;i++)
a[i][j]=n++;
printf(“The result is:\n”);
for(i=0;i<5;i++)
{
for(j=0;j<=i;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
}
【题7.64】下面程序可求出矩阵a的主对角线上的元素之和。请填空。
main()
{
int a[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(【1】) sum=sum+【2】;
printf(“sum=%d\n”,sum);
}
【题7.65】以下程序可求出所有的水仙花数。(提示:所谓水仙花数是指一个三位正整数,其各位数字的立方之和等于该正整数。例如:407=4×4×4+0×0×0+7×7×7,故407是一个水仙花数。)请填空。
main()
{
int x,y,z,a[8],m,i=0;
printf(“The special numbers are(in the arrange of 1000):\n”);
for(【1】;m++)
{
x=m/100;
y=【2】;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{ 【3】; i++; }
}
for(x=0;x<i;x++)
printf(“%6d”,a[x]);
}
【题7.66】下面程序的功能是生成并打印某数列的前20项,该数列第1,2项分别为0和1,以后每个奇数编号的项是前两项之和,偶数编号的项是前两项差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。请填空。
main()
{
int x[21],i,j;
x[1]=0; x[2]=1;
i=3;
do{
x=【1】;
x[i+1]=【2】;
i=【3】;
}while(i<20);
for(i=1;i<=20;i++)
{
printf(“%5d”,x[i]);
if(i%4==0)
printf(“\n”);
}
}
【题7.67】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
1 4 2 3 3 4 1 2 3 3 2 2 2 3 3 1 1 1 4 1 1 1 -1<CR>
#define M 50
main()
{
int a[M],c[5],i,n=0,x;
printf(“Enter 0 or 1 or 2 or 3 or 4,to end with -1\n”);
scanf(“%d”,&x);
while(x!=-1)
{
if(x>=0&&x<=4)
{ a[n]=x; n++; }
scanf(“%d”,&x);
}
for(i=0;i<5;i++) c[i]=0;
for(i=0;i<n;i++) c[a[i]]++;
printf(The result is:\n”);
for(i=1;i<=4;i++) printf(“%d:%d\n”,i,c[i]);
printf(“\n”);
}
【题7.68】下面程序的运行结果是 。
main()
{
int i,j,a[2][3]={{2,4,6},{8,10,12}};
printf(“The original array is:\n”);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
printf(“\nthe result is:\n”);
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf(“%4d”,a[j][i]);
printf(“\n”);
}
}
【题7.69】设数组a包括10个整型元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空。
main()
{
int a[10],b[10],i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(【1】;i<10;i++)
【2】
for(i=1;i<10;i++)
{
printf(“%3d”,b[i]);
if(【3】==0) printf(“\n”);
}
}
【题7.70】下面程序将十进制整数转换成n进制。请填空。
main()
{
int i,base,n,j,num[20];
printf(“Enter data that will be converted\n”);
scanf(“%d”,&n);
printf(“Enter base\n”);
scanf(“%d”,&base);
do{
i++;
num[i]=n【1】base;
n=n【2】base;
}while(n!=0);
printf(“The data %d has been converted into the %d--base
data:\n”,n,base);
for(【3】)
printf(“%d”,num[j]);
}
【题7.71】下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。请填空。
main()
{
int a[5],max,min,i,j,k;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
min=a[0];
for(i=1;i<5;i++)
if(a[i]<min) { min=a[i]; 【1】; }
max=a[0];
for(i=1;i<5;i++)
if(a[i]>max) { max=a[i]; 【2】; }
【3】
printf(“\nThe position of min is:%3d\n”,k);
printf(“The position of max is:%3d\n”,j);
for(i=0;i<5;i++)
printf(“%5d”,a[i]);
}
【题7.72】下面程序的运行结果是 。
main()
{
int i,f[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{
if(i%4==0) printf(“\n”);
printf(“%3d”,f[i]);
}
}
【题7.73】下面程序的运行结果是 。
main()
{
int a[10]={1,2,2,3,4,3,4,5,1,5};
int n=0,i,j,c,k;
for(i=0;i<10-n;i++)
{
c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{
for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;
}
}
for(i=0;i<(10-n);i++)
printf(“%d”,a[i]);
printf(“\n”);
}
【题7.74】下面程序的功能是给一维数组a输入任意6个整数,假设为:
7 4 8 9 1 5
然后建立一个具有以下内容的方阵并打印。请填空。
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
main()
{
int a[6],i,j,k,m;
for(i=0;i<6;i++)
scanf(“%d”,&a[i]);
for(i=5;i>=0;i--)
{
k=a[5];
for(【1】;j>=0;j--)
a[j+1]=a[j];
【2】;
for(m=0;m<6;m++)
printf(“%d”,a[m]);
printf(“\n”);
}
}
【题7.75】下面程序的功能是输出以下9*9阶方阵。请填空。
1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1
main()
{
int a[10][10],n,i,j,m;
scanf(“%d”,&n);
if(n%2==0) m=n/2;
else 【1】;
for(i=0;i<m;i++)
for(j=i;j<n-i;j++)
{
a[i][j]=i+1;
a[【2】][j]=i+1;
a[j][i]=i+1;
a[j][【3】]=i+1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(“%d,,a[i][j]);
printf(“\n”);
}
}
【题7.76】当从键盘输入18时,下面程序的运行结果是 。
main()
{
int x,y,i,a[8],j,u,v;
scanf(“%d”,&x);
y=x; i=0;
do{
u=y/2;
a[i]=y%2;
i++; y=u;
}while(y>=1);
for(j=i-1;j>=0;j--)
printf(“%d”,a[j]);
}
【题7.77】下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b。请填空。
例如:array a: array b:
4 5 6 6 4 5
1 2 3 3 1 2
main()
{
int a[2][3]={4,5,6,1,2,3},b[2][3];
int i,j;
printf(“array a:\n”);
for(i=0;i<=1;i++)
{
for(j=0;j<3;j++)
{
printf(“%5d”,a[i][j]);
【1】;
}
printf(“\n”);
}
for(【2】;i++) b[i][0]=a[i][2];
printf(“array b:\n”);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf(“%5d”,b[i][j]);
【3】;
}
}
【题7.78】下面程序的功能是统计年龄在16~31岁之间的学生人数。请填空。
main()
{
int a[30],n,age,i;
for(i=0;i<30;i++) a[i]=0;
printf(“Enter the number of the students(<30)\n”);
scanf(“%d”,&n);
printf(“Enter the age of each student:\n”);
for(i=0;i<n;i++)
{ scanf(“%d”,&age); 【1】; }
printf(“the result is\n”);
printf(“age number\n”);
for(【2】;i++)
printf(“%3d %6d\n”,i,a[i-16]);
}
【题7.79】下面程序的功能是检查一个二维数组是否对称(即:对所有ij都有a[i][j]=a[j][i])。请填空。
main()
{
int a[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};
int i,j,found=0;
for(j=0;j<4;j++)
for(【1】;i<4;i++)
if(a[j][i]!=a[i][j])
{ 【2】; break; }
if(found) printf(“No”);
else printf(“Yes”);
}
【题7.80】下面程序中数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。请填空。
main()
{
int a[10],b[10],i;
for(i=0;【1】;i++)
scanf(“%d”,&a[i]);
for(i=1;【2】;i++)
b[i]=a[i]-a[i-1];
for(i=1;i<10;i++)
{
printf(“%3d”,b[i]);
if(【3】) printf(“\n”);
}
}
【题7.81】下面程序的运行结果是 。
main()
{
int i=1,n=3,j,k=3;
int a[5]={1,4,5};
while(i<=n&&k>a[i]) i++;
for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)
printf(“%3d”,a[i]);
}
【题7.82】下面程序的运行结果是 。
main()
{
int num_list[]={6,7,8,9},k,j,b,u=0,m=4,w;
w=m-1;
while(u<=w)
{
j=num_list[u];
k=2; b=1;
while(k<=j/2&&b)
b=j%++k;
if(b) printf(“%d\n”,num_list[u++]);
else
{
num_list[u]=num_list[w];
num_list[w--]=j;
}
}
}
【题7.83】设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int k,s,i;
float ave;
for(k=s=i=0;i<10;i++)
{
if(a[i]%2!=0) 【1】;
s+=【2】;
k++;
}
if(k!=0) { ave=s/k; printf(“%d,%f\n”,k,ave); }
}
【题7.84】以下程序是求矩阵a,b的和,结果存入矩阵c中并按矩阵形式输出。请填空。
main()
{
int a[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}};
int b[3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}};
int i,j,c[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=【1】;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf(“%3d”,c[i][j]);
【2】;
}
}
【题7.85】以下程序是求矩阵a,b的乘积,结果存入矩阵c中并按矩阵形式输出。请填空。
main()
{
int a[3][2]={2,-1,-4,0,3,1};
int b[2][2]={7,-9,-8,10};
int i,j,k,s,c[3][2];
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{
for(【1】;k<2;k++)
s+=【2】;
c[i][j]=s;
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf(“%6d”,c[i][j]);
【3】
}
}
【题7.86】已知以下矩阵:
=×
下面程序的功能是求出Y1,Y2,Y3,Y4的值。请填空。
main()
{
float a[4][4]={{1,-0.2,0,0},{-0.8,1,-0.2,-0.2},
{0,-0.8,1,-0.2},{0,-0.8,-0.8,1},};
float x[4]={1,1,1,1},y[4];
int i,j,k;
for(i=0;i<4;i++)
{
y[i]=0;
for(j=0;j<4;j++)
【1】
}
for(k=0;k<4;k++)
printf(“\nY[%d]=%-6.2f”,k+1,【2】);
}
【题7.87】以下程序的功能是求数组num中小于零的数据之和。请填空。
main()
{
int num[20]={10,20,1,-20,203,-21,2,-2,-2,11,-21,22,12,
-2,-234,-90,22,90,-45,20};
int sum=,i;
for(i=0;i<=19;i++)
{
if(【1】)
sum=【2】;
}
printf(“sum=%6d”,sum);
}
【题7.88】以下程序的功能是 。
main()
{
int num[10]={10,1,-20,-203,-21,2,-2,-2,11,-21};
int sum=0,i;
for(i=0;i<10;i++)
{
if(num[i]>0)
sum=num[i]+sum;
}
printf(“sum=%6d”,sum);
}
【题7.89】下面程序的运行结果是 。
main()
{
int i,j,row,col,min;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}};
min=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]<min)
{ min=a[i][j]; row=i; col=j; }
printf(“min=%d,row=%d,col=%d\n”,min,row,col);
}
【题7.90】若有以下输入(<CR>代表回车),则下面程序的运行结果是 。
52<CR>
main()
{
int a[8]={6,12,18,42,44,52,67,94};
int low=0,mid,high=7,found,x;
found=0;
scanf(“%d”,&x);
while((low<=high)&&(found==0))
{
mid=(low+high)/2;
if(x>a[mid]) low=mdi+1;
else if(x<a[mid]) high=mid-1;
else
{ found=1; break; }
}
if(found==1) printf(“Search Successful!The index is:%d\n”,mid);
else printf(“Can’t search!\n”);
}
【题7.91】下面程序的运行结果是 。
main()
{
int a[9]={0,6,12,18,42,44,52,67,94};
int x=52,i,n=9,m;
i=n/2+1;
m=n/2;
while(m!=0)
{
if(x<a[i])
{ i=i-m/2-1; m=m/2; }
else if(x>a[i])
{ i=i+m/2+1; m=m/2; }
else break;
}
printf(“The index is:%d”,i);
}
【题7.92】下面程序用“顺序查找法”查找数组a中是否存在某一关键字。请填空。
main()
{
int a[8]={25,57,48,37,12,92,86,33};
int i,x;
scanf(“%d”,&x);
for(i=0;i<8;i++)
if(x==a[i])
{ printf(“Found! The index is:%d\n”,--i); 【1】; }
if(【2】)
printf(“Can’t found!”);
}
【题7.93】下面程序用“快速顺序查找法”查找数组a中是否存在某一关键字。请填空。
main()
{
int a[9]={25,57,48,37,12,92,86,33};
int i,x;
scanf(“%d”,&x);
【1】; i=0;
while(a[i]!=x) i++;
if(【2】) printf(“Found! The index is:%d\n”,i);
else printf(“Can’t found!\n”);
}
【题7.94】下面程序用插入法对数组a进行降序排序。请填空。
main()
{
int a[5]={4,7,2,5,1};
int i,j,m;
for(i=1;i<5;i++)
{
m=a[i];
j=【1】;
while(j>=0&&m>a[j])
{
【2】;
j--;
}
【3】=m;
}
for(i=0;i<5;i++)
printf(“%d”,a[i]);
printf(“\n”);
}
【题7.95】下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。请填空。
main()
{
int a[3]={5,9,19};
int b[5]={12,24,26,37,48};
int c[10],i=0,j=0,k=0;
while(i<3&&j<5)
if(【1】) { c[k]=b[j]; k++; j++; }
else { c[k]=a[i]; k++; i++; }
while(【2】) { c[k]=a[i]; i++; k++; }
while(【3】) { c[k]=b[j]; k++; j++; }
for(i=0;i<k;i++)
printf(“%3d”,c[i]);
}
【题7.96】下面程序的运行结果是 。
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”);
}
}
【题7.97】若有以下输入(<CR>代表回车),则下面程序的运行结果是 。
3245<CR>
8<CR>
main()
{
int i=0,base,n,j,old,num[20];
printf(“Enter data that will be converted\n”);
scanf(“%d”,&n);
old=n;
printf(“Enter base\n”);
scanf(“%d”,&base);
do{
i++;
num[i]=n%base;
n=n/base;
}while(n!=0);
printf(“The data %d has been converted into the %d – base
data:\n”,old,base);
for(j=i;j>=1;j--)
printf(“%5d”,num[j]);
}
【题7.98】若有以下输入(<CR>代表回车),则下面程序的运行结果是 。
7 4 8 9 1 5
main()
{
int a[6],i,j,k,m;
for(i=0;i<6;i++)
scanf(“%d”,&a[i]);
for(i=5;i>=0;i--)
{
k=a[5];
for(j=4;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<6;m++)
printf(“%d”,a[m]);
printf(“\n”);
}
}
【题7.99】下面程序的运行结果是 。
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int k,s,i;
float ave;
for(k=s=i=0;i<10;i++)
{
if(a[i]%2==0) continue;
s+=a[i];
k++;
}
if(k!=0)
{
ave=s/k;
printf(“The number is:%d,The average is:%f\n”,k,ave);
}
}
【题7.100】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
3 1 2 3 2 2 2 1 1 3 0<CR>
main()
{
int a[4],x,i;
for(i=1;i<=3;i++) a[i]=0;
scanf(“%d”,&x);
while(x>0) { a[x]+=1; scanf(“%d”,&x); }
for(i=1;i<=3;i++) printf(“a[%2d]=%4d\n”,i,a[i]);
}
【题7.101】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
5<CR>
9 7 5 3 1<CR>
5<CR>
#define M 10
main()
{
int a[M],x,i,n;
printf(“Enter n(n<10):”;
scanf(“%d”,&n);
for(i=1;i<=n;i++)
scanf(“%d”,a+i);
printf(“Enter x:”);
scanf(“%d”,&x);
a[0]=x; i=n;
while(x>a[i]) { a[i+1]=a[i]; i--; }
a[i+1]=x;
n++;
for(i=1;i<=n;i++) printf(“%3d”,a[i]);
printf(“\n”);
}
【题7.102】下面程序的运行结果是 。
#define SIZE 30
main()
{
float a[SIZE],b[SIZE/5],sum;
int i,k;
for(k=2,i=0;i<SIZE;i++)
{ a[i]=k; k+=2; }
sum=0;
for(k=0,i=0;i<SIZE;i++)
{
sum+=a[i];
if((i+1)%5==5)
{
b[k]=sum/5;
sum=0;
k++;
}
}
printf(“The result is:\n”);
for(i=0;i<SIZE/5;i++) printf(“%5.2f”,b[i]);
printf(“\n”);
}
【题7.103】下面程序的功能是求出矩阵x的上三角元素之积。其中矩阵x的行、列数和元素值均由键盘输入。请填空。
#define M 10
main()
{
int x[M][M];
int n,i,j;
long s=1;
printf(“Enter a integer(<=10):\n”);
scanf(“%d”,&n);
printf(“Enter %d data on each line for the array x\n”,n);
for(【1】)
for(j=0;j<n;j++)
scanf(“%d”,&x[i][j]);
for(i=0;i<n;i++)
for(【2】)
【3】
printf(“%ld\n”,s);
}
【题7.104】若有以下输入(<CR>代表回车换行符),则下面程序的运行结果是 。
4<CR>
1 2 3 4<CR>
1 2 3 4<CR>
1 2 3 4<CR>
1 2 3 4<CR>
#define M 10
main()
{
int x[M][M];
int n,i,j;
long s=1;
printf(“Enter a integer(<=10):\n”);
scanf(“%d”,&n);
printf(“Enter %d data on each line for the array x\n”,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf(“%d”,&x[i][j]);
for(i=0;i<n;i++)
for(j=i;j<n;j++)
s*=x[i][j];
printf(“The result=%ld\n”,s);
}
【题7.105】字符串“ab\n\\012\\\””的长度是 。
【题7.106】下面程序段的运行结果是 。
char ch[]=“600”;
int a,s=0;
for(a=0;ch[a]>=‘0’&&ch[a]<=‘9’;a++)
s=10*s+ch[a]-‘0’;
printf(“%d”,s);
【题7.107】下面程序段将输出computer,请填空。
char ch[]=“It’s a computer”;
for(i=0;【1】;i++)
{ 【2】; printf(“%c”,c[j]; )
【题7.108】下面程序段的运行结果是 。
char x[]=“the teacher”;
i=0;
while(x[++i]!=‘\0’) if(x[i-1]==‘t’) printf(“%c”,x[i]);
【题7.109】下面程序的功能是在一个字符数组中查找一个指定的字符,若数组中含有该字符则输出该字符在数组中第一次出现的位置(下标值);否则输出-1。请填空。
#include <stdio.h>
#include <string.h>
main()
{
char c=‘a’,t[50];
int n,k,j;
gets(t);
n=【1】;
for(k=0;k<n;k++)
if(【2】) { j=k; break; }
else j=-1;
printf(“%d”,j);
}
【题7.110】下面程序的功能是在三个字符串找出最小的。请填空。
#include <stdio.h>
#include <string.h>
main()
{
char s[20],str[3][20];
int i;
for(i=0;i<3;i++) gets(str[i]);
strcpy(s,【1】);
if(strcmp(str[2],s)<0) strcpy(s,str[2]);
printf(“%s\n”,【2】);
}
【题7.111】下面程序的功能是从键盘输入一个大写英文字母,要求按字母的顺序打印出3个相邻的字母,指定的字母在中间。若指定的字符为Z,则打印YZA;若为A则打印ZAB。请填空。
#include <stdio.h>
main()
{
char a[3],c;
int i;
c=getchar();
a[1]=c;
if(c==‘Z’) { a[2]=‘A’; 【1】; }
else if(c==‘A’) { a[0]=‘Z’; 【2】; }
else { a[0]=c-1; a[2]=c+1; }
for(i=0;i<3;i++) putchar(a[i]);
}
【题7.112】下面程序的功能是将字符数组a[6]={‘a’,‘b’,‘c’,‘d’,‘e’,‘f’}变为a[6]= {‘f’,‘a’,‘b’,‘c’,‘d’,‘e’}。请填空。
#include <stdio.h>
main()
{
char t,a[6]= {‘a’,‘b’,‘c’,‘d’,‘e’,‘f’};
int i;
【1】;
for(i=0;i<5;i++)
{
【2】;
for(i=0;i<=5;i++) printf(“%c”,a[i]);
}
}
【题7.113】下面程序的功能是将字符数组a下标值为偶数的元素由小到大排序,其它元素不变。请填空。
#include <stdio.h>
main()
{
char a[]=“labchmfye”,t;
int i,j;
for(i=0;i<7;i+=2)
for(j=i+2;j<9;【1】)
if(【2】)
{ t=a[i]; a[i]=a[j]; a[j]=t; j++; }
puts(a);
printf(“\n”);
}
【题7.114】下面程序的功能是在任意的字符串a中将与字符c相等的所有元素的下标值分别存放在整型数组b中。请填空。
#include <stdio.h>
main()
{
char a[80];
int i,b[80],k=0;
gets(a);
for(i=0;a[i]!=‘’;i++)
if(【1】) { b[k]=i; 【2】; }
for(i=0;i<k;i++) printf(“%3d”,b[i]);
【题7.115】有十个字符串。下面程序的功能是在每个字符串中,找出最大字符按一一对应的顺序放入一维数组a中,即第i个字符串中的最大字符放入a[i]中,输出每个字符串中的最大字符。请填空。
#include <stdio.h>
main()
{
char s[10][20];
int a[10],i,j;
for(i=0;i<10;i++)
gets(s[i]);
for(i=0;i<10;i++)
{
【1】;
for(j=1;s[i][j]!=‘\0’;j++)
if(a[i]<s[i][j]) 【2】;
}
for(i=0;i<10;i++)
printf(“%d %c”,i,a[i]);
}
【题7.116】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i;
char a[]=“Time”,b[]=“Tom”;
for(i=0;a[i]!=‘\0’&&b[i]!=‘\0’;i++)
if(a[i]==b[i])
if(a[i]>=‘a’&&a[i]<=‘z’)
printf(“%c”,a[i]-32);
else printf(“%c”,a[i]+32);
else printf(“*”);
}
【题7.117】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char a[2][6]={“Sun”,“Moon”};
int i,j,len[2];
for(i=0;i<2;i++)
{
for(j=0;j<6;j++)
if(a[i][j]==‘\0’)
{ len[i]=j; break; }
printf(“%6s:%d\n”,a[i],len[i]);
}
}
【题7.118】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i,r;
char s1[80]=“bus”;
char s2[80]=“book”;
for(i=r=0;s1[i]!=‘\0’&&s2[i]!=‘\0’;i++)
if(s1[i]==s2[i]) i++;
else { r=s1[i]-s2[i]; break; }
printf(“%d”,r);
}
【题7.119】下面程序的运行结果是 。
#include <stdio.h>
#define LEN 4
main()
{
int j,c;
static char n[2][LEN+1]={“8980”,“9198”};
for(j=LEN-1;j>=0;j--)
{
c=n[0][j]+n[1][j]-2*‘0’;
n[0][j]=c%10+‘0’;
}
for(j=0;j<=1;j++) puts(n[j]);
}
【题7.120】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i=5;
char c[6]=“abcd”;
do{ c[i]=c[i-1]; }while(--i>0);
puts(c);
}
【题7.121】当运行以下程序时,从键盘输入AabD<CR>(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
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);
}
【题7.122】下面程序的运行结果是 。
#include <stdio.h>
main()
{
char s[]=“ABCCDA”;
int k; char c;
for(k=1;(c=s[k])!=‘\0’;k++)
{
switch(c)
{
case ‘A’,putchar(‘%’); continue;
case ‘B’,++k; break;
default,putchar(‘*’);
case ‘C’,putchar(‘&’); continue;
}
putchar(‘#’);
}
}
【题7.123】下面程序的运行结果是 。
#include <stdio.h>
main()
{
int i=0;
char a[]=“abm”,b[]=“aqid”,c[10];
while(a[i]!=‘\0’&&b[i]!=‘\0’)
{
if(a[i]>=b[i]) c[i]=a[i]-32;
else c[i]=b[i]-32;
++i;
}
c[i]=‘\0’;
puts(c);
}
【题7.124】当运行以下程序时,从键盘输入:BOOK<CR>
CUT<CR>
GAME<CR>
PAGE<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
#include <string.h>
main()
{
int i;
char str[10],temp[10]=“Control”;
for(i=0;i<4;i++)
{
gets(str);
if(strcmp(temp,str)<0) strcpy(temp,str);
}
puts(temp);
}
【题7.125】当运行以下程序时,从键盘输入:girl<CR>
boy<CR>
(<CR>表示回车),则下面程序的运行结果是 。
#include <stdio.h>
#include <string.h>
main()
{
char a[2][80],t;
int i,j,m,n,l,max;
for(i=0;i<=1;i++) gets(a[i]);
t=a[0][0];
for(i=0;i<=1;i++)
{
l=strlen(a[i]);
for(j=0;j<=1;j++)
if(a[i][j]>t) { max=a[i][j]; m=i; n=j; }
}
printf(“%c %d %d\n”,max,m,n);
}
7.3 编程题
【题7.126】从键盘输入若干整数(数据个数应至少于50),其值在0至4的范围内,用-1作为输入结束的标志。统计每个整数的个数。试编程。
【题7.127】若有说明:int a[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二维数组b中。试编程。
【题7.128】定义一个含有30个整型元素的数组,按顺序分别赋予从2开始的偶数;然后按顺序每五个数求出一个平均值,放在另一个数组中并输出。试编程。
【题7.129】通过赋初值按行顺序给2×3的二维数组赋予2、4、6、…等偶数,然后按列的顺序输出该数组。试编程。
【题7.130】通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。
【题7.131】下面是一个5×5阶的螺旋方阵。试编程打印出此形式的n×n(n<10)阶的方阵(顺时针方向旋进)。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
【题7.132】数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,并按每行3个元素的格式输出数组b。试编程。
【题7.133】从键盘输入一个字符,用折半查找法找出该字符在已排序的字符串a中的位置。若该字符不在a中,则打印出**。试编程。
【题7.134】从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b中的所有元素都连接到a中。试编程。
【题7.135】从键盘输入一个字符串a,并在a串中的最大元素后边插入字符串b(b[]=“ab”)。试编程。