zoukankan      html  css  js  c++  java
  • 002_C/C++笔试题_简单算法程序

    (一)冒泡排序法

     1 #include <iostream>
     2 using namespace std;
     3 void bubblesort(int a[], int m);
     4 int main(void)
     5 {
     6     int i;
     7     int array[]={5,4,8,44,56,4,5,9};
     8     bubblesort(array,sizeof(array)/4);/*sizeof(array)/4,取长度,int类型是4字节*/
     9     /*打印已经排序的数组*/
    10     for(i = 0; i < sizeof(array)/4; i++)
    11         printf("array[%d] = %d 
    ",i,array[i]);
    12     return 0;    
    13 }
    14 void bubblesort(int a[], int m)
    15 {
    16         int i,j,z;
    17         int tmp;
    18         for(i = 0; i < m; i++)  //外层循环控制循环次数
    19         {
    20             for(j = 0; j < m-1-i; j++)    //内层循环控制每次循环里比较的次数。
    21             {
    22                 if(a[j] > a[j+1])
    23                 {
    24                     tmp = a[j];
    25                     a[j] = a[j+1];
    26                     a[j+1] = tmp;
    27                 }
    28             }
    29             /*打印未排序*/
    30             for(z = 0; z < m-1-i;z++)
    31                 printf(" %d 	",a[z]);
    32             printf("
    ");
    33          }
    34 }
    View Code

    运行结果

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

    (二)选择排序法

     1 #include <iostream>
     2 using namespace std;
     3 void selectionsort(int a[],int m);
     4 int main(void)
     5 {
     6     int i;
     7     int array[]={5,4,8,44,56,4,5,9};
     8     selectionsort(array,sizeof(array)/4);/*sizeof(array)/4,取长度,int类型是4字节*/
     9     /*打印已经排序的数组*/
    10     for(i = 0; i < sizeof(array)/4; i++)
    11         printf("array[%d] = %d 
    ",i,array[i]);
    12     return 0;    
    13 }
    14 void selectionsort(int a[],int m)
    15     {
    16         int i,j;
    17         int k;
    18         int z;
    19         int tmp;
    20 
    21         for(i = 0; i < m-1; i++)//控制循环次数,n个数需要n-1次循环
    22         {
    23             k = i;
    24             for(j = i+1; j < m ; j++)
    25             {
    26                 if(a[j] < a[k])
    27                     k = j;
    28             }
    29             //i不等于k是就证明a[i]不是最小的,
    30             //i等于k时证明a[i]就是本轮比较过程中最小的值
    31             if(i != k)
    32             {
    33                 tmp = a[i];
    34                 a[i] = a[k];
    35                 a[k] = tmp;
    36             }
    37             /*打印未排序*/
    38             for(z = i; z < m;z++)
    39                 printf(" %d 	",a[z]);
    40             printf("
    ");
    41         }
    42     }
    View Code

    运行结果

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

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

    (三)编写my_strcpy函数

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

     1 #include <iostream>
     2 using namespace std;
     3 char* my_strcpy(char *strDest,char *strSrc);
     4 int main(void)
     5 {
     6     char arr1[20] = { 1 };
     7     char arr2[20] = "abcdefghij";
     8     char *ret=my_strcpy(arr1,arr2);
     9     printf("%s
    ", ret);//打印复制之后的字符串
    10     return 0;    
    11 }
    12 char* my_strcpy(char *strDest,char *strSrc)
    13 {
    14     if(strSrc == NULL)
    15         return NULL;
    16     if(strDest == strSrc)
    17         return strDest;
    18     char *temp = strDest;
    19     while((*strDest++ = *strSrc++) != '');
    20     return temp;
    21 }
    View Code

    运行结果

    (四)编写my_strcmp函数

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

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 #define MAX 10
     6  
     7 int mystrcmp(const char *str1,const char *str2);
     8 int main(int argc,char *argv[])
     9 {
    10         char value;
    11         char str1[MAX],str2[MAX];
    12  
    13         printf("Please input str1 and str2 :
    ");
    14         gets(str1);     //gets 和 printf的区别,gets可接收含空格的字符串,而scanf遇TAB,空格,回车即结束
    15         gets(str2);
    16     
    17         value = mystrcmp(str1,str2);
    18         printf("value :%d
    ",value);
    19     
    20         return 0;
    21 }
    22  
    23 int mystrcmp(const char *str1,const char *str2)
    24 {
    25         char i = 0;
    26         for(; i < MAX, *(str1+i) != '',*(str2+i) != ''; i++)
    27         {
    28                 if(*(str1+i) == *(str2+i))
    29                         continue;            //相等时继续比较下一位
    30                 return (*(str1+i) > *(str2+i))?1:(-1);
    31         }
    32         return 0;
    33 }
    34         
    View Code

    运行结果

    (五)编写my_strcat函数

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

     1 #include <iostream>
     2 using namespace std;
     3 char* MyStrcat(char *dst, const char *src);
     4 int main(void)
     5 {
     6     char str1[10] = "abc";
     7     char str2[] = "bcd";
     8     char* str3 = MyStrcat(str1, str2);
     9 
    10     printf("str1=%s
    ", str1);
    11     printf("str2=%s
    ", str2);
    12     printf("str3=%s
    ", str3);
    13     return 0;
    14 }
    15 
    16 char* MyStrcat(char *dst, const char *src)
    17 {
    18     char *temp = dst;
    19     while (*temp != '')
    20         temp++;
    21     while ((*temp++ = *src++) != '');
    22     return dst;
    23 }
    View Code

    运行结果

    (六)编写my_strlen函数

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

     1 #include <iostream>
     2 using namespace std;
     3 int my_strlen(const char *str);
     4 int main(void)
     5 {
     6     printf("长度为:%d
    ",my_strlen("abcd"));
     7     return 0;
     8 }
     9 
    10 int my_strlen(const char *str)
    11 {
    12     int count = 0;
    13     while(*str++)
    14         count++;
    15     return count;
    16 }
    View Code

    运行结果

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

     1 #include <iostream>
     2 using namespace std;
     3 #define NUM 2
     4 struct student
     5 {
     6     int data;
     7     int score;
     8 };
     9 int main(int argc, char* argv[])
    10 {
    11     student student1[NUM];
    12     int i,average = 0;
    13     for(i = 0;i < NUM; i++)
    14     {
    15         scanf("%d %d",&student1[i].data,&student1[i].score);
    16         average += student1[i].score/NUM;
    17     }
    18     printf("平均分是:%d",average);
    19     for(i = 0;i < NUM; i++)
    20     {
    21         if(student1[i].score > average)
    22             printf("大于平均的学生学号及成绩:%d,%d",student1[i].data,student1[i].score);
    23     }
    24     return 0;
    25 }
    View Code

    运行结果

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

     1 #include <iostream>
     2 using namespace std;
     3 int find(char *str, int n);  /*字符判断回文*/
     4 int IsPalindrome(long m);    /*数据判断回文*/
     5 int main(int argc, char* argv[])
     6 {
     7      char *str = "abcdedcba";
     8      int m=1881;
     9      printf("%s: %s
    ", str, find(str,strlen(str)) ? "Yes" : "No");
    10      printf("数据m:%d,%s
    ",m,IsPalindrome(m)? "Yes" : "No");
    11      return getchar();
    12 }
    13 int find(char *str, int n)
    14 {
    15      if(n<=1) return 1;
    16      else if(str[0]==str[n-1])  
    17          return find(str+1, n-2);
    18      else 
    19         return 0;
    20 }
    21 int IsPalindrome(long m)
    22 {
    23     long i, n;
    24     i=m;
    25     n=0;
    26     while(i)
    27     {
    28         n=n*10+i%10;
    29         i/=10;
    30     }
    31     return m==n; //返回1说明就是回文数了.
    32 }
    View Code

    运行结果

  • 相关阅读:
    Jenkins 基础篇
    Jenkins 基础篇
    Windows配置Nodejs环境
    Windows配置安装JDK
    Windows安装MySQL
    Ubuntu安装MySQL
    利用中国移动合彩云实现360云盘迁移到百度云
    Linux Shell下的后台运行及其前台的转换
    nova image-list 和 glance image-list 有什么区别
    启动虚拟机时提示我已移动或我已复制选项的详解
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9739142.html
Copyright © 2011-2022 走看看