=========或========= a[i]=x;i=1+i; =========或========= a[i]=x;i+=1;
=======(答案2)======= for(i=p+n-1;i<=k-1;i++) =========或========= for(i=p-1+n;i<=k-1;i++)
=======(答案3)======= x=x*10+a[i];
=========或========= x=10*x+a[i];
=========或========= x=a[i]+x*10;
=========或========= x=a[i]+10*x;
第3题 (30.0分) 题号:577 难度:中 第1章 /*------------------------------------------------------- 【程序改错】
---------------------------------------------------------
题目:void move(int a[],int n,int m)函数将n个元素的一维 数组a循环左移m个位置,
void change(int a[],int n,int b[][N])函数将数组a按 行存入二维数组b,然后将b按列重新存入数组a。
例如:数组a的元素为1,2,3,4,5,6,7,8,9,10,11,12,调用move函 数将a循环左移3个位置后,a的元素为
4,5,6,7,8,9,10,11,12,1,2,3,调用change函数后,a的元 素为4,8,12,5,9,1,6,10,2,7,11,3。
请改正程序中的错误,使它能得出正确的结果。
--------------------------------------------------------- 注意:不得增行或删行,也不得更改程序的结构。
--------------------------------------------------------*/ #include
void move(int a[],int n,int m)
{
int i,t; while(m) {
t=a[0];
for(i=0;i /*******************FOUND*******************/ a[i]=a[i+m]; a[n-1]=t; m--; } } void change(int a[],int n,int b[][N]) { int i,j; for(i=0;i /*******************FOUND*******************/ b[i/M][i-i/N]=a[i]; for(i=0;i /*******************FOUND*******************/ a[j*M+i]=b[i][j]; } int main() { int a[M*N]={1,2,3,4,5,6,7,8,9,10,11,12}; int b[M][N],i,j,m; printf(\ for(i=0;i printf(\ for(i=0;i printf(\ for(i=0;i printf(\ printf(\ } printf(\ for(i=0;i =======(答案1)======= a[i]=a[i+1]; =========或========= a[i]=a[1+i]; =======(答案2)======= b[i/N][i%N]=a[i]; =========或========= b[i/N][i-i/N*N]=a[i]; =======(答案3)======= a[i*M+j]=b[j][i]; =========或========= a[M*i+j]=b[j][i]; =========或========= a[j+i*M]=b[j][i]; =========或========= a[j+M*i]=b[j][i]; 第4题 (30.0分) 题号:579 难度:中 第1章 /*------------------------------------------------------- 【程序改错】 --------------------------------------------------------- 题目:void add(char a[],char b[],char c[])函数将由'0','1' 组成的字符串a,b按二进制数加法规则相加,和仍以'0','1' 组成的字符串形式保存到字符串c中。 例如:字符串a为\字符串b为\调用add函数后字符串c 为\。 请改正程序中的错误,使它能得出正确的结果。 --------------------------------------------------------- 注意:不得增行或删行,也不得更改程序的结构。 --------------------------------------------------------*/ #include int i,len; char t; /*******************FOUND*******************/ len=strlen(s-1); for(i=0;i t=s[i]; s[i]=s[len-i-1]; s[len-i-1]=t; } } void add(char a[],char b[],char c[]) { int i,j,k,t,flag; i=strlen(a)-1; j=strlen(b)-1; k=flag=0; while(i>=0||j>=0) { if(i<0) t=b[j]-48+flag; else if(j<0) t=a[i]-48+flag; else t=a[i]-48+b[j]-48+flag; /*******************FOUND*******************/ c[k]=t/2; k++; flag=0; if(t>1) flag=1; i--; j--; } /*******************FOUND*******************/ if(flag==0) c[k++]='1'; c[k]='\\0'; reverse(c); } int main() { char a[50],b[50],c[51]; printf(\ scanf(\ printf(\ scanf(\ add(a,b,c); printf(\ return 0; } 答案: =======(答案1)======= len=strlen(s); =======(答案2)======= c[k]=t%2+48; =========或========= c[k]=48+t%2; =========或========= c[k]=t%2+'0'; =========或========= c[k]='0'+t%2; =======(答案3)======= if(flag) =========或========= if(flag==1) =========或========= if(flag!=0) =========或========= if(t>1) =========或========= if(t>=2) 第5题 (30.0分) 题号:580 难度:中 第1章 /*------------------------------------------------------- 【程序改错】 ---------------------------------------------------------