logo - 刷刷题
下载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, 是回文。在主函数调用验证。

举报
参考答案:
参考解析:
.
刷刷题刷刷变学霸
举一反三

【单选题】若用变量的地址作为函数调用的实参,则函数定义中的形参可以为【 】。

A.
任意类型的普通变量
B.
任意类型的指针
C.
与变量同类型的普通变量
D.
与变量同类型的指针