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

    运行结果

  • 相关阅读:
    python 执行sql得到字典格式数据
    python爬虫 url链接编码成gbk2312格式
    windows环境下elasticsearch安装教程(单节点)
    python SQLServer 存储图片
    爬虫的本质是和分布式爬虫的关系
    requests form data 请求 爬虫
    mysql 删除 binlog 日志文件
    查看mysql数据表的大小
    xshell 连接报错 Disconnected from remote host
    centos 7.3 安装 mysqldb 报错 EnvironmentError: mysql_config not found ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9739142.html
Copyright © 2011-2022 走看看