程序01
实现功能:比较两个数组相同元素的个数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 //#define min(a,b) (a>b)?b:a 3 char i; 4 int find(int s[], int m, int n) 5 { 6 int j,c=0,t[100]; 7 // j = min(m, n); 8 printf("输入数组t:"); 9 for (i = 0; i < n; i++) 10 { 11 scanf("%d",&t[i]); 12 for (j = 0; j < m; j++) 13 { 14 if (t[i] == s[j]) 15 { 16 c++; 17 } 18 } 19 } 20 return c; 21 22 } 23 int main(void) 24 { 25 int s[100]; 26 int C; 27 int m,n; 28 printf("输入m:"); 29 scanf("%d", &m); 30 printf("输入S:"); 31 for (i = 0; i < m; i++) 32 { 33 scanf("%d", &s[i]); 34 } 35 printf("输入n:"); 36 scanf("%d",&n); 37 C=find(s, m, n); 38 printf("输出C=%d ", C); 39 return 0; 40 }
程序02
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int i, a[] = {3,4,5,6,7,3,7,4,4,6}; for (i = 0; i <= 9; i++) { printf("%d ", a[i]); } int i, a[] = {3,4,5,6,7,3,7,4,4,6}; for (i = 0; i <= 9; i++) { printf("%d ", *(a+i)); } 它的结果和作用完全一样
int i, *pa, a[] = {3,4,5,6,7,3,7,4,4,6}pa = a; for (i = 0; i <= 9; i++) { printf("%d ", *pa); pa++; /*注意这里,指针值被修改*/ }
你把循环体{}中的 pa改成 a 试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代
码不同的是,指针 pa 在整个循环中,其值是不断递增的,即指针值被修改了。
数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++。
程序03
求最大字符串
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <stdio.h> /*使用库函数printf和gets*/ 2 #include <string.h>/*使用库函数strcmp*/ 3 #include <malloc.h>/*使用库函数malloc和free*/ 4 #define N 5 5 int main() 6 { 7 char *str[N]; 8 int index, i; 9 printf("请输入%d个字符串,每个字符串以回车结束: ", N); 10 for (i = 0; i < N; i++) 11 { 12 str[i] = (char *)malloc(80); 13 gets(str[i]); 14 } 15 index = 0; 16 for (i = 1; i < N; i++) 17 { 18 if (strcmp(str[i], str[index]) > 0) 19 index = i; 20 } 21 printf("最大的字符串是%s ", str[index]); 22 for (i = 0; i < N; i++) 23 { 24 free(str[i]); 25 } 26 27 return 0; 28 }
程序04
求平面上的距离
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<math.h> 3 struct point 4 { 5 double x; 6 double y; 7 }; 8 double distance(struct point p1,struct point p2) 9 { 10 double x, y, d; 11 x = p2.x - p1.x; 12 y = p2.y - p1.y; 13 d = sqrt(x*x+y*y); 14 return d; 15 } 16 int main(void) 17 { 18 struct point pa, pb; 19 printf("Enter pa:"); 20 scanf("%lf%lf",&pa.x,&pa.y); 21 printf("Enter pb:"); 22 scanf("%lf%lf",&pb.x,&pb.y); 23 printf("distance:%lf ",distance(pa,pb)); 24 }
程序05
静态链表:用完后不能释放。大多数用动态链表。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //建立一个存储三个学生信息的简单链表 2 #include<stdio.h> 3 #define NULL 0 4 struct Student 5 { 6 int iNumber;//学号 7 float score;//成绩 8 struct Student *pNext;//指向下一个节点的指针 9 }; 10 int main() 11 { 12 struct Student stu1,stu2,stu3,*head,*p; 13 stu1.iNumber=101;stu1.score=97; 14 stu2.iNumber=102;stu2.score=89.5; 15 stu3.iNumber=103;stu3.score=78; 16 head=&stu1;//指定头结点 17 p=head;//给指针变量赋值 18 stu1.pNext=&stu2; 19 stu2.pNext=&stu3; 20 stu3.pNext=NULL; 21 do{ 22 printf("%d%5.1f ",p->iNumber,p->score);//输出当前p指向的结点的数据 23 p=p->pNext;//p指向下一个结点 24 }while(p!=NULL); 25 return 0; 26 }