计算机二级上机题库很有用 题目就是里面出的
【答案及难度指数】★
(1)m-- (2)t[j]=t[m] (3)t[m]=s
【一起来审题】
(1)该程序功能实现字符串的逆置。把字符串中字符逆置就是把字符串中的第一个元素和最后一个元素交换,第二个元素和倒数第二个元素交换,直到所有的元素交换完成为止。
(2)从已给部分源程序的main主函数开始入手,主函数调用"fun(b);",通过键盘输入字符串b,作为参数传给函数void fun(char *t)中的t。
(3)进入fun函数,要想实现逆置,首先要求得字符串的长度。通过"m=strlen(t)-1;"求得m的值即为字符串的长度。然后通过for循环对字符串进行置换。
【解题思路】
第一空:for(j=0;j<m;j++,___1___)根据前面的分析,对字符串的置换是从第一个元素和最后一个元素(j<m,m是字符串的长度)开始进行循环交换,从第一个元素j=0开始向后增加为j++,所以从最后一个向前减少即为m--,第一空填m--。
第二空:"char s;"用来定义存放临时的字符,"s=t[j];"的目的是首先用s存放字符串t的第j个字符,这样将第m个字符存放在j的位置,就首先实现了将后面的第m个字符置换到前面的第j的位置,所以第二空填t[j]=t[m]。
第三空:前面实现了后面的第m个字符置换到前面的第j个字符,同时将第j个字符的内容存放在临时的字符s,现在就将这个临时字符s中的内容存放在第m个字符位置,这样就完成了j位置的字符与m位置字符的置换,所以第三空填t[m]=s。
【主要考点】字符数组。
2、程序改错题
【答案及难度指数】★★
(1)void fun(char *s,char c)
(2)if(*s=='\0')
(3)s[1]='\0';
【一起来审题】
该题中函数功能首先是查找子串再判断,最后是实现将符合条件的字符串进行连接。从已给定源程序的main主函数开始入手,通过"fun(str,ch);"语句调用fun函数,实现题干的要求。
【解题思路】
(1)第一个标识下,"void fun(char s,char c)"根据主函数中的定义,知道s为数组名,传的应该是数组地址,所以应改为"void fun(char *s,char c)"。
(2)while循环中对c与s进行匹配检查,第二个标识下,是当不同时执行连接操作,那么判断s是否为结尾的表达式应该是"if(*s=='\0')"。
(3)第三个标识下,连接后的新串要添加结尾符,所以正确的表达是将"s[1]='0';"改为"s[1]='\0';"。
【主要考点】函数定义语法;数组操作。
3、程序设计题
【答案及难度指数】★★★
int i,j,s=0;
for(j=0;j<N;j++) //统计行元素
{
s+=b[0][j];
s+=b[M-1][j];
}
for(i=1;i<=M-2;i++) //统计列元素
{
s+=b[i][0];
s+=b[i][N-1];
}
return s;
【一起来审题】
该程序功能是求出二维数组周边元素之和。其中周边元素是指数组的最上和最下的两行,最左和最右的两列。数组第一行元素的行下标为0,最后一行元素的行下标为M-1,第一列的列下标为0,最后一列的列下标为N-1。
【解题思路】
进入fun函数,根据前面的分析:求周边元素的和,可以采用两个循环分别把行元素和列元素相加。但要避免把周边元素重复相加。
【主要考点】二维数组;for循环语句。