/*1.一定要先理清思路,把算法想清楚,再开始*/#include<stdio.h>voidswap(int*,int*);intmain(){int n1,n2,n3;int*p1,*p2,*p3;printf("请输入3个整数,用空格间隔:");//加上提示性语句,增强交互性。scanf("%d %d %d",&n1,&n2,&n3);
p1 =&n1;
p2 =&n2;
p3 =&n3;if(n1>n2){swap(p1,p2);}if(n1>n3){swap(p1,p3);}if(n2>n3){swap(p2,p3);}printf("Now,the order is :%d %d %d\n",*p1,*p2,*p3);return0;}voidswap(int*a,int*b){int p;
p=*b;*b =*a;*a = p;}
2. 输入3个字符串,按由小到大的顺序输出。(要求使用指针)
/*C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false;
负数也是true*/#include<stdio.h>#include<string.h>intmain(){voidswap(char*,char*);char str1[20],str2[31],str3[20];printf("input three line:\n");gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)>0)/*debug:'>'必须有,因为负数也是true*/{swap(str1,str2);}if(strcmp(str1,str3)>0){swap(str1,str3);}if(strcmp(str2,str3)>0){swap(str2,str3);}printf("Now the order is :\n");printf("%s\n%s\n%s\n",str1,str2,str3);return0;}voidswap(char*str1,char*str2){char p[20];strcpy(p,str1);strcpy(str1,str2);strcpy(str2,p);}
#include<stdio.h>intmain(){voidinput(int*);voidmax_min_value(int*);voidoutput(int*);int number[10];input(number);max_min_value(number);output(number);return0;}voidinput(int* number){int i;for(i=0;i<10;i++){scanf("%d",number+i);}}voidmax_min_value(int*number){int*max,*min,*p,temp;
max = min = number;/*先假设初值为最大和最小值*/for(p=number+1;p<number+10;p++){if(*p >*max) max = p;elseif(*p <*min) min = p;}//交换最小与number[0]
temp =* min;*min = number[0];
number[0]= temp;//考虑,最大刚好在number[0]的情况if(max == number){
max = min;}//交换最大与number[9]
temp = number[9];
number[9]=*max;*max = temp;}voidoutput(int* number){int* p;printf("Now ,they are : ");for(p=number;p<number+10;p++)printf("%d ",*p);printf("\n");}
4. n个整数,是前面个数顺序向后移m个位置,最后m个数变成前面m个数。
#include<stdio.h>intmain(){voidmove(int[20],int,int);int number[20],n,m,i;printf("how many numbers?");scanf("%d",&n);printf("input %d numbers:\n",n);for(i=0;i<n;i++){scanf("%d",&number[i]);}printf("how many place you want to move?");scanf("%d",&m);move(number,n,m);printf("Now,they are:\n");for(i =0;i<n;++i){printf("%d ",number[i]);}printf("\n");return0;}voidmove(int array[20],int n,int m){int*p,array_end;
array_end =*(array+n-1);/*先把末尾值存起来,等下再赋给首位*/for(p=array+n-1;p>array;p--){*p =*(p-1);}*array = array_end;
m--;/*控制递归调用的次数*/if(m>0)move(array,n,m);}
5. 报3退圈
#include<stdio.h>intmain(){int i,k,n,num[50],*p,m;printf("\ninput number of person:n=");scanf("%d",&n);
p = num;/*给每个人编号*/for(i=0;i<n;i++)*(p+i)= i+1;
i=0;
k=0;/*是否报到3*/
m=0;/*统计已经退出圈子的人数*/while(m<n-1)/*因为从0开始*/{if(*(p+i)!=0) k++;if(k ==3){*(p+i)=0;
k =0;
m++;}
i++;/*这步是while循环中必定会执行的*/if(i == n) i=0;}while(*p ==0) p++;printf("The last one is NO.%d\n",*p);return0;}
6. 写一个函数,求字符串的长度。在main函数中输入字符串,并输出其长度。
#include<stdio.h>intmain(){intlength(char*p);int len;char str[20];printf("input string: ");scanf("%s",str);/*前驱空格和后继空格都不计算在内*/
len =length(str);printf("The length of string is %d.\n",len);return0;}intlength(char*p){int n;
n =0;while(*p !='\0'){
n++;
p++;/*增加一个基类型的字节*/}return n;}