為大家收集整理了《2013年9月計(jì)算機(jī)等考三級網(wǎng)絡(luò)技術(shù)上機(jī)題及答案(10)》供大家參考,希望對大家有所幫助?。?!
下列程序的功能是:把s字符串中的所有字母改成該字母的下一個(gè)字母,字母z改成字母a。要求大寫字母仍為大寫字母,小寫字母仍為小寫字母,其他字符不做改變。請編寫函數(shù)chg(char *s)實(shí)現(xiàn)程序要求,最后調(diào)用函數(shù)readwriteDAT( ),讀取in60.dat中的字符串,并把結(jié)果輸出到文件out60.dat中。
例如:s字符串中原有的內(nèi)容為Mn 123Zxy,則調(diào)用該函數(shù)后,結(jié)果為No 123Ayz。
注意:部分源程序已給出。
請勿改動(dòng)主函數(shù)main( )和輸入輸出函數(shù)readwriteDAT( )的內(nèi)容。
試題程序:
#include
#include
#include
#include
#define N 81
void readwriteDAT();
void chg(char *s)
{
}
void main()
{
char a[N];
system("CLS");
printf("Enter a string:");
gets(a);
printf("The original string is :");
puts(a);
chg(a);
printf("The string after modified :");
puts(a);
readwriteDAT();
}
void readwriteDAT()
{
int i;
char a[N];
FILE *rf,*wf;
rf=fopen("in60.dat","r");
wf=fopen("out60.dat","w");
for(i=0;i<10;i++)
{
fgets(a,81,rf);
chg(a);
fprintf(wf,"%s",a);
}
fclose(rf);
fclose(wf);
}
【答案】
void chg(char *s)
{
while(*s) /*若當(dāng)前字符不是字符串結(jié)束符,則循環(huán)一直進(jìn)行*/
if(*s=='z'||*s=='Z') /*將當(dāng)前字母是'z'或者'Z'*/
{
*s-=25; /*則分別將其改成'a'或'A'*/
s++; /*取下一個(gè)字母*/
}
else if(*s>='a'&& *s<='y') /*若是小寫字母,則改成該字母的下一個(gè)字母*/
{
*s+=1;
s++; /*取下一個(gè)字母*/
}
else if(*s>='A'&& *s<='Y') /*若是大寫字母,則改成該字母的下一個(gè)字母*/
{
*s+=1;
s++; /*取下一個(gè)字母*/
}
else s++; /*取下一個(gè)字母*/
}
【解析】本題考查用指針訪問字符串的方法。
這里利用一個(gè)while循環(huán)對從字符串中逐個(gè)獲取的字符進(jìn)行判斷,如果當(dāng)前字符是小寫字母'z'或'Z', 則相應(yīng)地改成'a'或者'A'。如果不是,再接著判斷是否是字母,如果是,就改成該字母的下一個(gè)字母,否則不作改變。
下列程序的功能是:把s字符串中的所有字母改成該字母的下一個(gè)字母,字母z改成字母a。要求大寫字母仍為大寫字母,小寫字母仍為小寫字母,其他字符不做改變。請編寫函數(shù)chg(char *s)實(shí)現(xiàn)程序要求,最后調(diào)用函數(shù)readwriteDAT( ),讀取in60.dat中的字符串,并把結(jié)果輸出到文件out60.dat中。
例如:s字符串中原有的內(nèi)容為Mn 123Zxy,則調(diào)用該函數(shù)后,結(jié)果為No 123Ayz。
注意:部分源程序已給出。
請勿改動(dòng)主函數(shù)main( )和輸入輸出函數(shù)readwriteDAT( )的內(nèi)容。
試題程序:
#include
#include
#include
#include
#define N 81
void readwriteDAT();
void chg(char *s)
{
}
void main()
{
char a[N];
system("CLS");
printf("Enter a string:");
gets(a);
printf("The original string is :");
puts(a);
chg(a);
printf("The string after modified :");
puts(a);
readwriteDAT();
}
void readwriteDAT()
{
int i;
char a[N];
FILE *rf,*wf;
rf=fopen("in60.dat","r");
wf=fopen("out60.dat","w");
for(i=0;i<10;i++)
{
fgets(a,81,rf);
chg(a);
fprintf(wf,"%s",a);
}
fclose(rf);
fclose(wf);
}
【答案】
void chg(char *s)
{
while(*s) /*若當(dāng)前字符不是字符串結(jié)束符,則循環(huán)一直進(jìn)行*/
if(*s=='z'||*s=='Z') /*將當(dāng)前字母是'z'或者'Z'*/
{
*s-=25; /*則分別將其改成'a'或'A'*/
s++; /*取下一個(gè)字母*/
}
else if(*s>='a'&& *s<='y') /*若是小寫字母,則改成該字母的下一個(gè)字母*/
{
*s+=1;
s++; /*取下一個(gè)字母*/
}
else if(*s>='A'&& *s<='Y') /*若是大寫字母,則改成該字母的下一個(gè)字母*/
{
*s+=1;
s++; /*取下一個(gè)字母*/
}
else s++; /*取下一個(gè)字母*/
}
【解析】本題考查用指針訪問字符串的方法。
這里利用一個(gè)while循環(huán)對從字符串中逐個(gè)獲取的字符進(jìn)行判斷,如果當(dāng)前字符是小寫字母'z'或'Z', 則相應(yīng)地改成'a'或者'A'。如果不是,再接著判斷是否是字母,如果是,就改成該字母的下一個(gè)字母,否則不作改變。