上机考试题
请按学号做相应题号的试题,考试时间10:10—11:20。
请在11:25之前离开考场
1. 编写完整的程序,求3×4矩阵中的最大元素及其所在行和列的位置。
2. 设计函数,求整数n 的阶乘,并在主函数中调用该函数(通过循环结构)计算下列多项式: y=1!+3!+5!+7!
3. 求所有这样的三位数,这些三位数等与其各位数字的立方和。
例如: 153 = 1*1*1 + 5*5*5 + 3*3*3.
4. 编写完整的程序,用公式 ...!
1...!31!21!111++++++=n e
计算 e 的近似值,直到某项小于10-7为止.
5. 填空, 本程序的功能是把两个字符串合并并且按升序排列。首先对字符串a 按ASCII 码值从小到大升序排列,然后把字符串b 中的字符按升序规则插入到已排好序的字符串a 中去。
# include
# include
main()
{ int i,j,k,n;
char a[80]=”zkcvbn ”,b[80]=”askd ”;
n=strlen(a); for( (1) ;i++) for( (2) ;j++ )
if(a[j] k=a[i],a[i]=a[j],a[j]=k; for(k=0;b[k];k++) { for(j=0;b[k]>a[j]&&a[j];j++); for(i=n;i>=j;i--) (3) ; (4) ; a[ (5) ]=’\0’; } printf(“\nmerge string is %s ”,a); } 6. 下列程序有三个错误,请纠正。 以下程序的功能是输入一个字符串,并将其中的字符 ’a ’ 用字符串’shu ’替代後输 出。如输入为“123abcaHello ”,则输出为“123shubcshuHello ”。 #include void main() { int i; char line[81]; scanf(“%s”, &line); for(i=0; line[i]!=’\n’; i++) if(line[i]==’a’) printf(“shu”); else printf(“%s”, line[i]); } 7.下列程序有三个错误,请纠正。 以下程序实现对输入的长度小于100的英文字母串(空格表示结束)进行头尾相接,围成一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI, IJ, ST, 总共出现3次)。 #include void main() { char s[100]; int k, len, no; scanf(“%s”, s); len=strlen(s); s[len]=s[0]; s[len++]=’\0’; for(k=0; k if(s[k-1]+1==s[k]) { printf(“%c %c\n”, s[k-1], s[k]); no++; } printf(“%d\n”, no); } 8.填空。 【问题描述】已知X和Y是两个整型数组,而且X中的数据按从小到大的顺序排列,Y 中的数据按从达到小的顺序排列。以下程序将X和Y中的数归并,并按从小到大的顺序保存到整型数组Z中,然后输出数组Z中的各个元素。例如,X数组为{1, 12, 23, 37},Y数组为{123, 78, 36, 3},归并後生成的新数组Z为{1, 3, 12, 23, 36, 37, 78, 123}。 void sorted(int up[], int down[], int merged[], int n) { int i, j, k, m; i=k=0; j=n-1; while( (1) ) if(up[i]<=down[j]) { (2) ; i++; k++; } else { merged[k]== (3) ; j--; k++; } if(i==n&&j>=0) for( ; j>=0; j--) merged[k++]= (4) ; if(j==0&&i for( ; i } void main() { int pu[]={1, 12, 23, 37}, down[]={123, 78, 36, 3}, merged[8], k; sorted(up, down, merged, 4); for(k=0; k<8; k++) printf(“%5d ”, merged[k]); printf(“\n ”); } 9. π的值可以使用下公式计算 +??+?++=7 3523152313112π 请编写函数compute_pi(double eps)计算π的近似值,当公式中某一项的值小于eps (例 如,eps=1e-5)时,停止计算并返回结果。 10.改错。程序中有三个错误,请纠正。 用冒泡排序法求出由21个整数组成的中间值,并输出所有大于中间值的偶数。 【程序】 #include void main() { int I, j, temp; int array[21]; for(i=0; i<21; i++ ) scanf("%d", array[i]); for(i=0; i<21; i++ ) for(j=0; j<20; j++ ) if(array[j]>array[j+1]) { temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } printf("%d",array[10]); for(i=0; i<10; i++ ) if(array[i]/2==0) printf(" %d ", array[i]); } 11.改错。程序中有三个错误,请纠正。 用下面的方法可以计算y 年m 月d 日是星期几(w ): w=[y-1+(y-1)/4-(y-1)/100+(y-1)/400+y_d(y, m, d)]%7 其中,符号/表示计算整数商,%表示计算余数,y_d(y, m, d)表示y 年m 月d 日是同年元 旦算起到该日的总天数。 【程序】 int day_tab[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int y_d(int y, int m, int d) { int i, all; y=y%4==0&&y%100||y%400==0; for(i=0; i<=m; i++) all+=day_tab[i]; /* 统计某月份(m 月)之前的天数 */ all+=y; /* 对闰年考虑2月份是29天 */ return all+d; } void main() { int y=2005, m=7, d=11, w; w=y-1+(y-1)/4 - (y-1)/100 + (y –1) / 400 + y_d(y, m, d); w%=7; printf("%d 年%d 月%d 日是星期%d\n", y, m, d, w); } 12.编写完整的程序,求3×4矩阵中的最大元素及其所在行和列的位置。 13.设计函数,求整数n 的阶乘,并在主函数中调用该函数(通过循环结构)计算下列多项式: y=1!+3!+5!+7! 14.求所有这样的三位数,这些三位数等与其各位数字的立方和。 例如: 153 = 1*1*1 + 5*5*5 + 3*3*3. 15.编写完整的程序,用公式 ...! 1...!31!21!111++++++=n e 计算 e 的近似值,直到某项小于10-7为止. 16.填空, 本程序的功能是把两个字符串合并并且按升序排列。首先对字符串a按ASCII码值 从小到大升序排列,然后把字符串b中的字符按升序规则插入到已排好序的字符串a中去。 # include # include main() { int i,j,k,n; char a[80]=”zkcvbn”,b[80]=”askd”; n=strlen(a); for( (1) ;i++) for( (2) ;j++ ) if(a[j] k=a[i],a[i]=a[j],a[j]=k; for(k=0;b[k];k++) { for(j=0;b[k]>a[j]&&a[j];j++); for(i=n;i>=j;i--) (3) ; (4) ; a[ (5) ]=’\0’; } printf(“\nmerge string is %s”,a); } 17.下列程序有三个错误,请纠正。 以下程序的功能是输入一个字符串,并将其中的字符’a’用字符串’shu’替代後输出。如输入为“123abcaHello”,则输出为“123shubcshuHello”。 #include void main() { int i; char line[81]; scanf(“%s”, &line); for(i=0; line[i]!=’\n’; i++) if(line[i]==’a’) printf(“shu”); else printf(“%s”, line[i]); } 18.下列程序有三个错误,请纠正。 以下程序实现对输入的长度小于100的英文字母串(空格表示结束)进行头尾相接,围成一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI, IJ, ST, 总共出现3次)。 #include void main() { char s[100]; int k, len, no; scanf(“%s”, s); len=strlen(s); s[len]=s[0]; s[len++]=’\0’; for(k=0; k if(s[k-1]+1==s[k]) { printf(“%c %c\n”, s[k-1], s[k]); no++; } printf(“%d\n”, no); } 19.填空。 【问题描述】已知X和Y是两个整型数组,而且X中的数据按从小到大的顺序排列,Y 中的数据按从达到小的顺序排列。以下程序将X和Y中的数归并,并按从小到大的顺序保存到整型数组Z中,然后输出数组Z中的各个元素。例如,X数组为{1, 12, 23, 37},Y数组为{123, 78, 36, 3},归并後生成的新数组Z为{1, 3, 12, 23, 36, 37, 78, 123}。 void sorted(int up[], int down[], int merged[], int n) { int i, j, k, m; i=k=0; j=n-1; while( (1) ) if(up[i]<=down[j]) { (2) ; i++; k++; } else { merged[k]== (3) ; j--; k++; } if(i==n&&j>=0) for( ; j>=0; j--) merged[k++]= (4) ; if(j==0&&i for( ; i } void main() { int pu[]={1, 12, 23, 37}, down[]={123, 78, 36, 3}, merged[8], k; sorted(up, down, merged, 4); for(k=0; k<8; k++) printf(“%5d ”, merged[k]); printf(“\n ”); } 20.编写完整的程序,求3×4矩阵中的最大元素及其所在行和列的位置。 21.设计函数,求整数n 的阶乘,并在主函数中调用该函数(通过循环结构)计算下列多项式: y=1!+3!+5!+7! 22.求所有这样的三位数,这些三位数等与其各位数字的立方和。 例如: 153 = 1*1*1 + 5*5*5 + 3*3*3. 23.编写完整的程序,用公式 ...! 1...!31!21!111++++++=n e 计算 e 的近似值,直到某项小于10-7为止. 24.填空, 本程序的功能是把两个字符串合并并且按升序排列。首先对字符串a 按ASCII 码值从小到大升序排列,然后把字符串b 中的字符按升序规则插入到已排好序的字符串a 中去。 # include # include main() { int i,j,k,n; char a[80]=”zkcvbn ”,b[80]=”askd ”; n=strlen(a); for( (1) ;i++) for( (2) ;j++ ) if(a[j] k=a[i],a[i]=a[j],a[j]=k; for(k=0;b[k];k++) { for(j=0;b[k]>a[j]&&a[j];j++); for(i=n;i>=j;i--) (3) ; (4) ; a[ (5) ]=’\0’; } printf(“\nmerge string is %s”,a); } 25.下列程序有三个错误,请纠正。 以下程序的功能是输入一个字符串,并将其中的字符’a’用字符串’shu’替代後输出。如输入为“123abcaHello”,则输出为“123shubcshuHello”。 #include void main() { int i; char line[81]; scanf(“%s”, &line); for(i=0; line[i]!=’\n’; i++) if(line[i]==’a’) printf(“shu”); else printf(“%s”, line[i]); } 26.下列程序有三个错误,请纠正。 以下程序实现对输入的长度小于100的英文字母串(空格表示结束)进行头尾相接,围成一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI, IJ, ST, 总共出现3次)。 #include void main() { char s[100]; int k, len, no; scanf(“%s”, s); len=strlen(s); s[len]=s[0]; s[len++]=’\0’; for(k=0; k if(s[k-1]+1==s[k]) { printf(“%c %c\n”, s[k-1], s[k]); no++; } printf(“%d\n”, no); } 27.填空。 【问题描述】已知X 和Y 是两个整型数组,而且X 中的数据按从小到大的顺序排列,Y 中的数据按从达到小的顺序排列。以下程序将X 和Y 中的数归并,并按从小到大的顺序 保存到整型数组Z 中,然后输出数组Z 中的各个元素。例如,X 数组为{1, 12, 23, 37}, Y 数组为{123, 78, 36, 3},归并後生成的新数组Z 为{1, 3, 12, 23, 36, 37, 78, 123}。 void sorted(int up[], int down[], int merged[], int n) { int i, j, k, m; i=k=0; j=n-1; while( (1) ) if(up[i]<=down[j]) { (2) ; i++; k++; } else { merged[k]== (3) ; j--; k++; } if(i==n&&j>=0) for( ; j>=0; j--) merged[k++]= (4) ; if(j==0&&i for( ; i } void main() { int pu[]={1, 12, 23, 37}, down[]={123, 78, 36, 3}, merged[8], k; sorted(up, down, merged, 4); for(k=0; k<8; k++) printf(“%5d ”, merged[k]); printf(“\n ”); } 28.π的值可以使用下公式计算 +??+?++=7 3523152313112π 请编写函数compute_pi(double eps)计算π的近似值,当公式中某一项的值小于eps (例 如,eps=1e-5)时,停止计算并返回结果。 29.改错。程序中有三个错误,请纠正。 用冒泡排序法求出由21个整数组成的中间值,并输出所有大于中间值的偶数。 【程序】 #include void main() { int I, j, temp; int array[21]; for(i=0; i<21; i++ ) scanf("%d", array[i]); for(i=0; i<21; i++ ) for(j=0; j<20; j++ ) if(array[j]>array[j+1]) { temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } printf("%d",array[10]); for(i=0; i<10; i++ ) if(array[i]/2==0) printf(" %d ", array[i]); } 30.改错。程序中有三个错误,请纠正。 用下面的方法可以计算y年m月d日是星期几(w): w=[y-1+(y-1)/4-(y-1)/100+(y-1)/400+y_d(y, m, d)]%7 其中,符号/表示计算整数商,%表示计算余数,y_d(y, m, d)表示y年m月d日是同年元旦算起到该日的总天数。 【程序】 int day_tab[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int y_d(int y, int m, int d) { int i, all; y=y%4==0&&y%100||y%400==0; for(i=0; i<=m; i++) all+=day_tab[i]; /* 统计某月份(m月)之前的天数 */ all+=y; /* 对闰年考虑2月份是29天 */ return all+d; } void main() { int y=2005, m=7, d=11, w; w=y-1+(y-1)/4 - (y-1)/100 + (y –1) / 400 + y_d(y, m, d); w%=7; printf("%d 年%d 月%d 日是星期%d\n", y, m, d, w); } 31.π的值可以使用下公式计算 +??+?++=7 3523152313112π 请编写函数compute_pi(double eps)计算π的近似值,当公式中某一项的值小于eps (例 如,eps=1e-5)时,停止计算并返回结果。 32.改错。程序中有三个错误,请纠正。 用冒泡排序法求出由21个整数组成的中间值,并输出所有大于中间值的偶数。 【程序】 #include void main() { int I, j, temp; int array[21]; for(i=0; i<21; i++ ) scanf("%d", array[i]); for(i=0; i<21; i++ ) for(j=0; j<20; j++ ) if(array[j]>array[j+1]) { temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } printf("%d",array[10]); for(i=0; i<10; i++ ) if(array[i]/2==0) printf(" %d ", array[i]); } 33.改错。程序中有三个错误,请纠正。 用下面的方法可以计算y 年m 月d 日是星期几(w ): w=[y-1+(y-1)/4-(y-1)/100+(y-1)/400+y_d(y, m, d)]%7 其中,符号/表示计算整数商,%表示计算余数,y_d(y, m, d)表示y 年m 月d 日是同年元 旦算起到该日的总天数。 【程序】 int day_tab[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int y_d(int y, int m, int d) { int i, all; y=y%4==0&&y%100||y%400==0; for(i=0; i<=m; i++) all+=day_tab[i]; /* 统计某月份(m 月)之前的天数 */ all+=y; /* 对闰年考虑2月份是29天 */ return all+d; } void main() { int y=2005, m=7, d=11, w; w=y-1+(y-1)/4 - (y-1)/100 + (y –1) / 400 + y_d(y, m, d); w%=7; printf("%d 年%d 月%d 日是星期%d\n", y, m, d, w); } 34.编写完整的程序,求3×4矩阵中的最大元素及其所在行和列的位置。 35.设计函数,求整数n 的阶乘,并在主函数中调用该函数(通过循环结构)计算下列多项式: y=1!+3!+5!+7! 36.求所有这样的三位数,这些三位数等与其各位数字的立方和。 例如: 153 = 1*1*1 + 5*5*5 + 3*3*3. 37.编写完整的程序,用公式 ...! 1...!31!21!111++++++=n e 计算 e 的近似值,直到某项小于10-7为止. 38.填空, 本程序的功能是把两个字符串合并并且按升序排列。首先对字符串a 按ASCII 码值从小到大升序排列,然后把字符串b 中的字符按升序规则插入到已排好序的字符串a 中去。 # include # include main() { int i,j,k,n; char a[80]=”zkcvbn ”,b[80]=”askd ”; n=strlen(a); for( (1) ;i++) for( (2) ;j++ ) if(a[j] k=a[i],a[i]=a[j],a[j]=k; for(k=0;b[k];k++) { for(j=0;b[k]>a[j]&&a[j];j++); for(i=n;i>=j;i--) (3) ; (4) ; a[ (5) ]=’\0’; } printf(“\nmerge string is %s ”,a); } 39.下列程序有三个错误,请纠正。 以下程序的功能是输入一个字符串,并将其中的字符 ’a ’ 用字符串’shu ’替代後输 出。如输入为“123abcaHello ”,则输出为“123shubcshuHello ”。 #include void main() { int i; char line[81]; scanf(“%s ”, &line); for(i=0; line[i]!=’\n ’; i++) if(line[i]==’a ’) printf(“shu”); else printf(“%s”, line[i]); } 40.下列程序有三个错误,请纠正。 以下程序实现对输入的长度小于100的英文字母串(空格表示结束)进行头尾相接,围成一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI, IJ, ST, 总共出现3次)。 #include void main() { char s[100]; int k, len, no; scanf(“%s”, s); len=strlen(s); s[len]=s[0]; s[len++]=’\0’; for(k=0; k if(s[k-1]+1==s[k]) { printf(“%c %c\n”, s[k-1], s[k]); no++; } printf(“%d\n”, no); } 41.填空。 【问题描述】已知X和Y是两个整型数组,而且X中的数据按从小到大的顺序排列,Y 中的数据按从达到小的顺序排列。以下程序将X和Y中的数归并,并按从小到大的顺序保存到整型数组Z中,然后输出数组Z中的各个元素。例如,X数组为{1, 12, 23, 37},Y数组为{123, 78, 36, 3},归并後生成的新数组Z为{1, 3, 12, 23, 36, 37, 78, 123}。 void sorted(int up[], int down[], int merged[], int n) { int i, j, k, m; i=k=0; j=n-1; while( (1) ) if(up[i]<=down[j]) { (2) ; i++; k++; } else { merged[k]== (3) ; j--; k++; } if(i==n&&j>=0) for( ; j>=0; j--) merged[k++]= (4) ; if(j==0&&i for( ; i } void main() { int pu[]={1, 12, 23, 37}, down[]={123, 78, 36, 3}, merged[8], k; sorted(up, down, merged, 4); for(k=0; k<8; k++) printf(“%5d ”, merged[k]); printf(“\n ”); } 42.π的值可以使用下公式计算 +??+?++=7 3523152313112π 请编写函数compute_pi(double eps)计算π的近似值,当公式中某一项的值小于eps (例 如,eps=1e-5)时,停止计算并返回结果。 43.改错。程序中有三个错误,请纠正。 用冒泡排序法求出由21个整数组成的中间值,并输出所有大于中间值的偶数。 【程序】 #include void main() { int I, j, temp; int array[21]; for(i=0; i<21; i++ ) scanf("%d", array[i]); for(i=0; i<21; i++ ) for(j=0; j<20; j++ ) if(array[j]>array[j+1]) { temp=array[j]; array[j]=array[j+1]; array[j+1]=temp; } printf("%d",array[10]); for(i=0; i<10; i++ ) if(array[i]/2==0) printf(" %d ", array[i]); } 44.编写完整的程序,求3×4矩阵中的最大元素及其所在行和列的位置。 45.设计函数,求整数n 的阶乘,并在主函数中调用该函数(通过循环结构)计算下列多项式: y=1!+3!+5!+7! 46.求所有这样的三位数,这些三位数等与其各位数字的立方和。 例如: 153 = 1*1*1 + 5*5*5 + 3*3*3. 47.编写完整的程序,用公式 ...! 1...!31!21!111++++++=n e 计算 e 的近似值,直到某项小于10-7为止. 48.填空, 本程序的功能是把两个字符串合并并且按升序排列。首先对字符串a 按ASCII 码值从小到大升序排列,然后把字符串b 中的字符按升序规则插入到已排好序的字符串a 中去。 # include # include main() { int i,j,k,n; char a[80]=”zkcvbn ”,b[80]=”askd ”; n=strlen(a); for( (1) ;i++) for( (2) ;j++ )