1、输出3个整数,按由小到大的顺序输出,写的复杂了,加上分析会变得简单,像下面输出3个字符(从小到大)
#include<stdio.h> int main(){ void compare(int *a,int *b,int *c); int a,b,c; printf("please input three numbers:"); scanf("%d%d%d",&a,&b,&c); compare(&a,&b,&c); printf("%d<%d<%d\n",a,b,c); return 0; } void compare(int *a,int *b,int *c){ int max; if(*a<*b){ if(*a>*c){ max = *a; *a = *b; *b = max; } if(*a<*c&&*c<*b){ max = *c; *c = *b; *b = max; } } if(*a>*b){ if(*b>*c){ max = *c; *c = *a; *a = max; } else if(*b<*c&&*c<*a){ max = *a; *a = *b; *b = *c; *c = max; } else{ max = *b; *b = *a; *a = max; } } }
2、为了代码简单,用了strcmp函数,也可以自己写一个strcmp函数
#include<stdio.h> #include<string.h> int main(){ void compare(char *a,char *b,char *c); char a[10],b[10],c[10]; printf("please input three string:"); scanf("%s%s%s",a,b,c); compare(a,b,c); printf("%s<%s<%s\n",a,b,c); return 0; } void compare(char*a,char *b,char *c){ char *p; if(strcmp(a,b)>0){ p = a; a = b; b = p; } if(strcmp(a,c)>0){ p = a; a = c; c = p; } if(strcmp(b,c)>0){ p = b; b = c; c = p; } }
3、输入10个数,单独输入,单独输出,并且把最大的一个数和最后一个数进行交换,最小的一个数和第一个进行交换。需要特别注意的传入的数组指针,进行操作过,已经从第一个数据指向了最后一个数据,如果在想通过指指针对数组的一些值进行操作,就需要把它在赋值成首指针,在进行操作。容易忽略,程序也没有报错,但是没有结果
#include<stdio.h> #define N 10 int main(){ void scan(int *p,int n); void trans(int *p,int n); void print(int *p,int n); int a[N]; scan(a,N); print(a,N); trans(a,N); print(a,N); return 0; } void scan(int *p,int n){ for(int i=0;i<n;i++){ scanf("%d",p++); } } void print(int *p,int n){ for(int i=0;i<n;i++){ printf("%d ",*p++); } printf("\n"); } void trans(int *p,int n){ int min=p[0],max=p[n-1]; int i,t,l,h; int *q; q=p; for(i=0;i<n;i++){ if(min>*q){ min = *q; l = i; } if(max<*q){ max = *q; h = i; } q++; } t = p[0]; p[0] = p[l]; p[l] = t; t = p[n-1]; p[n-1] = p[h]; p[h] = t; }
4、n个数,后面m个数放在前面,前面的n-m个数移到m个数的后面
#include<stdio.h> #define N 20 int main(){ void mhead(int *a,int n,int m); int a[N]; int n,m; int i; printf("please input the number :"); scanf("%d",&n); printf("please input numbers:"); for(i=0;i<n;i++){ scanf("%d",&a[i]); } printf("please input the number of behind :"); scanf("%d",&m); mhead(a,n,m); for(i=0;i<n;i++){ printf("%d ",a[i]); } printf("\n"); return 0; } void verse(int *a,int i,int j){ int t; j=j-1; for(;i<j;i++,j--){ t = a[i]; a[i] = a[j]; a[j] = t; } } void mhead(int *a,int n,int m){ verse(a,0,n); verse(a,0,m); verse(a,m,n); }
5、一圈人,每次报到3出局,问最后一个留下来的人是第几号(循环结束条件很重要,想了超级久;也能用单向循环链表实现,但是写的不对,可能后期会加进来)
#include<stdio.h> #include<stdio.h> #include<stdlib.h> #define N 20 int main(){ void delete3(int *p,int n); int n; int i; int a[N]; printf("please input number of people:"); scanf("%d",&n); for(i=0;i<n;i++){ a[i]=i+1; } delete3(a,n); for(i=0;i<n;i++){ if(a[i]!=0){ printf("%d ",a[i]); } } printf("\n"); return 0; } void delete3(int *p,int n){ int count=0; int i; int j=3; while(j>1){ for(i=0;i<n;i++){ if(p[i]!=0){ count++; } if(count==3){ count=0; p[i]=0; } } j=0; for(i=0;i<n;i++){ if(p[i]!=0) j++; } } }
标签:int,void,please,C语言,谭浩强,课后,printf,input,include From: https://www.cnblogs.com/gunancheng/p/17416740.html