2008年北京航空航天大学上机题
2013-04-17 11:18
190 查看
可能不完善,不保证完全正确,仅供参考。
1.素数
输入一个整数,要求输出所有从1到这个整数之间个位为1的素数,如果没有则输出-1(30分)
2.旋转矩阵
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。(60分)
3.字符串匹配
从string.in中读入数据,然后用户输入一个短字符串。要求查找string.in中和短字符串的所有匹配,输出行号、匹配字符串到string.out文件中。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。(60分)
【貌似有点小问题。。】
1.素数
输入一个整数,要求输出所有从1到这个整数之间个位为1的素数,如果没有则输出-1(30分)
#include <stdio.h> #include <math.h> int main(int argc, char* argv[]) { int n, count = 0, bound; scanf ("%d", &n); bound = (int)sqrt(n) + 1;//判断素数的边界 for (int i = 11; i < n; i += 10)//1不是素数,所以从11开始判断 { int flag = 0;//标志整数i有没有被整除 for(int j = 3; j <= bound; j ++) { if(i % j == 0) { flag = 1; break; } } if (flag == 0)//没被整除,则为素数 { count ++; printf ("%d ", i); } } if (count == 0) printf("-1\n"); else putchar('\n'); return 0; }
2.旋转矩阵
任意输入两个9阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵,如果是,输出旋转角度(0、90、180、270),如果不是,输出-1。
要求先输入矩阵阶数,然后输入两个矩阵,每行两个数之间可以用任意个空格分隔。行之间用回车分隔,两个矩阵间用任意的回车分隔。(60分)
#include <stdio.h> #define MAX 9 int array0[MAX][MAX], array1[MAX][MAX]; int main(){ int i, j, n; while (scanf ("%d", &n) != EOF){ //接收第一个矩阵 for (i = 0; i < n; i ++){ for (j = 0; j < n; j ++){ scanf ("%d", &array0[i][j]); } } //接收第二个矩阵 for (i = 0; i < n; i ++){ for (j = 0; j < n; j ++){ scanf ("%d", &array1[i][j]); } } while (1){ for (i = 0; i< n; i ++)//0度判断{ for (j = 0; j < n; j ++){ if (array0[i][j] != array1[i][j]){ break; } } } if (i == n && j == n){ printf("0\n"); break; } for (i = 0; i< n; i ++)//90度判断{ for (j = 0; j < n; j ++){ if (array0[i][j] != array1[j][n - i -1]){ break; } } } if (i == n && j == n){ printf("90\n"); break; } for (i = 0; i< n; i ++)//180度判断{ for (j = 0; j < n; j ++){ if (array0[i][j] != array1[n - i -1][n - j - 1]){ break; } } } if (i == n && j == n){ printf("180\n"); break; } for (i = 0; i< n; i ++)//270度判断{ for (j = 0; j < n; j ++){ if (array0[i][j] != array1[n - j -1][i]){ break; } } } if (i == n && j == n){ printf("270\n"); break; } printf ("-1\n"); break; } } return 0; }
3.字符串匹配
从string.in中读入数据,然后用户输入一个短字符串。要求查找string.in中和短字符串的所有匹配,输出行号、匹配字符串到string.out文件中。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。(60分)
【貌似有点小问题。。】
//比较方法是:必须从文件中把一行之内的字符串读到一个字符数组中, //然后再和匹配数组进行匹配。不能直接对文件一个一个字符的匹配, //否则,当不匹配时,需要移动到上一个匹配字符串的第二个字符比较困难 //行号在读入字符串时就应该有个变量来表示 //模式匹配只需匹配一个字符,然后跳出模式匹配 #include <stdio.h> #include <stdlib.h> FILE* in = fopen("D:\\string.in", "rt+");//打开文件string.in FILE* out = fopen("D:\\string.out", "wt+");//打开文件string.out void compare (char* x, char* y, int n)//x为匹配字符串,y为文件字符串,n为行号 { if(out == NULL) { printf("\nerror on open D:\\string.out!"); getchar(); exit(1); } int i = 0, j = 0, k = 0, m, flag = 0; printf("*\n"); while (y[i] != '\0')//文件字符串比较部分的头指针为到字符串末尾 { while (x[j] != '\0')//不到匹配字符串结尾 { printf("%c ", y[i]); if (x[j] == y[k] || abs(x[j] - y[k]) == 32)//当前匹配,同时后移 { printf("**\n"); j ++; k ++; } if (y[k] == '[')//进入到模式匹配 { printf("***\n"); while (y[k] != ']')//不到模式匹配结尾 { if (x[j] == y[k] || abs(x[j] - y[k]) == 32)//当前匹配,则文件字符串后移,准备跳出匹配模式 flag = 1; k ++; } if (flag == 1)//模式匹配成功,跳出,继续后边的比较 { j ++; k ++; } else//模式匹配不成功,则当前比较终结,继续下一轮比较,从上一字符串第二个字符开始比较 { j = 0; k = ++i; } } else//不匹配,重新比较 { j = 0; k = ++i; } } printf("****\n"); //到达匹配字符串末尾,说明匹配成功,输出匹配字符串 fprintf(out, "%d ",n + 1); printf ("%d", n + 1); for (m = j; m < k; m ++) { fputc(y[m], out); printf ("%c", y[m]); } fputc('\n',out); printf ("\n"); i = 0; k = ++i; } } int main () { qsort( char str0[100], str1[100], ch0, ch1; int i = 0, j = 0;//i控制字符串的读入,j代表行号 //从控制台输入匹配字符串 ch0 = getchar(); while (ch0 != '\n') { str0[i] = ch0; ch0 = getchar(); i ++; } str0[i] = '\0'; //从文件中获取字符串 i = 0; if (in == NULL) { printf("\nerror on open D:\\string.in!"); getchar(); exit(1); } ch1 = fgetc(in); while (1) { str1[i] = ch1; if (ch1 == '\n')//碰到换行,表示当前字符串获取结束,一行为一个字符串,文件仍有数据 { str1[i] = '\0';//加字符串结束符 compare(str0, str1, j);//比较两个字符串 j ++;//行号加1 i = 0; } else if (ch1 == EOF)//到文件末尾 { str1[i] = '\0'; compare(str0, str1, j); break;//完成全部匹配,退出 } else//没换行也没到文件结束,行号不变,准备读下一个字符 i ++; ch1 = fgetc(in); } fclose(in); fclose(out); return 0; }
相关文章推荐
- 北京航空航天大学 2008年复试上机题 解题报告
- 浙大2008年复试上机题1
- 九度机试 题目1165:字符串匹配 2008年北京航空航天大学计算机研究生机试真题
- 北京航空航天大学 2012年复试上机题 解题报告
- 北航2008年计算机复试上机
- 2009年北京航空航天大学上机题
- 2010年北京航空航天大学上机题
- 2011年北京航空航天大学上机题
- 2012年北京航空航天大学上机题
- 2008年程序员考试上机题
- 北京航空航天大学某年的保研上机题
- 题目1163:素数 2008年北京航空航天大学计算机研究生机试真题
- 又一版 A+B 浙大计算机研究生复试上机考试-2008年
- 北京航空航天大学2014第四次上机解题报告
- 北京航空航天大学计算机系考研复试上机真题及答案---2014
- hdu 1881 毕业bg (01背包变形)浙大计算机研究生复试上机考试-2008年
- 简单的素数问题(2008年北京航空航天大学计算机研究生机试真题)
- 北京航空航天大学2014第六次上机解题报告
- 简单的素数问题(2008年北京航空航天大学计算机研究生机试真题)
- 题目1163:素数(2008年北京航空航天大学计算机研究生机试真题)