1以下为一维整型数组a的正确说明是.docx

上传人:b****6 文档编号:4365360 上传时间:2022-11-30 格式:DOCX 页数:16 大小:26.19KB
下载 相关 举报
1以下为一维整型数组a的正确说明是.docx_第1页
第1页 / 共16页
1以下为一维整型数组a的正确说明是.docx_第2页
第2页 / 共16页
1以下为一维整型数组a的正确说明是.docx_第3页
第3页 / 共16页
1以下为一维整型数组a的正确说明是.docx_第4页
第4页 / 共16页
1以下为一维整型数组a的正确说明是.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

1以下为一维整型数组a的正确说明是.docx

《1以下为一维整型数组a的正确说明是.docx》由会员分享,可在线阅读,更多相关《1以下为一维整型数组a的正确说明是.docx(16页珍藏版)》请在冰豆网上搜索。

1以下为一维整型数组a的正确说明是.docx

1以下为一维整型数组a的正确说明是

一、选择题

1.以下为一维整型数组a的正确说明是()。

A.inta(10);B.intn=10,a[n];

C.intn;D.#defineSIZE10;

scanf("%d",&n);inta[SIZE];

inta[n];

【答案】D

【说明】D选项符合语法格式,数组定义的长度不能为变量。

2.以下对二维数组a的正确说明是()。

A.inta[3][];B.floata(3,4);C.doublea[1][4];D.floata(3)(4);

【答案】C

【说明】C选项符合语法格。

3.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为()(假设a[0][0]位于数组的第一个位置上)。

A.i*m+jB.j*m+iC.i*m+j-1D.i*m+j+1

【答案】D

【说明】D是公式。

4.若二维数组a有m列,则在a[i][j]前的元素个数为()。

A.j*m+iB.i*m+jC.i*m+j-1D.i*m+j+1

【答案】B

【说明】根据上题可知。

5.若有以下程序段:

inta[]={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进行插入排序(升序)B.对数组a进行插入排序(降序)

C.对数组a进行选择排序(升序)D.对数组a进行选择排序(降序)

【答案】B

【说明】插入法排序的基本思路是将一个数插入到前面已排好序的有序表中,从而得到一个新的、个数增1的有序排列。

6.有两个字符数组a、b,则以下正确的输入语句是()。

A.gets(a,b);B.scanf("%s%s",a,b);

C.scanf("%s%s",&a,&b);D.gets("a"),gets("b");

【答案】B

【说明】B选项中数组名a、b前不能加地址运算符。

gets函数的参数要求是一个字符数组名或一个字符型指针变量。

7.下面程序段的运行结果是()。

chara[7]="abcdef";

charb[4]="ABC";

strcpy(a,b);

printf("%c",a[5]);

A.空格B.\0C.eD.f

【答案】D

【说明】strcpy函数在复制中只将b数组的字符串"ABC"覆盖a数组中前4个字符,后面的字符不变,因此a[5]元素中的字符还是f。

其他选项均不对。

8.判断字符串s1是否大于字符串s2,应当使用()。

A.if(s1>s2)B.if(strcmp(s1,s2))

C.if(strcmp(s2,s1)>0)D.if(strcmp(s1,s2)>0)

【答案】D。

【说明】两个字符串的大小比较应使用strcmp函数,且比较是自左至右逐个字符比较的,因此只有选项D正确。

其他选项均不对。

9.下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔,请选择填空()。

#include

main()

{chars[80],c1,c2='';

inti=0,num=0;

gets(s);

while(s[i]!

='\0')

{c1=s[i];

if(i==0)c2='';

elsec2=s[i-1];

if()num++;i++;

}

printf("Thereare%dwords.\n",num);

}

A.c1==''&&c2==''B.c1!

=''&&c2==''

C.c1==''&&c2!

=''D.c1!

=''&&c2!

=''

【答案】B

【说明】统计单词个数的基本思路是:

如果前一个是空格,后一个符号为非空格字符时,说明出现了一个新单词,因此B是正确的。

其他选项均不对。

10.下面程序的运行结果是()。

#include

main()

{charstr[]="SSSWLIA",c;

intk;

for(k=2;(c=str[k])!

='\0';k++)

{switch(C.

{case'I':

++k;break;

case'L':

continue;

default:

putchar(c);continue;

}

putchar('*');

}

}

A.SSW*B.SW*C.SW*AD.SW

【答案】B

【说明】注意continue与break两语句直到的作用,for循环在第四次时被强行退出,只有答案B正确。

其他选项均不对。

11.下面程序段执行后,s的值是()。

staticcharch[]="600";

inta,s=0;

for(a=0;ch[a]>='0'&&ch[a]<='9';a++)

s=10*s+ch[a]-'0';

A.600B.6C.0D.出错

【答案】A。

【说明】注意“ch[a]-'0'”将数字符号转换成了数字,因此只有A对。

其他选项均不对。

12.有如下程序,其运行结果是()。

main()

{intn[3],i,j,k;

for(i=0;i<3;i++)

n[i]=0;

k=2;

for(i=0;i

for(j=0;j

n[j]=n[i]+1;

printf("%d\n",n[k]);

}

A.2B.1C.0D.3

【答案】C

【说明】因为在程序中j的值始终是小于k的,所以n[k]没有改变,还是0,答案为C。

其他选项均不对。

二、填空题

1.若有定义:

doublex[3][5];则x数组中行下标的下限为,列下标的上限为。

【答案】24

【说明】数组元素的下标是从0开始的。

2.数组在内存中占一片连续的存储区,由代表它的首地址。

【答案】数组名

【说明】数组名代表的是该数组在内存中的起始地址。

3.若有以下程序段:

charstr[]="xy\n\012\\\n";printf("%d",strlen(str));

执行后的输出结果是。

【答案】6

【说明】注意转义字符。

4.下面程序以每行4个数据的形式输出a数组,请填空。

#defineN20

main()

{inta[N],i;

for(i=0;i

for(i=0;i

{if()printf("\n");

printf("%3d",a[i]);

}

printf("\n");

}

【答案】i%4==0

【说明】由题意可知,每输出4个数,程序自动换行。

5.下面程序可求出矩阵a的主对角线上的元素之和,请填空。

main()

{inta[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()sum=sum+;

printf("sum=%d\n",sum);

}

【答案】i==ja[i][j]

【说明】显然对于矩阵a,主对角线上的元素必定是行号列标相等,将满足这些条件的元素求和。

6.当从键盘输入18,并按【Enter】键后,下面程序的运行结果是。

main()

{intx,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]);

}

【答案】10010

【说明】注意运算符“/”的两个运算数如果是整数,那么商取整数;运算符“%”是取余。

7.下面程序用插入法对数组a进行降序排序,请填空。

main()

{inta[5]={4,7,2,5,1},i,j,m;

for(i=1;i<5;i++)

{

m=a[i];j=;

while(j>=0&&m>a[j])

{;j--;}

=m;

}

for(i=0;i<5;i++)

printf("%d",a[i]);

printf("\n");

}

【答案】i-1a[j+1]=a[j]a[j+1]

【说明】插入法排序的基本思路是将一个数插入到前面已排好序的有序表中,从而得到一个新的、个数增1的有序排列。

8.下面程序的功能是在3个字符串中找出最小的,请填空。

#include

#include

main()

{chars[20],str[3][20];

inti;

for(i=0;i<3;i++)gets(str[i]);

strcpy(s,);

if(strcmp(str[1],s)<0)strcpy(s,str[1]);

if(strcmp(str[2],s)<0)strcpy(s,str[2]);

printf("%s\n",);

}

【答案】str[0]s

【说明】变量s用来存放最小的字符串,开始时假设第一个字符串最小。

9.下面程序的运行结果是(注意continue与break的作用)。

#include

main()

{chars[]="ABCCDA";

intk;charc;

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('#');

}

}

【答案】#&*&%

【说明】

(1)要注意continue与break语句的作用;

(2)C语言中的多分支switch语句,“case常量表达式”只起语句标号的作用,不作判断,当找到入口标号后,就一直往下执行,除非遇上break语句。

10.下面函数的功能是将一个字符串str的内容颠倒过来。

#include

main()

{charstr[80],i,j,

gets(str);

for(i=0,j=strlen(str);i

{k=str[j];str[j]=str[i];str[i]=k;}

puts(str);

}

【答案】k-1

【说明】变量k要先说明,j在循环开始时要指向最后一个字符,因此是字符串的长度减1。

11.统计数字出现的次数,请填空。

#include

main()

{

inti,ch,;

for(i=0;i

while((ch=getchar())!

='\n')

if(ch>='0'&&ch<='9')

;

for(i=0;i<10;i++)

printf("数字%d的出现次数是:

%d\n",i,ndigit[i]);

}

【答案】ndigit[10]ndigit[ch-'0']++

【说明】

(1)数组ndigit要先说明;

(2)ndigit[ch-'0']++中的“ch-'0'”是为了将被记数的数字与记数元素的下标对应起来。

三、编程题

1.将字符数组str2中的全部字符复制到字符数组strl中。

不采用strcpy函数,复制时,'\0'也要复制进去,'\0'后面的字符不复制进去。

【分析】该题只能将字符数组str2中的全部字符一个一个赋值到字符数组strl中。

【源程序】

voidmain()

{inti;

charstr1[80],str2[80];

gets(str2);

for(i=0;str2[i]!

='\0';i++)

str1[i]=str2[i];

str1[i]='\0';

}

2.将输入的n个整数从小到大排序输出,再求出此n个整数中所有奇数以及所有素数的个数。

【分析】该题采用了选择法排序;所谓奇数是指不能被2整除的数;所谓素数m,是指m除1以外,不能被任何数整除,数学证明也可表述为不能被2~sqrt(m)中的任一个数整除。

【源程序】(含运行结果)

#include

main()

{inta[20],n,i,j,sum,t,prime;

sum=prime=0;

printf("n=");

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

for(j=i+1;j

if(a[i]>a[j])

{t=a[i];a[i]=a[j];a[j]=t;}

for(i=0;i

{if(a[i]%2==0)continue;

sum+=a[i];

for(j=2;j<=sqrt(a[i]);j++)

if(a[i]%j==0)break;

if(j>sqrt(a[i]))prime++;

}

for(i=0;i

printf("%6d",a[i]);

printf("\nsum=%-6dprime=%-6d\n",sum,prime);

}

运行结果如下:

n=10<回车>

1123821954523<回车>

2345589112123

sum=77prime=5

3.统计从键盘输入的20个字符中数字、字母、空格及换行符的个数。

【分析】数字字符,大、小写字母字符在ASCII码表中的排列是按顺序连续递增的,因此判断它们是什么字符只要控制好两端作比较即可。

【源程序】(含运行结果)

main()

{charc[20];

inti,s,ch,b,n;

s=ch=b=n=0;

for(i=0;i<20;i++)

{scanf("%c",&c[i]);

if(c[i]>='0'&&c[i]<='9')s++;

if((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z'))ch++;

if(c[i]=='')b++;

if(c[i]=='\n')n++;

}

printf("s=%d,ch=%d,b=%d,n=%d\n",s,ch,b,n);

}

运行结果如下:

at3bvcwe<回车>

fgiloww23<回车>

s=3,ch=14,b=1,n=2

4.编写一个程序,判断一个字符串是否为回文(回文是指正读与倒读都相同的字符串)。

【分析】先找到字符串的前后两个字符(如果该字符串前后有空格字符,要注意将其排除),作前后对称比较,如有不等,即不是回文,否则即为回文。

【源程序】(含运行结果)

#include

#include

main()

{chars[81];

inti,j,n;

gets(s);

n=strlen(s);

i=0;

j=n-1;

while(s[i]=='')i++;

while(s[j]=='')j--;

while(i

{i++;j--;

}

if(i

elseprintf("Yes\n");

}

运行结果如下:

abcdefedcba<回车>

Yes

5.设有10个学生的成绩分别为89,90,84,78,84,67,88,92,79,73,存放在数组stu中,输出它们的平均成绩aver(保留两位小数)和低于平均成绩的人数。

输出样式(各占一行,无多余字符):

aver=80.34n=7

【分析】此题先求出平均成绩,注意题中s的说明,如果将s说明为整型,该如何得到平均成绩?

要注意输出格式与题意相符,这往往容易使读者忽略,造成考试丢分。

【源程序】(含运行结果)

main()

{inti,n=0,stu[10]={89,90,84,78,84,67,88,92,79,73};

floats=0,aver;

for(i=0;i<10;i++)

s=s+stu[i];

aver=s/10;

for(i=0;i<10;i++)

if(aver>stu[i])n++;

printf("aver=%5.2f\nn=%d\n",aver,n);

}

运行结果如下:

aver=82.40

n=4

6.设有字符串:

charsrc[]="S>h?

e*-$i#$s@Ag!

ir?

1,s/hei%s(f)ro[]m{E}n23g%&land";

设计程序,统计字母或符号连续的次数n。

【说明】字母或符号连续如23,32,ab,hi,>?

等,在ASCII表上连续。

【分析】该题中所指连续是指在ASCII表上相邻。

【源程序】(含运行结果)

main()

{charstr[]="S>h?

e*-$i#$s@Ag!

ir?

1,s/hei%s(f)ro[]m{E}n23g%&land";

intlen,i,n=0;

len=strlen(str);

for(i=0;i

if((str[i]==(str[i+1]+1))||(str[i]==(str[i+1]-1)))

n++;

printf("n=%d\n",n);

}

运行结果如下:

n=4

7.找出一个二维数组中的鞍点,即该位置上的元素在该行上值最大,在该列上值最少,也可能没有鞍点。

【分析】先找出一行上的最大值元素,再看此元素在该列上是否值最小。

【源程序】(含运行结果)

main()

{inti,j,k,row,col,flag1,flag2,a[10][10],max,maxj;

printf("row=");scanf("%d",&row);

printf("col=");scanf("%d",&col);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

flag2=0;

for(i=0;i

{max=a[i][0];

for(j=0;j

if(a[i][j]>max){max=a[i][j];maxj=j;}

for(k=0,flag1=1;k

if(max>a[k][maxj])flag1=0;

if(flag1){printf("row=%d\ncol=%d\nnumber=%d\n",i,maxj,max);

flag2=1;}

}

if(!

flag2)printf("HAVENOT\n");

}

运行结果如下:

row=4<回车>

col=3<回车>

11123456789121310<回车>

HAVENOT

8.任意输入10个整数,统计其正数、零及负数的个数,井计算正数及负数各自之和,然后把统计与计算结果打印输出。

【分析】该题比较简单,题中用到了两个for循环,也可合并为一个for循环。

【源程序】(含运行结果)

main()

{inta[10],plus,minus,zero,sump,summ,i;

plus=minus=zero=sump=summ=0;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=0;i<10;i++)

if(a[i]>0){sump+=a[i];plus++;}

elseif(a[i]<0){summ+=a[i];minus++;}

elsezero++;

printf("sump=%dsumm=%d\n",sump,summ);

printf("plus=%dminus=%dzero=%d\n",plus,minus,zero);

}

运行结果如下:

2-34-867-12-42213<回车>

sump=54summ=-27

plus=6minus=4zero=0

9.编写一个程序,对标准输入文件(终端键盘)中所包含的每个字母(不分大小写)出现的次数进行统计。

函数中设计一个一维数组(长度为27),前26个下标变量顺序存放A~Z(a~x)的出现次数,最后一个下标变量存放非字母的字符个数。

【分析】该题中因为不区分大小写字母,题中用“ch-=32;”将小写字母转换为大写字母;c[0]中统计字母A的个数,c[1]中统计计字母B的个数,依此类推。

【源程序】(含运行结果)

#include

main()

{intc[27],ch,i=0;

for(i=0;i<27;i++)c[i]=0;

while((ch=getchar())!

='\n')

{if(ch>='a'&&ch<='z')ch-=32;

if(ch>='A'&&ch<='Z')c[ch-65]++;

elsec[26]++;

}

for(i=0;i<27;)

{printf("%3d",c[i]);

i++;

if(i%9==0)printf("\n");

}

}

运行结果如下:

abceAEFGHIJK112893IWE35ITOW90<回车>

211031113

110001000

0100200012

10.求4×5矩阵中最大和最小元素,并输出其所在的行号和列号。

【分析】该题可以先假设第一个元素既是最大元素也是最小元素,然后依次与其后元素比较,如果比最大元素大,记下其值与位置;如果比最小元素小,记下其值与位置。

【源程序】(含运行结果)

#include"stdio.h"

main()

{inta[4][5];

inti,j,max,min,h1,l1,h2,l2;

printf("Input20Number:

\n");

for(i=0;i<4;i++)

for(j=0;j<5;j++)

scanf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1