本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
1.填空题
下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。例如,若输入:
I am a student to take the examination
则应输出:I aM A studenT tO takE thE examinatioN
试题程序:
#include
#include
#include
#include
void fun(char *p)
{
int k=0;
for(;*p;p++)
if(k)
{
if(*p==' ')
{
【1】;
【2】=toupper(*(p-1));
}
}
else
k=1;
}
main()
{ char chrstr[64];
int d;
printf("\nplease enter an English sentence within 63 letters:");
gets(chrstr);
d=strlen
2.改错题
下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,从而形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
#include<string.h>
void fun(char *p,char *q,char *c)
{
/********found********/
int k=1;
/********found********/
while(*p!=*q)
{
if(*p<*q)
c[k]=*q;
else
c[k]=*p;
if(*p)
p++;
if(*q)
q++;
k++;
}
}
main()
{
char a[10]="aBCDeFgH",b[10]="ABcd",c[80]={'\0'};
fun(a,b,c);
printf("The string a:");
puts(a);
printf("The string b:");
puts(b);
printf("The result:");
puts(c);
}
【答案】
第1处:int k=1;应改为int k=0;
第2处:while(*p!=*q)应改为while(*p||*q)
【考点】变量赋初值,循环语句及条件。
【解析】
(1)fun函数定义了整型变量k并赋初值为1,k作为字符串c的下标,但C语言数组的下标是从0开始的,将K赋初值为1会导致c数组没有输出,因为初始化语句c[80]={‘\0’},将c数组第一个字符单元赋值为’\0’,这种情况下使用puts()函数是不能输出的,因为该类函数在遇到’\0’时就结束。同样,使用print("%s”,c)也不能得到预期的输出。
(2)根据函数的功能可知,while(*p!=*q)循环条件有问题,即按照此循环条件进行判断时,若出现等值情况就会终止循环。应改为:while(*p||*q);下面详细分析一下本题while()循环中的各条语句:
{
if(*p<*q) c[k]=*q;/*当b中相应位置的值大于a中的值时,把b中的值存入c中*/
else c[k]=*p; /*当b中相应位置的值小于a中的值时,把a中的值存入c中*/
/*如果两个数组不等长,就把较长数组的剩余部分继续拷贝到c数组中*/
if(*p) p++; /*若a的当前值不为0,则将指向a当前位置的指针p向后移1位*/
if(*q) q++;/*若b的当前值不为0,则将指向a当前位置的指针q向后移1位*/
k++; /*k值加1*/}
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |