软件技术基础第三次作业一、单选题(23题,每题3分)1、若有说明int *ptr1, *ptr2, m=5,n;,下面正确的语句组是A. ptr1=&m; ptr2=&ptr1;B. ptr1=&m; ptr2=n; *ptr2=*ptr1;C. ptr1=&m; ptr2=ptr1;D. ptr1=&m; *ptr2=*ptr1;2、对于10的-5次方,合法的C常量表示是A. le-5B. 10e-5C. 10*e-5D.1*e-53、以下叙述正确的是A.输入项可以是一个实型常量,如scanf(“%f,3.5”);B.只有格式控制,没有输入项,也能正确输入数据到内存,例如scanf(“a=%d,b=%d”);C.当输入一个实数数据时,格式符可以控制小数的位数,例如scanf(“%4.2f”,&f);D.当输入数据时,必须指明变量地址,例如scanf(“%f”,&f);4、若已定义: int a[ ]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;其中0≤i≤9, 则对a数组元素不正确的引用是___ ___。
A. a[p-a]B. *(&a[i])C. p[i]D. a[10]5、设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是____A.把x和y按从大到小排列 B. 把x和y按从小到大排列C. 无确定结果D. 交换x和y中的值6、在一个单链表中,若指针p1所指结点不是最后结点,则在p1之后插入指针p2所指结点应执行。
A. p1->next=p2; p2->next=p1;B. p2->next=p1->next; p1=p2;B. p2->next=p1; p1->next=p2; D. p2->next=p1->next; p1->next=p2;7、已知:char s[4] = "cba"; char *p; 执行语句序列p = s;printf("%c\n",*(p+1));后,输出为_____。
A. 字符‟c‟B. 字符‟b‟C. 字符‟a‟D. 字符‟d‟8、设p1和p2是指向同一个int型一维数组的指针变量, k为int型变量,则不能正确执行的语句是__ ___。
A. k=*p1+*p2;B. p2=k;C. p1=p2;D. k=*p1 *(*p2);9、有一链式堆栈ls(无头结点),其栈顶指针为ls.top,结点结构为:data域和link(指针)域。
现在对该栈进行出栈操作,出栈后ls.top的值为:。
A. ls.top->linkB. ls.top--C. ls.top->dataD. ls.top++10、线性表的顺序存储结构是一种存储结构。
A. 随机存取B. 顺序存取C. 索引存取D. Hash存取11、栈是一种特殊的线性表,其最主要的特点是。
A. 先进先出B. 后进后出C. 后进先出D. ①②③12、在数据结构中,从逻辑上可以把数据结构分为。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构13、char s=”student”,*(s+2)的值是A.‟u‟B. …‟(空格)C. …s‟D. …t‟14、要求描述“当x的取值在[0,10][30,40]范围为真,否则为假”的表达式是A.(x>=0)&&(x<=10)&&(x>=30)&&(x<=40)B.(x>=0)||(x<=10)||(x>=30)||(x<=40)C.(x>=0)&&(x<=10)||(x>=30)&&(x<=40)D.(x>=0)||(x<=10)&&(x>=30)||(x<=40)15、队列是一种操作受限的线性表,其最主要的特点是______。
A. 仅在表的一端操作B. 只允许插入元素C. 后进先出D. 先进先出16、如果有FILE *fp;fp=fopen(“test.c”,“r”);则以下描述错误的是。
A. fopen以只读方式打开文件test.c。
B. 文件指针fp指向文件test.c的磁盘首地址。
C. 可以通过fp对文件test.c进行读操作。
D. 可以用fclose( fp )关闭test.c文件。
17、一个顺序表(一维数组)第一个元素的存储地址是300,每个元素的长度为5,则第7个元素的地址是。
A.334 B.335 C.330 D.33118、以下对数据结构有关知识的描述是错误的是。
A.在顺序存储结构中插入元素需要移动大量数据B.在顺序存储结构中删除元素需要移动大量数据C.在链式存储结构中只需改变节点指针即可插入删除元素(不考虑节点的动态生成和释放)D.链式存储结构不需要额外空间存放指针19、已知教师记录定义为:struct teacher{ int no;char name[30];struct{unsigned int y;unsigned int m;unsigned int d;}birthday;};struct teacher *t;若要把变量t中的生日赋值为“2004年2月23日”,则正确的赋值方式为_____A. y=2004; m=2;day=23;B. t.y=2004; t.m=2; t.d=23;C. t.birthday.y=2004; t.birthday.m=2; t.birthday.d=23;D. t→birthday.y=2004; t→birthday.m=2; t→birthday.d=23;20、按照二叉树的定义,具有3个结点的二叉树有______种形态。
A.3 B. 4 C. 5 D. 621、在一棵非空二叉树的中序遍历序列中,根结点的右边_______。
A.只有右子树上的所有结点 B. 只有右子树上的部分结点C. 只有左子树上的部分结点D. 只有左子树上的所有结点22、定义char str[80],*p;后,下列操作中错误的是A. str=”This is a book.”;B. p=”This is a book.”;C. p=str;D. p=&str[20];23、若有以下定义和语句int a=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是A.*q=0;B. w=p;C. *p=a;D.*p=*w;二、填空题:(1题2空,每空3分)1、以下程序实现功能:在学生档案(结构数组)中,输出年龄居中的学生信息。
#include "stdio.h"struct man{char name[20];unsigned age;}person[]={"Li Ming",20,"Wang Lin",24,"Zhang Ping",23};void main(){int i,max,min;max=min=person[0].age;for(i=1;iif( ①)max=person[i].age;else if(person[i].age<min)min=person[i].age;for(i=0;iif(person[i].age!=max ②person[i].age!=min){printf("%s,%d\n",person[i].name,person[i].age);break;}}说明:此类题目的自己编程不要求掌握,但应该能够读懂程序功能。
三、简答题(3题每题5分)1、#include "stdio.h"#include ”string.h”void main(){ int i,j,k; char str[]=”abcde”;for (i=0, j=strlen(str)-1); i<j; i++, j--){k=str[i];str[i]=str[j];str[j]=k;}puts(str);}运行结果是2、输入如下:A-B-15-C-D#include "stdio.h"#include “string.h”#include “ctype.h”void main(){char str[50],*p;int count=0;gets(str);if (strlen(str)>2){p=str;while(*p)if (isalpha(*p++)) count++;/*函数isalpha(char x)意义:如果字符x为字母,则为真,否则为假*/ printf(“count=%d\n”,count);}}运行结果是_________________________________________3、下列程序执行后的输出结果是#include "stdio.h"typedef struct C{float re;float im;}COMP;void main(){ COMP fun(COMP *p1, COMP *p2);COMP m={5.0,3.0},n={3.0,5.0};m=fun(&m,&n);printf(“%0.1f+i%0.1f\n”),m.re,m.im);}COMP fun(COMP *p1, COMP *p2){ COMP result;result.re=p1->re+(*p2).re;result.im=p1->im+(*p2).im;return(result);}四、编程题(10分)1、从键盘输入一字符串,计算该字符串含字符‘a’的个数。
(注意:答案不唯一,可以不用指针。
)。