使用C语言2链结串列
- 格式:ppt
- 大小:3.23 MB
- 文档页数:82


二级C语言笔试-48(总分90, 做题时间90分钟)一、选择题在下列各题的A) 、B) 、C) 、D) 四个选项中,只有一个选项是正确的。
1.以下函数调用语句中实参的个数是( )func((exp1,exp2),(exp3,exp4,exp5));SSS_SINGLE_SELA 1B 2C 4D 5分值: 1答案:B2.有以下程序#includ2<stdio.h>#include<string.h>main()char b1[8]="abcdefg",b2[8],*pb=b1+3,while(--pb>b1)strcpy(b2,pB) ;printf("%d\n",strlen(b2));程序运行后的输出结果是( )SSS_SINGLE_SELA 8B 3C 1D 6分值: 1答案:D3.有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。
则不能把结点 b连接到结点a之后的语句是( ) struct nodechar data;struct noe *next;a,b,*p=&a,*q=&b;SSS_SIMPLE_SINA B C D分值: 1答案:B4.若有说明:int * p,m=51; n;,以下正确的程序段是( )SSS_SINGLE_SELAp=&m;scanf("%d",&p)Bp=&n;scanf("%d",&P)Cscanf("%d",&p)p=&n;Dp=&n;p=&m;分值: 1答案:D5.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,则正确语句是( )SSS_SINGLE_SELA p=2 *(int *)malloc(sizeof(int));B p=(int*)calloc(2*sizeof(int));C p=(int*)malloc(2* sizeof(int));D p=2 *(int*)calloc(sizeof(int));分值: 1答案:C6.下列定义正确的是( )SSS_SINGLE_SELA static int a[]=1,2,3,4,5B int b[]=2,5C int a(10)D int 4e[4]分值: 1答案:A7.在软件工程中,白箱测试法可用于测试程序的内部结构。
二级C语言-1-2(总分:81.00,做题时间:90分钟)一、{{B}}选择题{{/B}}(总题数:35,分数:51.00)1.以下程序的输出结果是______。
int f(){ static int i=0;int s=1;s+=i; i++;return s;}main(){ int i, a=0;for(i=0; i<5; i++)a+=f();printf("% d/n", a);∙ A. 20∙ B. 24∙ C. 25∙ D. 15(分数:2.00)A.B.C.D. √解析:[解析] 函数f中变量i为静态变量,函数f调用结束后变量i所占据的存储单元不会释放,而在主函数中f被调用5次,具体过程如下:第1次调用f:s=s+i=1+0=1,i=i+1=1,主函数中a=a+f()=0+1=1 第2次调用f:s=s+i=1+1=2,i=i+1=2,主函数中a=a+f()=1+2=3 第3次调用f:s=s+i=1+2=3,i=i+1=3,主函数中a=a+f()=3+3=6 第4次调用f:s=s+i=1+3=4,i=i+1=4,主函数中a=a+f()=6+4=10 第5次调用f:s=s+i=1+4=5,i=i+4=5,主函数中a=a+f()=10+5=15 所以printf语句的输出结果为15。
2.下列程序段的输出结果为{{U}} {{/U}}。
#include<stdio.h>main(){ static char a[]="language";char *p;p=a;for(p=a;p<a+8;p+=2)putchar(*p);}∙ A. language∙ B. lnug∙ C. 有语法错误∙ D. lang(分数:2.00)A.B. √C.D.解析:[解析] 本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地址。
第1次for循环,p=a,p指向数组的第1个元素,*p是取指针p所指地址的内容,输出1;第2次for循环,p=p+2,则p指向数组的第3个元素,*p是取指针p所指地址的内容,输出n;第3次for循环,p=p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出u;第4次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出g,结束循环。
第1章绪论2.(1)×(2)×(3)√3.(1)A(2)C(3)C5.计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/66.编写算法,求一元多项式p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。
注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。
算法的输入和输出采用下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。
讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f”,&a[i]);/*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){p=p+a[i]*x;/*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[],float x,int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p;/*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第2章线性表习题1.填空:(1)在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。
数据结构(C语言版)(第2版)课后习题答案李冬梅目录第1章绪论............................................. 错误!未定义书签。
第2章线性表........................................... 错误!未定义书签。
第3章栈和队列......................................... 错误!未定义书签。
第4章串、数组和广义表................................. 错误!未定义书签。
第5章树和二叉树....................................... 错误!未定义书签。
第6章图................................................ 错误!未定义书签。
第7章查找............................................. 错误!未定义书签。
第8章排序............................................. 错误!未定义书签。
第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。