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。此时main将n中的26作为实参传递给func的num
程序开始转向执行func函数,此时func中的num为26
执行do-while语句
第1次循环
执行k*=num%10,即k=k*(num%10)=1*(26%10)=6
执行num/=10;即num=num/10=26/10=2
while后面循环条件为num,此时num为2,是非0值,即表示循环条件成立,
继续执行循环体。此时k为6
第2次循环
执行k*=num%10,即k=k*(num%10)=6*(2%10)=12
执行num/=10;即num=num/10=2/10=0
while后面循环条件为num,此时num为0,表示循环条件不成立,
结束循环
执行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
首先定义一个整型数组x,x的长度为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,并用字符串abcdefg对s进行初始化; 然后定义一个字符型指针变量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+1。p+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)!