C语言第五章练习题

更新时间:2023-11-17 13:03:01 阅读量: 教育文库 文档下载

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

1.选择题:

(1)如果x是整型变量,则合法的形式是( )。 A.&(x+5) B.*x C.&*x D.*&x

(2)若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。

A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])

(3)以下程序的输出结果是( )。 #include void main()

{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20

int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址 *p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20 *(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=2 printf(\A.5 B.10 C.15 D.20

(4)执行以下程序段后,m的值为 ( )。 int a[2][3]={{1,2,3},{4,5,6}}; int m,*p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4));

A.15 B.14 C.13 D.12 (5)以下程序的输出结果是( )。 #include

void fun(int x,int y,int *cp,int *dp)

{ cp=x+y; //*cp=30+50=80 dp=x-y; //*dp=30-50=-20 }

void main() { int a,b,c,d; a=30,b=50; fun(a,b,&c,&d); printf(\ }

A.50,30 B.30,50 C.80,-20 D.80,20

(6)要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。 A.funa(int *x,int *y) B.funb(int x,int y) { int *p=new int ; { int t; p=*x; t=x; *x=*y; x=y;

*y=*p; } y=t; }

C.func(int *x,int *y) D.fund(int x,int y) { *x=*y; { *x=*x+*y; *y=*x; *y=*x-*y; } *x=*x-*y; } (7)以下程序的输出结果是( )。 #include void main()

{ char *s=\ int v1=0,v2=0,v3=0,v4=0; for (int k=0;s[k];k++) switch(s[k]) { default:v4++; case '1':v1++; case '3':v3++; case '2':v2++; } printf(\ A.4,2,1,1 B.4,9,3,1 C.5,8,6,1 (8)设有如下定义,下面关于ptr正确叙述是()。 int (*ptr)();

D.8,8,8,8

A.ptr是指向一维数组的指针变量 B.ptr是指向int 型数据的指针变量

C.ptr是指向函数的指针,该函数返回一个int型数据

D.ptr是一个函数名,该函数的返回值是指向int型数据的指针 9,以下关于指针的叙述正确是

A) 所有类型的指针变量所占内存的大小是一样的

B) 指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节

C) 指针变量可直接指向任何类型的变量,而不会出现编译或运行错误

D) 指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误

10,以下定义语句中正确的是 A) int a=b=0;

B) char A=65+1,b='b';

C) float a=1,*b=&a,*c=&b; D) double a=0.0; b=1.1; 11,以下叙述中正确的是

A) 如果p是指针变量,则&p是不合法的表达式 B) 如果p是指针变量,则*p表示变量p的地址值

C) 在对指针进行加、减算术运算时,数字1表示1个存储单元的长度 D) 如果p是指针变量,则*p+1和*(p+1)的效果是一样的 12,有以下程序

#include void f(int *p,int *q); main() {

int m=1,n=2,*r=&m; f(r, &n);

printf(\ }

void f(int *p,int *q) {

p=p+1; *q=*q+1; }

程序运行后的输出结果是

A) 2,3 B) 1,3 C) 1,4 D) 1,2 13,以下对指针变量的操作中,错误的程序段是 A) int x=0,*p; *p=x; B) int x=1,*p,*q=&x; p=q;

C) int *p,*q; q=p=NULL; D) int p,*q; q=&p;

14,有以下程序 #include main( ) {

char* p1 = 0; int* p2 = 0; float* p3 = 0;

printf(\}

程序运行后的输出结果是

A) 1,4,8 B) 4,4,4 C) 1,2,4 D) 15,有以下程序 #include void fun(char **p) { ++p;

printf(\ } main()

{ char *a[] = {\ fun(a); } 程序的运行结果是

A) Afternoon B) fternoon C) Morning D) orning 二,填空

16,有以下程序

1,1,4 #include char *a = \

char *b = \main( )

{ char *p; p = b;

while (*p != *a) p++; printf(\}

程序运行后的输出结果是 17,有以下函数 int fun(char *ps) { char *p; p=ps;

if(*ps==0) return 0; while(*++p); return(p-ps); }

该函数的功能是计算字符串的长度 18,有以下程序 #include main( )

{ int x[3][3] = {{2},{4},{6}}, i, *q = &x[0][0]; for(i=0; i<2; i++) {

if (i == 0)

x[i][i+1] = *q+1; else ++q;

printf(\ }

printf(\}

程序的运行结果是 19,有以下程序 #include void f(int x[], int n) { if (n > 1)

{ printf(\ f(x, n-1);

printf(\ } else

printf(\

you to Beijing! 2 3 }

main( )

{ int z[3] = {1, 2, 3}; f(z,3); printf(\}

程序运行后的输出结果是 3,2,1,2,3, 20,有以下程序

#include int fun( char s[]) { int n=0;

while(*s <= '9'&&*s >='0') { n=10*n+*s-'0' ; s++; } return (n); }

main()

{ char s[10]={ '6', '1', '*', '4', '*', '9', '*', '0', '*'}; printf(\ }

程序的运行结果是 61 三、编写程序.

1. 在堆内存中申请一个float型数组,把10个float型数据0.1、0.2、0.3、?、1.0赋予该数组,然后使用float型指针输出该数组的各元素值并求出其累加和。 2. 编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数中输入一个整数,调用该函数,

判断该数是不是素数,若是则输出“yes”,否则输出“no” */

3. 写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身,如:1634=14+64+34+44)。在主函数中从键盘任意输入一个四位数,调用该函数,判断该数是否为玫瑰花数,若是则输出“yes”,否则输出“no”。*/

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

Top