好文档 - 专业文书写作范文服务资料分享网站

主题作业三函数与结构

天下 分享 时间: 加入收藏 我要投稿 点赞

主题作业三:函数与结构

数组变量名也是指针

一.单选题 访问结构指针所指向的结构的成员变量时用->, 访问结构的成1. 针对如下定义,合法的表达式是__C___。 员变量时用.

struct node { 成员s是数组,不能直接赋值(但是初始化数组的时候可以,例

char s[10]; 如char s[10]=”abc”; 那是由编译器在编译阶段完成的) int k; } p[5]; A.p.k=2 B.p[0]->k=2 C.(p->s)[0]=‘a’ D. p[0].s=“a” 2. 针对如下定义:

p指向a[1];然后p+1指向a[2],即元素9的位置;

static struct {

然后(int*)(p+1)则是将指针强制转换为一个整数指针,

int x, y[3];

位置不动,还是9的位置;

} a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p;

+2操作则把上面的整数指针向后移动2个,即指向11

p = a+1;

的位置;

表达式*((int *)(p+1)+2)的值为__D___。 A.3 B.7 C.10 D. 11 3. 对于以下结构定义,++p->str中的++加在__A___。

struct { char *str; int len;

->的优先级高于++,该表达式等价于++(p->str) 所以,++作用于p的成员变量str上。 执行后的结果是:指针p不变,但是它指向的结构的成员str加1

} *p;

A、指针str上 B、指针p上 C、str指的内容上 D、以上均不是

4. 根据声明int (*p)[10], p是一个__A___。 A.指针 B.数组 C.函数 D.数组元素 5. 若下面程序中所有的变量均已声明或定义,则下列选项中的变量能够在fun()中使用的是__A___。 第4题解答:注意:int (*p)[10] 和 int *p[10]是完全不一样的 #include int *p[10]定义了一个数组,其元素类型为int*;此时sizeof(p)为40。 void fun(int x) int (*p)[10]定义了一个指针,其类型是长度为10的整型数组;此时sizeof(p)为4。 { static int y; …… 变量遵循先声明再引用的原则 return; x作为函数fun的形式参数变量,已经声明为int型,可以使用 } y是函数fun的局部静态变量,也已经声明,也可以使用 int z; z 在fun之后定义,之前没有声明,不能使用 void main( ) a,b则是函数main的局部变量,fun不能使用。 { int a,b; 注意:这里的先后顺序只得是编译器编译语句的顺序,不是语句运行的先后顺序。 fun(a); 因为if/switch分支、for/while循环等流程控制语句可能动态的控制程序语句的执 …… 行次序,所以语句的执行次序不是固定的。 }

A.x, y B.x, y, z C. a,b,y,z D.a,b,x,y,z

二. 填空题

6. 对于下面的定义,(s[0].b)/(++p)->a的值为__0___。

s[0] 为{2,4},s[1] 为{6,8}。

s[0].b为4 struct {

p初始指向s[0],++p指向s[1],故(++p)->a的值为6 int a;

因为4/6为0,所以。。。。 int b;

} s[2]={2,4,6,8}, *p=s;

7. 下列程序段执行后,z的值是 _8_。 结构数组a[3]在内存中也可以看做是一个长度为12的整

static struct { 数数组:1,2,3,…, 11,12。

int x, y[3]; p的初始地址为a+3,那么p-1指向a[2],即元素9的位置 } a[3] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p=a+3; (int*)将p-1强制转换为一个整型指针,但是还是指向9int z; 的位置。所以-1作用在整型指针(int*)(p-1)上,得到9的 z=*((int *)(p-1)-1); 前面一个整数元素的地址,即8的地址。 8. 下列代码段将会打印出__COND___。

char *c[3]={“FIRST”, “SECOND”, “THIRD”}; c是一个指针数组,c[0]指向字符串”FIRST”,c[1]指向字符printf(“%s”, *(c+1)+2); 串“SECOND”,c[2]指向字符床“THIRD”。 9. 下列程序段的输出结果是_fgh____。 *(c+1)为c[1],所以i*(c+1)+2指向字符SECOND中的C. 参考第8

char *st[ ]={\ 题的解释

printf(\参考第8题的解释。*(st+2)等价于st[2]。 10. 下列代码段的输出为_FOUR, P____。 因为*优先级高于+,所以**st+1等价于st[0][0]+1即,’O’+1,

char *st[ ]={\即’P’ printf(\

P指向a+1,所以*p为a[1]。**p为a[1]所指向的字符串的第一个11. 下列代码段的输出__45,3___。

字符,即’4’。所以**p-1为’3’ char *a[]={“678”,”45”},**p=a+1;

printf(“%s,%c”,*p,**p-1);

a[0]指向第0行。a[1]指向第1行,即元素3的位置。

12. 对于数组a,*(a[1]+1)的值为__4___。

那么a[1]+1指向元素3的后面的一个位置,即4的位置。

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

13. 对于以下递归函数f,调用 f (3) 的返回值是__-17___。 f (int n)

{ return ((n>0) ? 2*f(n-1)+f(n-2) : -1); }

f(-1) f(0) f(1) f(2) f(3) -1 -1 -3 -7 -17

14. 下列代码段将会打印出__4___。 初始化:k为0, int i; 调用f(2):k从0变到1,函数返回2+0=2 int f(int x) 调用f(3):k从1变到2,函数返回3+1=4 { static int k = 0; x+=k++; return x; } i=f(2); i=f(3); printf(“%d”,i);

15. 下列代码段将会打印出___18__。 f(0) f(1) f(2) f(3) int f(int x) 3 3 6 18 { return ((x>0)? x*f(x-1):3); } f(f(1)) = f(3) = 18 printf(“%d”,f(f(1)));

16. 用 typedef 写出类型定义 typedef int * AIP[10]; ,使得AIP表示含有10个元素

的整型指针数组类型。 typedef TOld TNew[10]; 定义了一个新的类型,名称为TNew,它是一个长度为10的数组,其中每一个元素类型为Told。对于该题,Told为int*,TNew为AIP。 个新的类型的指针。该语句等价于: typedef TOld TNew[10]; typedef TNew* PNew; 而typedef TOld (*PNew)[10]; 则定义了一17. 假定可执行程序文件名字为prog,则运行命令:prog hello world后的输出为_____。

#include

输出为:prog#world#

int main(int argc, char *argv[]) {

printf(\

argc为3,

return 0;

argv[0],[1],[2]分别为“prog”, “hello”和”world”

18. 下列程序段的输出是___-3_______。

展开宏FB(k+1,k-1)后得到: #define FB(a,b) (a*b+1)

(k+1*k-1+1) int k=3;

所以该语句为:k=(k+1*k-1+1)-9 = -3 k= FB(k+1,k-1)-9;

printf(\

三、 阅读理解题

19. 下列程序的输出为_6#18#____。 a[3][3]的元素排列为: #include 1 2 3 main() 4 5 6 { int s=0,i,a[3][3]={1,2,3,4,5,6,7,8,9}; 7 8 9 for(i=0; i<3; i++) *(*a+i) 等价于*(a[0]+i)等价于a[0][i]。

s += a[0][i] s+= *(*a+i); 所以第一个for循环后,s为1+2+3=6 printf(\ **(a+i)等价于*a[i]等价于a[i][0]; for(i=0; i<3; i++) 所以第二个for循环后,s为6+1+4+7=18

s += a[i][0] s+= **(a+i); printf(\ }

20. 下列程序的输出是__5___。 f(0) f(1) f(2) f(3) f(4) f(5)

int f (int x) 1 1 2 3 5 7 {

if(x<=1) return 1;

else return f(x-1)+f(x-2); main() main() } k=1 j=3 void main( ) af(1); 输出3 { printf(\}

21. 下列程序的输出是__3#3#3#3___。

af(1) af(1) #include

j=2 j=3 int main (void)

af(2); 输出3#。返回3 { int k = 1; int a_function ( int j ); k = a_function ( k ); af(2) af(2) printf ( \j=3 j=3 } af(3); 输出3#。返回3 int a_function ( int j ) { if ( j < 3 ) { af(3) 输出 3#,返回3 22.

j++; j = a_function ( j ); } printf ( \ return ( j ); }

下列程序的输出为__a = 1, b = 4 ___。 #include

void melon (int g, int * h); int main (void) { int a = 1, b = 2; melon(a, &b)执行后,a的值不变, melon ( a, &b ); b的值增加了a+1,即b变为4。 printf ( \ a, b ); }

void melon (int b, int * c) { b++;

*c = *c + b; }

23. 下列程序的输出为_225____。

#include #include int prime(int n) {

Prime(n) 判断n是否为素数,是返回1,否

int i,m;

则返回0

if(n==1) return 0; m=sqrt(n);

for(i=2;i<=m;i++) if(n%i==0) break; return i>m; }

void main() { int num,i;

计算并输出num所有的素数因子

num=20;

num =20, i=2, print 2

for(i=2;i<=num;i++){

num =10,i=2, print 2

while(prime(i)&&(num%i==0)){

num =5,i=2 跳出while

printf(\

num =5,i=3,

num/=i;

num =5,i=4,

}

num =5,i=5,print 5

}

num =1,i=5,跳出循环

}

24. 下列程序的输出为__1,2___。 #include

函数f里交换指针, void f(int *x,int *y)

{ int *p; 但是交换的结果并不能返回给调用者, p=x; x=y; y=p; 也就是说,在调用者看来,都是无用功,等于啥

也没做。

}

void main() { int x=1, y=2; f(&y, &x);

printf(\

}

25. 若输入this is a test.,则下列程序的输出_This Is A Test.____。

#include #define TRUE 1 #define FALSE 0

int change(char *c,int status); void main() {

int flag=TRUE;

char ch;

do{

ch=getchar();

flag=change(&ch,flag); putchar(ch);

} while(ch!=’.’); printf(“\\n”); }

int change(char *c,int status) Status的意义是:是否要求变成大写字母 {

if(*c==’ ‘) return TRUE;

if(status&&*c<=’z’&&*c>=’a’) *c+=’A’-‘a’; 碰到空格了,后面的第一个字符要求大写

也就是单词的第一个字母大写 return FALSE;

}

26. 下列程序的输出为__5#0#___。

# include

int f(int m)

{

static int k=0; 执行f(4)时,m=4。执行后,static int k变成了k=5,函数返回5。

int s=0; 所以main中s=5。 for(; k<=m; k++) s++; 再执行f(2)时, m=2,k=5,所以f返回0。 return s; 所以输出为5#0#

}

void main( ) {

int s=1; s=f(4);

printf(\

}

27. 下列程序的输出为_-1#-1#-2#____。

#include

主题作业三函数与结构

主题作业三:函数与结构数组变量名也是指针一.单选题访问结构指针所指向的结构的成员变量时用->,访问结构的成1.针对如下定义,合法的表达式是__C___。员变量时用.structnode{成员s是数组,不能直接赋值(但是初始化数组的时候可以,例chars[10];如chars[10]=”abc”;
推荐度:
点击下载文档文档为doc格式
12e5s4lde548fsc2a7r62i4cx3q5al00q8o
领取福利

微信扫码领取福利

微信扫码分享