教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 基础教育 >

C语言练习题(带详解答案)(12)

来源:网络收集 时间:2026-08-12
导读: 7. #include unsigned fun6(unsigned num) { unsigned k=1; do { k*=num; num/=10; }while(num); return k; } main() { unsigned n=26; printf(?%d\\n?,fun6(n)); } 运行结果为:12 程序首先执行main函数 执行print

7.

#include

unsigned fun6(unsigned num) { unsigned k=1;

do

{ k*=num; 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,即k=k*(num)=1*(26)=6

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

while后面循环条件为num,此时num为2,是非0值,即表示循环条件成立, 继续执行循环体。此时k为6 第2次循环

执行k*=num,即k=k*(num)=6*(2)=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

int max(int x, int y); main()

{ int a,b,c; a=7;b=8; c=max(a,b);

printf(\

}

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 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 main ( )

{ int a[]={1, 2, 3, 4, 5} ; int x, y, *p; p=a;

x=*(p+2);

printf(\:%d \\n\; }

运行结果为: 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 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

5.

#include main( )

{ int a[ ]={1, 2, 3, 4, 5, 6}; int x, y, *p; p = &a[0]; x = *(p+2); y = *(p+4);

printf(?*p=%d, x=%d, y=%d\\n?, *p, x, y); }

运行结果为: *p=1, x=3, y=5

首先定义一个整型数组a,并对a进行初始化; 然后定义整型变量x,y,整型指针变量p; 再将数组元素a[0]的地址赋给p。

执行x=*(p+2);p+2表示以p当前所指向的位置起始,之后第2个元素的地址,即a[2]的地址。*(p+2)则表示该地址内所存放的内容,即a[2]的值3,然后再把3赋给x 执行y = *(p+4); p+4表示以p当前所指向的位置起始,之后第4个元素的地址,即a[4]的地址。*(p+4)则表示该地址内所存放的内容,即a[4]的值5,然后再把5赋给y 执行printf语句,先输出表达式*p的值。此时*p表示的是p所指向变量的内容,即a[0]的值1。再输x的值3。再输出y的值5。

结构体 1.

#include struct st { int x; int y;

} a[2]={5, 7, 2, 9} ; main() {

printf(\}

运行结果是: 14

首先是定义结构体st,st中共有两个整型成员x,y。

然后定义一个st类型的数组a,a的长度为2,即数组中含有两个st类型的元素,分别是a[0]和a[1]. 对a进行初始化,此题是按照储存顺序进行初始化,即将5赋给a[0]中的x(即a[0].x=5); 将7赋给a[0]中的y(即a[0].y=7); 将2赋给a[1]中的x(即a[1].x=2); 将9赋给a[1]中的y(即a[1].y=9);

执行main函数,输出表达式a[0].y*a [1].x的值,即7*2的值

5 a[0].x a[0] 7 a[0].y 2 a[1].x a[1] 9 a[1].y 2. #include main( )

{struct stu {int num;

char a[5]; float score;

}m={1234,?wang?,89.5}; printf(?%d,%s,%f?,m.num,m.a,m.score); }

运行结果是: 1234,wang,89.5 3.

#include struct cmplx { int x; int y;

} cnum[2]={1, 3, 2, 7}; main( ) {

printf(?%d\\n?, cnum[0].y * cnum[1].x ); }

运行结果是:6 与第一题解法同

4.

#include struct abc

{ int a, b, c; }; main()

{ struct abc s[2]={{1,2,3},{4,5,6}}; int t;

t=s[0].a+s[1].b; printf(\}

运行结果是:6

与第一题解法同

…… 此处隐藏:1673字,全部文档内容请下载后查看。喜欢就下载吧 ……
C语言练习题(带详解答案)(12).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/563946.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)