一、最值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int Max(int n,int *p);
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组的个数:");
scanf("%d",&n);
int a[n];
int *p=a;
for(int i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",p+i);
}
int max=Max(n,a);
printf("最大值是:%d\n",max);
return 0;
}
int Max(int n,int *p)
{
int max=0;
for(int i=0;i<n;i++)
{
if(i==0)
{
max=*(p+i);
}
if(max<*(p+i))
{
max=*(p+i);
}
}
return max;
}
结果:
二、冒泡
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Int(int n,int *p);
void Put(int n,int *p);
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组的个数:");
scanf("%d",&n);
int a[n];
int *p=a;
Int(n,a);
Put(n,a);
for(int i=0;i<n;i++)
{
printf("%d\n",*(p+i));
}
return 0;
}
void Int(int n,int *p)
{
for(int i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",p+i);
}
}
void Put(int n,int *p)
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i;j++)
{
if(*(p+j)>*(p+j+1))
{
int t;
t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
}
结果:
三、简单选择
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Jd(int n,int *p);
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组的个数:");
scanf("%d",&n);
int a[n];
int *p=a;
for(int i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",p+i);
}
Jd(n,a);
for(int i=0;i<n;i++)
{
printf("%d\n",*(p+i));
}
return 0;
}
void Jd(int n,int *p)
{
int min=0;
for(int i=0;i<n-1;i++)
{
min=i;
for(int j=i+1;j<n;j++)
{
if(*(p+min)>*(p+j))
{
min=j;
}
}
if(min!=i)
{
int t;
t=*(p+min);
*(p+min)=*(p+i);
*(p+i)=t;
}
}
}
结果:
四、交换最大值和最小值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Jh(int n,int a[]);
void In(int n,int a[]);
void Out(int n,int a[]);
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组的个数:");
scanf("%d",&n);
int a[n];
In(n,a);
Jh(n,a);
printf("\n");
Out(n,a);
return 0;
}
void In(int n,int a[])
{
for(int i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
}
void Jh(int n,int a[])
{
int max=0,min=0,i;
int maxl,minl;
for(i=0;i<n;i++)
{
if(i==0)
{
max=a[i];
min=a[i];
maxl=i;
minl=i;
}
if(max<a[i])
{
max=a[i];
maxl=i;
}
if(min>a[i])
{
min=a[i];
minl=i;
}
}
int t;
t=a[maxl];a[maxl]=a[minl];a[minl]=t;
}
void Out(int n,int a[])
{
for(int i=0;i<n;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
}
结果:
五、最值 、最值的下标
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void In(int line,int row,int (*p)[row]);
void ZhuiZhi(int line,int row,int (*p)[4]);
int main(int argc, const char *argv[])
{
int line,row;
printf("请输入数组的行和列:");
scanf("%d,%d",&line,&row);
int a[line][row];
In(line,row,a);
ZhuiZhi(line,row,a);
return 0;
}
void In(int line,int row,int (*p)[row])
{
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",*(p+i)+j);
}
}
}
void ZhuiZhi(int line,int row,int (*p)[row])
{
int max,maxh,maxl;
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
if(i==0 && j==0)
{
max=*(*(p+i)+j);
maxh=i;
maxl=j;
}
if(max<*(*(p+i)+j))
{
max=*(*(p+i)+j);
maxh=i;
maxl=j;
}
}
}
printf("最大值是:%d\n所在下标是:a[%d][%d]\n",max,maxh,maxl);
}
结果:
六、杨慧三角
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void YangHui(int n,int (*p)[n]);
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组的行数:");
scanf("%d",&n);
int a[n][n];
YangHui(n,a);
return 0;
}
void YangHui(int n,int (*p)[n])
{
for(int i=0;i<n;i++)
{
for(int k=0;k<n-i;k++)
{
printf(" ");
}
for(int j=0;j<=i;j++)
{
if(j==0 || i==j)
{
*(*(p+i)+j)=1;
}
else
{
*(*(p+i)+j)=*(*(p+i-1)+j)+*(*(p+i-1)+j-1);
}
printf("%4d",*(*(p+i)+j));
}
printf("\n");
}
}
结果:
七、对角线求和
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void In(int n,int (*p)[n]);
int ZhuDui(int n,int (*p)[n]);
int FuDui(int n,int (*p)[n]);
int main(int argc, const char *argv[])
{
int n;
printf("请输入数组的个数:");
scanf("%d",&n);
int a[n][n];
In(n,a);
int sum=ZhuDui(n,a);
printf("主对角线相加:%d\n",sum);
int sum1=FuDui(n,a);
printf("副对角线相加:%d\n",sum1);
return 0;
}
void In(int n,int (*p)[n])
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",*(p+i)+j);
}
}
}
int ZhuDui(int n,int (*p)[n])
{
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
{
sum+=*(*(p+i)+j);
}
}
}
return sum;
}
int FuDui(int n,int (*p)[n])
{
int sum=0;
int i=0;
for(int j=n-1;j>=0;j--)
{
sum+=*(*(p+i)+j);
i++;
}
return sum;
}
结果:
八、4个字符串函数【非函数实现】
strlen
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int My_strlen(char *p);
int main(int argc, const char *argv[])
{
char s[20]="";
printf("请输入一个字符串:");
gets(s);
int n=My_strlen(s);
printf("'s'字符串有%d个字符\n",n);
return 0;
}
int My_strlen(char *p)
{
int i=0;
int count=0;
while(*(p+i))
{
i++;
count++;
}
return count;
}
结果:
strcpy
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Out(char *p);
void My_strcpy(char *p,char *q);
int main(int argc, const char *argv[])
{
char s1[50]="";
char s2[50]="";
printf("请输入第一个字符串:");
gets(s1);
printf("请输入第二个字符串:");
gets(s2);
My_strcpy(s1,s2);
Out(s1);
return 0;
}
void My_strcpy(char *p,char *q)
{
int i=0;
while(*(q+i))
{
*(p+i)=*(q+i);
i++;
}
*(p+i)='\0';
}
void Out(char *p)
{
puts(p);
}
结果:
strcat
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void In(char *p,char *q);
void My_strcat(char *p,char *q);
void Out(char *p);
int main(int argc, const char *argv[])
{
char s1[50]="";
char s2[50]="";
In(s1,s2);
My_strcat(s1,s2);
Out(s1);
return 0;
}
void In(char *p,char *q)
{
printf("请输入第一个字符串:");
gets(p);
printf("请输入第二个字符串:");
gets(q);
}
void My_strcat(char *p,char *q)
{
int i=0,j=0;
while(*(p+i))
{
i++;
}
while(*(q+j))
{
*(p+i)=*(q+j);
j++;
i++;
}
*(p+i)='\0';
}
void Out(char *p)
{
puts(p);
}
结果:
strcmp
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void In(char *p,char *q);
int My_strcamp(char *p,char *q);
void Out(int n);
int main(int argc, const char *argv[])
{
char s1[50]="";
char s2[50]="";
In(s1,s2);
int n=My_strcamp(s1,s2);
Out(n);
return 0;
}
void In(char *p,char *q)
{
printf("请输入第一个字符串:");
gets(p);
printf("请输入第二个字符串:");
gets(q);
}
int My_strcamp(char *p,char *q)
{
int i=0,sub=0;
while(*(p+i)==*(q+i))
{
if(*(p+i))
{
break;
}
i++;
}
sub=*(p+i)-*(q+i);
return sub;
}
void Out(int n)
{
if(n>0)
{
printf("s1>s1\n");
}
else if(n<0)
{
printf("s1<s1\n");
}
else
{
printf("s1=s2\n");
}
}
结果:
九、字符串单词逆置
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void In(char *p);
void Nz(char *p);
void Out(char *p);
int main(int argc, const char *argv[])
{
char s[50]="";
In(s);
Nz(s);
Out(s);
return 0;
}
void In(char *p)
{
printf("请输入一串字符串:");
gets(p);
}
void Nz(char *p)
{
int i=0;
while(*(p+i))
{
i++;
}
int k=i-1;
int z=i;
i=0;
while(i<k)
{
char t;
t=*(p+i);
*(p+i)=*(p+k);
*(p+k)=t;
i++;
k--;
}
int m=0;
for(int n=0;n<z;)
{
while(*(p+m)!=' ' && *(p+m)!='\0')
{
m++;
}
int l=m-1;
while(n<l)
{
char t;
t=*(p+n);
*(p+n)=*(p+l);
*(p+l)=t;
n++;
l--;
}
while(*(p+m)==' ')
{
m++;
}
n=m;
}
}
void Out(char *p)
{
puts(p);
}
结果:
十、二维字符数组的排序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Px(int line,int row,char (*p)[row]);
void In(int line,int row,char (*p)[row]);
int main(int argc, const char *argv[])
{
int line,row;
printf("请输入行:");
scanf("%d",&line);
getchar();
printf("请输入列:");
scanf("%d",&row);
getchar();
char s[line][row];
In(line,row,s);
Px(line,row,s);
printf("\n");
for(int i=0;i<line;i++)
{
puts(s[i]);
}
return 0;
}
void Px(int line,int row,char (*p)[row])
{
for(int i=0;i<line;i++)
{
for(int j=0;j<line-1;j++)
{
if(strcmp(*(p+j),*(p+j+1))>0)
{
char t[20]="";
strcpy(t,*(p+j));
strcpy(*(p+j),*(p+j+1));
strcpy(*(p+j+1),t);
}
}
}
}
void In(int line,int row,char (*p)[row])
{
for(int i=0;i<line;i++)
{
gets(p+i);
}
}
结果:
十一、二维字符数组的查找
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void In(int line,int row,char (*p)[row]);
void Key(int line,int row,char (*p)[row]);
int main(int argc, const char *argv[])
{
int line,row;
printf("请输入行数:");
scanf("%d",&line);
printf("请输入列数:");
scanf("%d",&row);
char s[line][row];
In(line,row,s);
Key(line,row,s);
return 0;
}
void In(int line,int row,char (*p)[row])
{
for(int i=0;i<=line;i++)
{
gets(p+i);
}
}
void Key(int line,int row,char (*p)[row])
{
char key[20]="";
printf("请输入要查找的值:");
gets(key);
int count=0;
for(int i=0;i<line;i++)
{
if(strcmp(key,*(p+i))==0)
{
count++;
}
}
if(count>0)
{
printf("存在该字符\n");
}
else
{
printf("不存在\n");
}
}
结果:
十二、打印三角
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int In(int n);
void Out(int n);
int main(int argc, const char *argv[])
{
int n=0;
int len=In(n);
Out(len);
return 0;
}
int In(int n)
{
printf("请输入要打印的行数:");
scanf("%d",&n);
return n;
}
void Out(int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
printf("*");
}
printf("\n");
}
printf("\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
printf("*");
}
printf("\n");
}
printf("\n");
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
printf(" ");
}
for(int k=0;k<=i;k++)
{
printf("*");
}
printf("\n");
}
printf("\n");
for(int i=0;i<n;i++)
{
for(int k=0;k<=i;k++)
{
printf(" ");
}
for(int j=0;j<n-i;j++)
{
printf("*");
}
printf("\n");
}
}
结果:
十三、素数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Out(int n);
int In(int n);
int main(int argc, const char *argv[])
{
int n;
int num=In(n);
Out(num);
return 0;
}
int In(int n)
{
printf("请输入一个数:");
scanf("%d",&n);
return n;
}
void Out(int n)
{
int count=0;
for(int i=1;i<=n;i++)
{
if(n%i==0)
{
count++;
}
}
if(count==2)
{
printf("%d是素数\n",n);
}
else
{
printf("%d不是素数\n",n);
}
}
结果:
十四、完数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int In(int n);
void Out(int n);
int main(int argc, const char *argv[])
{
int n;
int num=In(n);
Out(num);
return 0;
}
int In(int n)
{
printf("请输入一个数:");
scanf("%d",&n);
return n;
}
void Out(int n)
{
int sum=0;
for(int i=1;i<n;i++)
{
if(n%i==0)
{
sum+=i;
}
}
if(sum==n)
{
printf("%d是完数\n",n);
}
else
{
printf("%d不是完数\n",n);
}
}
结果: