c语言中元音字母对应的的值,全国计算机等级考试二级C语言南开上机百题改错题第59...

59

题目:

下列给定程序中,函数fun的功能是:统计字符串中各元音字母(即:A、E、I、O、U)的个数。注意:字母不分大、小写。例如:若输入THIs

is a boot,则输出应该是1、0、2、2、0。

请改正modi.c程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include

#include

fun ( char *s, int num[5] )

{

int k, i=5;

for ( k = 0; k

num[i]=0;

for (; *s; s++)

{

i=-1;

switch ( s )

{

case 'a':

case 'A':

{

i=0;

break;

}

case 'e':

case 'E':

{

i=1;

break;

}

case 'i':

case 'I':

{

i=2;

break;

}

case 'o':

case 'O':

{

i=3;

break;

}

case 'u':

case 'U':

{

i=4;

break;

}

}

if (i >=0)

num[i]++;

}

}

main()

{

char s1[81];

int num1[5], i;

clrscr();

printf("\nPlease enter a string: " );

gets( s1 );

fun ( s1,num1 );

for ( i=0; i < 5; i++ )

printf ("%d ",num1[i]);

printf("\n");

}

59

分析:

题目要求在fun函数中统计字符串中各元音字母(即:A、E、I、O、U)的个数。注意:字母不分大、小写。例如:若输入THIs is a

boot,则输出应该是1、0、2、2、0。

为了实现以上要求,程序首先将num数组五个元素初始化为0,因为这五个元素分别记录了各元音字母(即:A、E、I、O、U)在字符串中的个数。然后程序使用循环逐个地检查s字符串中每一个字符,检查过程中首先设置i变量为-1。这个i变量为什么要设置为-1呢?这是因为在检查当前字符是否为元音字母(即:A、E、I、O、U)的时候,如果的确是,则将i设置为num数组中记录对应元音字母个数的下标位置。如果不是元音字母,i变量则保持-1的值。这样只要判断i是否不为-1,如果i等于-1,就知道当前检查的字符不是元音字母,否则就应该将num[i]加一。

程序第一处改错处将fun ( char *s, int num[5] )修改为void fun (

char *s, int num[5]

)的原因是按照标准C语言的语法,函数必须存在返回类型,如果没有返回值必须声明函数返回类型为void。由于程序中fun函数没有任何返回值的语句,也就是说没有return语句,所以fun函数没有返回值,所以需要声明fun函数的返回类型为void。

程序第二处改错处将num[i]=0;修改为num[k]=0;的原因是该语句位于for循环中,作用是将num数组每一个元素初始化为0以便下面的程序进行累加。

程序第三处改错处将switch ( s )修改为switch ( *s

)的原因是*s表示s指针指向的字符,而s是指针,所以switch(*s)就是判断s指针当前指向的字符是否为下面的字符之一。

程序注解如下:

#include

#include

void fun ( char *s,

int num[5])

{

int k, i=5;

for ( k = 0;

k

num[k]=0;

for (; *s; s++)

{

i=-1;

switch ( *s )

{

case 'a':

case 'A':

{

i=0;

break;

}

case 'e':

case 'E':

{

i=1;

break;

}

case 'i':

case 'I':

{

i=2;

break;

}

case 'o':

case 'O':

{

i=3;

break;

}

case 'u':

case 'U':

{

i=4;

break;

}

}

if (i >=0)

num[i]++;

}

}

main()

{

char s1[81];

int num1[5], i;

clrscr();

printf("\nPlease enter a

string: " );

gets( s1 );

fun ( s1,num1 );

for ( i=0; i

< 5; i++ )

printf ("%d ",num1[i]);

printf("\n");

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值