程序设计与数据结构复习题答案

更新时间:2023-12-26 17:52:01 阅读量: 教育文库 文档下载

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

一、单项选择题

1.以下叙述错误的是(

)。

A. 一个C源程序可由一个或多个函数组成 B. 一个C源程序必须包含一个main函数 C. C程序的基本组成单位是函数

D. 在C程序中,注释说明只能位于一条语句的后面 2.C语言中运算对象必须是整型的运算符是(

A. %= B./ main()

{ unsigned int x=0xffff;

printf(“%u\\n”,x );}

A. -1 B. 65535 C. 32767 D. 0xFFFF 4.若有代数式

,则以下能够正确代nx?ex(其中e仅代表自然对数的底数,不是变量)

)。

3.有如下程序,程序运行后的输出结果是(

)。 )。

C. = D. 〈=

表该代数式的C语言表达式是(

A. sqrt(abs(n^x+e^x) B. sqrt(fabs(pow(n,x)+pow(x,e))) C. sqrt(fabs(pow(n,x)+exp(x))) D. sqrt(fabs(pow(x,n)+exp(x))) 5.字符串“\\t12\\x42\\\\abcd”的长度是( A. 14 B. 9 6.以下叙述中错误的是(

)。

)。

D.20

C. 15

A. 计算机不能直接执行用C语言编写的源程序

B. C语言经C编译程序编译后,生成后缀为.obj的文件是二进制文件 C. 后缀为.obj的文件,经连接后生成后缀为.exe的文件是二进制文件 D. 后缀为.obj和.exe的二进制文件都可以直接运行 7.以下选项中,与k=x++;完全等价的表达式是(

A. x=x+1;k=x; B. k=x;x=x+1; C. k=x+1; D. k+=x+1; 8.以下叙述中正确的是(

)。

A. break语句只能用于switch 语句中

B. continue语句的作用是:使程序的执行流程跳出包含它的所有循环 C. break语句只能用在循环体内和switch语句体内 D. 在循环体内使用break语句和continue 语句的作用相同 9.判断字符型变量 ch是否为大写英文字母的表达式为( A. ‘A’<=ch<=‘Z’

)。

)。

B. ch>=‘A’&& ch<=‘Z’

C. ch>‘a’&& ch<=‘z’

1

D. ch>=‘A’|| ch<=‘Z’

10.若表达式(m)? a++:a--, 则表达式m和( 11.设有 int i=010,j=10;

则printf( “%d,%d\\n”,++i,j--);的输出是(

)等价。

A. m==0 B. m!=0 C. m=0 D. m=1

)。

A. 11,10 B. 9,10 C. 010,9 D.10,9 12.已知w=1,x=2,y=3,z=3,a=4,b=2;则执行语句(a=w>x)&&(b=y>z) ;

后,a,b的值为(

)。

D. 0和2 )。

A. 1和1 B. 0和0 C. 4和2 13.定义如下变量关系,则下面语句的输出结果是( int i;

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

A. 1 5 9 B. 1 2 3 C. 3 5 7 D. 3 2 1 14.已知数组float b[3][2];该数组行下标的范围是( A. 1—3

B. 0—3

C. 1—2

15.下列语句中,正确的是(

)。 D. 0—2

int x[3][3]={1,2,3,4,5,6,7,8,9};

)。

A. #define PI=3.14159 B. include “stdio.h” C. define M 3 D. #define PI 3.14159 16.有如下程序, 该程序段的输出结果是( void main(void) { int n=5;

while(n>2) { n--; printf(“%d”,n);} } A. 543 B.432 C.4321 D.5432 17.下列四种数组定义,合法的数组定义是(

)。

A. char a[ ]=\B. int a[4]={4,3,2,1,0};

C. char a=\D. char a[4]= \

18.设p1和p2均为指向int型的指针变量, k为int型变量,下列不正确的赋值语句是( )。 A.k=*p1+*p2; B.k=*p1*(*p2) C.p2=k D.p1=p2

19.有如下程序 ,该程序的输出结果是( )。 void main(void)

{ char s[]=“ABCD”,*p; for( p=s+1;p<=s+3;p++)

printf(“%c\\n”,*p); } A. ABC B.A C.B D.BCD BC B C CD

2

)。

C C D D

20.对于C程序的函数,下列叙述中正确的是( )。

A.函数的定义不能嵌套,但函数调用可以嵌套 B.函数的定义可以嵌套,但函数调用不能嵌套 C 函数的定义和调用均可以嵌套 D.函数的定义和调用均不能嵌套

21.设x为整型变量, p是指向整型的指针变量, 则下列赋值表达式正确的是( )。 A. p=&x B. p=x C. *p=&x D. *p=*x

22.函数定义时,形参是整型变量,则函数调用时,实参不可以是( )。 A. 整型常量 B. 字符型常量 C. 数组名 D. 整型表达式 23. 以下程序的输出结果是( )。 void main(void)

{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2; printf(“%d\\n”,*p+*q); }

A. 16 B. 10 C. 8 D. 6

24.设有如下定义,若有p=&ab;,则对ab中成员项的正确引用是( )。

struct ss

{ int a; float b; }ab,*p; A. (*p).ab.a B. p->a C. p->ab.a D. p.ab.a

25. 若要对E盘上的一个非空文件“w1.dat”进行修改,正确的打开语句是( A. fp=fopen(“w1.dat”,“r+”); B. fp=fopen(“w1.dat”, “w+”); C. fp=fopen(“E:\\\\w1.dat”,“r+”); D. fp=fopen(“E:\\\\w1.dat”,“w+”); 26.C语言程序的三种基本结构是 ( )。

A.顺序结构,分支结构,循环结构 B.递归结构,循环结构,转移结构C.嵌套结构,循环结构,顺序结构 D.递归结构,分支结构,顺序结构

27.能正确表达逻辑关系“0

A. (0

B.((0

C. (0

28.设x和y为浮点型变量,则以下( )语句是正确的赋值语句。

A. x=&y

B.x*x=y

C. x=x+10*y

D.*x=y+2

29.设int a=3;下列哪一个表达式的值等于0 ( )。

A. a B. !a || a C. a>=a D. a%=a

30.定义如下变量和数组,则下面程序段落的输出结果是( )。

int i; int x[3][3]={0,1,2,3,4,5,6,7,8}; for (i=0;i<3;i++)

printf (“%d ”,x[i][2-i]);

3

) A.2 4 6 B.0 3 6 C.0 4 8 D.2 5 8 31.有下列程序段落:

int i,a[5]; for(i=0;i<5;i++)

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

若要使数组元素的值分别为1,2,3,4,5,应从键盘输入( )。 A.1,2,3,4,5↙ B. 1 2 3 4 5↙ C.12345↙ D. 1;2;3;4;5↙

32.数组名作为函数参数进行传递时,形参获得的是( )。

A.该数组第一个元素的值 B.该数组所有元素的值 C.该数组所有元素的地址 D.该数组的首地址 33.设有如下宏定义:

#define A 3+2 #define B A*A

则表达式“B*B”的值为 ( )。

A.23 B. 5 C. 25 D.625 34.在下列说明中,结构类型变量x 所占用内存字节数为( 16 )。 struct exp { int i; float j; double k; }x;

A.8个 B.7个 C. 14个 D.随计算机而定 35.设有定义:int k=3,*p=&k; 则表达式 *p的值是 ( )。

A.1 B.0 C.2 D.3 36. 下列程序的输出结果为 ( )。

main() { int i=3,b; b=(i--)+(i--); printf(“%d”,b); }

A.6 B.2 C.3 D.4

37.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( A.c=b=a B. (a=c)||(b=c) C. a=c=b D. (a=c)&&(b=c)

38.下列叙述不正确的是( )。

A.函数定义可以嵌套 B.宏定义可以嵌套 C.函数调用可以嵌套 D.循环结构可以嵌套

39.设 char *p=“abcde”,则printf(“%s”, p ) 的输出结果为( )。

A.c B.cde C.b D.abcde 40.p1,p2 为指向浮点的指针变量,下列运算没有意义的是( )。

A.*p1-*p2 B.p1++

4

。) C.*p1+*p2 D.p1+p2

41.在c语言中,运算对象的逻辑值“真”用( )表示。

A. false B.非0

C.0 D. 负数

42.已知函数原型声明为:char *www(char a, char b);该函数的类型为( )。 A.指向字符型的指针 B.字符型 C.整型

D.指向整型的指针

43.设int类型的数据长度为2字节,则该类型数据的取值范围是( )。 A.0至65536 B. 0至65535 C.-32767至32768 D.-32768至32767

44.int a, *p, **w; p=&a, w=&p; 取a的值的表达式为( )。 A.&a B.&*p

C.**p D.**w 45.C语言程序的基本单位是( )。

A.函数 B.标识符 C.表达式 D.语句

46.判断字符型变量 ch 的值是否为大写英文字母的表达式为( )。 A. ‘A’<=ch<=’Z’

B. ch>=’A’ && ch<=’Z’ D. ch>=’A’ || ch<=’Z’

C. ch>’a’ && ch<=’z’

47.已知 w=3,x=2,y=3,z=3,a=4,b=2;则执行语句(a=w>x) || (b=y>z);后,a, b的值为 ( )。 A.1和1 B. 0和0 ( ):

D. *(p+7)

C.1和2 D. 4和2

48.若有定义语句int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 值为 8 的数组元素的正确表示为A. a[8] B. a+7 C. p+7 49.下列程序运行结果是( )。 #define A 2 #define AA A+A/2 void main(void) { } A.3,11

B.3,15

C.2,10

D.8,40

50.若有如下定义,则对ex中的a成员的正确引用是( )。 struct sk { int a; float b;} ex, *p = &ex;

A. (*p).ex.a B. p->a C. p->ex..a D. p.ex.a

二、填空题

1.在内存中存储一个字符 ‘a’ 占用___1___个字节, 而存储字符串 ”abcdef” 则占用____7____个字节。 2.表达式 4/5的值为____0____。

3.设 x=4.5,a=7,y=3.4, 表达式x+a%3*(int)(x+y)%2/4的值为__4.500000___。 4.设 a=14, 执行 a+=a-=a*=a 后,a=______0_____。

5

printf(“%d\\n”,5*AA);

printf(“%d,”,AA);

5.设x=y=z=6, 执行 x=(y>z)?x+2:x-2; 后,x=___4______。

6.getchar( )函数用于输入_____字符_________, 而gets( )函数则用于输入___字符串___。 7.设有定义语句:char ww[20]=” \\t\\\\wab\\n”; 则表达式:strlen(ww) 的值是____7______。 8.设有定义语句:char str[7]=”abcdef”, 则数组元素str[2]中的字符是__c____,数组元素str[6]中的字符是____\\0______。

9.函数中的形参和调用时的实参都是变量时,传递方式为___值传递_____; 都是数组名时,传递方式为_________。

10.设有char *p=”12345”, 则printf(“%s”,p)的输出是___12345____;而 printf(“%c”,*p)的输出则是____1_____。

11.若s是int型变量,且s=7,则表达式: s/2+(s+1)%2 的值为_____1____。 12.C语言中,以 ox或oX ___打头的int常数是十六进制。 13.有说明语句char s=‘\\102’; S包含了___1__个字符。 14.有数学表达式sinx+x-6x,

写出其对应的C语言的表达式 __sinx+sqrt(x)-6*x;_____。

15.有定义语句:int a[][3]={ {0},{1},{2} }; 则数组元素a[1][2]的值是 0 。 16.若程序中使用了函数strlen(),则必须包含的头文件名为____________。 17.有如下程序,该程序的输出结果是 a=2,b=1 。

void main(void) {

int x=1,a=0,b=0; switch(x)

{ case 0:b++; case 1:a++; case 2: a++,b++; }

printf(\

18. 若a函数中调用了b函数,而b函数又调用了a函数, 这种调用称为____递归___调用。

19.函数调用时,若形参和实参均为数组名时,传递方式为 ____ ____。 20.若有以下定义语句,则输出的结果是___4_____。 char s1[ ]=“abcdef”, *s2=“1234”; printf(“%d\\n”, strlen(strcpy(s1,s2))); 21.若宏定义为:#define y(x) 2+x 则表达式a=4+3*y(2)的值为 12 。 22.设有以下语句:

static int a[4][2]={1,2,3,4,5,6,7,8}; int (*p)[2]; p=a;

则 *(*(p+2)+1)的值为 6 。

6

23.在turbo C中,int型数据占2字节,则定义 struct node {

char x[10]; int y;

union { float a; long b; }ab; }t;

后,sizeof(t)= 20 。 24.设有一个名为“ww1.c”的C程序,

其主函数为 main(int argc,char *argv[]),如果在执行时,输入的命令行为: ww1 aa bb cc↙

则形式参数argc的值是______。

25. 执行下列程序段后,(**q-1)的值为 ____99________。

int a,*p,**q; a=100; p=&a; q=&p;

26.C语言源程序中主函数名由系统规定为 ____main______ ,程序员是不能改变的。

27.有数学表达式:x-3,其C语言表达式为 ____________sqrt(x)-3______ ______。

28.已知函数定义为:int stat(int a , float *p)

{ ...... }

则此函数的两个参数类型分别是 整型变量 、 字符型指针变量 。

29.设有数组a[10];则首地址可以写成 ______&a[0]_ 、 a__ ,

数组元素a[3]的地址可以写成_____&a[3]、a+3___ __。

30.要使以下程序段中的函数调用语句printf(“***”);执行10次,应在 ① 处填入整数

_____19______。

for( i=1;i<=___①___;i+=2 ) printf(“***”);

31.用只读方式打开e:\\20051234目录下的名为 “aa.dat”的文件,正确的打开

语句为 FILE *fp;fp=___fopen(“e:\\20051234\\aa.dat”); ______。

32.判断两个浮点型变量x和y是否相等一般用:

if( x-y <1e-6 )? 。 33.已知赋值语句zhang.year =1985;可判断zhang是 整型 类型的变量。

三、程序分析题

1. 下面程序的运行结果为 5,6,5,0 #include void main( )

7

{ int a,b,c,d; a=4; b=6; c=++a;

d=( c

printf(\}

2. 下面程序的运行结果为 c=1, d=0.000000 #include

void fun (int x, int y) {

int a, b; float d; a = x+14; b = y-4;

d = (float)(b/a); printf (\ }

void main(void) {

int b=9, a=6, c; c = b/a;

printf (\ fun( a, b ); }

3.设从键盘上输入 Hello World! 下面程序的运行结果为 hello world! #include void main( void ) { char ss[20]; int i; gets(ss);

for( i=0; ss[i]!='\\0'; i++)

if( ss[i]>='A' && ss[i]<='Z') ss[i] = ss[i]+32 ; puts(ss); }

4.下面程序的运行结果为 b= -10 i=33, b=0 i=75,b=33 #include int i=1;

void other( void ); void main(void) { int b = -10;

printf(\ other( );

8

i = i+10; other( ); } void other( )

{ static int b; i=i+32;

printf(\ b = i; }

5.下面程序的运行结果为 6,45 2,98 #include void main(void)

{ int a[10]={78,89,98,66,54,76,45,82,62,95 }; int ka, ki, j; ka = ki = 0; for(j=1; j<10; j++)

{ if ( a[ki]>a[j] ) ki=j ;

if (a[ka]

}

printf(“%d, %d\\n %d, %d\\n”, ki, a[ki], ka, a[ka] ); }

6. 运行时假定键盘输入数据为:1 2 3 4 5 6 7 8 9 10 下面程序的运行结果为 1 3 5 7 9 #include void main(void ) { int i ,a [10] ; int *p;

p = a;

for (i=0 ; i<10 ; i++ ) scanf ( “ %d” , p++ ) ; for (p=a ; p

if ( *p % 2 ) printf ( “ =”, *p); }

7.下面程序的运行结果为 (要求注明输出格式!) #include

9

void main(void)

{ 输出: ___10,___10 int a=10,b=11; 50____1 ___01 int c=0,d=0; 40___11 printf(\--b); 302010 printf(\ printf(\ printf(\ printf(\第一季度第三季度 }

0西部北部

8.下面程序的运行结果为

#include void main(void) { int i,j; for(i=1;i<4;i++)

{

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

printf(“%d+%d=%d ”,i,j,i+j); printf(“\\n”); } }

9.下面程序的运行结果为 #include int a=1,b; void fun(void); void main(void) { static int c; int b=-5;

printf(\ fun(); a+=1;c+=2;

printf(\

}

void fun() { int c=10;

10

1+1=2 1+2=3 1+3=4 2+2=4 2+3=5 3+3=6 a=1,b=-5,c=0 a=2,b=2,c=10 a=3,b=-5,c=2

a+=1;b+=2;

printf(\

}

10. 下面程序的运行结果为 #include main()

{

char str[5],*p; int i;

for(i=0;i<4;i++) str[i]=’A’+i; str[i]='\\0'; p=str; while(p

11.下面程序的运行结果为 #include

void main(void) { struct stud

{

int no;

char *name;

float score; }stu1,stu2;

1001 Wang yong 90.5 假设输入的分数为90.5 ABCD BCD CD D stu1.no=1001;

stu1.name=\

printf(\ stu2=stu1;

printf(\

stu2.no,stu2.name,stu2.score);

}

12. 下面程序的运行结果为 11

#include int fun(int *a, int n) {

int i,k=0;

printf(“%d,%d\\n”,*a,n); for(i=0;i

continue; else k+=*a;

return k;

}

void main() {

int aa[10]={1,2,3,4,5,6,7,8,9,10},s;

s=fun(aa+2,8); printf(\

四、 程序设计题

1. 有一分段函数: 2x + 5 (x<=2) y= 3x - 4 (25) 编程序,输入变量 x的值,计算并输出y的值。 void main() { int x,y; scanf(“%d”,&x); if(x<=2) y=2*x+5; else if(x>2&&x<=5) y=3*x-4; else if(x>5) y=7; printf(“%d”,y); } 3,8 28 2.由键盘任意输入9个整数,组成3行3列的二维数组,统计主对角线上元素的和。 void main() { int a[3][3],i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); for(i=0;i<=2;i++) for(j=i;j<=i;j++) sum+=a[i][j]; 12 printf(“sum=%d”,sum); }

111?1????...求?的值,要求精度为10-6 (即 3.编写程序,通过级数 4357某项的绝对值小于10),输出结果?的值。

-6

? void main() { int i,n,m=1; float PI,sum=0.0; scanf(“%d”,&n); for(i=1;i<=n;i+=2) { sum+=m/i; m=-m; } sum=4*sum; PI=sum; printf(“%1.6f”,PI); } 4.编写一程序任意输入一串字符,统计其中大写字母的个数,并输出结果。 #define N 100 void main() { char str[N],*p; int n; p=str; scanf(“%s”,p); while(*p) { if(*p>=?A?&&*p=0 void main() y= 0 x=0 { int x,y; -1 x<0 输入x的值,输出结果。 scanf(“%d”,&x); if(x>0) y=1; else if(x==0) y=0; else y=-1; printf( “%d”,y); } 6.输入6个整数,组成2行3列的二维数组,统计数组中的正数之和、正数个数以及负数之和、负数个数。 void main() 13 { int i,j,a[2][3],s1,s2,n1,n2; s1=s2=n1=n2=0; for(i=0;i<2;i++)

7.编写子函数exps,求ex≈1+x+x2/2!+x3/3!......,要求精度为106。在主函数中输入x,利用子函数exps 求(ex+e-x)/2的值,并在主函数中输出结果。 #include main() {int x,I,temp=1;doble e=1,m; “%d\\n”,x); Scanf( for(i=1;;i++) { temp*=i; m=(double)(pow(x,i)/temp); if(m<1e-6) break; e+=m; } return((e+e)/2); } 8.一个班有45人,用a数组存放一门课的成绩,编程输入a的成绩,统计不及格(<60分)的人数,并将成绩按降序排序,输出结果。(10分)

14

void main() { float a[45],temp; int i,n; n=0; for(i=0;i<45;i++) scanf(\ for(i=0;i<45;i++) if(a[i]<60&&a[i]>0) n++; for(i=0;i<45;i++) if(a[i]

1.C源程序的基本单位是 函数 。

2.一个C源程序中至少应包括一个 main函数 。

3.在一个C源程序中,注释部分两侧的分界符分别为 // 和 /* */ 。 4.一个函数是由两部分组成的,它们分别是 函数首部 和 函数体 。

5.在C语言中,一个函数的函数体一般包括 说明部分 和 语句部分 。 6.在每个C语句和数据定义的最后必须有一个 分号 。

7.C语言本身没有输入输出语句。其输入输出是由 来完成。 8.序是指 程序是可以连续执行,并能够完成一定任务的一条条指令的集合。 它是人与机器之间进行交流的语言。

9.源程序是指 未编译的按照一定的程序设计语言规范书写的文本文件 。C源程序文件的扩展名为 .c 。

10.目标程序是指 把源文件翻译成一种中间代码 。目标程序文件的扩展名为 .obj 。 11.可执行程序是指 已经经过编译和连接转化成了二进制代码了 。可执行程序文件的扩展名为 .exe 。 12.上机运行一个C源程序的步骤一般为:① 编译,检查是否出错 ; ② 链接 ;③ 寻找提示改正 ;④ 运行 。

13.若x和a均是int型变量,则计算表达式(1)后的x值为 12 ,计算表达式(2)后的

15

(π*π)/6=1+1/(2*2)+1/(3*3)+ ? +1/(n*n) 请在下面的函数中填空,完成求π的功能。 #include “math.h” double pi(long n) {double s=0.0; long i;

for(i=1;i<=n; i++) s=s+ 1/(i*i) ; return(sqrt(6*s)); }

73.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部 void fun() 。要求形参名为b。 main()

{double s[10][22]; int n; ?

fun(s); ? }

74.输入12时,程序输出结果为 12 is not prime number. ;若输入17,输出结果为 17 is prime number. 。

main()

{int number;

scanf(“%d”, &number);

if(prime(number)) printf(“\\n%d is prime number.”, number); else printf(“\\n%d is not prime number.”, number); }

int prime(int number) {int flag=1, n;

for(n=2; n

75. 理解下面的程序,填空完善程序。 main() {int a, b, c;

scanf(“%d %d”, &a,&b ); c= max (a, b); printf(“a=%d b=%d max=%d\\n”, a, b, c); }

int max(x, y) ? ;

26

{int z;

if(x>y) z=x; else z=y;

return(z) ; }

76.下面程序的输出结果是 2,5,1,2,3,-2 。 main()

{int a=3, b=2, c=1; c-=++b; b*=a+c;

{int b=5, c=12; c/=b*2; a-=c;

printf(“%d, %d, %d,”, a, b, c); a+=--c; }

printf(“%d, %d, %d”, a, b, c); }

77.下面的findmax函数返回数组s中值为最大的元素的下标,数组中元素的个数由t传人,请填空。

findmax(int s[ ], int t) {int k, p;

for(p=0, k=p; p

if(s[p]>s[k]) k=p ; return k; }

78.下面程序的输出结果是 7 。 fun(int x) {int p;

if(x= =0||x= =1) return(3); p=x-fun(x-2); return p; }

main()

{printf(“%d\\n”, fun(9));}

79.函数fun的功能是:使一个字符串按逆序存放,请填空。 void fun(char str[ ]) {char m; int i, j;

for(i=0, j=strlen(str); i< strlen(str)/2 ; i++, j--) 27

{m=str[i];

str[i]= str[j-1] ; str[j-1]=m; }

printf(“%s\\n”, str); }

80.以下程序的输出结果是 7 。 #define MAX(x, y) (x)>(y)?(x):(y) main()

{int a=5, b=2, c=3, d=3, t; t=MAX(a+b, c+d)*10; printf(“%d\\n”, t); }

81.以下程序的输出结果为 10.000000 。 #include #include

#define POWER(x, y) pow(x, y)*y #define ONE 1

#define SELEVE_ADD(x) ++x main() {int x=2;

printf(“%f\\n”, POWER(SELEVE_ADD(x), ONE+1)); }

82.填空补充以下程序:

#define PRICE 30 main()

{ int num,total ; num=0;

total=num*PRICE;

printf(“total=%d, num=%d\\n”, total,num ); }

83.下面程序的输出结果是 6 。 #define CIR(r) r*r main()

{int a=1, b=2, t; t=CIR(a+b); printf(“%d\\n”, t); }

84.下列程序的输出结果是 GDABC 。 #include main( )

{char b[30],*chp;

28

strcpy(&b[0],\; strcpy(&b[1],\; strcpy(&b[2],\; printf(\,b); }

85.下列程序的字符串中各单词之间有一个空格,则程序的输出结果是 How does she 。 #include main( )

{char strl[ ]=\,*p1=strl; strcpy (strl+strlen(strl)/2,\; printf(\,pl); }

86.若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。 a[0] a[1] a[2] a[3] a[4]

22 33 44 55 66 (1)若p已指向存储单元a[1]。通过指针p给s赋值,使s指向最后一个存储单元a[4]的语句是 s=*(p+3) 。

(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 5 。 87.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。 #include main()

{char *p, s[6]; int n; p=s; gets (p); n=*p-'0';

while( p !='\\0') n=n*8+*p-'0'; printf(\}

88.设有以下程序: main()

{int a, b, k=4, m=6, *p1=&k, *p2=&m; a=pl= =&m;

b=(*p1)/(*p2)+7; printf(\printf(\}

执行该程序后,a的值为 0 ,b的值为 7 。

29

89.下列程序的输出结果是 0 。 void fun(int *n) {while((*n)--);

printf(\}

main() {int a=100; fun (&a); }

90.以下程序的输出结果是 10 。 main()

{int arr[ ]={30, 25, 20, 15, 10, 5}, *p=arr; p++;

printf(\}

91.若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 *(p+5); 。

int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;

92.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。 strlen (char a[ ], char b[ ]) {int num=0, n=0;

while (*(a+num)!= ?\\0? ) num++;

while (b[n]){*(a+num)=b[n]; num++; n++ ;} return(num); }

93.函数void fun(float *sn,int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。 S?1?1111 ????3572n?1void fun(float *sn, int n)

{float s=0.0, w, f= -1.0; int i=0;

for(i=0; i<=n; i++) {f= _(-1) *f; w=f/ (2*i+1); s+=w; }

*sn = s; }

94.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 int add(int x,int y, int z)

30

{ z =x+y;}

95.以下fun函数的功能是:累加数组元素中的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。请填空。 fun(int b[ ],int n,int *x) {int k,r=0;

for(k=0;k

96.以下函数的功能是:把两个整型指针变量所指的存储单元中的内容进行交换。请填空。exchange(int *x,int *y) {int t;

t=*y; *y= *x ; *x= t ; }

97.以下程序的输出是 49,36 。 main()

{int a[10]={19,23,44,17,37,28,49,36},*p; p=a;

printf(“%d\\n”,(p+=3)[3]); }

98.下面程序的输出结果是 024 。 #define MAX 3 int a[MAX]; main()

{fun1();fun2(a);printf(“\\n”);} fun1()

{int k,t=0;

for(k=0;k

fun2(int b[]) {int k;

for(k=0;k

99.下面程序的输出结果是 。 char b[]=“ABCD”; main()

ABCDCD {char *chp;

for(chp=b; *chp; chp+=2) printf(“%s”, chp); printf(“\\n”); }

100.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。

31

#include main()

{char str[81],*sptr; int i;

for(i=0;i<80;i++) {str[i]=getchar();

if(str[i]==?\\n?) break; }

str[i]= ‘\\0’ ; sptr=str;

while(*sptr) putchar( *(sptr++) ); }

101.fun1函数的调用语句为:fun1(&a,&b,&c);它将三个整数按由大到小的顺序调整后依次放入a、b、c三个变量中,a中放最大数。请填空。 void fun2(int *x, int *y) {int t;

t=*x; *x=*y; *y=t; }

void fun1(int *pa,int *pb,int *pc)

{if(*pc>*pb) fun2( *pc,*pb ); if(*pa<*pc) fun2( *pc,*pa ); if(*pa<*pb) fun2( *pb,*pa ); }

102.以下函数用来在w数组中插入数x,w数组中的数已按由小到大的顺序存放,n所指存储单元中存放数组中数据的个数,x插入后数组中的数仍有序。请填空。 void fun(char *w,char x,int *n) {int i,p; p=0; w[*n]=x;

while(x>w[p]) w[p]=x ;

for(i=*n;i>p;i--) w[i]= w[i-1] ; w[p]=x; ++*n; }

103.阅读程序: main()

{char str1[]=“how do you do”, str2[10]; char *p1=str1, *p2=str2; scanf(“%s”, p2); printf(“%s ”, p2); printf(“%s\\n”, p1); }

运行上面的程序,输入字符串HOW DO YOU DO,则程序的输出结果是 HOW how do you

32

do 。

104.下面程序的输出结果是 SO 。 main()

{char *p[]={“BOOL”, “OPK”, “H”, “SP”}; int i;

for(i=3;i>=0;i--,i--) printf(“%c”,*p[i]); printf(“\\n”); }

105.下面程序的输出结果是 17 。 funa(int a,int b) {return a+b;} funb(int a,int b) {return a-b;}

sub(int(*t)(),int x,int y) {return((*t)(x,y));} main()

{int x,(*p)(); p=funa;

x=sub(p,9,3); x+=sub(funb,8,3); printf(“%d\\n”, x);v }

106.下面程序的输出结果是 XYZA 。 #include

void fun(char *a1,char *a2,int n) {int k;

for(k=0;k

a2[k]=(a1[k]-?A?-3+26)&+?A?; a2[n]=?\\0?; }

main()

{char s1[5]=“ABCD”, s2[5]; fun (s1, s2, 4); puts(s2); }

107.下面程序的输出结果是 7 1 。 void as(int x,int y,int *cp,int *dp) {*cp=x+y; *dp=x-y; }

main()

{int a=4,b=3,c,d;

33

as(a,b,&c,&d);

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

108.下面程序的输出结果是 eybdooG 。 #include main()

{static char b[]=“Goodbye”; char *chp=&b[7];

while(--chp>=&b[0]) putchar(*chp); putchar(?\\n?); }

109.若输入:this test terminal,以下程序的输出结果为:terminal test this。填空补充以下程序。 #include #define MAXLINE 20 void main() {int i;

char *pstr[3],str[3][MAXLINE]; for(i=0;i<3;i++) pstr[i]=str[i];

for(i=0;i<3;i++) scanf(“%s”,pstr[i]); sort(pstr);

for(i=0;i<3;i++) printf(“%s\\n”,pstr[i]); }

sort( char *strcmp ) {int i,j; char *p;

for(i=0;i<3;i++) {for(j=i+1;j<3;j++)

{if(strcmp(*(pstr+i),*(pstr+j))>0) {p=*(pstr+i);

*(pstr+i)= *(pstr+j) ; *(pstr+j)=p; } } } }

110.以下程序利用指针法将两个数按从小到大的顺序输出来。 main()

{int a,b, *p,*p1,*p2 ; printf(“input a, b:”); scanf(“%d%d”, &a,&b); p1=&a ; p2=&b;

34

if(a

{p=p1; p1=p2; p2=p;}

printf(“a=%d b=%d\\n”,a,b);

printf(“max=%d min=%d\\n”, *p1,*p2 ); }

111.以下程序的输出结果是 8 。 fun(int n,int *s) {int f1,f2;

if(n==1||n==2) *s=1; else

{fun(n-1,&f1); fun(n-2,&f2); *s=f1+f2; } }

main() {int x; fun(6,&x);

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

112.下面的程序通过函数average计算数组中各元素的平均值,请填空。 float average(int *pa,int n) {int i;

float avg=0.0; for(i=0;i

avg=avg+ *(pa+i) ; avg= avg/n ; return avg; }

main()

{int i,a[5]={2,4,6,8,10}; float mean;

mean=average(a,5);

printf(“mean=%f\\n”,mean); }

113.以下程序将字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后的新串存于字符数组s2中。 #include

void replace(char *s1,char *s2,char *str1,char *str2) {char *t0,*t1,*t2; while()

{for(t0=s1,t1=str1;(*t1!=?\\0?&&*t0++=*t1++);t0++,t1++); if(*t1!=?\\0?) *s2++ =*t1++;

35

else

{for(t1=str2;*t1!=?\\0?;) *s2++ = *t1++ ; t1=str1; } }

*s2=?\\0?; }

main()

{static char s1[]=“abcef ababcd abab.”, s2[25]; replace (s1, s2, “abc”, “XYZ”); printf(“%s\\n”, s2); }

114.以下语句的输出结果是 hELLO! 。 char s[80],*sp=“HELLO!”; sp=strcpy (s, sp); s[0]=?h?; puts(s);

115.设有以下结构体类型说明和变量定义,则变量a在内存中所占的字节数是 32 ,变量p在内存中所占的字节数是 32 。 struct stud {char num[6]; int s[4]; double ave; }a, *p;

116.若有如下结构体说明: struct STRU

{int a, b ; char c; double d: struct STRU p1, p2; };

请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型: STRU t[20]; 117.以下程序段用于构成一个简单的单向链表,请填空。 struct STRU {int x, y ; float rate;

struct STRU p; } a, b;

a.x=0; a.y=0; a.rate=0; a.p=&b; b.x=0; b.y=0; b.rate=0; b.p=NULL;

118.建立并输出100个同学的通讯录,每个通讯录包括同学的姓名、地址、邮政编码。 #include #define N 100

struct communication {char name[20]; char address[80];

36

long int post_code; }commun[N]; main() {int i;

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

set_record(commun+i); print_record(commun+i); } }

set_record(struct communication *p) {printf(“Set a communication record\\n”);

scanf(“%s %s %ld”, p->name , p->address, p->post_code ); }

print_record ( struct STRU p) {printf(“Print a communication record\\n”); printf(“Name: %s\\n”, p->name); printf(“Address: %s\\n”, p->address);

printf(“Post_code: %ld\\n”, p->post_code ); }

119.以下函数creatlist用来建立一个带头节点的单链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回,链表最后一个节点的next成员中放入NULL,作为链表结束标志。读入时字符以#表示输入结束(#不存入链表)。请填空。 struct node {char data;

struct node * next; };

struct node * creatlist( ) {struct node * h,* s,* r;char ch;

h=(struct node *)malloc(sizeof(struct node)); r=h;

ch=getchar( ); while(ch!= ?#?)

{s=(struct node *)malloc(sizeof(struct node)); s->data= ch ; r->next=s; r=s; ch=getchar( );}

r->next= NULL ; return h; }

120.有以下定义和语句,则sizeof(a)的值是 16 ,而sizeof(a.share)的值是 4 。 struct date

37

{int day; int month; int year; union

{int share1; float share2; }share; }a;

121.下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中。请填空。

#include FILE *fp; {int i, j;

if((fp=fopen ( “bit.dat” ,“wb”))= =NULL) exit(0); for(i=0; i<10; i++) {scanf(“%d”, &j);

fwrite(&j, sizeof(int), 1, FILE *fp ); }

fclose(fp); }

122.以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换成大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填空。 #include main() {FILE *fp; char str[100]; int i=0;

if((fp=fopen(“test.txt”, “w” ))= =NULL) {printf(“Can?t open this file.\\n”); exit(0);} printf(“Input a string: \\n”); gets (str); while (str[i])

{if(str[i]>= ?a?&&str[i]<=?z?) str[i]= str[i]-32 ; fputc(str[i], fp); i++; }

fclose (fp);

fp=fopen(“test.txt”, “r” ); fgets(str, 100, fp); printf(“%s\\n”, str); fclose (fp); }

123.用以下程序把从键盘输入的字符存放到一个文件中,用字符#作为结束符,请按题意

38

要求填空完善程序。 #include main() {FILE *fp;

char ch, fname[10];

printf(“Input the name of file:\\n”); gets (fname);

if((fp=fopen( “fname.dat”,”w” ))= =NULL) {printf(“can?t open file\\n”); exit(0) ; }

while((ch=getchar())!=?#?)

fputc ( ch,10,fp ); fclose (fp); }

124.下面程序用来统计文件中字符的个数,请填空。 #include main() {FILE *fp; long num=0;

if((fp=fopen(“fname.dat”, “r”))= =NULL) {printf(“can?t open file\\n”); exit(0); }

while (*fp!=0) {fgetc (fp); num++;}

printf(“num=%d\\n”, num); fclose (fp); }

125.以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件中,形成文本文件,并将字符的个数写到文件尾部。请填空。 #include main( ) {FILE *fp;

char ch,fname[32]; int count=0;

printf(\:\; scanf(\,fname); if((fp=fopen( “fname.dat” ,\ {printf(\:%s\\n\,fname); exit(0);} printf(\:\\n\;

while((ch=getchar())!=\,fp); count++;} fprintf( fp ,\,count); fclose(fp); }

39

40

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

Top