002_C/C++笔试题_简单算法程序
(一)冒泡排序法
#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说明就是回文数了.
}
运行结果
002_C/C++笔试题_简单算法程序的更多相关文章
- 001_C/C++笔试题_考察C/C++语言基础概念
(一)文章来自:C/C++笔试题-主要考察C/C++语言基础概念.算法及编程,附参考答案 (二)基础概念 2. 头文件中的ifndef/define/endif的作用? 答:防止该头文件被重复引用. ...
- 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)
风口之下.猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回想历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i] ...
- 003_C/C++笔试题_分享大汇总
(一)感谢:lhzstudio 01_C++经典面试题全集 50~100道 都附带有参考答案 02_C++开发工程师面试题库 100~150道 03_C++笔试题库之编程.问答题 150~200道 0 ...
- Java工程师笔试题整理[校招篇]
Java工程师笔试题整理[校招篇] 隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...
- js+html+css简单的互动功能页面(2015知道几乎尖笔试题)http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html?from=y1.7-1.2
js+html+css实现简单页面交互功能(2015知乎前端笔试题) http://v.youku.com/v_show/id_XMTI0ODQ5NTAyOA==.html? from=y1.7-1. ...
- 一道简单的 Java 笔试题,但值得很多人反思!
前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...
- 也许你需要点实用的-Web前端笔试题
之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...
- C/C++ 笔试题
/////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...
- C/C++笔试题(很多)
微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...
随机推荐
- Luogu4081 USACO17DEC Standing Out from the Herd(广义后缀自动机)
建出广义SAM,通过parent树对每个节点求出其是否仅被一个子串包含及被哪个包含. 写了无数个sam板子题一点意思都没啊 #include<bits/stdc++.h> using na ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- (十一)Hibernate中的多表操作(1):单向一对多
一.单向一对多() 案例一(用XML文件配置): 一个班级有多个学生,班级可以查看所有学生的信息. ClassBean.java package bean; import java.util.Hash ...
- 帝国cms“建立目录不成功,请检查目录权限”的解决方法
就这个看似简单的问题我折腾了两天,百度看产生这个问题的原因有很多也很宽泛,大部分说的是初始化内置数据,但我出现“建立目录不成功,请检查目录权限”的原因估计只有少部分人会遇到. 内置初始化数据是你上传文 ...
- vue 集成jTopo 处理方法
jTopo 帮助说明网站 http://www.jtopo.com/index.html 使用例子: http://www.jtopo.com/demo/helloworld.html 不建议直接安装 ...
- [转载]三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法
[转载]三十分钟理解:线性插值,双线性插值Bilinear Interpolation算法 来源:https://blog.csdn.net/xbinworld/article/details/656 ...
- 一、eureka服务端自动配置
所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 @EnableEurekaServer开关 eureka是一个c/s架构的服务治理框架, ...
- 基于【 MySql 】一 || 主从复制
一.centos7安装mysql 1. 先检查系统是否装有mysql rpm -qa | grep mysql 2. 下载mysql的repo源 wget http://repo.mysql.com/ ...
- 关于Vue中,checkBox等组件在赋值后,点击切换页面未及时更新问题
我们经常碰到这样的问题,在v-for循环中,给某些组件(此处以checkBox为例)赋值后,组件并不能正常切换, 这是因为数据层太多,render函数没有自动更新,需手动强制刷新. 解决方法:在切换c ...
- SAP官方提供的人脸识别API
https://api.sap.com/api/face_detection_api/resource 准备一张克里斯蒂亚诺 - 罗纳尔多的图片: 点击Choose File按钮,加载这些图片,然后点 ...