}
{ if(*cpSource == ch) { iTemp = 0; cpTemp = cpSource; while(*cpSource == ch) ++iTemp, ++cpSource; if(iTemp > iCount) iCount = iTemp, cpDest = cpTemp; if(!*cpSource) break; } ++cpSource; }
return cpDest;
16. 给定字符串A和B,输出A和B中的最大公共子串。
#include
char *commanstring(char shortstring[], char longstring[]) { int i, j; char *substring=malloc(256); if(strstr(longstring, shortstring)!=NULL) //如果??,那么返回shortstring return shortstring; for(i=strlen(shortstring)-1;i>0; i--) //否则,开始循环计算 { for(j=0; j<=strlen(shortstring)-i; j++){ memcpy(substring, &shortstring[j], i); substring[i]='\\0'; if(strstr(longstring, substring)!=NULL) return substring; } } return NULL; }
int main() { char *str1=malloc(256); char *str2=malloc(256); char *comman=NULL;
}
gets(str1); gets(str2);
if(strlen(str1)>strlen(str2)) //将短的字符串放前面 comman=commanstring(str2, str1); else comman=commanstring(str1, str2);
printf(\return 0;
17. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系
列库函数。
include
#define SIZE 32
char *dec_bin(long num) { int i = SIZE; char *buffer = (char *) malloc(SIZE+1); if(NULL == buffer) { printf(\ return NULL; } buffer[SIZE] = '\\0'; memset(buffer,'0',SIZE); while(num) { buffer[i--] = num % 2 + '0'; num = num / 2; } return buffer; }
char *dec_hex(long num) { int i ; char *buffer = (char*)malloc(11); if(NULL == buffer) { printf(\
return NULL; } buffer[0] = '0'; buffer[1] = 'x'; buffer[10] = '\\0'; char* temp = buffer + 2; for ( i = 0; i < 8; i++) { temp[i] = (char)(num<<4*i>>28); temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55; } return buffer; }
int main() { long int num = 20; printf(\ //dec_bin(num); printf(\ return 0; }
18. 在不用第三方参数的情况下,交换两个参数的值。
#include
int i=60; int j=50;
/*方法一*/ i=i+j; j=i-j; i=i-j;
printf(\ printf(\}
方法二: i^=j; j^=i; i^=j;
方法三:
// 用加减实现,而且不会溢出
a = a+b-(b=a);
19. 写一个程序,把一个100以内的自然数分解因数。(自然数分解因数就是将一个自然数
分解为几个素数的乘积,提示,由于该数不是很大,所以可以将质数保存在数组中,以加快计算速度)。
①递归算法: {
#include
int resolve(unsigned int num) { int i; char buf[10] = {0}; for(i = 2;i <= sqrt(num);i++) { if(0 == num % i ) { printf(\ return resolve(num /= i); break; } } return printf(\}
int main() { unsigned int num; while(scanf(\ resolve(num); return 0; }
②数组
#include
int resolve(unsigned int number) { int i = 2,num = number; int j = 0; char buf[30] = {0}; while(i <= sqrt(num))
{ if(0 == num % i) { buf[j++] = i + '0'; buf[j++] = '*'; num /= i; continue; } else { i++; } } buf[j+2] = '\\0';
// buf[j++] = num + '0'; 如果num大于9将会出错 char tmp[3] = {'0'};/*100以内最大地质数最多两位*/ sprintf(tmp,\ strcat(buf,tmp); if(0 == j) { printf(\ } else { printf(\ } return 0; }
int main() { unsigned int num; printf(\ while(scanf(\ resolve(num); return 0; }
20. 完成字符串拷贝可以使用sprintf、strcpy及memcpy函数,请问这些函数有什么区别,
你喜欢使用哪个,为什么?
sprintf 可以进行额外的格式化
strcpy 会复制直到出现 '' 为止,可能溢出
memcpy 只负责复制指定数量的 bytes,不处理 '' 的情况
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言笔试题答案(6)在线全文阅读。
相关推荐: