高考真题详解
第一套
【程序填空】 题目:对只包含 '-'和字母字符的字符串str 进行如下处理:
删除 str 中前导和尾部连续的 '-'字符,保留串中字母字符以及字母间的'-'字符。
例如, str 中初始字符串为 "C--Language--Test" 。
处理后, str 中的字符串为 "C--Language--Test" 。
程序中 isalpha 函数功能是判断参数是否是字母,是字母,函数值为真,否则函数值 为假。
#include
#include void main(){
char str[]={"---C--Language--Test---"};
int i,start,end;
i=0;
while(str[i++]=='-') ; /* 该循环体为空, 由前往后, 不等于 ‘ -',则退出循环, i 还多加 1, 实质 i 指向非减号的第二个字符 */
start=i-1; /*start 指实非减号的第一个字符 */ while(str[i] !=【?】){/*继续向后遍历字符串 */
if(isalpha(str[i])) /* 如果是字母,则 end=-1 ,表示不是结尾的地方 */
end=-1;
else if(isalpha(str[i-1])) /* 不是字母,如果前一个是字母,则结束的位置为当前的前一 个,即 end=i-1*/
end=i-1; /* 由于由前往后的,遍历结束后, end 只能保存最后一个结束的位置 */ i++;
}
str[end+1]='\0'; /* 在最后一个结束位置的字符后人工补\0,相当于去除尾部减号 */
for(i=start;i<=end+1;i++)/*通过循环,将从start开始到人工补的\0的所有字符前移*/
str[i-【?】]=str[i]; /*填start,这样i的初值为start,相当于第一个字符移到srt[O]*/
printf("%s\n",str);
} 答案:
. 0 或 '\0'
. start
【程序改错】
题目:函数unsigned fun(long s, int w)返回长整型变量 s中第w位的值,例如调用fun(216783,1) 函数返回3,调用fun(216783,3)函数返回7。main()从键盘接收一个长整数给变量 s,通过调 用fun()函数求s奇数位之和,例如数 216783各奇数位数字为1,7和3,它们的和为11。
下面给定的程序存在错误,请改正。
#include
unsigned fun(long s, int w)
{
int d;
while(w>0)
{
d %= 10; /*d=s%10; 取出 s 的最后一位 */
s /=10; /* 去除 s 的最后一位 */
w--;
}
return d;
}
main()
{
unsigned tot, w; /*累加器要赋初值 0,w 要赋初值 1*/
long s, step;
printf(" Enter a long integer number:");
scanf("%ld", &s);
step = s;
while (step!=0)
{
tot = fun( s ,w);/* 进行累加 tot+=fun(s,w)*/
w+=2; /*w 每次加 2,这样正好全为奇数 */ step /=100;
}
printf("tot=%d\n", tot);
return 0;
}
答案:
. d = s % 10;
. unsigned tot=0, w=1; 或 int tot=0, w=1; 或 unsigned int tot=0, w=1; 或 char tot=0, w=1; 或 unsigned char tot=0, w=1;
. tot += fun(s,w); 或 tot = fun(s,w) + tot; 或 tot = tot + fun(s,w); 【程序设计】 题目:找出二维整型数组 a[4][4] 中每行元素的最大值,并将该元素移动至该行首列。 编写程序:
1、编写 void findmax(int a[][N], int n[]) 函数:找出二维数组 a 中每行元素的最大值, 并将该元素的列下标存入数组n中,即第0行元素最大值的列下标存入n[0],...,第3行元
素最大值的列下标存入 n[3]。
2、编写void move(int a[][N],int n[])函数:根据数组 n中保存的数据,将 a数组中每 行最大值元素移动到该行首列,要求移动后该元素与该行其他元素的相对位置不变。
例如:
a 数组的初始数据为