logo资料库

中大信科院复试C语言真题(2003-2013).pdf

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
中大信科院计算机历年复试专业课真题 CCCC 语 v2.1v2.1v2.1v2.1 200320032003 年 2003 1.有关递归填空,题目略 2.最大公共子串程序填空. int i,j,k,p; int count = 0; int* substr; char * str1,str2; int len1,len2; if(len1 > len2) { len2=len1; } else { char * temp = str1; str1 = str2; str2 = temp; } for ( j = len2; j > 0; j-- ) { for (k=0; ; k++ ) for ( i = 0; { ; i++ ) ; p++ ) ; ) count++; for (p = 0; { if ( } } if ( count != 0 ) { break; } } *substr = (count != 0)?:0; 由于原来的代码完整性待考察,整理人员重写编写一个权当自己练习 传统暴力方法: #include #define maxSize 100 void LCS(char str1[],char str2[],char LCString[]) { int i,j,m,n,maxLength,maxStart,count;
i = 0; maxLength = 0; while(str1[i]!='\0') { j = 0; while(str2[j]!='\0') { m = i; n = j++; count = 0; while((str1[m]!='\0')&&(str2[n]!='\0')) { if(str1[m]==str2[n]) { count++; m++; n++; } else { } break; } if(count > maxLength) { maxLength = count; maxStart = i; } } i++; } if(maxLength>0) { i = maxStart; while(i<(maxLength+maxStart)) { LCString[i-maxStart]=str1[i]; i++; } LCString[i-maxStart]='\0'; } } int main() {
char str1[maxSize]="11234123456712345678"; char str2[maxSize]="12345678"; char LCString[maxSize]; LCS(str1,str2,LCString); printf("%s",LCString); scanf("%s",LCString); return 0; } 利用二维数组的方法可以参考 http://blog.csdn.net/chenwenshi/article/details/6027884 或者用 KMP 模式匹配 3.迷宫(深度优先搜索算法)以下参考 void visit(int, int); int maze[9][9] = {{2, 2, 2, 2, 2, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 2, 0, 2, 2, 0, 2}, {2, 0, 2, 0, 0, 2, 0, 0, 2}, {2, 0, 2, 0, 2, 0, 2, 0, 2}, {2, 0, 0, 0, 0, 0, 2, 0, 2}, {2, 2, 0, 2, 2, 0, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 2, 2, 2, 2, 2, 2, 2, 2}}; int startI = 1, startJ = 1; int endI = 7, endJ = 7; // 入口 // 出口 int main(void) { int i, j; printf("显示迷宫:\n"); for(i = 0; i < 9; i++) { for(j = 0; j < 9; j++) if(maze[i][j] == 2) printf("█"); else printf(" "); printf("\n"); } visit(startI, startJ); int qwer; scanf("%d",&qwer); return 0; }
void visit(int i, int j) { int m, n; maze[i][j] = 1; if(i == endI && j == endJ) { printf("\n 显示路径:\n"); for(m = 0; m < 9; m++) { for(n = 0; n < 9; n++) if(maze[m][n] == 2) printf("█"); else if(maze[m][n] == 1) else printf("◇"); printf(" "); printf("\n"); } } if(maze[i][j+1] == 0) visit(i, j+1); if(maze[i+1][j] == 0) visit(i+1, j); if(maze[i][j-1] == 0) visit(i, j-1); if(maze[i-1][j] == 0) visit(i-1, j); maze[i][j] = 0; } 200420042004 年 2004 1.写出程序输出结果(资料不足,整理者难以整理出题目完整版,也不清楚这个 testNum 是求什么数的,知道的请联 系整理人员) int testNum(int Number,int radius) { int maxPower,leftPower,rightPower,leftNum,rightNum; leftPower = 1; rightPower = radius; while(Number/rightPower > radius) { leftPower *= radius; } while(leftPower>rightPower) { leftNum = (Number/leftPower)%radius;
rightNum = Number/radius; if(leftNum!=rightNum) { return 0; } leftPower = leftPower/radius; rightPower = rightPower*radius; return 1; } } void main() { int Number,result1,result2; printf("the Number is :"); for(Number = 700; Number<=730; Number++) { result1 = testNum(Number,10); result2 = testNum(Number,2); if(result1&&result2) { printf("%d",Number); } } } 2.程序填空。 完成的功能是把一个整数 W 分解成不多于 N 个整数的和,且这些整数只能取自数组 b[] (程序实在想不起来了,只记得程序是用递归完成的,总 共有 5 个空,我认为不难) 若 b[]有序可参考 题目:输入一个正数 n,输出所有和为 n 连续正数序列。 例如输入 15,由于 1+2+3+4+5=4+5+6=7+8=15,所以输出 3 个连续序列 1-5、4-6 和 7-8。 算法,记 min,max 为序列的最值,初始化为 min=1,max=2,当 min+...+maxn 时,min 右移 3,编写一段函数,满足以下要求:将字符串 str 中出现的所有 subStr 都替换成 substitute,并且都不损害字符串 str,函 数原型为: char* exchange(char str[],char subStr[],char substitute[]) 以下代码仅供参考,若有更好的方法代码,请联系整理人员 #include void replace(char str[],int begin,int &end,char substitute[]); char* exchange(char str[],char subStr[],char substitute[]) { int i,j,k,begin,end; i = 0; while(str[i]!='\0') {
k = i; j = 0; while(subStr[j]!='\0') { if(str[k]==subStr[j]) { k++; j++; break; } else { } } if(subStr[j]=='\0') { begin = k-j; end = k-1; replace(str,begin,end,substitute); i = end+1; } else { } i++; } return str; } void replace(char str[],int begin,int &end,char substitute[]) { int lengthOfSub=0,lengthOfStr=0,index=0; while(str[lengthOfStr]!='\0'&&substitute[lengthOfSub]!='\0') { lengthOfSub++; lengthOfStr++; } while(str[lengthOfStr]!='\0') { lengthOfStr++; } if(lengthOfSub==(end-begin+1)) { while(index
str[begin+index]=substitute[index]; index++; } } else if(lengthOfSub>(end-begin+1)) { int moveStep = lengthOfSub-(end-begin+1); index = lengthOfStr-1; while(index>end) { str[index+moveStep] = str[index]; index--; } index = 0; while(index
char str[]="1000200030004000"; char sub[]="000"; char substitute[]="*"; printf("%s\n",str); exchange(str,sub,substitute); printf("%s",str); scanf("%s",str); return 0; } 200520052005 年 2005 1.看程序写输出(程序代码不完整,答案略) #define maxSize 100 int a[maxSize],r[maxSize]; foo(int n) { int i, k; k=0; r[0]=n; do { if(r[k] == 0) { printf (“%d=%d, a[0], a[1] ) ; for ( i = 2; i <= k; i++ ) printf (“%d ”, a ) ; printf ( “\n” ) ; while ( k > 0 && a[k] == 1 ) k-- ; { if ( k > 0 ) { a[k]-- ; r[k]++; } } else { a[k+1] = a[k] < r[k] ? a[k] : r[k] ; r[k+1] = r[k] - a[k+1] ; k++ ; } }while (k > 0) }
分享到:
收藏