C语言期末考试练习题

更新时间:2024-01-18 08:56:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2015—2016 C语言Ⅱ练习题

Ⅰ单选题 一、基础部分

1、以下数组初始化语句语法错误的是(B) A. int array[5] = {1, 2, 3, 4, 5}; B. int array[] = {1…5}; C. int array[] = {1, 2, 3, 4, 5}; D. int array[5] = {1, 2, 3};

2、 设a,b和c都是int型变量,且a=3,b=4,c=5,则下面表达式中,值为0的表达式是( D )

A.?a?&&?b? B.a<=b

C.a||b+c&&b-c D.!((a

A.必须在最开始

B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后

4、sizeof(float)是: ( B )

A.一个双精度型表达式 B.一个整型表达式

C.一种函数调用 D.一个不合法的表达式

5、printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 ( B )

A.从左起输出该字串,右补空格 B.按原字符长从左向右全部输出 C.右对齐输出该字串,左补空格 D.输出错误信息

6、C程序执行顺序,说法正确的是 C 。 A)按照程序的编写顺序执行; B)从任一函数开始执行; C)总是从main函数开始执行; D)从最前面的函数开始执行; 7、以下程序运行结果是 C 。 void main()

{ int x=1, y =2, z; z=x>y?++x:++y;

printf(“%d,%d,%d”,x,y,z); } A) 1,2,3 B)1,3,3 C) 2,3,3 D)2,2,3

8、下面程序段的运行结果是___C___。 int n=0;

while(n++<=2);printf(\

A)2 B)3 C)4 D)有语法错 9、关于格式说明符%f说法正确的是 D 。

1

A)输出十进制整数; B)以指数形式输出实数; C)输出实数且输出的数字全部是有效数字; D)输出实数,但输出的数字并不一定全部是有效数字; 10、在C语言中,函数返回值的类型最终取决于 A 。 A)函数定义时在函数首部所说明的函数类型; B)return语句中表达式值的类型; C)调用函数时主调函数所传递的实参类型; D)函数定义时形参的类型; ********************************

二、数组

1、以下对二维数组的定义中正确的是()。[3]

A.int a[4][]={1,2,3,4,5,6}; B. int a[][3];

C.int a[][3]= {1,2,3,4,5,6}; D. int a[][]={{1,2,3},{4,5,6}};

2、假定一个int型变量占用两个字节,若有定义:int x[10]={0,2,4}; 则数组x在内存中所占字节数是()。

A. 3 B. 6 C. 10 D. 20 3、以下对二维数组a的正确说明是___C_____。 A.int a[3][]; B.float a(3,4); C.double a[1][4] ; D.float a(3)(4);

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

A.i*m+j B.j*m+i C.i*m+j-1 D.i*m+j+1

5、数组名作为实参传递给形参时,数组名被处理为__C____。

A.该数组的长度 B.该数组的元素个数 C.该数组的首地址 D.该数组中各元素的值 6、若有说明:int a[10];,则对数组元素正确引用的是( )。 (A) a[10] (B) a[3.5]

(C) a(5) (D) a[0]

7、以下能正确定义数组并正确赋初值的语句是:( )

A、int N=5,b[N][N]; B、int a[1][2]={{1},{3}}; C、int c[2][]= {{1,2},{3,4}}; D、int d[3][2]={{1,2},{3,4}}; 8、定义了一维int型数组a[10]后,下面错误的引用是:( )。

A.a[0]=1; B.a[10]=2; C.a[0]=5*2;

D.a[1]=a[2]*a[0];

三、指针

1、指针,其含义是指该变量的_________.

A.值 B.地址 C.名 D.一个标志

2、若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D 。 A.a,point,*&a B.&*a,&a,*point

2

C.*&point,*point,&a D.&a,&*point ,point 3、两个指针变量不可以___A___。 A. 相加 B 比较 C 相减 D 指向同一地址 *********************************

4、变量的指针,其含义是指该变量的( )。 (A) 值 (B) 地址

(C) 名 (D) 一个标志

5、下面程序段中,for循环执行的次数是( )。 char *s=\

for( ; *s!='\\0'; s++) printf(\(A) 9 (B) 5

(C) 6; (D) 7

6、若有定义:int *p[3];,则以下叙述中正确的是:( )

A)定义了一个类型为int的指针变量p,该变量具有三个指针

B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针 C)定义了一个名为*p的整型数组,该数组含有三个int类型元素

D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素 7、有以下程序 main()

{ int x[8]={8,7,6,5,0,0}, *s; s=x+3;

printf(\}

执行后输出结果是:( )

A) 随机值 B) 0 C) 5 D) 6 8. 若有以下定义,则p+5表示___。 int a[10],*p=a;

a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值

四、指针和数组

1、不能正确进行字符串赋初值的语句是( )

A. char str[5]= \ B. char *str=\ 2、以下程序的输出结果是( )

main()

{ char *p=\ printf(\ } A. 5 B. 15 3、int a[10],*p=a;

不能代表a[1]地址的是( )

B. char str[]=\

D. char str[5]={?g?,?o?,?o?,?d?};

C. 6

[1]

D. 16

3

A. p+1 B. a+1 C. ++a D. ++p 4、 以下正确的程序段是_________.

A.char str[20]; B.char *p;

scanf(\ scanf(\ C.char str[20]; D.char str[20],*p=str; scanf(\ scanf(\5、 下面程序的运行结果是_______. #include #include main() {

char *s1=\ char *s2=\ s1+=2;s2+=2;

printf(\ }

A.正数 B.负数 C. 零 D.以上皆有可能

6、 下面程序的运行结果是_______. #include #include fun(char *w,int n) {char t,*s1,*s2; s1=w;s2=w+n-1;

while(s1

main() {char *p;

p=\ fun(p,strlen(p)); puts(p); }

A.7654321 B.1714171 C.1711717 D.7177171

*********************************

7、若有以下定义,则对a数组元素的正确引用是____D_____。 int a[5],*p=a;

A.*&a[5] B.a+2 C.*(p+5) D.*(a+2) 8、下面程序段的运行结果是____D_____。 char *s=\ s+=2;printf(\

A.cde B.字符'c' C.字符'c'的地址 D.无确定的输出结果 9、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确 执行的赋值语句是____B____。

A.c=*p1+*p2; B.p2=c C.p1=p2 D.c=*p1*(*p2); 10、若有说明语句

char a[]=\ char *p=\

则以下不正确的叙述是___D_____。 A.a+1表示的是字符t的地址

B.p指向另外的字符串时,字符串的长度不受限制 C.p变量中存放的地址值可以改变

4

D.a中只能存放10个字符

11、若有以下定义和语句,则对s数组元素的正确引用的形式是( )

int s[4][5], (*ps)[5]; ps=s;

(A)ps+1

(B) *(ps+3); (C) ps[0][2]; (D)*(ps+1)+3

12、若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为_____ a)*(a[i]+j) b)(a+i) c)*(a+j) d)a[i]+j

五、字符串

1、下面程序段的运行结果是____D_____。 char a[7]=\ char b[4]=\ strcpy(a,b);

printf(\

A.空格 B.\\0 C.e D.f 2、下面程序的运行结果是___B_____。 #include void main() { char str[]=\ 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 ***********************************

3、设有数组定义:char array[]=\则数组array所占的空间为( )。 (A) 4个字节 (B) 5个字节

(C) 6个字节 (D) 7个字节

4、下面程序的运行结果是:( )。

char c[5]={?a?, ?b?, ?\\0?, ?c?, ?\\0?};

5

printf(“%s”,c); A.ab B.abc

5、有下面的程序段:

char a[3],b[]=“China”; a=b;

printf(“%s”,a);

A.运行后将输出China C.运行后将输出Chi

C.ab\\0 D.ab\\0c\\0

B.运行后将输出Ch D.编译出错

六、结构体

1、定义一个结构体变量后,该变量所占内存大小是()

A.结构体中第一个成员所需内存容量 B.结构体中最后一个成员所需内存容量

C.结构体中各成员所需内存容量总和 D.结构体成员中占内存容量最大者所需的容量 2、程序中有下面的说明和定义 struct abc { int x;char y;} struct abc s1,s2; 则会发生的情况是 。 A. 编译出错 B. 程序将顺利编译、连接、执行 C. 能顺利通过编译、连接、但不能执行 D. 能顺利通过编译、但连接出错 3、 若有程序片段

struct LIST {

int num;

struct NODE *next; } L1;

下列叙述正确的是(C)。

A 以上的说明形式非法 B LIST是一个结构体变量 C L1是一个结构体类型 D L1是一个结构体变量 4、当定义一个结构体变量时,系统分配给它的内存是( A )。

A. 各成员所需内存量的总和 B. 结构中第一个成员所需内存量 C. 结构中最后一个成员所需内存量 D. 成员中占内存量最大者所需的容量 5、 有如下定义 struct person

{ char name[9]; int age; };

struct person class[10]=

{“Tom”,17,“John”,19,“Susan”,18,“Adam” ,16};

根据上述定义,能输出字母A的语句是( B ) A. printf(“%c\\n”,class[3].name); B. printf(“%c\\n”,class[3].name[0]); C. printf(“%c\\n”,class[3].name[1]); D. printf(“%c\\n”,class[2].name[3]);

6

6、 已知: struct sk { int a;

float b;

}data, *p;

若有p=&data,则对data中的成员a的正确引用是( C )。 A.(*p).data.a B.p->data.a C.(*p).a D.p.data.a 7、 以下说法中正确的是:( C )

A.一个结构只能包含一种数据类型

B.不同结构中的成员不能有相同的成员名 C.两个结构变量不可以进行比较

D.关键字typedef用于定义新的数据类型

8 、存放100个学生的数据、包括学号、姓名、成绩。在如下的定义中,不正确的是( A.struct student { int sno;

char name[20];

float score;} stu[100]; B. struct student stu[100] { int sno;

char name[20]; float score}; C. struct { int sno;

char name[20];

float score;} stu[100]; D. struct student

{int sno;

char name[20]; float score;}; struct student stu[100];

*********************************

9、关于结构体说法不正确的是 C 。 A)可以把不同类型的数据组合成一个整体,生成新的数据类型; B)结构体的成员可以是基本类型,也可以是结构体类型; C)不能将结构体变量赋值给同类型的其他变量; D)结构体嵌套时,应该逐级引用到最内层成员; 10、关于typedef的叙述中不正确的是___B___。

A)用typedef可以定义各种类型名,但不能用来定义变量; B)用typedef可以增加新的数据类型;

C)用typedef只是将已存在的类型用一个新的标识符来代表; D)使用typedef有利于程序的通用和移植;

11、以下对结构体变量stu1中成员age的非法引用是___B_____。 struct student {int age; int num; }stu1,*p; p=&stu1;

A) stu1.age B) student.age C) p->age D)(*p).age

7

B )。

七、文件操作

1、以下叙述中错误的是( )。

A. C语言源程序经编译后生成后缀为.obj的目标程序

B. C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件 C. 用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 D. C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令 ********************************* 2、在C语言中,缓冲文件系统是指:( B )

A.缓冲区是由用户自己申请的 B.缓冲区是由系统自动建立的 C.缓冲区是根据文件的大小决定的 D.缓冲区是根据内存的大小决定的

3、若fp是指向某文件的指针,且已读到该文件的末尾,则函数feof(fp)的返回值是( A. EOF B. -1 C. 非零值 D. NULL *********************************

4、若执行fopen函数时发生错误,则函数的返回值是___B____。 A) 地址值 B) 0 C) 1 D) EOF

5、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则 打开方式字符串应是___A___。 A) \ B)\ C)\ D)\6、fscanf函数的正确调用形式是____D_____。 A) fscanf(文件指针,格式字符串,输出表列); B) fscanf(格式字符串,输出表列,文件指针); C) fscanf(格式字符串,文件指针,输出表列); D) fscanf(文件指针,格式字符串,输入表列); 7、关于函数fclose的叙述错误的是 D 。

A) 关闭一个打开的文件;

B) 需要向该函数传递一个文件指针作实参 ; C) 既可以关闭二进制文件也可以关闭文本文件; D) 通过该函数关闭文件后还能继续读写数据;

八、C++部分

1、下列关于类的继承描述中,( )是错误的

A.派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数 B.派生类也是基类,但基类不一定具有派生类的全部属性和方法 C.继承描述类的层次关系,派生类可以具有与基类相同的属性和方法 D.一个基类可以有多个派生类,一个派生类可以有多个基类. 2、编写C++程序一般需经过的几个步骤依次是()

A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行

*********************************

3、 下面关于对象概念的描述中,错误的是( A )。 A. 对象就是C语言中的结构变量

B. 对象代表着正在创建的系统中的一个实体

8

) C. 对象是一个属性和操作(或方法)的封装体 D. 对象之间的信息传递是通过消息进行的 4、下列描述中错误的是( C )。

A. 对象与对象之间可以通过消息进行通信和联络 B. 类用于描述事物的属性和对事物的操作

C. 类与类之间必须是平等的关系,而不能组成层次关系 D. 类与类之间可以通过封装而具有明确的独立性

5、面向对象程序设计思想的主要特征中不包括( D )。 A. 封装性 B. 多态性 C. 继承性

D. 功能分解,逐步求精

6、 采用重载函数的目的是( D )。

A. 实现共享 B. 减少空间 C. 提高速度 D. 使用方便,提高可读性 7、在面向对象方法中,“封装”的含义,不包括 D 。

A) 通过对象把属性和操作包装起来; B) 通过对象隐藏其内部细节; C) 各对象相互独立,互不干扰; D) 复制其他类的所有内容;

8、向系统动态申请内存的函数不包括 D 。 A) mallloc B) realloc C) new D) delete

9、在声明类时,下面说法正确的是 C 。

A) 可以在类的声明中给数据成员赋值; B) 数据成员的存储类型可以是任意类型; C) private,public,protected可以任意顺序出现;

D) 没有用private,public,protected定义的数据成员是公有成员;

Ⅱ填空题: 一、基础部分

1. 在循环语句的循环体中, break语句的作用是(退出其所在循环)

2. 程序段int i=0,x=15; for(; i

5. C语言中的标识符只能由3种字符组成,它们是__数字___、___字母__、_下划线___ 6. 在C语言中,&作为单目运算符时表示的是___取地址运算_______ ****************************************************

7. 一个C程序由若干个函数组成,但其中必须有一个__main()_函数。 8. 数组在内存中占连续一片的存储区, 数组名 代表其首地址。 9. c语言表达式5>2>7>8的值是 0 。 10. 函数的定义不可以嵌套,但函数的 调用 可以嵌套。

11. 已知 i=5.6;写出语句 a=(int)i; 执行后变量 i 的值是 5.6 。

12. 如果函数不要求带回结果值,可用 void 来定义函数返回值为空。

13、一个C语言程序是由若干个 (1) 组成。 函数

二、数组

9

1.有数组定义:int a[5] = {12,3,99,7,53};则值最小的数组元素的下标值是: 1 。 ****************************************************

2.对于一维数组的定义\类型说明符 数组名[常量表达式]\其中常量表达式可以包括_____整形常量_____和___符号常量_______,不能包含____变量______。

3. 若有定义:double x[3][5];则x数组中行下标的下限为____0_____,列下标的上限为_____4____。

****************************************************

4、若二维数组a有m列,则在a[i][j]前的元素个数为__i*m+j______。 5. 若有int a[10]={6,7,8,9,10};,则是将5个初值依次赋给a[0]至a[4]。

三、指针

1.变量i的值为3,i的地址为1000,若欲使p为指向i的指针变量,使用的语句是 int * p = &i; 。

2.设p1,p2为同类型的指针变量,若有p1==p2,则说明p1与p2指向_同一个变量或数组元素_____。

3.当函数中使用指针变量作为形参时,它和实参 共享 内存地址空间。 ****************************************************

4. 设有如下定义:int (*ptr)( );ptr 是指向 函数 的指针 ;该函数返回一个 int 型数据

5. 有以下程序

#include main()

{ char *p=\

printf(\ }

程序运行后的输出结果是 5 。 6、已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } }

函数的功能是:将 p1 所指字符串复制到 p2 所指内存空间

*************************************************************

7. 设有如下定义:int (*ptr)( );ptr 是指向 函数 的指针 ;该函数返回一个 int 型数据

8、 有如下程序段

int *p ,a=10 ,b=1 ; p=&a ; a=*p+b ;

执行该程序段后,a 的值为 11 。

9. 有以下程序

#include main()

{ char *p=\

10

printf(\ }

程序运行后的输出结果是 5 。 10、已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } }

函数的功能是:将 p1 所指字符串复制到 p2 所指内存空间

四、指针和数组

1. 下面程序段的运行结果是___hELLO_____。 char s[80],*sp=\ sp=strcpy(s,sp); s[0]='h'; puts(sp);

2. 下面程序段的运行结果是___ef_____。 char str[]=\ printf(\

3. 下面程序段的运行结果是: lang 。

char a[] = “language”, *p ; p = a;

while(*p != ?u?) {

printf(“%c”, *p); p++; }

4. 以下程序运行后的输出结果是 5 。

main()

{ char str[]=\

printf(\ }

5.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__4____。 *(a+5)的值是____12_____。

6.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是__8___。 *(*(a+1)+0))的值是____8____。

****************************************************

7. 由若干基类型相同的指针所构成的数组,称为 指针数组 。 8. 有一个一维数组a[10],那么a与 &a[0] 等价。

五、字符串

1、不能用赋值运算符“=”将一个字符串赋值给一个字符数组,只能用 strcpy 函数实现赋值操作。

2、表达式strlen(“MALIN\\nMAN”)的值等于 9 。

3. 写出字符串处理函数的函数调用的一般形式:求字符串长度 strlen(str); ,字符串复制 strcpy(str1,str2); ,字符串比较 strcmp(str1,str2); 。

4. 用 gets 函数输入的字符串可以带空格。

六、结构体

1. 已有结构体,并且为该结构体定义了变量和指针变量,引用结构体的方法有

__________________

11

2. 下面定义的结构体类型拟包含两个成员,其中成员变量info用来存入整型数据,成员变量

link是指向自身结构体的指针,请将定义补充完整。struct node {int info; struct node*_ link; }

3. ad若有结构体 struct A{char a[6]; char b;}; 则sizeof(struct A)的值为_____7____ ****************************************************

4. 在C语言的数据类型中,数组和结构体都是构造类型,其中__数组__是同一类型的数据项占连续存储空间,_ 结构体 _是若干不同类型的数据项占连续存储空间。 5. 数组和链表都可以用于存储一组彼此有关联的数据,其中__数组__的长度是固定的, 链表 的长度是不固定的,而且可以动态分配存储空间。

6. 结构体是不同数据类型的数据集合,作为数据类型,必须先说明结构体_类型_,再说明结构体变量。

7. 如果有以下结构体类型的说明和变量定义,则把结点b连接到a之后的语句是_a.next=q; 。 struct ND { char data;

struct ND *next; } a,b,*p=&a,*q=&b;

8. 设有如下语句:

struct { int x; int y;

} d[2]={{1,3},{2,7}};

则执行:printf(“%d\\n”,d[0].y/d[0].x*d[1].x); 输出的是 6 。

**************************************************** 9、定义结构体类型以关键字 (6) 开始。 struct 10、有如下程序段

struct st { int x; int *y; } *pt; int a[]={1,2}; b[]={3,4}; struct st c[2]={ 10, a, 20, b }; pt = c;

则: 表达式*(pt->y)的值为 (9) ;表达式++(*pt->y)的值为 (10) 。1 2

七、文件操作

1. 在fopen函数中使用文件的方式是\,该方式的含义是___读写打开一个文本文件_____

2.C语言可以处理的文件类型是 文本文件与二进制文件 。

3、feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 非0值 否则为 0 。 4、调用 fopen 函数打开一文本文件,在“使用方式”这一项中,如果是为输入而打开需填入 r 或 r+ 。

5、C语言文件有两种类型: 文件和 文件,其差别在于存储数值型数据的方式不同。 文本 二进制

6、因为操作系统对于同时打开的文件数目是有限制的,所以在文件使用结束后必须用函数 关闭由函数 打开的文件,否则会出现意想不到的后果。fclose fopen

7、语句fwrite(buffer,sizeof(Student),3, fp ); 实现的功能是: 。 把以buffer为首地

12

址的3个学生结构体类型数据输出到文件。

八、C++:

1. 语句cout << “hello\\0 world”的输出是___hello________ 2. 当建立一个新对象时,程序自动调用 构造函数 **************************************************** 3. C++源程序文件的缺省扩展名为 cpp 。

4. 构成对象的两个主要因素是 属性 和 行为 ,其中 属性 用于描述对象的静态特征, 行为 用于描述对象的动态特征。

5. 类和对象的关系可表述为:类是对象的 抽象 ,而对象则是类的 实例 。 6. 在关键字private后面定义的成员为类的 私有 成员。

7. 对象将其大部分实现细节隐藏起来,这种机制称为___封装___。 8. 复杂对象可以由简单对象构成,这种现象称为___聚合___。 **************************************************** 9、 和 作为函数重载判断的依据。 参数

Ⅲ 程序分析题

一、基础部分

1. 以下程序的输出结果为(x = 8)

#include int main() {

int i, j, x = 0;

for (i = 0; i < 2; i++) { x++;

for (j = 0; j < 3; j++) { if (j % 2) continue; x++; } x++; }

printf(\%d\\n\, x); return 0; } 2、以下程序的运行结果是 。6

#include void main() { int m=5; if(m++>5)

printf(“%d\\n”,m);

else;

printf(“%d\\n”,m--); }

13

3、下面程序的运行结果是_________。s=254 #include void main()

{ int a,s,n,count;

a=2; s=0; n=1; count=1; while(count<=7)

{ n=n*a; s=s+n; ++count; } printf(\ }

二、 数组

1. 书写下面程序运行结果: 101 69 55 34 23 11 7 1 void main() { int a[8] = {34,55,11,7,69,101,1,23}; int i, j, k, tmp; for(i=0; i<7; i++) { k = i; for(j=i+1; j<8; j++) if(a[j] > a[k]) k = j; if(k != i) { tmp = a[i]; a[i] = a[k]; a[k] = tmp; } } for(i=0; i<8; i++) printf(“=”, a[i]); }

2. 下面程序的运行结果是___#&*&%_____。 #include void main() {

char s[]=\ 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('#'); } }

3. #include

14

void main() {

float b[6]={1.1,2.2,3.3,4.4,5.5,6.6},t; int i; t=b[0];

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

b[i]=b[i+1]; }

b[5]=t;

for(i=0;i<6;i++) { printf(“%6.2f”,b[i]); } }

2.20 3.30 4.40 5.50 6.60 1.10

四、指针和数组

1、书写下面程序运行结果:23 69 1 34 #define N 4

void Swap(int *x, int *y); void output(int array[], int n); void main() { int a[N] = {34,69,1,23}; Swap(&a[0],&a[N-1]); output(a, N); }

void Swap(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; }

void output(int a[], int n) { int i; for(i=0; i

2. 下面程序的运行结果是 3,0,-90,23,6,10, #include

void invert( int*, int i, int j ); void main( )

{ int a[6]={10,6,23,-90,0,3},i; invert(a,0,5);

15

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

printf(“%d,”,a[i]);

printf(“\\n”); }

void invert(int *s,int i,int j) { int t; if(i

{ invert( s, i+1, j-1);

t=*(s+i);*(s+i)=*(s+j);*(s+j)=t; } }

3.下面程序的运行结果是____Coble dBase

C language Pascal_____。 #include void main() {

char *a[]={\ char **p; int j; p=a+3;

for(j=3;j>=0;j--)printf(\ }

4. void main() { int a[2][3]={1,2,3,4,5,6}; int m,*ptr; ptr=&a[0][0]; m=(*ptr)*(*(ptr+2))*(*(ptr+4)); printf(\ } 15

六、结构体

1、下面程序的输出结果为()

#include struct student { int num;

char name[10]; int age; };

16

void display(struct student *p) { printf(\\\n\, (*p).name); }

int main() {

struct student students[3] = {{9801, \, 20}, {9802, \, 21}, {9803, \, 19}}; display(students + 1); return 0; }

2. 以下程序的输出结果为(7120)

#include

struct sp { int a; int *b; } *p;

int d[3] = {10, 20, 30};

struct sp t[3] = {70, &d[0], 80, &d[1], 90, &d[2]};

int main() { p = t;

printf(\%d%d\\n\, ++(p->a), *++p->b); return 0; }

3. 如果有如下定义:

struct student { int num; float score;

struct student *next; };

并且在主函数中已经建立了如下图所示的链表,并由head指针指向表头结点:

105 107 101 103 head 78.5 85 89.5 90 Null

如果主函数中的调用语句为:ff(head,105);请写出执行下列函数后的输出结果。 void ff(struct student *head,int sn) { struct student *p1,*p2,*p; p1=head;

while(p1->num!=sn && p1!=Null)

{ p2=p1;p1=p1->next;

17

}

if (p1->num==sn) p2->next=p1->next;

else printf (“%ld is not found.\\n”, sn);

p=head;

while ( p!=Null )

{ printf(“%ld:%5.1f\\n”,p->num, p->score); p=p->next ;

} }

运行结果:101: 89.5 103: 90.0 107: 85.0

********************************************************* 4、若有定义: struct num {int a; int b; float f; }n={1,3,5.0};

struct num *pn=&n;

则表达式pn->b/n.a*++pn->b的值是___12_____,表达式(*pn).a+pn->f的值是____6.0____。

Ⅳ 程序填空题

1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名 和年龄。请在_______内填入正确内容。 #include struct man{

char name[20]; int age;

}person[]={\ \ \ };

void main() {

struct man *p,*q; int old=0 p=person;

for( ;p_< person + 3____;p++) if(oldage)

{q=p;__old = p->age____;}

printf(\ q->age____); }

18

2、以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。请在______内填入正确内容。 struct link {char data ; struct link *next; }; ....

struct link *p,*first; int c=0; p=first;

while(__p!=NULL___) {_c++______; p=__p->next_____; }

3、有四名学生,每个学生包括学号、姓名、成绩, 要求找出成绩最高者的学号、姓名和成绩(用指针方法)。 main() {

struct student { int num;

char name[20]; float score;

};

struct student stu[4]; struct student *p; int i,temp=0; float max;

for( p=stu;p

scanf(\ p->name ,& p->score); }

for(max=stu[0]. score,i=1; i<4;i++)

19

{

if(stu[i].score>max)

{

max=stu[i].score; temp=i; } }

p=stu+temp ; printf(\

}

Ⅴ 编程题:

1、输入一行字符,统计并输出其中单词的个数。

2、写一函数,判断一字符串是否回文(回文是指正反序相同,如LeveL),在主函数中输入字符串,并输出是否回文的信息,若是,输出“Yes”,否则,输出“No”。

3、编写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。 4、定义一结构体数组表示分数(比如1/3),并求两个分数相加之和(以最简分数形式表示)。 5、设某大学有下列登记表,采用最佳方式对它进行类型定义,并用该类型保存一个班30个学生的成绩,然后统计计算每个学生的平均分。

出生日期 年 月 日 姓名

struct date {

int year; int month; int day; };

struct person {

char name[20]; char sex;

struct date birthday; float score[4]; };

性别 20

本文来源:https://www.bwwdw.com/article/ogto.html

Top