华为校园招聘笔试算法题汇总
华为招聘机试整理5:简单四则运算

华为招聘机试整理5:简单四则运算华为招聘机试整理5:简单四则运算题⽬:简单四则运算问题描写叙述: 输⼊⼀个仅仅包括个位数字的简单四则运算表达式字符串,计算该表达式的值注:1、表达式仅仅含 +, -, 乘, / 四则运算符,不含括号2、表达式数值仅仅包括个位整数(0-9)。
且不会出现0作为除数的情况3、要考虑加减乘除按通常四则运算规定的计算优先级4、除法⽤整数除法。
即仅保留除法运算结果的整数部分。
⽐⽅8/3=2。
输⼊表达式保证⽆0作为除数情况发⽣5、输⼊字符串⼀定是符合题意合法的表达式,当中仅仅包括数字字符和四则运算符字符,除此之外不含其他不论什么字符,不会出现计算溢出情况要求实现函数:int calculate(int len,char expStr)【输⼊】 int len: 字符串长度;char expStr: 表达式字符串;【输出】 ⽆【返回】 计算结果演⽰样例1) 输⼊:char expStr = “1+45-8/3”函数返回:192) 输⼊:char expStr = “8/33”函数返回:6题⽬分析:①这道题输⼊字符串中有可能有五种字符,数字、+、-、*、/。
②这道题还须要注意的是我们要依照运算法则来进⾏计算,所以我们要选择⽤栈来解决这道题算法思路:①⽤字符串数组当做符号+-/的栈;⽤int数组作为数字的栈②⼊栈过程:数字栈:检測假设为数字,我们直接-‘0’放⼊number中。
符号栈:1)+ - :由于它们运算优先级⽐較低,所以我们须要⼊栈出栈检測为+-时候。
我们直接放⼊sign中2)* / :由于运算优先级别⽐較⾼,所以哦我们能够直接运算这⾥须要注意索引,这个时候数字索引应该-1,可是字符串的索引应该加1,之后还须要+1(由于已经运算完了)/须要多注意⼀个地⽅,就是分母不能为0。
为0时候。
直接返回-1;③出栈过程1)⾸先第⼀步我们须要把两个栈的索引都减去12)之后⽤符号索引进⾏for循环。
最全的华为校园招聘笔试题

最全的华为校园招聘笔试题最全的华为校园招聘笔试题华为笔试1.局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要⽤全局变量,需要使⽤“::“ 局部变量可以与全局变量同名,在函数内引⽤这个变量时,会⽤到同名的局部变量,⽽不会⽤到全局变量。
对于有些编译器⽽⾔,在同⼀个函数内可以定义多个同名的局部变量,⽐如在两个循环体内都定义⼀个同名的局部变量,⽽那个局部变量的作⽤域就在那个循环体内。
2.如何引⽤⼀个已经定义过的全局变量?答:extern 可以⽤引⽤头⽂件的⽅式,也可以⽤extern关键字,如果⽤引⽤头⽂件⽅式来引⽤某个在头⽂件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你⽤extern⽅式引⽤时,假定你犯了同样的错误,那么在编译期间不会报错,⽽在连接期间报错。
3.全局变量可不可以定义在可被多个.C⽂件包含的头⽂件中?为什么?答:可以,在不同的C⽂件中以static形式来声明同名全局变量。
可以在不同的C⽂件中声明同名的全局变量,前提是其中只能有⼀个C⽂件中对此变量赋初值,此时连接不会出错。
4.语句for( ;1 ;)有什么问题?它是什么意思?答:⽆限循环,和while(1)相同。
5.do……while和while……do有什么区别?答:前⼀个循环⼀遍再判断,后⼀个判断以后再循环。
6.请写出下列代码的输出内容#i nclude main(){ int a,b,c,d; a=10; b=a++; c=++a; d=10*a++;printf(“b,c,d:%d,%d,%d“,b,c,d); return 0; } 答:10,12,120⼀.判断题(对的写T,错的写F并说明原因,每⼩题4分,共20分)1.有数组定义int a[2][2]={{1},{2,3}};则a[0][1]的值为0。
()2.int (*ptr)(),则ptr是⼀维数组的名字。
()3.指针在任何情况下都可进⾏>, =, =MAX_SRM)return (NULL_SRM); else return SRM_no; }3. 写出程序运⾏结果 int sum(int a){ auto int c=0; static int b=3; c+=1; b+=2;return(a+b+C); } void main(){ int I; int a=2; for(I=0;Inext = NULL; p=h;for(i=0;inext = s; printf(“Please input the informationof the student: name sex no age \n“);scanf(“%s %c %d %d“,s->name, s->next = NULL; p = s; } printf(“Create successful!“); return(h); } void deletelist(struct stu *s,int a){ struct stu *p; while(s->age!=a){ p = s; s = s->next; } if(s==NULL)printf(“The record is not exist.“); else { p->next = s->next; printf(“Delete successful!“); } } void display(struct stu *s){ s = s->next; while(s!=NULL){ printf(“%s %c %d %d\n“,s->name,s->sex,s->no,s->age); s = s->next; } } int main(){ struct stu *s; int n,age; printf(“Please input the length of seqlist:\n“); scanf(“%d“, s = creatlist(n); display(s); printf(“Please input the age:\n“);scanf(“%d“, deletelist(s,age); display(s); return 0; }2.实现⼀个函数,把⼀个字符串中的字符从⼩写转为⼤写。
从网上整理的华为机试题目

一、华为机试——2018年校招10号参加的华为的机试,这次的3道题难度适中。
第一题字符串,第二题贪心算法(会不会),dp可以解,第三题长整数相乘。
因为题主做过第三题原题,刚开始就把第三题秒了~~然后开始做第一题,一般10分钟就可以搞定。
第二题要想一下,不过也差不多是原题,Leetcode上第55题jump game应该是此题原型。
因为都刷过几乎是原题的原故,一个小时不到3题就AC完了下面是完整题目和代码题目一、给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。
举例!假设原始字符串为eeefgghhh则每种字符出现的次数分别是3次 1次 1次 3次重新排序后输出的字符串如下:efghegheh编写程序,实现上述功能。
【温馨提示】1.原始字符串中仅可能出现“数字”和“字母”;2.请注意区分字母大小写。
1.#include <iostream>2.#include <map>3.#include <vector>4.#include <algorithm>ing namespace std;6.int main(){7.string str;8.int a[128]={0};9.while(cin >> str){10.for(int i=0;i<();i++){11.a[str[i]]++;}....位。
我不放心,输出测试一下。
之后就简单了,输出a数组中从小到大第一个值为1的i值即可。
值得注意的是,这种题其实写在一个main函数里就够了,而且这样写也比较好。
毕竟机试不是做项目,不需要模块化,这样修改起来也比较容易。
题目二、宝宝表示这道题其实不难,就是两个字,复杂。
我的思路大概就是1.首先判断所给矩形是否相交,不相交直接输出02.若相交,将相交面积表示出来,并输出结果最后发现貌似判断相交的思路会影响相交求面积的思路(正所谓数学题多问,第一问为第二问做铺垫一样)由于我的判相交思路不好影响了第二问,导致这一题我没做出来。
华为算法工程师笔试题

华为算法工程师笔试题华为算法工程师笔试题HCNA认证包括但不限于:网络基础知识,流行网络的基本连接方法,基本的网络建造,基本的网络故障排除,华为路由交换设备的安装和调试。
下面是店铺收集的华为算法工程师笔试题,希望大家认真阅读!1.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“deefd” 输出:“def”输入:“afafafaf” 输出:“af”输入:“pppppppp” 输出:“p”main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。
一定要保证编译运行不受影响using namespace std;bool g_flag[26];void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr){assert(pInputStr != NULL);int i = 0;if (pInputStr == NULL || lInputLen <= 1){return;}const char *p = pInputStr;while(*p != '\\0'){if (g_flag[(*p - 'a')]){p++;}else{pOutputStr[i++] = *p;g_flag[*p - 'a'] = 1;p++;}}pOutputStr[i] = '\\0';}int main(){memset(g_flag,0,sizeof(g_flag));char input[] = "abacacde";char *output = new char[strlen(input) + 1];stringFilter(input,strlen(input),output);cout<<output<<endl;< bdsfid="105" p=""></output<<endl;<>delete output;return 0;2.通过键盘输入一串小写字母(a~z)组成的字符串。
华为c 笔试题及答案

华为c 笔试题及答案华为C笔试题及答案一、简介华为C是华为公司面向应届大学生的笔试选拔考试,旨在评估应聘者的综合素质和潜力。
本文将介绍华为C笔试题目及答案,帮助应聘者更好地准备华为C笔试。
二、题目及答案1. C语言基础题目:请编写一个程序,输出1-100之间的所有偶数。
答案:#include <stdio.h>int main() {int i;for(i=1; i<=100; i++) {if(i%2 == 0) {printf("%d ", i);}}return 0;}2. 数据结构与算法题目:请说明哈希表的原理及其应用场景。
答案:哈希表是一种根据关键字直接访问内存地址的数据结构。
其原理是通过哈希函数将关键字转换为一个索引值,然后将数据存储在对应索引值的位置上。
哈希表的应用场景包括缓存系统、数据库索引、字典等。
3. 计算机网络题目:请解释TCP和UDP协议的区别及其适用场景。
答案:TCP和UDP都是传输层的协议,但有一些区别。
TCP是面向连接的可靠传输协议,能够保证数据的完整性和顺序,适用于需要可靠传输的场景,如文件传输。
UDP是无连接的不可靠传输协议,不保证数据的完整性和顺序,适用于实时性要求较高的场景,如音视频传输。
4. 数据库题目:请解释事务的概念,并说明ACID原则。
答案:事务是数据库操作的最小单位,是一组对数据库进行的操作。
ACID是事务的四个基本属性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),保证事务的可靠性和稳定性。
5. 操作系统题目:请解释什么是进程和线程,并说明它们的区别。
答案:进程是操作系统进行资源分配和调度的最小单位,是程序在执行过程中的一个实例。
线程是进程中的一条执行路径,是CPU调度的最小单位。
进程之间相互独立,拥有独立的地址空间,而线程共享同一地址空间。
华为面试笔试题算法工程师(机器学习)

一、二面问题汇总:
自我介绍;
非CS专业为什么做机器学习(我记得有本书上说机器学习产生于控制学科...);
看成绩单,因为我们学校信息学院分院之前自动化和计算机课程几乎相同,所以面试官比较满意;
与岗位相关的课程介绍;
分类器了解哪些,自己写过哪些;
熟悉的语言,用过哪些框架;
最熟悉哪个分类模型;
项目介绍;
项目中用到的算法详细;
树模型和熵介绍,为什么xgboost效果好;
除了课程外读了哪些书和视频公开课;
线性回归解析解的推导(三种方法),SVD与PCA的关系;
深度学习的适用场景;
深度学习与传统方法的区别,深度学习为什么效果这么好;
熟悉数据结构与算法吗;
贪婪在机器学习中有哪些应用;
想在哪个城市,为什么,为什么不去**城市;
面试了哪些公司,有哪些offer;
为什么去面试这些公司,找工作看重哪些方面;
有什么问题。
华为笔试题(答案)

笔试题选择题1、以下程序的输出结果是:#include <stdio.h>int main(){int n =4;while (n--){printf("%d ", --n); }printf("\r\n");return0;}答案:2 02、设有以下宏定义:#define N 4#define Y(n) ((N+1)*n)则执行语句:Y(5+1)为:答案:263、enum ENUM_A{x1,y1,z1 =5,a1,b1};enum ENUM_A enumA = y1; enum ENUM_A enumB = b1;请问enumA和enumB的值是多少?答案:1,74、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是:答案:(*p)(a,b)或者p(a,b)5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是:答案:没有元素,栈空。
6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是:答案:32位操作系统的寻址大小是32位,即4字节。
7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是:A)p+1 B)a+1 C) a++ D) ++p答案:C8、设有如下定义:unsigned long pulArray[] = {6,7,8,9,10};unsigned long *pulPtr;则下列程序段的输出结果是什么?pulPtr = pulArray;*(pulPtr + 2) += 2;printf("%d, %d\r\n", *pulPtr, *(pulPtr + 2));A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10答案:D9、以下程序运行后,输出结果是什么?void main(){char *szStr = "abcde";szStr += 2;printf("%1u\r\n", szStr);return;}A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错答案:C10、给出以下定义:char X[] = "hello";char Y[] = {'h', 'e', 'l', 'l', 'o'};则正确的叙述为:A)数组X和数组Y等价B) 数组X和数组Y的长度相同C) 数组X的长度大于数组Y的长度D) 数组X的长度小于数组Y的长度答案:C11、在32位X86下,有下列程序#include <stdio.h>void main(){union{int k;char i[2];} *s, a;s = &a;s->i[0] = 0x39;s->i[1] = 0x38;printf("%x\r\n", a.k);}输出结果是:A) 3839 B) 3938 C) 380039 D) 不可预知答案:A12、有如下函数定义:unsigned long MyFunc(unsigned long ulKey){return (((ulKey & 0x000000ff UL) << 24) |((ulKey & 0x0000ff00UL) << 8) |((ulKey & 0x00ff0000UL) >> 8) |((ulKey & 0xff000000UL) >> 24));}则MyFunc(0x12345678)的返回值是:A) 0x12345678 B) 0x87654321 C) 0x78563412 D) 0x12563478答案:C13、((a>b)?a:b)代表什么含义:A) 代表a,b之中较小的那个值B) 代表a,b之中较大的那个值C) 代表a是否比b大D) 语法错误答案:B14、某系统总线的一个总线周期包含3个时钟周期,每个总线周期可以传送32位数据。
华为校招历年机试题目

华为历年笔试题目总结因最近要参加华为的招聘,便从网上搜集了一些华为笔试历年题目,现总结献给大家,因本人非软件出生,水平有限,仅供参考,若有误处,请海涵。
1、字符串问题∙问题描述:把一个字符串中的除大写字母、小写字母和数字字符之外的其他字符都去掉,输出新字符串。
∙要求实现函数:void my_string(char* input, char* output)【输入】char* input,输入的字符串【输出】char* output,输出的字符串【返回】无∙示例输入:inp ut = “A*(BC&De+_fg/*”输出:output = “ABCDefg”输入:input = “aB+_9”输出:output = “aB9”程序如下:void my_string(char* input, char* output){int i,j;i=j=0;while(*(input+i)!='\0'){if((*(input+i)>='A'&&*(input+i)<='Z')||(*(input+i)>='a'&&*(input+i)<='z')||(*(input+i)>='0'&&*(input+i)<='9')){*(output+j)=*(input+i);j++;}i++;}*(output+j+1)='\0';}题目描述:输入一个字符串,将其中大写字母转换为对应小写字母之后的第五个字母,若原始大写字母为V~Z, 则转换为对应小写字母的值减21。
其他字符不变,输出转换后的字符串。
例如,对于字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b要求实现函数:void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“Axs3mWss”输出:“fxs3mbss”void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr){int i=0;for(i=0;i<lInputLen;i++){if(pInputStr[i]>='A'&&pInputStr[i]<'V')pOutputStr[i]=pInputStr[i]+'a'-'A'+5;else if(pInputStr[i]>='V'&&pInputStr[i]<='Z')pOutputStr[i]=pInputStr[i]+'a'-'A'-21;elsepOutputStr[i]=pInputStr[i];}}3. 单词统计题目描述:输入一段英文文本,用程序统计出现频率最高和最低的两个单词;英文文本中仅出现这四类字符:空格( )、英文逗号(,)、英文句号(.)、英文大小写字母(a-z、A-Z)单词之间的分隔符仅考虑这三种:空格( )、英文逗号(,)、英文句号(.);仅大小写不同的单词算同一个单词;如果两个单词出现次数相同,则在文本中首次出现的单词优先返回。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华为2014笔试算法题汇总1.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“deefd”输出:“def”输入:“afafafaf”输出:“af”输入:“pppppppp”输出:“p”main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,但是不要改变函数原型。
一定要保证编译运行不受影响[cpp] view plaincopy//////////////////////////////////////////////////////////////////////////#include <iostream>#include <cassert>using namespace std;bool g_flag[26];void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr) {assert(pInputStr != NULL);int i = 0;if (pInputStr == NULL || lInputLen <= 1){return;}const char *p = pInputStr;while(*p != '\0'){if (g_flag[(*p - 'a')]){p++;}else{pOutputStr[i++] = *p;g_flag[*p - 'a'] = 1;p++;}}pOutputStr[i] = '\0';}int main(){memset(g_flag,0,sizeof(g_flag));char input[] = "abacacde";char *output = new char[strlen(input) + 1];stringFilter(input,strlen(input),output);cout<<output<<endl;delete output;return 0;}2.通过键盘输入一串小写字母(a~z)组成的字符串。
请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:1、仅压缩连续重复出现的字符。
比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
2、压缩字段的格式为"字符重复的次数+字符"。
例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数:void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“cccddecc”输出:“3c2de2c”输入:“adef”输出:“adef”输入:“pppppppp”输出:“8p”[cpp] view plaincopy//////////////////////////////////////////////////////////////////////////#include <iostream>#include <cassert>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){const char *p = pInputStr;int num = 1;int i = 0;p++;while(*p != NULL){while(*p == *(p-1)&& *p != NULL){p++;}if (num > 1){int size = 0;int temp = num;while(num) //计算位数{size++;num /= 10;}num = 1;for (int j = size; j > 0; j--){pOutputStr[i+j-1] = '0'+ temp%10; temp /= 10;}i +=size;pOutputStr[i++] = *(p-1);p++;}else{pOutputStr[i++] = *(p-1);}}pOutputStr[i] = '\0';}int main(){char input[] = "cccddecc";char *output = new char[strlen(input) + 1];stringZip(input,strlen(input),output);cout<<output<<endl;return 0;}3.通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
输入字符串的格式为:“操作数1 运算符操作数2”,“操作数”与“运算符”之间以一个空格隔开。
补充说明:1、操作数为正整数,不需要考虑计算结果溢出的情况。
2、若输入算式格式错误,输出结果为“0”。
要求实现函数:void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】pInputStr:输入字符串lInputLen:输入字符串长度【输出】pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出示例输入:“4 + 7”输出:“11”输入:“4 - 7”输出:“-3”输入:“9 ++ 7”输出:“0”注:格式错误[cpp] view plaincopy//////////////////////////////////////////////////////////////////////////#include <iostream>using namespace std;void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr){const char *input = pInputStr;char *output = pOutputStr;int sum = 0;int operator1 = 0;int operator2 = 0;char *temp = new char[5];char *ope = temp;while(*input != ' ') //获得操作数1 {sum = sum*10 + (*input++ - '0'); }input++;operator1 = sum;sum = 0;while(*input != ' '){*temp++ = *input++;}input++;*temp = '\0';if (strlen(ope) > 1 ){*output++ = '0';*output = '\0';return;}while(*input != '\0') //获得操作数2{sum = sum*10 + (*input++ - '0');}operator2 = sum;sum = 0;switch (*ope){case '+':itoa(operator1+operator2,pOutputStr,10); break;case '-':itoa(operator1-operator2,pOutputStr,10); break;default:*output++ = '0';*output = '\0';return;}}int main(){char input[] = "4 - 7";char output[] = " ";arithmetic(input,strlen(input),output);cout<<output<<endl;return 0;}4.输入1--50个数字,求出最小数和最大数的和[cpp] view plaincopy//华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和//输入以逗号隔开#include<stdio.h>#define N 50void sort(int a[],int n);int main(void){char str[100];int a[N]={0};gets(str); //要点1:动态的输入1--50个整数,不能确定个数,只能用字符串输入,然后分离出来int i=0;int j=0;int sign=1;while(str[i]!='\0'){if(str[i]!=',') //输入时要在半角输入{if(str[i] == '-') //要点:2:有负整数的输入{// i++; //易错点1sign=-1;}else if(str[i]!='\0') //不用else的话,负号也会减去‘0’ {a[j]=a[j]*10 + str[i]-'0'; //要点3:输入的可以是多位数}}i++;if(str[i]==',' || str[i]=='\0') //这个判断是在i自加以后{a[j]=a[j]*sign; //易错点2sign=1; ////易错点3j++; //j就是a数组的个数范围0到j-1}}sort(a,j);printf("Max number + Min number = %d",a[0]+a[j-1]);return 0;}void sort(int a[],int n) //选择排序{int i,j;int k;int temp;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++){if(a[k]>a[j])k=j;}if(i!=k){temp = a[k];a[k] = a[i];a[i] = temp;}}for(i=0;i<n;i++)printf("%-5d",a[i]); puts("");}备注说明,非正文,实际使用可删除如下部分。