自学内容网 自学内容网

C语言期末必练题目——part 6

7.

#include <stdio.h>

unsigned fun6(unsigned num)

 { unsigned k=1;

do

{ k*=num%10;

num/=10;

}while(num);

     return k;

}

main()

 { unsigned n=26;

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

 }

运行结果为12

程序首先执行main函数

执行printf(“%d\n”,fun6(n)); 即输出表达式func(6)的值,为了计算该表达式,需要调用

函数func。此时mainn中的26作为实参传递给funcnum

程序开始转向执行func函数,此时func中的num26

        执行do-while语句

1次循环

        执行k*=num%10,k=k*(num%10)=1*(26%10)=6

执行num/=10;num=num/10=26/10=2

while后面循环条件为num,此时num2,是非0值,即表示循环条件成立,

继续执行循环体。此时k6

2次循环

        执行k*=num%10,k=k*(num%10)=6*(2%10)=12

                执行num/=10;num=num/10=2/10=0

                while后面循环条件为num,此时num0,表示循环条件不成立,

                结束循环

        执行return k; 即返回至main函数中的被调用处

执行main函数

继续执行printf(“%d\n”,fun6(n)); 即输出12

8.

#include <stdio.h>

int max(int x, int y);

main()

{ int a,b,c;

a=7;b=8;

c=max(a,b);

printf("Max is %d",c);

}

max(int x, int y)

{ int z;

z=x>y? x : y;

return(z) ;

}

运行结果为:

Max is 8

指针

1.

# include < stdio .h >

main (  )

{ int  x[ ] = {10, 20, 30, 40, 50 };

int  *p ;

p=x;

printf ( “%d”, *(p+2 ) );

}                

运行结果为

30

首先定义一个整型数组xx的长度为5;然后定义一个指针变量p;p进行初始化,将数组x的地址赋给p。因此此时p中存放的数组x的首地址,即数组中第一个元素x[0]的地址。

然后执行printf语句,输出表达式*(p+2)的值。p+2表示以p当前指向的位置起始,之后第2个元素的地址,即a[2]的地址。*(p+2)则表示该地址内所存放的内容,即a[2]的值30,因此输出30

2.

#include <stdio.h>

main( )

{  char s[]=”abcdefg”;

  char *p;

  p=s;

  printf(“ch=%c\n”,*(p+5));

}

运行结果为

ch=f    

首先定义一个字符型数组s,并用字符串abcdefgs进行初始化; 然后定义一个字符型指针变量p; p进行初始化,将数组s的地址赋给p。因此此时p中存放的数组s的首地址,即数组中第一个元素s[0]的地址。

然后执行printf语句,输出表达式*(p+5)的值。p+5表示以p当前指向的位置起始,之后第5个元素的地址,即a[5]的地址。*(p+5)则表示该地址内所存放的内容,即a[5]的值f, 因此输出ch=f

3.

#include<stdio.h>

main ( )

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

int x, y, *p

p=a

x=*(p+2)

printf("%d%d \n", *p, x)

}

运行结果为:

1:3

首先定义一个整型数组a,并对a进行初始化; 然后定义整型变量x,y,整型指针变量p; 再将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中第一个元素a[0]的地址。执行x=*(p+2)p+2表示以p当前所指向的位置起始,之后第2个元素的地址,即a[2]的地址。*(p+2)则表示该地址内所存放的内容,即a[2]的值3,然后再把3赋给x

然后执行printf语句,先输出表达式*p的值。此时*p表示的是p所指向变量的内容,即a[0]的值1。再输出一个冒号。然后再输出x中的值3

4.

#include<stdio.h>

main()

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

p++;

 printf(“%d\n”,*(p+3));

}

运行结果为10

首先定义一个整型数组arr,并对arr进行初始化; 然后定义整型指针变量p; 再将数组arr的地址赋给p。因此此时p中存放的数组arr的首地址,即数组中第一个元素a[0]的地址。

执行p++,即p=p+1p+1表示以p当前所指向的位置起始,之后第1个元素的地址,即arr[1]的地址,然后再将arr[1]的地址赋给p,执行完此语句后,p不再指向arr[0],而是指向arr[1]

然后执行printf语句,输出表达式*(p+3)的值。p+3表示以p当前指向的位置起始(此时p指向arr[1]),之后第3个元素的地址,即arr[4]的地址。*(p+3)则表示该地址内所存放的内容,即arr[4]的值10, 因此输出10


原文地址:https://blog.csdn.net/2303_81838541/article/details/143660826

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!