C语言 函数题(二)

6-7 分类统计字符个数

本题要求实现一个函数,统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。

函数接口定义:

voidStringCount( char s[] );

其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。

裁判测试程序样例:

#include<stdio.h>#define MAXS 15voidStringCount( char s[] );
voidReadString( char s[] ); /* 由裁判实现,略去不表 */intmain(){
char s[MAXS];
    ReadString(s);
    StringCount(s);
return0;
}
/* Your function will be put here */

输入样例:

aZ &
09 Az

输出样例:

letter = 4, blank = 3, digit = 2, other = 1
void StringCount( char s[] )
{
    int letter=0,blank=0,digit=0,other=0;
    for(int i=0;i<=s[i];i++)
    {
        if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') 
            letter++;
        else if(s[i]==' '||s[i]=='\n') 
            blank++;
        else if(s[i]>='0'&&s[i]<='9') 
            digit++;
        else 
            other++;
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d\n",
           letter,blank,digit,other);
}

6-8 在数组中查找指定元素

本题要求实现一个在数组中查找指定元素的简单函数。

函数接口定义:

intsearch( intlist[], int n, int x );

其中list[]是用户传入的数组;n(≥0)是list[]中元素的个数;x是待查找的元素。如果找到

则函数search返回相应元素的最小下标(下标从0开始),否则返回−1。

裁判测试程序样例:

#include<stdio.h>#define MAXN 10intsearch( intlist[], int n, int x );
intmain(){
int i, index, n, x;
int a[MAXN];
scanf("%d", &n);
for( i = 0; i < n; i++ )
scanf("%d", &a[i]);
scanf("%d", &x);
    index = search( a, n, x );
if( index != -1 )
printf("index = %d\n", index);
elseprintf("Not found\n");
return0;
}
/* 你的代码将被嵌在这里 */

输入样例1:

5
1 2 2 5 4
2

输出样例1:

index = 1

输入样例2:

5
1 2 2 5 4
0

输出样例2:

Not found
int search( int list[], int n, int x )
{
    int t=-1;
    for(int i=0;i<n&&t==-1;i++)
    {
        if(list[i]==x)
            t=i;
    }
    return t;
}

6-9 数组循环右移

本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(anman−1a0a1⋯anm−1)(最后m个数循环移至最前面的m个位置)。

函数接口定义:

voidArrayShift( int a[], int n, int m );

其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

裁判测试程序样例:

#include<stdio.h>#define MAXN 10voidArrayShift( int a[], int n, int m );
intmain(){
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    ArrayShift(a, n, m);
for ( i = 0; i < n; i++ ) {
if (i != 0) printf(" ");
printf("%d", a[i]);
    }
printf("\n");
return0;
}
/* 你的代码将被嵌在这里 */

输入样例:

6 2
1 2 3 4 5 6

输出样例:

5 6 1 2 3 4
//方法一
 
void ArrayShift( int a[], int n, int m )
{
    int i;
    int b[n];
    for(i=0;i<n;i++)
        b[(i+m)%n]=a[i];
    for(i=0;i<n;i++)
        a[i]=b[i];
}
//方法二

void ArrayShift( int a[], int n, int m )
{
    int mid;
    
    for(int j=0;j<m;j++)
    {
        mid=a[n-1];
        for(int i=n-1;i>0;i--)
        {
            a[i]=a[i-1];
        }
        a[0]=mid;
     }
}

6-10 使用函数判断完全平方数

本题要求实现一个判断整数是否为完全平方数的简单函数。

函数接口定义:

intIsSquare( int n );

其中n是用户传入的参数,在长整型范围内。如果n是完全平方数,则函数IsSquare必须返回1,否则返回0。

裁判测试程序样例:

#include<stdio.h>#include<math.h>intIsSquare( int n );
intmain(){
int n;
scanf("%d", &n);
if ( IsSquare(n) ) printf("YES\n");
elseprintf("NO\n");
return0;
}
/* 你的代码将被嵌在这里 */

输入样例1:

90

输出样例1:

NO

输入样例2:

100

输出样例2:

YES
int IsSquare( int n )
{
    if((int)sqrt(n)==sqrt(n))
        return 1;
    else
        return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用循环遍历字符串的每个字符,然后根据字符的ASCII码值判断它属于哪一类。具体来说,可以定义四个计数器分别记录英文字母空格回车数字字符和其他字符的个数,然后在循环根据字符的ASCII码值将计数器加1。最后返回这四个计数器的值即可。 ### 回答2: 要求实现一个函数统计给定字符串英文字母空格回车数字字符和其他字符的个数。这个问的解决思路可以是遍历字符串,对其的每个字符进行判断,然后分别统计其属于哪一类字符。 首先,我们要明确这个问需要统计哪些字符英文字母包括大小写母,数字字符是指0-9的数字,其他字符就是除了英文字母数字字符空格回车外的所有字符空格回车也要算作一类字符。 接下来,我们可以定义四个变量,分别统计英文字母空格回车数字字符和其他字符的个数。然后对给定字符串进行遍历,对其的每个字符进行判断并更新对应的计数器。这个过程可以使用循环完成。 最后,我们将四个计数器的结果打印出来,作为函数的输出。下面是使用Python实现的代码示例: ```python def count_chars(s): # 初始化四个计数器 letters = 0 # 英文字母 spaces = 0 # 空格回车 digits = 0 # 数字字符 others = 0 # 其他字符 # 遍历字符串,更新计数器 for c in s: if c.isalpha(): # 判断是否为英文字母 letters += 1 elif c.isspace(): # 判断是否为空格回车 spaces += 1 elif c.isdigit(): # 判断是否为数字字符 digits += 1 else: others += 1 # 打印结果 print("英文字母个数:", letters) print("空格回车个数:", spaces) print("数字字符个数:", digits) print("其他字符个数:", others) ``` 这样,我们就完成了一个统计字符串各种字符个数的函数。需要注意的是,这个函数统计给定字符串字符类型,并不会去除空格回车等非字符内容。如果需要进行字符串清洗或处理,可以在函数外部进行。 ### 回答3: 要实现这个函数,首先需要明确四类字符的定义: 1. 英文字母:即大小写母,包括 A~Z 和 a~z。 2. 空格回车:即空格字符回车字符,包括空格(ASCII 码为 32)、换行符(ASCII 码为 10)、回车符(ASCII 码为 13)等。 3. 数字字符:即 0~9 的数字字符。 4. 其他字符:即除英文字母空格回车数字字符以外所有的字符。 考虑到每个字符都对应一个 ASCII 码,可以遍历字符串,根据每个字符的 ASCII 码判断属于哪一类,然后分别累加即可。 下面给出一个 Python 代码实现: ```python def count_characters(s): letter_count = space_count = digit_count = other_count = 0 for i in range(len(s)): if s[i].isalpha(): # 判断是否为母 letter_count += 1 elif s[i].isspace() or s[i] == '\r' or s[i] == '\n': # 判断是否为空格回车 space_count += 1 elif s[i].isdigit(): # 判断是否为数字字符 digit_count += 1 else: # 否则为其他字符 other_count += 1 return (letter_count, space_count, digit_count, other_count) ``` 这个函数返回一个包含四个元素的元组,分别为英文字母个数、空格回车个数、数字字符个数和其他字符个数。 测试一下这个函数: ```python s = "Hello, World!\n123456" print(count_characters(s)) # 输出:(12, 3, 6, 2) ``` 说明在字符串 s ,有 12 个英文字母,3 个空格回车,6 个数字字符和 2 个其他字符

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值