目录
1.删除一个指定字符
//删除一个指定字符
// 先定义一个数组存放,定义要删的字母
// 遍历每个元素,找到要删的字符,
// 遍历后面的字符一一赋值往前挪到当前位置
#include<stdio.h>
int main()
{
char a[]="hello penny";
char c='p';
int i,j,len;
len=sizeof(a)/sizeof(a[0]);
for(i=0;i<len;i++)
{
if(a[i]==c)
{
// 将后面的元素一一挪到当前位置
for(j=i;j<len;j++)
{
a[j]=a[j+1];
}
}
}
printf("%s",a);
}
2.素数判断(函数)
// 质数判断
#include<stdio.h>
int fun(int n)
{
int i;
if(n<=1)
{
return 0;
}
if(n==2)
{
return 1;
}
for(i=2;i<n;i++)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
int n;
scanf("%d",&n);
if(fun(n)==1)
{
printf("是素数");
}
else
{
printf("不是");
}
return 0;
}
3.字符串反转(还不能有空格)
// 字符串反转
// 如将字符串 "www.runoob.com" 反转为 "moc.boonur.www"。
// 左右交换即可
#include<stdio.h>
#include<string.h>
int main()
{
int i;
char str[100],tmp;
gets(str);
// sizeof(数组名)统计数组里所有元素个数
int len=strlen(str);
// 首尾交换
for(i=0;i<len/2;i++)
{
tmp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=tmp;
}
printf("%s",str);
return 0;
}
4.100以内的素数
//求一百之间的素数
#include<stdio.h>
int main()
{
int i,j,count=0;;
// 0,1都不是素数
for(i=2;i<100;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
break;
}
}
// 遍历完一圈后j>=i了,说明没有其它的因子
if(j>=i)
{
count++;
printf("%-4d",i);
//换行
if(count%5==0)
{
printf("\n");
}
}
}
return 0;
}
5.选择排序
// 选择排序 :每次拿前面的数和后面的数挨次比较
#include<stdio.h>
int main()
{
int i,j,tmp;
int a[]={9,5,4,6,2,80};
int len=sizeof(a)/sizeof(a[0]);
// 控制前一个数
for(i=0;i<len;i++)
{
// 控制后一个数
for(j=i+1;j<len;j++)
{
// 前一个数大于后一个换
if(a[i]>a[j])
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
for(i=0;i<len;i++)
{
printf("%-4d",a[i]);
}
return 0;
}
6.冒泡排序
// 冒泡排序---两两比较交换
// 外循环控制两两比较轮数
// 内循环控制当前一轮的比较次数
#include<stdio.h>
int main()
{
int a[]={19,6,2,4,5,7,8};
int i,j,tmp;
int len=sizeof(a)/sizeof(a[0]);
// 外层控制比较轮数,数组有len个元素,比较轮数为len-1;
for(i=0;i<len-1;i++)
{
// 内层控制比较次数
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(i=0;i<len;i++)
{
printf("%-4d",a[i]);
}
return 0;
}
7.插入排序(函数)
/
// 插入排序
// 默认第一个数为一个数组,依次把后面的数放进去比较
#include<stdio.h>
int main()
{
void insert(int* a,int len);
// 无序数组
int i,a[6]={1,6,4,2,8,9};
int len=sizeof(a)/sizeof(a[0]);
insert(a,len);
for(i=0;i<len;i++)
{
printf("%-4d",a[i]);
}
return 0;
}
void insert(int* a,int len)
{
int i,j,tmp;
// 外层循环控制插入次数,只需要插入实际数-1次,所以从1开始
for(i=1;i<len;i++)
{
// 把插入的数存tmp,下标从1开始
tmp=a[i];
// 内存循环控制插入的数和之前的数比较,当前数是tmp也就是i
// 前面的数是i-1, 所以从前一个数开始,往前走遍历前面的数
for(j=i-1;j>=0;j--)
{
if(tmp<a[j])
{
a[j+1]=a[j];// 也就是把a[j]放到tmp的位置
}
// 如果tmp>a[j]就没有必要继续往回找继续比了就直接退出
// 不能漏,否则一直往前找,就定位不到要插入的位置了
else
{
break;
}
}
// 一一遍历比较完,就可以把tmp放到a[j]的位置
// 由于在上层循环里先执行--再判断的会比之前的数小一个
a[j+1]=tmp;
}
}
8.插入排序
// 插入排序
// 假定第一个数独立存在一个数组,挨个把后面的数插进来,与数组中前面的数挨个比较
#include<stdio.h>
int main()
{
int a[]={19,6,2,4,5,7,8};
int i,j,tmp;
int len=sizeof(a)/sizeof(a[0]);
// 外层遍历控制插入的元素,从第二个元素开始
for(i=1;i<len;i++)
{
// 把要插入的元素存入tmp
tmp=a[i];
// 遍历出要插入的元素前面的元素
for(j=i-1;j>=0;j--)
{
// 如果数组前面的元素大于要插入的元素
if(a[j]>tmp)
{
// 把数组前面的元素(a[j])换到要插入的元素(tmp)的位置,也就是a [j+1]
a[j+1]=a[j];
}
// 如果tmp>a[j],就没有必要继续往回比较了,直接退出,不能漏,否则一直往前找,就定位不到要插入的位置了
else
{
break;
}
}
// 全部比较换完后,把插入的元素(tmp)放到a[j]的位置,由于前面内层循环j是先减减再判断的,所以比实际小1,得加上
a[j+1]=tmp;
}
// 输出
for(i=0;i<len;i++)
{
printf("%-2d",a[i]);
}
return 0;
}
9.求一个3*3矩形对角线元素之和
// 求一个3*3矩形对角线元素之和
#include<stdio.h>
int main()
{
int i,j,sum=0;
int a[3][3];
//控制行
for(i=0;i<3;i++)
{
// 控制列
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
// 对角线的下标
if(i==j)
{
sum+=a[i][j];
}
}
}
// 输出
printf("%d",sum);
return 0;
}
10.直接插入排序
// 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#include<stdio.h>
int main()
{
// 升序
int a[11]={1,4,6,9,13,16,19,28,40,100};
int i,j,len,k;
int num=38;
// 如果num最大,直接放最后
if(num>a[9])
{
a[10]=num;
}
else
{
for(i=0;i<10;i++)
{
// 如果a[i]大于,则直接进行下一次循环寻找
if(a[i]<num)
{
continue;
}
// 说明找到了num要插入的位置i,把当前位置以及后面的元素后挪腾位置
else
{
// 从最后一个元素开始挪,直到把i位置的元素也挪走
for(j=9;j>=i;j--)
{
a[j+1]=a[j];
}
// 全部挪完后插入num,由于最后i先减减了后才判断结束,所以得加回来
a[j+1]=num;
// 顺利插入,跳出循环结束
break;
}
}
}
// 输出
for(i=0;i<11;i++)
{
printf("%-4d",a[i]);
}
return 0;
}