对于整型数组a[8]和b[8],下列说法正确的是【 】
A、a=b是合法的
B、表达式a+1和a+2不能比较大小
C、赋值表达式*(a+1)=*(b+2)是合法的
D、a和&(*(a))的值不同
设数组 a[0..n-1,0..m-1](n>1,m>1)中的元素以行为主序存放,每个元素占用4个存储单元,则数组元素 a[i,j](0≤i<n,0≤j<m)的存储位置相对于数组空间首地址的偏移量为【 】。
A、(j*m+i)*4
B、(i*m+j)*4
C、(j*n+i)*4
D、(i*n+j)*4
阅读以下说明和C函数,填补代码中的空缺(1)~(5)。
函数 removeDuplicates(char*st)的功能是移除给定字符串中的重复字符,使每种字符仅保留一个,其方法是:对原字符串逐个字符进行扫描,遇到重复出现的字符时,设置标志,并将其后的非重复字符前移。例如,若st指向的字符串为“ aaabbbbscbsss,则函数运行后该字符串为“absc”。
【C代码】
void remove Duplicates(char *str){
int i,len=strlen(str);/*求字符串长度*/
if(__(1)__) return;/*空串或长度为1的字符串无需处理*/
for( i=0;i<len; i++){
int flag =0;/*字符是否重复标志*/
int m:
for(m=__(2)__;m<1en;m++){
if( str[i]== str[m]){
__(3)__;break;
}
}
if (flag ){
int n, idx= m;
/*将字符串第idx字符之后、与str[i]不同的字符向前移*/
for( n=idx+1; n<len; n++)
if( str[n]!= str[i]){
str[idx]= str[n];
__(4)__;
}
str[__(5)__]='\0';/*设置字符串结束标志*/
}
}
}
(1)len<2或len<=1或其等价形式
(2)i+1或其等价形式
(3)fag=1或给fag赋值为任何一个不是0的值
(4)idx++或idx=idx+1或其等价形式
(5)idx或其等价形式
根据注释,空(1)处应填入的内容很明确,为“len<=1”或其等价表示。
要消除字符串中的重复字符,需要扫描字符串,这通过下面的代码来实现
for( i=0;i<len; i++)[
int flag=0;/*字符是否重复标志
int m;
for(m=__(2)__;m<1en;m+)
if( str[i]== str[m]){
__(3)__;break;
}
}
}
上面代码中,循环变量i用于顺序地记下字符串中每个不同字符首次出现的位置,那么后面的处理就是从i的下一个位置开始,考查后面的字符中有没有与它相同的(srt[i]==strm]),因此空(2)应填入“i+1”或其等价表示。显然,当发现了重复字符时,应设置标志,空(3)处应填入“fag=1”或者给fag赋值为任何一个不是0的值。
根据说明,发现与str[i]相同的第一个字符str[m]后,需要将其后所有与sti不同的字符前移,以覆盖重复字符str[m],对应的代码如下
f(flag){
int n, idx=m;/*将字符串第idx字符之后、与stri不同的字符向前移*/
for( n =idx+1; n<len; n++)
if(str[n]!= str[i])){
str[idx]= str[n];
__(5)__;
str[__(5)__]='