(一)冒泡排序法

 #include <iostream>
using namespace std;
void bubblesort(int a[], int m);
int main(void)
{
int i;
int array[]={,,,,,,,};
bubblesort(array,sizeof(array)/);/*sizeof(array)/4,取长度,int类型是4字节*/
/*打印已经排序的数组*/
for(i = ; i < sizeof(array)/; i++)
printf("array[%d] = %d \n",i,array[i]);
return ;
}
void bubblesort(int a[], int m)
{
int i,j,z;
int tmp;
for(i = ; i < m; i++) //外层循环控制循环次数
{
for(j = ; j < m--i; j++) //内层循环控制每次循环里比较的次数。
{
if(a[j] > a[j+])
{
tmp = a[j];
a[j] = a[j+];
a[j+] = tmp;
}
}
/*打印未排序*/
for(z = ; z < m--i;z++)
printf(" %d \t",a[z]);
printf("\n");
}
}

运行结果

冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] > arr[n+1]`),那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。

(二)选择排序法

 #include <iostream>
using namespace std;
void selectionsort(int a[],int m);
int main(void)
{
int i;
int array[]={,,,,,,,};
selectionsort(array,sizeof(array)/);/*sizeof(array)/4,取长度,int类型是4字节*/
/*打印已经排序的数组*/
for(i = ; i < sizeof(array)/; i++)
printf("array[%d] = %d \n",i,array[i]);
return ;
}
void selectionsort(int a[],int m)
{
int i,j;
int k;
int z;
int tmp; for(i = ; i < m-; i++)//控制循环次数,n个数需要n-1次循环
{
k = i;
for(j = i+; j < m ; j++)
{
if(a[j] < a[k])
k = j;
}
//i不等于k是就证明a[i]不是最小的,
//i等于k时证明a[i]就是本轮比较过程中最小的值
if(i != k)
{
tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
/*打印未排序*/
for(z = i; z < m;z++)
printf(" %d \t",a[z]);
printf("\n");
}
}

运行结果

选择排序法就是通过每一次循环查找出最大(小)的元素,通过下标记录最大(小)的元素,找完一轮之后将最大(小)的元素

放到前面,然后不再考虑这个元素。

(三)编写my_strcpy函数

strcpy函数:是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

 #include <iostream>
using namespace std;
char* my_strcpy(char *strDest,char *strSrc);
int main(void)
{
char arr1[] = { };
char arr2[] = "abcdefghij";
char *ret=my_strcpy(arr1,arr2);
printf("%s\n", ret);//打印复制之后的字符串
return ;
}
char* my_strcpy(char *strDest,char *strSrc)
{
if(strSrc == NULL)
return NULL;
if(strDest == strSrc)
return strDest;
char *temp = strDest;
while((*strDest++ = *strSrc++) != '\0');
return temp;
}

运行结果

(四)编写my_strcmp函数

strcmp函数:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止

 #include <iostream>

 using namespace std;

 #define MAX 10

 int mystrcmp(const char *str1,const char *str2);
int main(int argc,char *argv[])
{
char value;
char str1[MAX],str2[MAX]; printf("Please input str1 and str2 :\n");
gets(str1); //gets 和 printf的区别,gets可接收含空格的字符串,而scanf遇TAB,空格,回车即结束
gets(str2); value = mystrcmp(str1,str2);
printf("value :%d\n",value); return ;
} int mystrcmp(const char *str1,const char *str2)
{
char i = ;
for(; i < MAX, *(str1+i) != '\0',*(str2+i) != '\0'; i++)
{
if(*(str1+i) == *(str2+i))
continue; //相等时继续比较下一位
return (*(str1+i) > *(str2+i))?:(-);
}
return ;
}

运行结果

(五)编写my_strcat函数

strcat函数:是用来连接两个字符串的,原型是char *strcat(char *dest,char *src),作用是把src所指字符串添加到dest结尾处

 #include <iostream>
using namespace std;
char* MyStrcat(char *dst, const char *src);
int main(void)
{
char str1[] = "abc";
char str2[] = "bcd";
char* str3 = MyStrcat(str1, str2); printf("str1=%s\n", str1);
printf("str2=%s\n", str2);
printf("str3=%s\n", str3);
return ;
} char* MyStrcat(char *dst, const char *src)
{
char *temp = dst;
while (*temp != '\0')
temp++;
while ((*temp++ = *src++) != '\0');
return dst;
}

运行结果

(六)编写my_strlen函数

strlen函数:所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。

 #include <iostream>
using namespace std;
int my_strlen(const char *str);
int main(void)
{
printf("长度为:%d\n",my_strlen("abcd"));
return ;
} int my_strlen(const char *str)
{
int count = ;
while(*str++)
count++;
return count;
}

运行结果

(七)求高于平均分的学生学号及成绩(学号和成绩人工输入)

 #include <iostream>
using namespace std;
#define NUM 2
struct student
{
int data;
int score;
};
int main(int argc, char* argv[])
{
student student1[NUM];
int i,average = ;
for(i = ;i < NUM; i++)
{
scanf("%d %d",&student1[i].data,&student1[i].score);
average += student1[i].score/NUM;
}
printf("平均分是:%d",average);
for(i = ;i < NUM; i++)
{
if(student1[i].score > average)
printf("大于平均的学生学号及成绩:%d,%d",student1[i].data,student1[i].score);
}
return ;
}

运行结果

(八)递归实现回文判断(如:abcdedcba就是回文)

 #include <iostream>
using namespace std;
int find(char *str, int n); /*字符判断回文*/
int IsPalindrome(long m); /*数据判断回文*/
int main(int argc, char* argv[])
{
char *str = "abcdedcba";
int m=;
printf("%s: %s\n", str, find(str,strlen(str)) ? "Yes" : "No");
printf("数据m:%d,%s\n",m,IsPalindrome(m)? "Yes" : "No");
return getchar();
}
int find(char *str, int n)
{
if(n<=) return ;
else if(str[]==str[n-])
return find(str+, n-);
else
return ;
}
int IsPalindrome(long m)
{
long i, n;
i=m;
n=;
while(i)
{
n=n*+i%;
i/=;
}
return m==n; //返回1说明就是回文数了.
}

运行结果

最新文章

  1. iOS--UICollectionView(滚动视图)入门
  2. PP生产订单创建、下达、报工、收货、投料
  3. ubuntu下整合eclipse和javah生成jni头文件开发android的native程序(转)
  4. ORACLE 分析函数整理汇总
  5. 加密算法—MD5、RSA、DES
  6. Apache Solr查询语法
  7. SQL SERVER XML 学习总结
  8. RX学习笔记:正则表达式
  9. 学生选课系统数据库SQL语句考试题
  10. java 导出excel(复杂案例)
  11. SpringMVC学习手册(三)------EL和JSTL(上)
  12. .Net Core 在 Linux-Centos上的部署实战教程(三)
  13. [转] Webpack-CommonsChunkPlugin
  14. Python内置的urllib模块不支持https协议的解决办法
  15. hibernate多对多关系
  16. C# 曲线控件 曲线绘制 实时曲线 多曲线控件 开发
  17. .NetCore WebApi利用Swagger文档实现选择文件上传
  18. Using ADB and fastboot
  19. HTML5 FormData实现文件上传实例
  20. 异常处理:1215 - Cannot add foreign key constraint

热门文章

  1. C++:顺序表类实现约瑟夫问题_密码不同
  2. Image splicing forgery detection combining coarse to refined convolutional neural network and adaptive clustering
  3. uncompyle6安装使用方法
  4. Yet Another Problem On a Subsequence CodeForces - 1000D (组合计数)
  5. C# wsdl.exe 生成类文件
  6. Thrift RPC Golang、C++ Example
  7. DRF框架中链表数据通过ModelSerializer深度查询方法汇总
  8. Python中的内存管理机制
  9. 如何在vscode中调试vue-cli项目?
  10. Array+DP leetcode-11.装更多的水