1、分析源程序中存在的问题,并对源程序进行修改,使之能争取完成任务。源程序:#include int main(void) int a10=27,13,5,32,23,3,17,43,55,39; void sort(int,int); int i; sort(a0,10); for(i=0;i10;i+) printf(%6d,ai);n); return 0;void sort(int b,int n) int i,j,t;n-1; for(j=0;jn-i-1;j+) if(bj#define M 10#define N 3 int aM,bM; int i,j,k;M; ai=i+1; f
2、or(i=M,j=0;i1;i-) for(k=1;ki-1) j=0; bM-i=j?_:_; if(j) for(k=-j;i;_; M-1;,bi);%6dn,a0);(2)上面的程序中使用数组元素的值表示圈中人的编号,故每当有人出圈是都要压缩数组,这种算法不够精炼。如果采用做标记的办法,即每当有人出圈是对相应数组元素做标记,从而可省掉压缩数组的时间,这样处理效率会更高一些。因此,请采用做标记的办法修改(1)中的程序,并使修改后的程序与(1)中的程序有相同的功能。3.跟踪调试程序在下面所给的源程序中,函数strncat(s,t,n)本来应该讲字符数组t的前n个字符到字符数组s中字符串的尾
3、部。但是函数strncat在定义是代码有误,不能实现上述功能,请按下面的要求进行操作,并回答问题和排除错误。(1)单步执行源程序。进入函数strncat后观察表达式s、t和i。当光条落在for语句所在行是吗,i位多少?当光条落在strnca函数块结束标记所在行时,s,t分别为和值? i=22 s和t没有变化(2)分析函数出错的原因,排除错误,是函数正确实现功能,最后写出程序的结果。#include(1)i-) i-1)j=0;aj-1:ai; ak=ak+1;(2) int aM, bM; int i, j, k,t; for(i = 0; i 1; i-) for(k = 1; k j+);
4、 if(j+=(M-1) j = 0;aM-1; bM-i=aj-1; aj-1=11; else for(t=1;aM-tt+); bM-i=aM-t; aM-t=11;i M-1 ;, bi); if(ai int i,j; char s35,c;please input your juzhen:3;5; c=getchar(); if(isdigit(c) sij=c;the juzhen you input is:4; putchar(sij); putchar(nthe juzhen has been changed into:#define MAX 16int main() int n,i; char sMAX;please input a number: scanf(%d,&n); if(n=-32768&n=32767) ;wrong:the number is too large return -1;=0)n!=0; si=n%2+0 n/=2;=MAX-1; n=-(n+1);=MAX-2;MAX-1; if(si=1 else if(si= for(i=MAX-1;