1、输入三个整数,按照从小到大顺序输出
1 #include2 int main() 3 { 4 void swap(int *p1,int *p2); 5 int n1,n2,n3; 6 int *p1,*p2,*p3; 7 printf("input three integer n1,n2,n2:"); 8 scanf("%d,%d,%d",&n1,&n2,&n3); 9 p1=&n1; 10 p2=&n2; 11 p3=&n3; 12 if(n1>n2) swap(p1,p2); 13 if(n1>n3) swap(p1,p3); 14 if(n2>n3) swap(p2,p3); 15 printf("Now the order is:%d %d %d\n",n1,n2,n3); 16 return 0; 17 } 18 void swap(int *p1,int *p2) 19 { 20 int p; 21 p=*p1; 22 *p1=*p2; 23 *p2=p; 24 }
2、输入三个字符串,按照从小到大输出
#include#include<string.h> #define M 100 int main() { void swap(char *,char *); char str1[M],str2[M],str3[M]; printf("input three line:\n"); gets(str1); gets(str2); gets(str3); if(strcmp(str1,str2)>0) 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,%s,%s\n",str1,str2,str3); return 0; } void swap(char *p1,char *p2) { char p[M]; strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p); }
3、
#includeint main() { void input(int *); void max_min_value(int *); void output(int *); int number[10]; input(number); max_min_value(number); output(number); return 0; } void input(int *number) { int i; printf("input 10 numbers:"); for(i=0;i<10;i++) scanf("%d",&number[i]); } void max_min_value(int *number) { int *max,*min,*p,temp; max=min=number; for(p=number+1;p 10;p++) { if(*p>*max) max=p; else if(*p<*min) min=p; temp=number[0];number[0]=*min;*min=temp; if(max=number) max=min; temp=number[9];number[9]=*max;*max=temp; } } void output(int *number) { int *p; printf("Now they are:"); for(p=number;p 10;p++) printf("%d ",*p); printf("\n"); }
4、移动m个位置
#includeint main() { void move(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 ) scanf("%d",&number[i]); printf("how many place you want move?"); scanf("%d",&m); move(number,n,m); printf("now they are:\n"); for(i=0;i ) printf("%d ",number[i]); printf("\n"); return 0; } void move(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、n个人围成一圈,顺序排号,从第一个人开始报数,凡是报到3的人出圈子,问最后留下来的是原来的第几号
#includeint main() { int i,k,m,n,num[50],*p; printf("\n input number of person: n="); scanf("%d",&n); p=num; for(i=0;i ) *(p+i)=i+1; //从1到n编号 i=0; //i为每次循环时计数变量 k=0; //k为123报数时计数变量 m=0; //m为退出人数 while(m 1) { if(*(p+i)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; //报数到尾后i恢复为0 } while(*p==0) p++; printf("the last number is%d\n",*p); return 0; }
6、写一个函数,求一个字符串长度。
#includeint main() { int length(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); return 0; } int length(char *p) { int n; n=0; while(*p!='\0') {n++; p++;} return(n); }
8、输入一行文字,找出其中大写字母小写字母、空格、数字、以及其他字符各有多少。
#includeint main() { int upper=0,lower=0,digit=0,space=0,other=0,i=0; char *p,s[20]; printf("input string: "); while((s[i]=getchar())!='\n') i++; p=&s[0]; while(*p!='\n') { if(('A'<=*p)&&(*p<='Z')) ++upper; else if(('a'<=*p)&&(*p<='z')) ++lower; else if(*p==' ') ++space; else if((*p<='9')&&(*p>='0')) ++digit; else ++other; p++; } printf("upper case :%d lower case:%d",upper,lower); printf(" space:%d digit:%d other :%d\n",space,digit,other); return 0; }
7、有一个字符串包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符。
#include#include<string.h> int main() { void copystr(char *,char *,int); int m; char str1[20],str2[20]; printf("input string:"); gets(str1); printf("which character that began to copy?:"); scanf("%d",&m); if(strlen(str1)<m) printf("error:"); else { copystr(str1,str2,m); printf("%s",str2); } return 0; } void copystr(char *p1,char *p2,int m) { int n; n=0; while(n 1) { n++; p1++; } while(*p1!='\0') { *p2=*p1; p1++; p2++; } *p2='\0'; }
9、写一个函数,将一个3*3矩阵转置
#includeint main() { void move(int *pointer); int a[3][3],*p,i; printf("input matrix:\n"); for(i=0;i<3;i++) scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]); p=&a[0][0]; move(p); printf("Now,matrix:\n"); for(i=0;i<3;i++) printf("%d %d %d\n",a[i][0],a[i][1],a[i][2]); return 0; } void move(int *pointer) { int i,j,t; for(i=0;i<3;i++) for(j=i;j<3;j++) { t=*(pointer+i*3+j); *(pointer+i*3+j)=*(pointer+j*3+i); *(pointer+j*3+i)=t; } }
11、在主函数输入10个等长字符串。用另一函数对他们排序,然后在主函数输出排序。
用字符型二维数组 #include#include<string.h> int main() { void sort(char s[][6]); int i; char str[10][6]; printf("input 10 strings:\n"); for(i=0;i<10;i++) scanf("%s",str[i]); sort(str); printf("now is:\n"); for(i=0;i<10;i++) printf("%s\n",str[i]); return 0; } void sort(char s[10][6]) { int i,j; char *p,temp[10]; p=temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) { strcpy(p,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],p); } }
//用指向一位数组的指针作函数参数 #include#include<string.h> int main() { void sort(char(*p)[6]); int i; char str[10][6]; char (*p)[6]; printf("input 10 strings :\n"); for(i=0;i<10;i++) scanf("%s",str[i]); p=str; sort(p); printf("now is:"); for(i=0;i<10;i++) printf("%s\n",str[i]); return 0; } void sort(char(*s)[6]) {int i,j; char temp[6],*t=temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) { strcpy(t,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],t); } }
10、一个5*5的矩阵,排序,四个角从左至右从上到下依次从小到大中间放最大
#includeint main() { void change(int *p); int a[5][5],*p,i,j; printf("input matrix :\n"); for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&a[i][j]); p=&a[0][0]; change(p); printf("Now is:\n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%d ",a[i][j]); printf("\n"); } return 0; } void change(int *p) { int i,j,temp; int *pmax,*pmin; pmax=p; pmin=p; for(i=0;i<5;i++) for(j=0;j<5;j++) { if(*pmax<*(p+5*i+j)) pmax=p+5*i+j; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j; } temp=*(p+12); *(p+12)=*pmax; *pmax=temp; temp=*p; *p=*pmin; *pmin=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+4); *(p+4)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+20); *(p+20)=temp; pmin=p+1; for(i=0;i<5;i++) for(j=0;j<5;j++) if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))) pmin=p+5*i+j; temp=*pmin; *pmin=*(p+24); *(p+24)=temp; }
12、用指针数组处理11,字符串不等长。
#include#include<string.h> int main() { void sort(char *[]); int i; char *p[10],str[10][20]; for(i=0;i<10;i++) p[i]=str[i]; printf("input 10 strings:\n"); for(i=0;i<10;i++) scanf("%s",p[i]); sort(p); printf("now is:"); for(i=0;i<10;i++) printf("%s\n",p[i]); return 0; } void sort(char *s[]) { int i,j; char *temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(*(s+j),*(s+j+1))>0) { temp=*(s+j); *(s+j)=*(s+j+1); *(s+j+1)=temp; } }
14、将n个数按输入时顺序的逆序排列。
#includeint main() { void sort(char *p,int m); int i,n; char *p,num[20]; printf("input n:"); scanf("%d",&n); printf("please input these numbers:"); for(i=0;i ) scanf("%d",&num[i]); p=&num[0]; sort(p,n); printf("now is"); for(i=0;i ) printf("%d ",num[i]); printf("\n"); return 0; } void sort(char *p,int m) { int i; char temp,*p1,*p2; for(i=0;i 2;i++) { p1=p+i; p2=p+(m-1-i); temp=*p1; *p1=*p2; *p2=temp; } }
17、自己写一个strcmp函数,函数原型为strcmp(char *p1,char *p1)
#includeint main() { int strcmp(char *p1,char *p2); int m; char str1[20],str2[20],*p1,*p2; printf("input two strings:\n"); scanf("%s",str1); scanf("%s",str2); p1=&str1[0]; p2=&str2[0]; m=strcmp(p1,p2); printf("result:%d,\n",m); return 0; } int strcmp(char *p1,char *p2) { int i; i=0; while(*(p1+i)==*(p2+i)) if(*(p1+i++)=='\0') return 0; return(*(p1+i)-*(p2+i)); }
18、输入月份号,输出英文月名。指针数组处理。
#includeint main() { char *month[13]={"error","january","fabruary","march","april","may","june","july","august","september","october","november","december"}; int n; printf("input:"); scanf("%d",&n); if((n<=12)&&(n>=1)) printf("it is %s.\n",*(month+n)); else printf("wromg:\n"); return 0; }
20、用指向指针的指针对5个字符串进行排序并输出
#include#include<string.h> #define LINEMAX 20 int main() { void sort(char **p); int i; char **p,*pstr[5],str[5][LINEMAX]; for(i=0;i<5;i++) pstr[i]=str[i]; printf("input 5 strings:\n"); for(i=0;i<5;i++) scanf("%s",pstr[i]); p=pstr; sort(p); printf("\nstrings sorted:\n"); for(i=0;i<5;i++) printf("%s\n",pstr[i]); return 0; } void sort(char **p) { int i,j; char *temp; for(i=0;i<5;i++) { for(j=i+1;j<5;j++) {if(strcmp(*(p+i),*(p+j))>0) { temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } }
21、用指向指针的指针对n个整数进行排序
#includeint main() { void sort(int **p,int n); int i,n,data[20],**p,*pstr[20]; printf("input n:\n"); scanf("%d",&n); for(i=0;i ) pstr[i]=&data[i]; printf("input %dnumbers:",n); for(i=0;i ) scanf("%d",psrr[i]);
p=pstr;
sort(p,n);
printf("Now,the sequence is:\n");
for (i=0;i printf("%d ",*pstr[i]); printf("\n"); return 0; } void sort(int **p,int n) {int i,j,*temp; for (i=0;i {for (j=i+1;j {if (**(p+i)>**(p+j)) // 比较后交换整数地址 {temp=*(p+i); *(p+i)=*(p+j); *(p+j)=temp; } } } }
15、有一个班4个学生,5名学生。
求第一门课程的平均分。
找出两门以上课程不及格的学生。输出他们的学号及平均成绩。
找出平均成绩在九十分以上或者全部成绩在85分以上的学生。
#includeint main() { void avsco(float *,float *); void avcour1(char(*)[10],float*); void fali2(char course[5][10],int num[],float *pscore,float aver[4]); void good(char course[5][10],int num[4],float *pscore,float aver[4]); int i,j,*pnum,num[4]; float score[4][5],aver[4],*pscore,*paver; char course[5][10],(*pcourse)[10]; printf("input course:\n"); pcourse=course; for(i=0;i<5;i++) scanf("%s",course[i]); printf("input NO. and scores:\n"); printf("NO."); for(i=0;i<5;i++) printf(",%s",course[i]); printf("\n"); pscore=&score[0][0]; pnum=&num[0]; for(i=0;i<4;i++) { scanf("%d",pnum+i); for(j=0;j<5;j++) scanf("%f",pscore+5*i+j); } paver=&aver[0]; printf("\n\n"); avsco(pscore,paver); // 求出每个学生的平均成绩 avcour1(pcourse,pscore); // 求出第一门课的平均成绩 printf("\n\n"); fali2(pcourse,pnum,pscore,paver); // 找出 2 门课不及格的学生 printf("\n\n"); good(pcourse,pnum,pscore,paver); // 找出成绩好的学生 return 0; } void avsco(float *pscore,float *paver) // 求每个学生的平均成绩的函数 {int i,j; float sum,average; for (i=0;i<4;i++) {sum=0.0; for (j=0;j<5;j++) sum=sum+(*(pscore+5*i+j)); // 累计每个学生的各科成绩 average=sum/5; // 计算平均成绩 *(paver+i)=average; } } void avcour1(char (*pcourse)[10],float *pscore) // 求第一课程的平均成绩的函数 {int i; float sum,average1; sum=0.0; for (i=0;i<4;i++) sum=sum+(*(pscore+5*i)); // 累计每个学生的得分 average1=sum/4; // 计算平均成绩 printf("course 1:%s average score:%7.2f\n",*pcourse,average1); } void fali2(char course[5][10],int num[],float *pscore,float aver[4]) // 找两门以上课程不及格的学生的函数 {int i,j,k,labe1; printf(" ==========Student who is fail in two courses======= \n"); printf("NO. "); for (i=0;i<5;i++) printf("%11s",course[i]); printf(" average\n"); for (i=0;i<4;i++) {labe1=0; for (j=0;j<5;j++) if (*(pscore+5*i+j)<60.0) labe1++; if (labe1>=2) {printf("%d",num[i]); for (k=0;k<5;k++) printf("%11.2f",*(pscore+5*i+k)); printf("%11.2f\n",aver[i]); } } } void good(char course[5][10],int num[4],float *pscore,float aver[4]) // 找成绩优秀学生 ( 各门 85 以上或平均 90 分以上 ) 的函数 {int i,j,k,n; printf(" ======Students whose score is good======\n"); printf("NO. "); for (i=0;i<5;i++) printf("%11s",course[i]); printf(" average\n"); for (i=0;i<4;i++) {n=0; for (j=0;j<5;j++) if (*(pscore+5*i+j)>85.0) n++; if ((n==5)||(aver[i]>=90)) {printf("%d",num[i]); for (k=0;k<5;k++) printf("%11.2f",*(pscore+5*i+k)); printf("%11.2f\n",aver[i]); } } }
16、输入一个字符串,内有数字和非数字字符。例如
A123x456 1760?302tab5876
将其中连续的数字作为一个整数,依次存放到数组a中。统计宫有多少个整数,并输出
#includeint main() { char str[50],*pstr; int i,j,k,m,e10,digit,ndigit,a[10],*pa; printf("input a string:\n"); gets(str); pstr=&str[0]; /* 字符指针 pstr 置于数组 str 首地址 */ pa=&a[0]; /* 指针 pa 置于 a 数组首地址 */ ndigit=0; /*ndigit 代表有多少个整数 */ i=0; /* 代表字符串中的第几个字符 */ j=0; while(*(pstr+i)!='\0') {if((*(pstr+i)>='0') && (*(pstr+i)<='9')) j++; else {if (j>0) {digit=*(pstr+i-1)-48; /* 将个数位赋予 digit*/ k=1; while (k /* 将含有两位以上数的其它位的数值累计于 digit*/ {e10=1; for (m=1;m<=k;m++) e10=e10*10; /*e10 代表该位数所应乘的因子 */ digit=digit+(*(pstr+i-1-k)-48)*e10; /* 将该位数的数值 \ 累加于 digit*/ k++; /* 位数 K 自增 */ } *pa=digit; /* 将数值赋予数组 a*/ ndigit++; pa++; /* 指针 pa 指向 a 数组下一元素 */ j=0; } } i++; } if (j>0) /* 以数字结尾字符串的最后一个数据 */ {digit=*(pstr+i-1)-48; /* 将个数位赋予 digit*/ k=1; while (k /* 将含有两位以上数的其它位的数值累加于 digit*/ {e10=1; for (m=1;m<=k;m++) e10=e10*10; /*e10 代表位数所应乘的因子 */ digit=digit+(*(pstr+i-1-k)-48)*e10; /* 将该位数的数值累加于 digit*/ k++; /* 位数 K 自增 */ } *pa=digit; /* 将数值赋予数组 a*/ ndigit++; j=0; } printf("There are %d numbers in this line, they are:\n",ndigit); j=0; pa=&a[0]; for (j=0;j /* 打印数据 */ printf("%d ",*(pa+j)); printf("\n"); return 0; }