




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 利用递归调用手段编程计算N!答:#include<iostream>using namespace std;int t;int n;int Find(int n)if (n = 1)return 1;elset = Find(n-1) * n;return t;int main(void)cin>>n;int t = Find(n);cout<<n<<"! = "<<t<<endl;return 0;2. 写一个八进制转换为十进制的问题的程序。(设八进制数只有两位数的)#include<io
2、stream>using namespace std;unsigned int oct2dec(unsigned int oct)return oct /10 * 8 +oct %10;int main(void)unsigned int oct = 0;unsigned int dec = 0;cout<<”please input a octet number (Be sure the number you input is begin with a 0):”<<n;cin>>oct;dec = oct2dec(oct);cout<<d
3、ec<<endl;return 0;3. 写出二分查找的代码.int binary_search(int *arr, int key, int n) int low = 0; int high = n - 1; int mid; while (low <= high) mid = (high + low) / 2; if (arrmid > key) high = mid - 1; else if (arrmid < key) low = mid + 1; else return mid; return -1; *4.实现strcpy函数(*出现次数相当频繁cha
4、r* strcpy(char* dest, const char* src) assert(dest != NULL) && (src != NULL); char* address = dest; while (*dest+ = *src+) != '0'); return address;char * strcpy(char * strDest,const char * strSrc) char * strDestCopy=strDest; /3 if (strDest=NULL)|(strSrc=NULL) /1 throw "Invalid a
5、rgument(s)" /2 while (*strDest+=*strSrc+)!='0'); /4 return strDestCopy; *5实现strcmp函数#include<iostream>#include<string>#include<assert.h>using namespace std;int strcmp(const char* str1, const char* str2) assert(str1 != NULL) && (str2 != NULL); int ret = 0; /*
6、60; 转化为unsigned char 是为了防止溢出 例如(char)0x7f-(char)0x80=255, (unsigned char)0x7f-(unsigned char)0x80=-1*/ while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2 !='0' && *str1 != '0') str1+; str2+; if (ret > 0) ret = 1; el
7、se if (ret < 0) ret = -1; return ret;int main(void)cout<<strcmp("abd","abce")<<endl;return 0;*6 string类的编写#include<iostream>using namespace std;class Stringpublic :String(const char *str = NULL);/普通构造函数String(const String &other);/拷贝构造函数String(void);/析构函数
8、String &operator=(const String &other); /赋值函数String &operate+(const String &s1, const String &s2);/加法函数 private:char *m_data;/普通构造函数String:String(const char *str)if (str = NULL)m_data = new char1;*m_data = '0'elseint lenth = strlen(str);m_data = new charlenth+1;strcpy(m_d
9、ata, str);/拷贝构造函数String:String(const String &other)int lenth = strlen(other.m_data);m_data = new charlenth+1;strcpy(m_data, other.m_data);/析构函数String:String()delete m_data;/赋值函数String & String:operator=(const String &other)/检查自赋值if(this = &other)return *this;/释放原有资源delete m_data;/分配新
10、的内存资源,并赋值int len = strlen(otehr.m_data);m_data = new charlen+1;strcpy(m_data, other.m_data);/返回本对象的引用return *this;/加法函数String &operator+( const String &s1, const String &s2)String temp;delete temp.data;/ temp.data是仅含0的字符串temp.data = new charstrlen(s1.data) + strlen(s2.data) +1;strcpy(tem
11、p.data, s1.data);/data为char *型的数据成员。strcat(temp.data, s2.data);return temp;/便于理解上述代码,写出main函数int main(void) String str_a = new String();/调用构造函数String str_b = new String(“abc”); String str_c = str_b;/调用拷贝构造函数 str_c = str_a;/赋值 String srt_d; str_d =str_c + str_b;7. 写出在母串中查找子串出现次数的代码。 思路:从第一个字符开始查找,然后逐
12、个比较两个字符串是否相同,直到子字符串结束都相同则表明找到一次,num+1,然后第二个字符开始。重复int count(char* str,char* substr) char* str1; char* str2; int num = 0; while(*str!='0') str1 = str; str2 = substr; while(*str2=*str1&&(*str2!='0')&&(*str1!='0') str2+; str1+; if(*str2 = '0') num+; str+;
13、 return num; *8.写函数完成内存的拷贝一个内存拷贝函数的实现体void *memcpy(void *pvTo,const void *pvFrom,size_t size)assert(pvTo!=NULL)&&(pvFrom!=NULL);byte *pbTo=(byte*)pvTo; /防止地址被改变byte *pbFrom=(byte*)pvFrom;while (size- > 0)*pbTo+ = *pbForm+;return pvTo;*9.将一个数字字符串转换为数字."1234" ->1234i nclude<
14、iostream>using namespace std;int f(char* s) int k = 0; while (*s != 0) k = 10 * k + (*s+)- '0' /k每乘以1次10,则位数左移一位(如个位变成10位) return k;int main() int digit = f("4567"); cout<<digit<<endl; cin.get();10. 求1000!的末尾有几个0 (用素数相乘的方法来做,如72=2*2*2*3*3);求出1->1000里,能被5整除的数的个数n1,
15、能被25整除的数的个数n2,能被125整除的数的个数n3,能被625整除的数的个数n4.1000!末尾的零的个数=n1+n2+n3+n4; #include<stdio.h> #define NUM 1000 int find5(int num) int ret=0; while(num%5=0) num/=5; ret+; return ret; int main() int result=0; int i; for(i=5;i<=NUM;i+=5) result+=find5(i); printf(" the total zero number is %dn&q
16、uot;,result); return 0; 11. 写一个函数找出一个整数数组中,第二大的数 。 const int MINNUMBER = -32767 ; int find_sec_max( int data , int count) int maxnumber = data0 ; int sec_max = MINNUMBER ; for ( int i = 1 ; i < count ; i+) if ( datai > maxnumber ) sec_max = maxnumber ; maxnumber = datai ; else if ( datai >
17、sec_max ) sec_max = datai ; return sec_max ;12. 用递归算法判断数组aN是否为一个递增数组。 递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束: bool fun( int a, int n ) if( n= =1 ) return true; if( n= =2 ) return an-1 >= an-2; return fun( a,n-1) && ( an-1 >= an-2 ); /递归的同时要保证上一次的条件成立13. 选择排序算法思想简单描述:在要排序的一组数中,选出
18、最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。 选择排序是不稳定的。算法复杂度O(n2)-n的平方【外层循环n-1趟,内层(第i+1趟)循环n-i-1次】【对比冒泡排序:外层循环n-1趟,内层(第i趟)循环n-i-1次】void select_sort(int *x, int n) int i, j, min, t; for (i=0; i<n-1; i+) /*要选择的次数:共n-1次*/ min = i; /*假设当前下标为i的数最小(从0开始,逐步加1),比较后再调整*/ for (j=i+1; j&
19、lt;n; j+)/*循环找出最小的数的下标是哪个*/ if (*(x+j) < *(x+min) min = j; /*如果后面的数比前面的小,则记下它的下标*/ if (min != i) /*如果min在循环中改变了,就需要交换数据*/ t = *(x+i); *(x+i) = *(x+min); *(x+min) = t; 14直接插入排序算法思想简单描述: 在要排序的一组数中,假设前面(n-1) n>=2 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 直接插入排序是稳定的。算法时间复杂度O(n2)-
20、n的平方【直接插入,冒泡,选择排序的时间复杂度一样】void insert_sort(int *x, int n)int i, j, t; for (i=1; i<n; i+) /*要选择的次数:1n共n-1次/*暂存下标为i的数。注意:下标从1开始,原因就是开始时, 第一个数即下标为0的数,前面没有任何数,单单一个,认为它是排好顺序的,方便下面的for循环下标的书写。*/ t=*(x+i); for (j=i-1; j>=0 && t<*(x+j); j-) /*注意:j=i-1,j-,这里就是在下标为i的数后面有序列中找插入位置。【这里的后面指的是右边】*
21、/*(x+j+1) = *(x+j); /*如果满足条件就往后挪。最坏的情况就是t比下标为0的数都小,它要放在最前面,j=-1,退出循环*/ *(x+j) = t; /*找到下标为i的数的放置位置【改变参考点】*/看到这里15冒泡排序16. 文件中有一组整数,要求排序后输出到另一个文件中。 #include<iostream> #include<fstream> using namespace std; void Order(vector<int>& data) /bubble sort int count = data.size() ; int t
22、ag = false ; / 设置是否需要继续冒泡的标志位 for ( int i = 0 ; i < count ; i+) for ( int j = 0 ; j < count - i - 1 ; j+) if ( dataj > dataj+1) tag = true ; int temp = dataj ; dataj = dataj+1 ; dataj+1 = temp ; if ( !tag ) break ; int main( void ) vector<int>data; ifstream in("c:data.txt");
23、 if ( !in) cout<<"file error!" exit(1); int temp; while (!in.eof() cin>>temp; data.push_back(temp); in.close(); /关闭输入文件流 Order(data); ofstream out("c:result.txt"); if ( !out) cout<<"file error!" exit(1); for ( i = 0 ; i < data.size() ; i+) out<&l
24、t;datai<<" " out.close(); /关闭输出文件流 17. 输入一个字符串,将其逆序后输出。(使用C+,不建议用伪码) #include <iostream> using namespace std; void main() char a50;memset(a,0,sizeof(a); int i=0,j; char t; cin.getline(a,50,'n'); for(i=0,j=strlen(a)-1;i <strlen(a)/2;i+,j-) t=ai; ai=aj; aj=t; cout <
25、 <a < <endl; 18.链表题1)编程实现一个单链表的建立。#include<iostream>#include<stdio.h>#include<string.h>#include<conio.h>using namespace std;typedef struct studentint data;struct student *next;node;node * Create(void)node *head = NULL;node *p = NULL;node *s = NULL;int x,cycle = 1;hea
26、d = (node *)malloc (sizeof (node);p = head;printf("please int put the data: ");scanf("%d", &x);p -> data = x;p ->next = NULL;while(cycle)printf("please int put the data: ");scanf("%d", &x);if(x != 0)s = (node *)malloc(sizeof (node);s ->data =
27、x;printf("n %d", s->data);p -> next = s;p = s;else cycle = 0;p -> next = NULL;printf("n yyy %d", head -> data);return head;int main(void)Create();return 0;2)实现单链表的测长双链表的测长也是一样int CaculateLenth(struct student *head)struct student *p = NULL;p = head;int n = 0;while(p !=
28、 NULL)n+;p = p->next;return n;3)编程实现单链表的打印双链表也是一样的void Show(struct student *head)struct student *p = NULL;p = head;int n = 0;while(p != NULL)cout<<p->data<<endl;p = p -> next;4)编程实现单链表删除节点解题思路:先遍历比较值,找到要删除节点后再判断是否为头节点,还是后面的节点【删除中间的节点和删除末尾的节点是一个样的】。node *Delete(struct student *he
29、ad, int num)struct student *p1 = NULL;struct student *p2 = NULL;p1 = head;while (num != p1->data && p1->next != NULL)p2 = p1;p1 = p1 ->next;if(num = p1 -> data)if(p1 = head)/删除的是头节点head = p1 -> next;free(head);else/删除的是头结点后面的节点p2 -> next = p1->next;free(p1);elsecout<&
30、lt;"the num hasn't been found"<<endl;return head;5)编程实现单链表的插入解析:如果插入在节点以前,则p0的next指向p1,投节点指向p0,如下图所示如果插入尾节点,如下图所示。解题思路:先遍历对比关键值,找到后再判断在第一个节点前插入还是中间插入还是最后面插入。node *Insert(node *head, int num)node *p0, *p1, *p2;p1 = head;p0 = (node *)malloc(sizeof(node);p0->data = num;while(p0 -
31、> data > p1 ->data && p1 -> next != NULL)p2 = p1;p1 = p1 -> next;if(p0 ->data <= p1 -> data)if(head = p1)/在第一个节点前插入p0 ->next = p1;head = p0;else/第一个节点以后插入,但是不在末尾插入p2->next = p0;p0 ->next = p1;else/尾部插入p1->next = p0;p0->next = NULL;return head;6)编程实现单链表的
32、逆转。解析:单链表模型如下:进行单链表逆转,首先要让p2的next指针指向p1,然后重复p2的next指向p1,p1指向p2,p2指向p3node *Reverse(node *head)node *p1 = NULL;node *p2 = NULL;node *p3 = NULL;if(head = NULL && head ->next = NULL)return head;p1 = head;p2 = p1 -> next;while(p2 != NULL)p3 = p2->next; /保存第三个节点的地址,防止丢失p2 -> next = p1
33、;/使第二个节点指向第一个节点p1 = p2;/节点后推,把第二个节点作为第一个节点p2 =p3;/节点后推,把第三个节点作为第二个节点head -> next = NULL;/把第一个节点作为尾节点head = p1;return head;19. 怎么样将整数转化为字符串数,并且不用函数itoa。解析:将整数转化为字符串,可以采用加0的,再逆序的办法,整数加0就会隐式转化成char类型的数。#include<iostream>#include<stdio.h>int main(void)int num = 12345;int j = 0; int i = 0;
34、char temp7, str7;/itoa(number, string, 10);/假如可以使用itoa函数则十分容易(int to alpha)while(num != 0)tempi = num % 10 + 0;/获取个位上的数字i+;num = num / 10;/为了获取下一个个位上的数字(即把每个位上的数字降一位)做tempi = 0;/最后一个位 printf(“temp = &sn”, temp);i = i-1;printf(“temp = %dn”, i);/刚刚转化的字符串时逆序的,必须把它反转过来。while(i >= 0)strj = tempi;j
35、+;i-;strj = 0;printf(“string = %sn”, str);return 0;输入一个数,测试其是否是回文数。解析:建立数组,按位存储,比较首位和末位是否相同。如不同,则不是回文数。相同则继续比较,首位递增,末位递减,直到首位不再小于末位。#include<iostream>using namespace std;int main(void)int j = 10, k = 12321, p;int a10, ss, i = 0, begin, end;cout << ”please input ” << endl;cin >&g
36、t; k;p = k;while( p != 0)ss = p % 10;ai = ss;p = p/10;i+;begin = 0;end = i-1;while(begin < end) if(abegin != aend)break;elsebegin+;end-;if(begin < end)cout<<”jiade” << endl;elsecout << “zhende” << endl;cout << “i” << i << endl;cout << k;return 0;
37、将字符串askdaskaskdaskg删除指定的字符串ask,删除后结果是”ddg”。解析:删除的最好办法就是把不删除的东西提取出来。#include<stdio.h>#include<string.h>#include<conio.h>int main(void)char ch20, *p = NULL, *sub = “ask”, *str = “askdaskaskdaskg”, *str2 = NULL;int n = 0, i = 0, v;p = sub;str2 = str;while(*str2 != 0)while(*p = 0)if(*p
38、 = *str2)break;p+;If(*p != 0)chi = *str2;i+;str2+;p = sub;chi = 0;str = ch;printf(“n %s”, str);return 0;请写出一个函数来模拟C+中的strstr函数:该函数的返回值是主串中字符子串的位置以后的所有字符。请不要使用任何C程序已有的函数来完成。const char *strstr(const char *string, const char *strCharSet)解析:函数是主把主串中子串及以后的字符全部返回。比如主串“12345678”,字串是234,那么返回值就是2345678#inclu
39、de<iostream>using namespace std;const char *strstr(const char *string, congest char *strCharSet)for(int i=0; stringi != 0; i+)int j = 0;int temp = i;if(stringi = strCharSetj) while(stringi+ =strCharSetj+) if(strCharSeti = 0)return &stringi-ji = temp;return NULL;int main(void)char *string =
40、 “12345554555123”;cout<<string<<endl;char strCharSet10 = ;cin strCharSet;cout<<strstr(string, strCharSet)<<endl;return 0;将一句话里的单词进行倒置,标点符号不能倒换,比如一句话“I come from tianjin.”à“tianjin from come i”解析:解决该问题可以分成两步,第一步全盘置换将该语句变成“.nijnait morf emoc i”,第二步进行部分翻转,如果不是空格,则开始翻转单词。#in
41、clude<iostream>#include<stdio.h>int main(void)int num = -12345, j = 0, i = 0,flag = 0, begin, end;char str = “i come from tianjin.”, temp;j = strlen(str)-1;printf(“string = %sn“, str);/第一步:进行全盘翻转,将单词变成“nijnait morf emoc i”while(j > i)/strj = tempi;temp = stri;stri = strj;strj = temp;j
42、-;i+;printf(“string = %sn”, str);i = 0;/第二步,进行部分翻转,如果不是空格,则开始翻转单词队列1) 编程实现队列的入队3. 一个射击运动员打靶,靶一共有10环,连开10枪,打中90环的可能性有多少种?请用递归算法编程实现。?n21 2220 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13可以看清楚上面排序的规律,设1点的坐标为(0,0);x向右为正,向左为负,y方向向上为正,向下为负,如7的坐标是(-1,-1);2的坐标为(0,1);3的坐标为(1,1);编程实现任意一点的坐标为(1,1);编程实现任意一点的坐标
43、(x,y),输出对应的数字#include<stdio.h>int main(void) int x, y; for ( y=-4; y<5; y+) for (x=-4; x<5; x+) printf(“%5d”, foo(x,y); printf(“n”);?3.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001unsigned int intvert(unsigned
44、int x,int p,int n)unsigned int _t = 0;unsigned int _a = 1;for(int i = 0; i < n; +i)_t |= _a;_a = _a << 1;_t = _t << p;x = _t;return x;6)写出查找从一个集合中输出所有子集合的算法. . ?9. 查找第一个匹配子串位置,如果返回的是str1长度len1表示没有找到。 size_t find(char* str1,char* str2) size_t i=0; size_t len1 = strlen(str1) size_t len2
45、 = strlen(str2); /要查找的子串比母串长 if(len1-len2<0) return len1; for(;i<len1-len2;i+) size_t m = i; size_t j=0 for(;size_t j=0;j<len2;j+) if(str1m!=str2j) break; m+; if(j=len) break; return i<len1-len2?i:len1; ?24 写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)。 功能: 在字符串中找出连续最长的数字串,并
46、把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123456789 int continumax(char *outputstr, char *inputstr) char *in = inputstr, *out = outputstr, *temp, *final; int count = 0, maxlen = 0; while( *in != '0' ) if( *in >
47、 47 && *in < 58 ) for(temp = in; *in > 47 && *in < 58 ; in+ ) count+; else in+; if( maxlen < count ) maxlen = count; count = 0; final = temp; for(int i = 0; i < maxlen; i+) *out = *final; out+; final+; *out = '0' return maxlen; 7.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值
48、,直至全部输出。写出C程序。循环链表,用取余操作做*4)写出快速排序或者某种排序算法代码?出现次数相当频繁5)写出查找从一个集合中输出所有子集合的算法.?9)循环链表的节点对换和删除。11)实现任意长度的整数相加或者相乘功能。?3)客房预定的问题.根据客户报的人数,客房等级来从预备的客房中选择出所有符合要求的 客房号.客户没有要求等级时,只考虑人数因素就可以了.要考虑有些客房已经预定的情况. (写代码是要考虑好彼此的效率) 6)在文件(调用库函数创建的,不用考虑数据库的方式)中读入信息(包括职工号,职工产量) .根据输入的信息(包括职工号,职工产量).检测是否有相同的职工号记录,如有,则增加其
49、 产量.如没有,则创建新的记录.最后的记录排序的依据是职工产量(降序),如果产量相同,则 按职工号(升序). 2.面试 1)找出两个中文句子的相似度.(例如"中国江苏南京" "江苏省中国南京市".实际上是指的同一个地方.面试官的要求是一分钟给出求相似度的算法.)(幸好听老师讲过中文分词,要不 然当场就挂了) 4)写出在母串中查找子串出现次数的代码. 24. unsigned short hash(unsigned short key) return (key>>)%256 请问hash(16),hash(256)的值分别是: A.1.16;B
50、.8.32;C.4.16;D.1.3219.typedef unsigned char BYTE int examply_fun(BYTE gt_len; BYTE *gt_code) BYTE *gt_buf; gt_buf=(BYTE *)MALLOC(Max_GT_Length); . if(gt_len>Max_GT_Length) return GT_Length_ERROR; . : 20.TCP/IP通信建立的过程怎样,端口有什么作用? 三次握手,确定是哪个应用程序使用该协议 3Windows下的内存是如何管理的?4介绍.Net和.Net的安全性。5客户端如何访问.Net组
51、件实现Web Service?7谈谈COM的线程模型。然后讨论进程内/外组件的差别。?8Apartment在COM中有什么用?为什么要引入?9谈谈Windows DNA结构的特点和优点。2.数组aN,存放了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字.时间复杂度必须为o(N)函数原型:int do_dup(int a,int N)int strlen(const char* str) assert(str != NULL); int len = 0; while ('0' != *str+) len+; return len;编程计算从键盘上输入单词个数,并从中找出最多字符的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 硬件设施维护与更新工作总结计划
- 2024年西安市团结实验学校招聘笔试真题
- 2024年湖南省交通运输厅下属事业单位真题
- 微生物世界探索活动计划
- 法律与经济政策的协调试题及答案探讨
- 2024年福建艺术职业学院招聘笔试真题
- 建立良好团队文化的路径计划
- 一个学期的教学反思与总结计划
- 如何提高仓库的系统性计划
- 网络管理员考试新版本试题及答案
- 2025年度教师资格证考试综合素质必考250个重点知识汇编
- 2025年中考数学三轮冲刺训练一次函数中几何压轴题综合训练
- 中考英语词汇电子版单选题100道及答案
- 2025年中考政治总复习必考重点知识复习提纲
- 河南省安阳市(百师联盟)2023-2024学年高一下学期5月大联考数学试题(人教版)(解析版)
- 屋面防水及改造工程投标方案(技术方案)
- 口腔正畸考试试题及答案
- 血液透析患者内瘘感染的护理
- 河道治理及生态修复工程施工方案与技术措施
- 山东省枣庄市山亭区2023年小升初数学试卷(含答案)
- 2025高考语文名校作文题立意与例文参考11篇
评论
0/150
提交评论