for (i=0; i
4.下面程序的功能是:将n各无序整数从小到大排序;判断下面程序的正误,如果错误请改正过来。 main ( )
{ int a[100], i, j, p, t, n=20 ;
for (j = 0; j
for ( i=j+1; i
{ t = a[j]; a[j] = a[p]; a[p]=t; } }
for ( j = 0; j
5.下面程序的功能是:统计子字符串substr在字符串str中出现的次数。例如,若字符串为aaas lkaaas,子字符串为as,则应输出2;判断下面程序的正误,如果错误请改正过来。
main ( )
{ char substr[80],str[80]; int i,j,k,num=0;
gets(substr); gets(str); for (i = 0, str[i], i++)
for (j=i,k=0;substr[k]==str[j];k++,j++) if (substr[k+1]!=?\\0?) { num++; break; }
printf(“num=%d”, num); }
五.程序填空题
1.下面程序可求出矩阵a的主对角线上的元素之和,请填(2)空使程序完整。 main ( )
{ int a[3][3]={1,3,5,7,9,11,13,15,17} , sum=0, i, j ; for (i=0 ; i<3 ; i++) for (j=0 ; j<3 ; j++)
if (【1 】)
sum=sum+【2 】; printf(“sum=%d”,sum); }
2.下面程序将十进制整数base转换成n进制,请填(3)空使程序完整。
main ( )
{ int i,base,n,j,num[20] ; scanf(“%d”,&n); scanf(“%d”,base) ; do { i++;
num[i]=【1 】; n=【2 】; } while (n!=0);
for (【3 】) ; printf(“%d”,num[j]) ; }
3.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填(3)空使程序完整。
main ( )
{ int a[10],max,min,i,j,k ; for (i=0; i<10; i++) scanf(“%d”,&a[i]); max=min=a[0];
for (i=0; i<10; i++) {
if (a[i]
【3 】; for (i=0; i<10; i++) printf(“%d”,a[i]); }
4.下面程序用“插入法”对数组a进行由小到大的排序,请填(3)空使程序完整。 经典算法提示:
简单插入排序算法的基本思想使将数组处理n-1次,第k次处理是将第k个元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元素a[0],a[1],?,a[k-1]必定已排成了升序,将a[k]与a[k-1],a[k-2],?a[0]逐个比较(由后向前),若有a[j]
main ( )
{ int a[10]={191,3,6,4,11,7,25,13,89,10} ; int i,j,k ;
for (i=1; i<10; i++) { k = a[i] ;
j = 【1 】; while (j>=0 && k>a[j] ) {
【2 】; j--; }
【3 】=k ;
}
for (i=0; i<10; i++) printf(“%d”,a[i]); }
5.下面程序用“两路合并法”把两个已按升序(由小到大)排列的数组合并成一个新的升序数组,请填(3)空使程序完整。
main ( )
{ int a[3]={5,9,10} ;
int b[5]={12,24,26,37,48} ; int c[10],i=0,j=0,k=0 ; while (i<3 && i<5)
if (【1 】) { c[k]=b[j] ; k++ ; j++ ; } else {
c[k]=a[j] ; k++ ; i++ ; }
while (【2 】) { { c[k]=a[j] ; i++ ; k++ ; }
while (【3 】) { { c[k]=b[j] ; j++ ; k++ ; }
for (i=0; i
6.下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的结果保存到b数组中,并按矩阵形式输出a和b,请填(3)空使程序完整。 数组a 数组
main ( )
{ int a[2][3]{{4,5,6},{1,2,3}}, b[2][3], i,j; for (i=0; i<2 ; i++) for (j=0; i<3 ; j++ ) {
printf(“]”,a[i][j]);
【1 】; }
printf(“\\n”); }
for (【2 】) b[i][0]=a[i][2]; for (i=0; i<2 ; i++) { for (j=0; i<3 ; j++) {
printf(“]”,b[i][j]);
【3 】; }
printf(“\\n”); } }
7.下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字符在字符串中第一次出现的位置(下标值),否则输出-1,请填(2)空使程序完整。
# include
{ char c=?a? ; /* 需要查找的字符*/ char t[50] ; int i,j,k; gets(t) ;
i = 【1 】; for (k=0; k
if (【2 】) { j = k ; break ;} else j=-1; printf(“%d”,j); }
8.下面程序用“顺序查找法”查找数组a中是否存在某一关键字,请填(2)空使程序完整。
main ( )
{ int a[10]={25,57,48,371,123,291,18,22,44}; int i=0,x ;
scanf(“%d”,&x);
【1 】; while (a[i]!=x) i++ ;
if (【2 】) printf(“found=%d\\n”,i); else printf(“can\\?t found!\\n”); }
9.以下程序是求矩阵a,b的乘积,结果存放在矩阵C中并按矩阵形式输出,请填(3)空使程序完整。
main ( )
{ int a[2][3]={2,10,9,4,5,119}, b[2][2]={-1,-2,-3,-4}; int i,j,k,s,c[3][2]; for (i=0; I<3; i++)
for (j=0; j<2; j++) {
【1 】
for (k=0; k<2; k++) s+=【2 】; c[i][j]=s; }
for (i=0; i<3; i++)
for (j=0; j<2; j++) {
printf(“m”,c[i][j]);
【3 】; } }
10.以下程序是将字符串b的内容连接字符数组a的内容后面,形成新字符串a,请填(2)空使程序完整。
main ( )
{ char a[40]=”Great ”, b[ ]=”Wall”;