实验十三 预处理命令和指针(1)
班级______________姓名___________指导老师_____________成绩___________
第_____________机房___________号机器 时间:________________________
实验目的:1,学会使用宏定义和文件包含。
2,重点掌握指针变量的定义和赋值。
3,掌握指针变量的引用。
4,初步掌握指向数组的指针的定义和使用。
实验要求:每次实验前,学生要先预习实验内容,写出分析结果或程序,经实验指导老师检查后,上机运行、调试程序,得出最终正确结果。
实 验 内 容
一、读程序
要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。
1,
#include <stdio.h>
#define ADD(x) x+x
main()
{
int m=1,n =2,k=3;
int sum = ADD(m+n)* k ;
printf(“sum = %d\n”,sum );
}
分析结果
运行结果
2,
#include <stdio.h>
#define AREA(r) ( r ) * ( r )
#define PI 3.14159
main( )
{
int x=1,y=2,s;
s= AREA(x+y)* PI;
printf(“s = %d\n”,s);
}
C语言程序设计上机指导与同步训练
·70·
·70·
分析结果
运行结果
3,
main()
{
int *p,a =10,b =1
p=&a;
a=*p+b;
printf(“a=%d,p=%d \n”,a,*p);
}
分析结果
运行结果
4,
main()
{ int a,b,k =5,m=4 ;
int * p1 =&k,* p2=&m;
a =p1==&m;
b=(-*p1)/(*p2)+7;
printf(“a = %d\n”,a);
printf(“b = %d\n”,b);
}
分析结果
运行结果
5,
int sub (int*p)
main()
{
int i,k;
for( i=0;i<4;i++)
{ k= sub(&i);
printf(“k= %d\n”,k);
}
}
int sub(int *p)
{
static int t=0;
t=*p +t ;
}
分析结果
运行结果
第一部分 C语言程序设计上机指导
·71·
·71·
6,
#include <stdio.h>
main()
{
int a[ ]={1,2,3,4,5,6};
int *p,i ;
p=a;
*(p+3)+=2;
printf(“n1=%d,n2=%d \n”,*p,*(p+3));
}
分析结果
运行结果
7,
#include <stdio.h>
mian()
{
int a[ ]={1,3,5,7,9};
int *p=a;
printf(“%d\n”,(*p++));
printf(“%d\n”,(* ++p));
printf(“%d\n”,(* ++p)++);
}
分析结果
运行结果
二、完成程序
要求:根据要求,分析给出的上下语句,填写程序。
1,设有以下程序,为使之正确运行,请在_______上填写正确内容。
__________________________
__________________________
#include <stdio.h>
main()
{ int x =2,y=4,z;
z = pow(x,y) ;
printf(“z=%d”,z);
char s1[20]=,2008”;
char s2[ ]=,Beijing”;
strcat( s1,s2);
printf(” %s/n”,s1);
}
2,用带参数的宏实现变量值的输入与输出,请在_______上填写正确内容。
C语言程序设计上机指导与同步训练
·72·
·72·
#include <stdio.h>
#define SC(a) ___________________ //scanf(“%c”,&a)
#define PR(b) ___________________
main( )
{
char ch ;
SC(ch);
if (ch>=‘a’ && ch<=‘z’ )
ch=ch+32;
PR(ch);
printf(“\n” );
}
3,以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出,请在_______
上填写正确内容。
#include,stdio.h”
main()
{
int *pa,*pb,*pc ;
int num,a,b,c ;
pa =&a ;pb=&b ;pc=&c ;
scanf(“%d %d %d\n”,pa,pb,pc);
printf(“%d,%d,%d\n”,*pa,*pb,*pc);
num=*pa;
if ( *pa > *pb ) ________________;
if ( num > *pc ) _________________;
printf(,Min= %d\n”,num);
}
4,以下程序通过指针实现求数组a中各元素的积,请在____________填写正确内容。
#include <stdio.h>
main()
{
int a[6]={1,2,3,4,5,6};
int s,i,*p ;
s=1;
p=a;
for (i=0;i<6;i++)
_____________________;// s *= *(p+i);
printf(“s=%d\n”,s);
}
三、调试程序
要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果如何?上机调试之。
第一部分 C语言程序设计上机指导
·73·
·73·
1,
#include <stdio.h>
main()
{ int *p,*q ;
int a,b ;
printf(“Input a,b”);
scanf(“%d,%d”,p,q);
printf(“%d,%d\n”,a,b);
printf(“%d,%d\n”,*p,*b);
}
运行结果,正确
错误所在,错误
应改为,
2,
#include <stdio.h>
main()
{ int *p,*q ;
int a,b ;
p = &a; q =&b
scanf(“%d,%d”,*p,*q);
printf(“%d,%d\n”,a,b);
printf(“%d,%d\n”,*p,*p);
}
运行结果,正确
错误所在,错误
应改为,
3,以下程序实现求数组中的元素的和。
#include <stdio.h>
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int sum,*p ;
sum=0;
p=&a;
while( p < p+10)
s + = *p;
printf(“sum=%d\n”,sum);
}
C语言程序设计上机指导与同步训练
·74·
·74·
运行结果,正确
错误所在,错误
应改为,
4,以下程序通过调用子函数实现两个整数的交换。
main()
{ int swap( int * ptr1,int *ptr2);
int x=5,y=7,*p1,p2 ;
p1=&x ; p2=&y
swap(p1,p2);
printf(“x=%d,y=%d\n”,x,y);
printf(“*p1=%d,*p2=%d\n”,*p1,*p2);
}
int swap( int * ptr1,int *ptr2)
{
int * p ;
p = ptr1;ptr1=ptr2 ;ptr2=p ;
}
运行结果,正确
错误所在,错误
应改为,
四、写程序
1,输入3个数a、b、c,要求按由大到小的顺序输出,用带参宏来实现,编程序。
2,输入30个学生C语言的成绩,然后按由高到低的顺序排序,通过指针实现。
3,一个已经按升序排列好的数组,其数组元素有 15 个,输入一个数,编程查找是否有该数,有,则显示其所在的位置,没有,则显示“No Found”,通过指针实现。