下载APP
【简答题】
实验编号: C05200C07 实验名称:指针 实验日期: 201 8.11 实验地址:格致楼北 4 楼 实验教师: C 语言课题组 实验内容提要:指针变量的定义和使用;数组指针使用;字符串指针;指针数组 具体内容: 1. 写出下列程序的运行结果: 关于互换两个整型变量的值的几种情况 1 #include
void swap( int *a, int *b) { int t; t=*a; *a=*b; *b=t; } void main() { int x = 3, y = 5, *p = &x, *q = &y; printf("before swapping:"); printf(“x=%d, y=%d\n”, x, y) ; swap(p, q); printf("after swapping:"); printf("x=%d, y=%d\n", x, y); } 分析 : 此为 正确的交换方法 。 注意函数中 t 为普通变量,并非指针变量,指针变量的值传递, 实质上传递的是指针变量所指向的目标变量的地址。这种情况下,被调函数中形参对目标变量 的改变肯定会影响到实参,因为实参和形参现在都指向同一个目标变量。 2 #include
void swap ( int *a, int *b) { int *t; t = a; a = b; b = t; } void main ( ) { int x = 3, y = 5, *p = &x, *q = &y; swap (p, q); printf ( “ %d%d\n” , *p, *q); } 分析 :虽然用指针作函数参数,但未能达到交换的目的,原因:函数 swap 的作用是 交换两个指针变量 a , b 的指向。但要注意的是,两个指针变量 a , b 为形式参数,调用 结束后 a , b 即被释放,形式参数的变化不会影响到实参,指针变量 p , q 的指向并没有交换。 3(此方法不需上机操作) void swap( int *a, int *b) { int *t; *t =*a; *a =*b; *b =*t; } 分析 :函数中指针变量 t 没有初始赋值,内部是一个随机地址,“ *t =*a; ”相当于 给指针变量直接赋予一个整数值,这样写 swap 函数不仅不能完成交换,反而会引起严重后果 4 void swap( int x, int y) { int t; t=x; x=y; y=t; } 分析 :不用地址量作参数,也不能实现交换。原因是普通变量的“单向值传递”。 形参的改变不会对实参造成任何影响 结合以上知识,请写出 以下程序的运行结果: void fun ( char *c , int d) { *c = *c + 1; d = d + 1; printf ( “ %c , %c ” , *c , d); } main ( ) { char a = ‘A’ , b = ‘a’; fun (&b , a); printf ( “ %c , %c\n” , a , b); } 2. 有以下程序,请分别写出程序运行后的输出结果: (1) main ( ) { int a[] = {2 , 4 , 6 , 8 , 10} , y = 0 , x , *p; p = &a[1]; for (x = 1; x < 3; x ++ ) y + = p[x]; printf ( “ %d\n , ” , y); } (2) main ( ) { int a[10] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } , *p = &a[3] , *q = p + 2; printf ( “ %d\n” , *p + *q); } (3) main ( ) { char a[] = “ 123456789 ” , *p; int i = 0; p = a; while (*p) { if (i%2 = = 0) *p = '*'; p ++ ; i ++ ; } puts (a); } 3. 下面这段程序能输出数组 a 的 10 个元素值吗? 请分析写出能或不能的原因。 main() { int i,a[10],*p=a; for(;p
='a'&&*p<='z') {a[i]=*p;i++;} } a[i]='\0'; puts(a); } 7. 以下程序的输出结果为: #include "stdio.h" main() { char *p="abcdefghijklmnopq"; while(*(p++)!='e') ; /* 此处为空语句,当 p 指向字符 ’e’ 时, while 的循环条件不成立,但 p 已经进行了自加,指向了字符 ’f’*/ printf("%c\n",*p); } 8. 编写阶乘函数,并在主函数调用验证 , 不用 return 语句 void jc(long *p, int n) 9. 编写函数,排好序的数组,插入一个数据,仍然是排序的数据。在主函数调用验证。 10. 用指针编写函数,验证回文。例如, abcdcba, 是回文。在主函数调用验证。
题目标签:
整型变量
阶乘函数
函数调用
举报
如何制作自己的在线小题库
参考答案:
参考解析:
刷刷题刷刷变学霸
举一反三
【单选题】若有下面的函数调用: fun (a+ b,3,max(n-1,b)) 则fun的实参个数是( )。
A.
3
B.
4
C.
5
D.
6
查看完整题目与答案
【简答题】函数调用语句:fun( ( exp1, exp2 ), ( exp1, exp2, exp3) ); 含有的实参个数是( )
查看完整题目与答案
【简答题】若a是整型变量,则表达式(a=4*5,a*2),a+6的值为____.
查看完整题目与答案
【单选题】若用变量的地址作为函数调用的实参,则函数定义中的形参可以为【 】。
A.
任意类型的普通变量
B.
任意类型的指针
C.
与变量同类型的普通变量
D.
与变量同类型的指针
查看完整题目与答案
【单选题】设整型变量a为5,使b不为2的表达式是( )。
A.
b=a/2
B.
b=6-(--a)
C.
b=a%2
D.
b=a>32:1
查看完整题目与答案
【单选题】设c1. c2均是char类型变量,则以下不正确的函数调用为______。
A.
scanf("c1=%cc2=%c",&c1,&c2);
B.
getchar()
C.
putchar(c2)
D.
putchar(c1,c2)
查看完整题目与答案
【单选题】若有下面的函数调用fun(a+b,3,max(n-1,b)则fun的实参个数是【 】
A.
3
B.
4
C.
5
D.
6
查看完整题目与答案
【单选题】设整型变量a为5,使b不为2的表达式是( )。
A.
b=a/2
B.
b=6-(--a)
C.
b=a%2
D.
b=a>3?2:1
查看完整题目与答案
【单选题】在函数调用中,引用调用方式将()下面所定义的函数foo为值调用方式,函数g()的第一个参数采用值调用、第二个参数采用引用调用方式传递数据。若有表达式y=foo(2),则foo调用执行之后,y被赋值为(请作答此空)。
A.
5
B.
6
C.
7
D.
8
查看完整题目与答案
【单选题】设整型变量 i 值为 5 ,执行完 j= i-- 后, j 的值是( )
A.
5
B.
4
C.
6
D.
3
查看完整题目与答案