C语言笔试汇总_第1页
C语言笔试汇总_第2页
C语言笔试汇总_第3页
C语言笔试汇总_第4页
C语言笔试汇总_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.题目:请实现下面的函数,它接受一个字符串为参数, 这个字符串包含多个单词 (单词仅由字母构成), 单词以空格隔开, 函数需要将参数字符串中的单词逆序排列, 并返回这些单词组成的字符串.例参数为 The quick brown fox jumps over a lazy dog返回值为 dog lazy a over jumps fox brown quick Thestd:string reverse(std:string const& src);string reverse(string const& src) string tmp = src; reverseWord(tmp,0,tm

2、p.length()-1); /把整个字符串反转 cout tmp endl; int last = 0; tmp += ;/给字符串尾部加入一个分隔符,这样在循环里面可以查找到最后一个单词 while(last src.length() int pos = tmp.find_first_of( ,last);/从上一次查找到的位置开始查找 reverseWord(tmp, last, pos-1); /反转查找到的单个单词 last = +pos;/从当前位置的下一个位置开始查找 return tmp;void reverseWord(string &word, int start, int

3、 end) int len = end; int i = start; while( i len) wordi = wordi wordlen; wordlen = wordi wordlen; wordi = wordi wordlen; i+; len-; 2. #include #include main() char a100,b100=,c100; int i,k=0; a0= ; gets(a+1); i=strlen(a); for(i=i-1;i=0;i-) if(ai= ) strcat(b,a+i); ai=0; puts(b+1);3.十进制转化为十六进制#include

4、 stdio.h void main() char HEX16 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F; /-这里加了int num; printf(请输入一个十进制整数:); scanf(%d,&num); int a10; /0) yushu=num%16; ai=yushu; num=num/16; i+;/*关键的就在这里,这后面书上写的要用SWITCH,但是我用不好,请各位大虾指教*/ printf(转化为十六进制的数为:); for(;i=0;i-)/倒序输出 printf(%c,HEXai); /0;L-) while(*

5、a=*b) a+;b+;k+; if(*b=NULL) n+;tempn=k; b=p;a+;for(i=0;in;i+) while(m!=tempi&*a!=NULL) *d+=*a+;m+; if(m=tempi) a=a+strlen(b); else break;return d;int main()/char stringA=abcdefg_abcwaoeinglandlaioe;int i=0,n=10;char an,cn;char bn;scanf(%sn,a);scanf(%s,b);for(i=0;in;i+) ci=ai;char f10=char* delt(char

6、 a,char b);printf(输入原串是:nt%sn,c);printf(删除子串是:nt%sn,b);printf(输出新字符串是:nt%sn,f);return 0;5.1.识别字符串中的整数并转换为数字形式(40分)问题描述: 识别输入字符串中所有的整数,统计整数个数并将这些字符串形式的整数转换为数字形式整数。要求实现函数: void take_num(const char *strIn, int *n, unsigned int *outArray)【输入】 strIn: 输入的字符串【输出】 n: 统计识别出来的整数个数 outArray:识别出来的整数值,其中outArray

7、0是输入字符串中从左到右第一个整数, outArray1是第二个整数,以此类推。数组地址已经分配,可以直接使用【返回】 无注:I、 不考虑字符串中出现的正负号(+, -),即所有转换结果为非负整数(包括0和正整数)II、 不考虑转换后整数超出范围情况,即测试用例中可能出现的最大整数不会超过unsigned int可处理的范围III、 需要考虑 0 开始的数字字符串情况,比如 00035 ,应转换为整数35; 000 应转换为整数0;00.0035 应转换为整数0和35(忽略小数点:mmm.nnn当成两个数mmm和nnn来识别)IV、 输入字符串不会超过100 Bytes,请不用考虑超长字符串的

8、情况。示例 输入:strIn = ab00cd+123fght456-25 3.005fgh输出:n = 6outArray = 0, 123, 456, 25, 3, 52. IP地址匹配(60分)问题描述: 在路由器中,一般来说转发模块采用最大前缀匹配原则进行目的端口查找,具体如下:IP地址和子网地址匹配:IP地址和子网地址所带掩码做AND运算后,得到的值与子网地址相同,则该IP地址与该子网匹配。比如:IP地址:192.168.1.100子网:192.168.1.0/255.255.255.0,其中192.168.1.0是子网地址,255.255.255.0是子网掩码。192.168.1.

9、100&255.255.255.0 = 192.168.1.0,则该IP和子网192.168.1.0匹配IP地址:192.168.1.100子网:192.168.1.128/255.255.255.192192.168.1.100&255.255.255.192 = 192.168.1.64,则该IP和子网192.168.1.128不匹配最大前缀匹配:任何一个IPv4地址都可以看作一个32bit的二进制数,比如192.168.1.100可以表示为:.,192.168.1.0可以表示为.最大前缀匹配要求IP地址同子网地址匹配的基础上,二进制位从左到右完全匹配的位数尽量多(从左到右子网地址最长)。

10、比如:IP地址192.168.1.100,同时匹配子网192.168.1.0/255.255.255.0和子网192.168.1.64/255.255.255.192,但对于子网192.168.1.64/255.255.255.192,匹配位数达到26位,多于子网192.168.1.0/255.255.255.0的24位,因此192.168.1.100最大前缀匹配子网是192.168.1.64/255.255.255.192。请编程实现上述最大前缀匹配算法。要求实现函数: void max_prefix_match(const char *ip_addr, const char *net_ad

11、dr_array, int *n)【输入】ip_addr:IP地址字符串,严格保证是合法IPv4地址形式的字符串 net_addr_array:子网地址列表,每一个字符串代表一个子网,包括子网地址和掩码, 表现形式如上述,子网地址和子网掩码用/分开,严格保证是 合法形式的字符串;如果读到空字符串,表示子网地址列表结束【输出】n:最大前缀匹配子网在*net_addr_array数组中对应的下标值。如果没有匹配返回-1示例 输入:ip_addr = 192.168.1.100net_addr_array = 192.168.1.128/255.255.255.192,192.168.1.0/255

12、.255.255.0,192.168.1.64/255.255.255.192,0.0.0.0/0.0.0.0,输出:n = 2哪位大侠帮帮忙,急求,高分悬赏最佳答案 #include #include void take_num(const char *strIn, int *n, unsigned int *outArray) const char * p = strIn;int next = 0;*n = 0;outArray0 = 0;assert(p & n & outArray);for (p = strIn;*p;p+) if (0=*p)&(*p=9) outArray*n =

13、 (outArray*n * 10)+(*p) - 0);next = 1;/*后面还有*/ else if (next = 1) (*n)+;next = 0; void max_prefix_match(const char *ip_addr, const char *net_addr_array, int *n)int ip,tar_net,tar_mask;/*ip地址*/int ip_it4,net_it4,mask_it4;char * p;int index,max_index,cur_bits,max_bits = 0,bit;*n = -1;sscanf(ip_addr,%d

14、.%d.%d.%d,&ip_it0,&ip_it1,&ip_it2,&ip_it3);ip = (ip_it024)+(ip_it116)+(ip_it2 8)+ip_it3);for (index = 0;net_addr_arrayindex0 != 0;index+) /*获取网络号和掩码*/p = net_addr_arrayindex;sscanf(p,%d.%d.%d.%d/%d.%d.%d.%d,&net_it0,&net_it1,&net_it2,&net_it3,&mask_it0,&mask_it1,&mask_it2,&mask_it3);tar_mask = (mask

15、_it024)+(mask_it116)+(mask_it2 8)+mask_it3);tar_net = (net_it024)+(net_it116)+(net_it2 8)+net_it3);if (tar_mask) & (ip) = (tar_net) cur_bits = 0;/*计算1的个数*/for (bit = 0;bit = 1;if (cur_bits max_bits) max_bits = cur_bits;max_index = index;if (max_bits != 0) *n = max_index;int main()int i, n,arrayOut10

16、0 = 0;char *strIn = ab00cd+123fght456-25 3.005fgh;char *ip_addr = 192.168.1.100 ;char *net_addr_array1024 = 192.168.1.128/255.255.255.192,192.168.1.0/255.255.255.0,192.168.1.64/255.255.255.192,0.0.0.0/0.0.0.0,;take_num(strIn,&n,arrayOut);printf(:input:%snoutput: %dn,strIn,n);for (i = 0;i n;i+) print

17、f(%dn,arrayOuti);max_prefix_match(ip_addr,net_addr_array,&n);if (n != -1) printf(max:%d %s,n,net_addr_arrayn);return 0;杨辉三角#includemain()int a1010,i,j,k; /*k是用来控制缩进长度的*/for(i=0;i10;i+) for(j=0;j=i;j+) if(j=0|j=i) aij=1; else aij=ai-1j-1+ai-1j; for(i=0;i10;i+)for(k=1;k=(10-i);+k) printf( );/*有三个空格,根据

18、后面输出项的宽度决定,即后面的1/2*/for(j=0;j=i;j+)printf(%6d,aij);/*最好设为偶数个宽度,根据你写的程序,其实4就合适了*/printf(n);getchar();/*方便查看结果而设的暂停*/C语言输出杨辉三角直角三角形杨辉三角/c语言,求直角的 #include #define M 10 void main() int aMM, i , j ; for(i=0;iM;i+) for(j=0;j=i;j+) if(i=j|j=0) aij=1; else aij=ai-1j+ai-1j-1; printf(%d,aij); if(i=j)printf(n)

19、; 使用数组打印金字塔型杨辉三角 #include void main() int a1010,i,j; for(i=0;i=i;j-) printf(%2c, );/*两个空格*/ for(j=0;j=i;j+) if(i=j|j=0) aij=1; else aij=ai-1j+ai-1j-1; printf(%3d ,aij); /*%3d后一个空格*/ if(i=j) printf(n); 不用数组输出金字塔形杨辉三角 #include #define N 10 void main() unsigned int i,j,k; unsigned int b,c; for(i=0;ii;j-) printf(); for(j=0;j=1) for(k=i-j+1;k=i;k+) b*=k; for(k=1;k=j;k+) c*=k; prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论