本系列資料由"韜略宏智" 授權(quán)發(fā)布,任何網(wǎng)站不得轉(zhuǎn)載,否則追究法律責(zé)任。
1.填空題
下列給定的程序中,fun()函數(shù)的功能是:將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫(這里的“單詞”是指有空格隔開的字符串)。例如,若輸入:
I am a student to take the examination
則應(yīng)輸出: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.改錯(cuò)題
下列給定程序中,函數(shù)fun的功能是:逐個(gè)比較a、b兩個(gè)字符串對應(yīng)位置中的字符,把ASCII值大或相等的字符依次存放到c數(shù)組中,從而形成一個(gè)新的字符串。例如,若a中的字符串為aBCDeFgH,b中的字符串為:ABcd,則c中的字符串應(yīng)為:aBcdeFgH。
請改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。
注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。
試題程序:
#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;應(yīng)改為int k=0;
第2處:while(*p!=*q)應(yīng)改為while(*p||*q)
【考點(diǎn)】變量賦初值,循環(huán)語句及條件。
【解析】
(1)fun函數(shù)定義了整型變量k并賦初值為1,k作為字符串c的下標(biāo),但C語言數(shù)組的下標(biāo)是從0開始的,將K賦初值為1會(huì)導(dǎo)致c數(shù)組沒有輸出,因?yàn)槌跏蓟Z句c[80]={‘\0’},將c數(shù)組第一個(gè)字符單元賦值為’\0’,這種情況下使用puts()函數(shù)是不能輸出的,因?yàn)樵擃惡瘮?shù)在遇到’\0’時(shí)就結(jié)束。同樣,使用print("%s”,c)也不能得到預(yù)期的輸出。
(2)根據(jù)函數(shù)的功能可知,while(*p!=*q)循環(huán)條件有問題,即按照此循環(huán)條件進(jìn)行判斷時(shí),若出現(xiàn)等值情況就會(huì)終止循環(huán)。應(yīng)改為:while(*p||*q);下面詳細(xì)分析一下本題while()循環(huán)中的各條語句:
{
if(*p<*q) c[k]=*q;/*當(dāng)b中相應(yīng)位置的值大于a中的值時(shí),把b中的值存入c中*/
else c[k]=*p; /*當(dāng)b中相應(yīng)位置的值小于a中的值時(shí),把a(bǔ)中的值存入c中*/
/*如果兩個(gè)數(shù)組不等長,就把較長數(shù)組的剩余部分繼續(xù)拷貝到c數(shù)組中*/
if(*p) p++; /*若a的當(dāng)前值不為0,則將指向a當(dāng)前位置的指針p向后移1位*/
if(*q) q++;/*若b的當(dāng)前值不為0,則將指向a當(dāng)前位置的指針q向后移1位*/
k++; /*k值加1*/}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |