零基础学数据结构(源码) 陈锐 机械工业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include /*包含输入和输出头文件*/
#define N 50
int NonRecSum(int a[],int n); /*函数声明*/
void main()
{
int i,n,a[N];
printf("请输入一个50以内的自然数:");
scanf("%d",&n);
for(i=0;ia[i]=i+1;
printf("前%d个自然数的和为:%d\n",n,NonRecSum(a,n));
}
int NonRecSum(int a[],int n)
/*非递归求数组a前n个数的和*/
{
int i,sum=0;
for(i=0;isum+=i;
return sum;
}



#include /*包含输入输出*/
void main()
{
int a=10,b=20;
int *aPtr,*bPtr; /*指针变量声明*/
aPtr=&a; /*指针变量指向变量q*/
bPtr=&b;
/*打印变量q的地址和qPtr的内容*/
printf("q的地址是:%p\nqPtr中的内容是:%p\n",&q,qPtr);
/*打印q的值和qPtr指向变量的内容*/
printf("q的值是:%d\n*qPtr的值是:%d\n",q,*qPtr);
/*运算符'&'和'*'是互逆的*/
printf("&*qPtr=%p,*&qPtr=%p\n因此有&*qPtr=*&qPtr\n",&*qPtr,*&qPtr);
}

#include /*包含输入输出*/
void main()
{
int a[5]={10,20,30,40,50};
int *aPtr,i; /*指针变量声明*/
aPtr=&a[0]; /*指针变量指向变量q*/

for(i=0;i<5;i++) /*通过数组下标引用元素*/
printf("a[%d]=%d\n",i,a[i]);
for(i=0;i<5;i++) /*通过数组名引用元素*/
printf("*(a+%d)=%d\n",i,*(a+i));
for(i=0;i<5;i++) /*通过指针变量下标引用元素*/
printf("aPtr[%d]=%d\n",i,aPtr[i]);
for(aPtr=a,i=0;aPtrprintf("*(aPtr+%d)=%d\n",i,*aPtr);
}

#include /*包含输入输出*/
void main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p)[4]; /*数组指针指针变量声明*/
int row,col;
p=a; /*指针p指向数组元素为4的数组*/
/*打印输出数组指针p指向的数组的值*/
for(row=0;row<3;row++)
{
for(col=0;col<4;col++)
printf("a[%d,%d]=%-4d",row,col,*(*(p+row)+col));
printf("\n");
}
/*通过改变指针p修改数组a的行地址,改变col的值修改数组a的列地址*/
for(p=a,row=0;p{
for(col=0;col<4;col++)
printf("(*p[%d])[%d]=%p",row,col,((*p)+col));
printf("\n");
}
}

#include /*包含输入输出*/
void main()
{
/*指针数组定义*/
char *book[4]={"C Programming Language","Assembly Language","Java Language","Natural Language"};
int n=4; /*指针数组元素的个数*/
int row;
char *arrayPtr;
/*第一种方法输出:通过数组名输出*/
printf("第一种方法输出:通过指针数组中的各个数组名输出:\n");
for(row=0;rowprintf("第%d个字符串:%s\n",row+1,book[row]);
/*第二种方法输出:通过指向数组的指针输出*/
printf("第二种方法输出:通过指向各个数组的指针输出:\n");
for(arrayPtr=book[0],row=0;row

ok[row])
{
printf("第%d个字符串:%s\n",row+1,arrayPtr);
row++;
}
}

#include /*包含输入输出*/
int Sum(int a,int b); /*求和函数声明*/
void main()
{
int a,b;
int (*fun)(int,int); /*声明一个函数指针*/
printf("请输入两个数:");
scanf("%d,%d",&a,&b);
/*第一种调用函数的方法:函数名调用求和函数*/
printf("第一种调用函数的方法:函数名调用求和函数:\n");
printf("%d+%d=%d\n",a,b,Sum(a,b)); /*通过函数名调用*/
/*第二种调用函数的方法:函数指针调用求和函数*/
fun=Sum; /*函数指针指向求和函数*/
printf("第二种调用函数的方法:函数指针调用求和函数:\n");
printf("%d+%d=%d\n",a,b,(*fun)(a,b));/*通过函数指针调用函数*/
}
int Sum(int m,int n) /*求和函数实现*/
{
return m+n;
}
#include /*包含输入输出函数*/
#define N 10 /*数组元素个数*/
int Ascending(int a,int b); /*是否进行升序排列*/
int Descending(int a,int b); /*是否进行降序排列*/
void swap(int *,int *); /*交换数据*/
void BubbleSort(int a[],int n,int (*compare)(int,int));/*排序,通过函数指针作为参数调用*/
void Display(int a[],int n); /*输出数组元素*/
void main()
{
int a[N]={12,34,21,46,89,54,26,8,6,17};
int flag;
while(1)
{
printf("输入1:从小到大排序.\n请输入2:从大到小排列.\n输入3:退出!\n");
scanf("%d",&flag);
switch(flag)
{
case 1:
printf("排序前的数据为:");
Display(a,N);
BubbleSort(a,N,Ascending); /*从小到大排序,将函数作为参数传递*/
printf("从小到大排列后的数据为:");
Display(a,N);
break;
case 2:
printf("排序前的数据为:");
Display(a,N);
BubbleSort(a,N,Descending); /*从大到小排序,将函数作为参数传递*/
printf("从大到小排列后的数据为:");
Display(a,N);
break;
case 3:
return;break;
default:
printf("输入数据不合法,请重新输入.\n");break;
}
}

}
/*冒泡排序,将函数作为参数传递,判断是从小到大还是从大到小排序*/
void BubbleSort(int a[],int n,int(*compare)(int,int))
{
int i,j;
for(i=0;ifor(j=0;jif((*compare)(a[j],a[j+1]))
swap(&a[j],&a[j+1]);

}
/*交换数组的元素*/
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
/*判断相邻数据大小,如果前者大,升序排列需要交换*/
int Ascending(int a,int b)
{
if(a>b)
return 1;
else
return 0;

}
/*判断相邻数据大小,如果前者大,降序排列需要交换*/
int Descending(int a,int b)
{
if(areturn 1;
else
return 0;
}
/*输出数组元素*/
void Display(int a[],int n)
{
int i;
for(i=0;iprintf("%4d",a[i]);
printf("\n");
}
#include /*包含输入输出头文件*/
void f1(); /*函数f1声明*/
void f2(); /*

函数f2声明*/
void f3(); /*函数f3声明*/
void main()
{
void (*f[3])()={f1,f2,f3}; /*指向函数的指针数组的声明*/
int flag;
printf("请输入一个1,2,或者3. 输入0退出.\n");
scanf("%d",&flag);
while(flag)
{
if(flag==1||flag==2||flag==3)
{
f[flag-1](flag-1); /*通过函数指针调用数组中的函数*/
printf("请输入一个1,2,或者3.输入0退出.\n");
scanf("%d",&flag);
}
else
{
printf("请输入一个合法的数(1-3),0退出.\n");
scanf("%d",&flag);
}
}
printf("程序退出.\n");
}
void f1() /*函数f1的定义*/
{
printf("函数f1被调用!\n"); /*函数f2的定义*/
}
void f2()
{
printf("函数f2被调用!\n"); /*函数f3的定义*/
}
void f3()
{
printf("函数f3被调用!\n");
}


#include
int *Address(int (*ptr)[4],int n);
void Display(int a[][4],int n,int *p);
void main()
{
int row,n=4;
int *p;
int score[3][4]={{76,87,85,81},{67,61,71,60},{81,89,82,78}};
printf("请输入学生的编号(1或2或3).输入0退出程序.\n");
scanf("%d",&row);
while(row)
{
if(row==1||row==2||row==3)
{
printf("第%d个学生的成绩4门课的成绩是:\n",row);
p=Address(score,row-1);
Display(score,n,p);
printf("请输入学生的编号(1或2或3).输入0退出程序.\n");
scanf("%d",&row);
}
else
{
printf("输入不合法,重新输入(1或2或3).输入0退出程序.\n");
scanf("%d",&row);
}
}
}
int *Address(int (*ptrScore)[4],int n)
{
int *p;
p=*(ptrScore+n);
return p;
}
void Display(int a[][4],int n,int *p)
{
int i;
for(i=0;iprintf("%4d",*(p+i));
printf("\n");
}

#include /*包含输入输出函数*/
int Max(int x,int y); /*求两个整数的较大者的函数声明*/
void main()
{
int a,b,s;
scanf("%d,%d",&a,&b);
s=Max(a,b); /*调用求两个数中的较大者的函数*/
printf("两个整数%d和%d的较大者为:%d\n",a,b,s);
}
int Max(int x,int y)
/*求两个整数较大者的实现函数,并将较大的值返回*/
{
int z;
if(x>y)
z=x;
else
z=y;
return z;
}



#include /*包含输入输出函数*/
void Swap(int *x,int *y); /*交换两个数的函数声明*/
void main()
{
int a,b;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
if(aSwap(&a,&b); /*两个数中如果前者小,则交换两个值,使其较大的保存在a中较小保存在b中*/
printf("两个整数%d和%d的较大者为:%d,较小者为:%d\n",a,b,a,b);
}
void Swap(int *x,int *y)
/*交换两个数,较大的一个保存在*x中,较小的一个保存在*y*/
{
int z;
z=*x;
*x=*y;
*y=z;
}

相关文档
最新文档