本系列資料由"韜略宏智" 授權發布,任何網站不得轉載,否則追究法律責任。
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*/}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |