c语言练习题6(数组与链表,有答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、(1)数据结构中,与所使用的计算机无关的是数据的_C_______。
A)存储结构B)物理结构C)逻辑结
构D)物理和存储结构
评析:数据结构概念一般包括3个方面的内容,数据的逻辑结构、存储结构及数据上的运算集合。
数据的逻辑结构只抽象的反映数据元素之间的逻辑关系,而不管它在计算机中的存储表示形式。
2、栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,
则出栈序列可能是____D____。
A)ABCED B)DBCEA C)CDABE D)DCBEA
评析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、c、D,则表明这4个元素中D是最后进栈,B、c处于中间,A最早进栈。
所以出栈时一定是先出D,再出c,最后出A。
3、线性表的顺序存储结构和线性表的链式存储结构分别是____B____。
A)顺序存取的存储结构、随机存取的存储结构
B)随机存取的存储结构、顺序存取的存储结构
C)随机存取的存储结构、随机存取的存储结构
D)任意存取的存储结构、任意存取的存储结构
评析:顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)。
LOC(a1)+(i-1)L计算得到,从而实现了随机存取。
对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。
4、在单链表中,增加头结点的目的是____A__。
A)方便运算的实现B)使单链表至少有一个结点
C)标识表结点中首结点的位置D)说明单链表是线性表的链式存储实现
评析:头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。
5、数据处理的最小单位是___C_____。
A)数据B)数据元素C)数据
项D)数据结构
评析:数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。
6、以下程序段的输出结果是___C___。
int a=1234;
printf(”%2d\n”,a);
A)12 B)34 C)1234 D)提示出错、无结果
评析:本题主要考查对primf函数域宽描述符的理解,在这里我们要特别注意:输出数据的实际精度并不主要决定于格式项中的域宽与精度,也不决定于输入的数据精度,而主要决定于数据在机器内的存储精度。
7、设有定义:int a,*pa=&a;以下scanf语句能正确为变量a读入数据的是____C__。
A)scanf(“%d”,B); B)scanf(”%d”,a);
C)scanf(“%d”,&pa);D)scanf(“%d”,*pa);
评析:scanf函数要求其中的输入项必须是地址形式,比如:普通变量的地址、数组名、指针变量等。
对于普通变量,地址形式为:&变量名;当一个普通变量的地址赋予了一个指针变量名,scanf函数的输入项处就可以直接写这个指针变量名。
8、以下程序的输出结果是___B___。
main()
{int a=5,b=4,c=6,d;
printf(”%d\n”,d=a>c?(a>c?a:C):(b));
}
A)5 B)4 C)6 D)不确定
评析:本题最重要的分析d=a>c?(a>c?a:C):(b)),首先运算括号内的式子a>c?a:c,它的值是c的值6,即式子化成d=a>c?6:4。
显然a=c,所以将4赋给d。
9、以下程序中,while循环的循环次数是___D___ 。
main()
{ int i=0:
while(i<10)
{if(i<1)continue;
if(i==5)break;
i++:
}
……
}
A)1 B)10 C)6 D)死循环,不能确定次数
评析:进入循环后,先执行一个条件语句,如果i的值小于l,那么直接进入下一轮循环,因为i的初始值是0,小于l,故直接进入下一轮循环,又因为i的值始终没有改变,所以这个循环成了死循环。
10、算法的基本特征是可行性、确定性、____有穷性___和拥有足够的情报。
11、顺序存储方法是把逻辑上相邻的结点存储在物理位置相邻_ 的存储单元中。
12、设有int x=ll;,则表达式(x++ *1/3)的值为3。
评析:白增自减运算符的作用是使变量的值增1或减1,如:
++i,–i (在使用i之前,先使i的值加(减)1)
i++,i– (在使用i之后,使i的值加(减)1)
所以表达式(x++*1/3)的值即11/3的值:3。
13、若从键盘输入58,则以下程序的输出结果是585858__ 。
main()
{ int a;
Scanf(“%d”,&a);
If(a>50)printf(“%d”,a);
If(a>40)printf(“%d”,a);
if(a>30)printf(“%d”,a);
}
评析:本题首先为a输入一个值58,然后执行三个判断语句,在每一个判断中,如果满足判断条件的话,就输出a,因为三次判断,条件都满足,所以三次输出a。
14、下列程序运行的结果是x=11,i=11。
#include<stdio.h>
main()
{
int x=l,i=l:
for(;x<50;i++)
{if(x>=10)break;
if(x%2!=1)
{x+=3;continue;}
x-=1;
}
printf(”x=%d,i=%d\n”,x,i);
}
评析:本题程序段通过for循环语句实现当x的值为奇数时,x自减1:当x为偶数时自加3的功能。
程序共执行了11次循环,当x=11时退出循环。
15、写一个程序,程序可以将从键盘输入的十进制数(1ong型)以二到十六进制数的形式输出。
int main()
{
char b[]={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F',};
int c[64],d,i=0,base;
long n;
printf("enter a number :\n"); scanf("%ld",&n);
printf("enter new base :\n"); scanf("%d",&base);
do
{ c[i]= n%base;
i++;
n= n/base ;
} while ( n>0);
printf("transmite new base:\n");
for (--i;i>=0;--i)
{ d=c[i];
printf("%c",b[d] );
}
printf("\n");
return 0;
}。