冒泡法进行排序
#include<stdio.h> void sort(int a[],int n); int main() { int n,a[8]; int i; printf("Enter n(n<=8):"); scanf("%d",&n); printf("Enter a[%d]:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,n); printf("After sorted,a[%d]=",n); for(i=0;i<n;i++) printf("%3d",a[i]); return 0; } void sort(int a[],int n) { int i,j,t; for(i=1;i<n;i++) for(j=0;j<n-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } }
在数组中查找指定函数
#include<stdio.h> int search(int list[],int n,int x); int main() { int n,x,list[10]; int i; printf("Input n:"); scanf("%d",&n); printf("Input %d integers:",n); for(i=0;i<n;i++) scanf("%d",&list[i]); printf("Input x:"); scanf("%d",&x); search(list,n,x); if(search(list,n,x)!=-1) printf("mid=%d ",search(list,n,x)); else printf("-1 "); return 0; } int search(int list[],int n,int x) { int i; for(i=0;i<n;i++) { if(x==list[i]) return i; else return -1; } }
报数游戏
#include<stdio.h> int main(void) { int count,i,m,n,no; int num[50]; int *p; printf("enter n,m:"); scanf("%d%d",&n,&m); for(i=0;i<n;i++) num[i]=i+1; p=num; count=no=0; while(no<n-1) { if(*p!=0)count++; if(count==m) { no++; printf("退出的人%d:%d ",no,*p); *p=0; count=0; } p++; if(p==num+n) p=num; } p=num; while(*p==0) p++; printf("最后一个人:%d ",*p); }
一、知识点
1.指针、数组和地址间的关系
·数组的基地址是在内存中存储数组的起始位置,它是数组中第一个元素(下标为0)的地址,因此数组名本身是一个地址即指针值。
·指针是以地址作为值的变量,而数组名的值是一个特殊的固定地址,可以把它看作是常量指针。
P=a; 等价于 P=&a[0];
p=a+1; 等价于 p=&a[1];
注:P=a+1是合法的,但a=a+1就是非法的。
·数组名可以使用指针形式,而指针变量也可以转换为数组形式。
·如果变量p是指向某个指定类型变量的指针,那么表达式p+1代表访问该类型的下一个变量的内存地址。(像p+i、p++、p+=i这样的表达式都是有意义的)
·两个相同类型的指针相减,表示它们之间相隔的数组元素数目。
注:在C语言中,指针的算术运算只包括两个相同类型的指针相减以及指针加上或减去一个整数,其他的操作如指针相加、相乘和相除,或指针加上和减去一个浮点数都是非法的。
·两个相同类型指针还可以使用关系运算符比较大小。
2.数组名作为函数的参数
使用数组b作为实参调用sum函数的方法
调用 |
被计算和被返回的内容 |
Sum(b,100) |
b[0]+b[1]+...+b[99] |
Sum(b,88) |
b[0]+b[1]+...+b[87] |
Sum(&b[7],k-7) |
b[7]+b[8]+...+b[k-1] |
Sum(b+7,2*k) |
b[7]+b[8]+...+b[2*k+6] |
二、实验过程中遇到的问题及解决方法
对于指针变量的赋值等应用出现错误,导致程序出现错误。(加深对指针变量的学习理解,多做练习)
三、实验心得体会
学习的内容越来越难,综合应用能力要求越来越高,我感觉做起来比较吃力,需要课后多加巩固学习,希望老师能放慢点讲课节奏,给我们一些穿插复习的内容。