C语言 函数习题

编写函数,完成下面的程序,将一个字符串中的字母排序后输出。输出要求:字母从小到大排序(包括大小写)后的字符串。例如:

输入:Hello World!  

输出:!HWdellloor

#include <stdio.h>
#include <string.h>
void sortchar(char s[]);
int main()
{
    char s[80];
    gets(s);
    sortchar(s);
    puts(s);
}

void sortchar(char s[])
{
    int i,j,t;
    unsigned long l;
    l=strlen(s);
    for (i=0; i<l-1; i++) {
        for (j=0; j<l-i-1; j++) {
            if (s[j]>s[j+1]) {
                t=s[j];
                s[j]=s[j+1];
                s[j+1]=t;
            }
        }
    }
}

2、编写函数void find_max( int a[][4], int n, int b[2]) 求出二维整型数组中元素的最大值及其下标号。在main函数中输入一个二维数组,调用函数find_max()求出最大值及其下标号,在主函数中输出。其中:二维数组行数由用户确定(不超过10),列数固定为4列。

输入要求:第1行输入二维数组的行数,然后分m行输入二维数组,元素之间用空格分隔。示例如下:

3

18   2    3    4

8    7    6    18

9    10  11  12

输出要求:第一个最大值及下标。示例如下:

最大值array[0][0]=18

 提示:这里至少需要返回二维数组元素的行,列两个值,而函数只能返回1个值(无法返回2个值),所以只能通过数组作为参数的方法将值带回来。在main函数中输入一个二维整型数组,调用该函数得到最大值所在的下标,并输出最大值及其下标号。

#include <stdio.h>
#include <string.h>
void find_max(int a[][4],int n,int b[2]);
int main()
{
      int array[10][4],m[2],n,i,j;
      scanf("%d",&n);
      for(i=0;i<n;i++)
           for(j=0;j<4;j++)
               scanf("%d",&array[i][j]);
      find_max(array,n,m);
      printf("最大值array[%d][%d]=%d",m[0],m[1],array[m[0]][m[1]]);
}
void find_max(int a[][4],int n,int b[2])
{
    int i,j,max;
    max=a[0][0];
    for (i=0; i<n; i++) {
        for (j=0; j<4; j++) {
            if (max<a[i][j]) {
                max=a[i][j];
                b[0]=i;
                b[1]=j;
            }
        }
    }
}

3、编写一个函数void sort(int a[],int n),实现整型数组元素的升序排列。在main函数中输入数组元素个数和各个元素(不超过10个整数),之后调用sort函数进行排序,在主函数中输出排序后的结果。

输入要求:需要输入2行。第1行输入数组元素的个数n;第2行输入n个数组元素。

输入示例:

5

1  9  4  5  7

输出要求:输出2行。第1行为未排序的数组,每个数值之后都用1个空格分隔;第2行为升序排序后的数组,每个数值之后都用1个空格分隔。

输出示例:

排序之前的数组:1 9 4 5 7

排序之后的数组:1 4 5 7 9 

#include <stdio.h>
#include <string.h>
void sort(int a[],int n);
int main()
{   int a[10],i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    printf("排序之前的数组:");
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    sort(a,n);
    printf("\n排序之后的数组:");
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
}
void sort(int a[],int n)
{
    int i,j,t;
    for (i=0; i<n-1; i++) {
        for (j=0; j<n-i-1; j++) {
            if (a[j]>a[j+1]) {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
}

 

4、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。

#include <stdio.h>
#include <string.h>
#define M 100
int fun(int aa[],int n,int y);
int main()
{   int aa[M]={1,2,3,3,2,1,1,2,3,4,5,4,3,2,1}, n=15, y, k;
    scanf("%d",&y);
    n = fun(aa, n, y);
    for(k=0; k<n; k++ )
    printf("%d ",aa[k]);
    printf("\n");
    return(0);
}

int fun(int aa[],int n,int y)
{
    int i,j;
    for (i=0; i<n; i++) {
        if (y==aa[i]) {
            n--;
            for (j=i; j<n; j++) {
                aa[j]=aa[j+1];
            }
            i--;
        }
    }
    return n;
}

 

5、

编写函数 int  substring(char s[], char sub[]),查找sub串在字符串s中第一次出现的位置,若找到,函数返回对应位置,否则返回-1。注意主串第1个字符的位置为1。例如s串为“abcdefg”,sub串为“def”,则返回值为4。在main函数中输入主串和子串,调用该函数并输出结果。

输入要求:需要2行。第1行输入主串s,第2行输入子串sub。

示例如下:

abcdefgdefg

def

输出要求:根据实际情况输出子串的位置或提示“***子串没有找到!”(其中***要用实际的子串替代)

示例如下:

子串def在主串abcdefgdefg中第一次出现的位置是4

#include <stdio.h>
#include "string.h"
int substring(char s[],char sub[]);
int main(void)
{
    char s[99],sub[99];
    gets(s);
    gets(sub);
    if(substring(s,sub)==-1)
        printf("%s子串没有找到!",sub);
    else
        printf("子串%s在主串%s中第一次出现的位置是%d",sub,s,substring(s,sub));
}
int substring(char s[],char sub[]){
    int i,j,x=0;
    unsigned long n=strlen(s),m=strlen(sub);
    for (i=0; i<n; i++) {
        if (s[i]==sub[0]){
            x=1;
            for (j=0; j<m; j++){
            if (s[i+j]!=sub[j]) {
                x=0;
                break;
                }
            if (x==1)
                return i+1;
            }
        }
    }
    return -1;
}

 

6、

输入1 个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a的每一行的最大元素值都相等, 输出"YES", 否则, 输出"NO"。

#include <stdio.h>
int find_max(int a[],int n);
int main(void)
{
    int i,j,x=0,n,a[6][6],b[6];
    scanf("%d",&n);
    for (i=0; i<n; i++) {
        for (j=0; j<n; j++) {
            scanf("%d",&a[i][j]);}}
    for (i=0; i<n; i++)
        b[i]=find_max(a[i],n);
    for (i=0; i<n-1; i++) {
        if (b[i]==b[i+1]) {
            x=1;
        } else {
            x=0;
            break;
        }}
    if (x==1) {
        printf("YES");
    } else {
        printf("NO");
    }
}

int find_max(int a[],int n){
    int max,i;
    max=a[0];
    for (i=0; i<n; i++) {
        if (max<a[i]) {
            max=a[i];
        }
    }
    return max;
}

7、

对每个字符串做如下处理:删除字符串所有连续相同的字符,然后输出该字符串。

要求:使用函数void del_samechar(char str[])实现对字符串str中所有连续相同的字符的删除。

#include <stdio.h>
#include "string.h"
void del_samechar(char string[]);
int main(void)
{
    char str[100];
    gets(str);
    del_samechar(str);
    puts(str);
}

void del_samechar(char string[]){
    int i = 0, j;
    int found = 0;
    unsigned long l=strlen(string);
    while(i<l)
    {
        j = i + 1;
        while(string[i] == string[j])
        {
            j++;
            found = 1;
        }
        if(found)
        {
              strcpy(string + i, string + j);
              if (i != 0)
                  i--;
              found = 0;
          }
          else
              i++;
       }
}

 

8、

编写1个函数判断一个整数是否左右对称数。 要求函数为:  fun(long n)

要求在主程序中输入一个整数,如果该数对称,输出"YES";否则,输出"NO"。

#include <stdio.h>
#include <string.h>
int fun(long n);
int main()
{   long in;
    scanf("%ld",&in);
    if(fun(in))
        printf("YES\n");
    else
        printf("NO\n");
}

int fun(long n){
    int a[20],i,l;
    if(n==8&&n==0) return 1;
    for (i=0; n!=0; i++) {
        a[i]=n%10;
        n=n/10;
    }
    l=i;
    for (i=0; i<l; i++) {
        if (a[i]!=a[l-i-1])
            return 0;
    }
    return 1;
}

 

9、

编写函数long compose(long number)完成如下功能:将长整型数中数字为偶数的数依次取出,构成一个新数返回,例如,假设长整型数为:87653142时,则返回的数为:8642。

然后在main函数中输入一个长整型数,调用该函数得到新的数,并输出结果。

#include <stdio.h>
#include <string.h>
#include <math.h>
long compose(long number);
int main()
{
   long int n ;
   scanf("%ld",&n);
   printf("%ld\n",compose(n));
   return 0;
}

long compose(long number){
    int i,a[20],l;
    for (i=0; number!=0; ) {
        if (number%2==0) {
            a[i]=number%10;
            i++;
            number=number/10;
        }else
            number=number/10;
    }
    l=i;
    for (i=0; i<l; i++) {
        number=number+a[i]*pow(10, i);
    }
    return number;
}

 

10、

 编写函数,统计给定字符串中各个字母出现的次数,不区分大小写。在main函数中输入一个字符串,调用该函数进行计算,然后输出统计结果。

输入要求:任意一个字符串。

#include <stdio.h>
#include <string.h>
#include <math.h>
void counta_z(char str[],int count[]);
int main()
{
    char str[255];
    int count[26]={0};
    int i;
    gets(str);
    counta_z(str,count);
    for(i=0;i<26;i++)
    if(count[i])
    printf("%c出现的次数为:%d\n",i+'a',count[i]);
}
void counta_z(char s[],int count[]){
    int i;
    for (i=0; s[i]!='\0'; i++) {
        if(s[i]>='a'&&s[i]<='z')
        count[s[i]-'a']++;
        if(s[i]>='A'&&s[i]<='Z')
        count[s[i]-'A']++;
    }
}

 

11、

输入一个大于等于6的偶数,将它表示为两个素数之和(输出所有的组合)。

要求:用自定义函数int prime(int n)来判断n是否为素数。

例如:输入10

 输出:10=3+7

            10=5+5

#include <stdio.h>
#include <math.h>
int prime(int n);
int main() {
    int n, i, j;
    scanf("%d", &n);
    for (i = 2; i <= n/2; i++) {
        if (prime(i) == 1 && prime(n - i) == 1) {
            printf("%d =%d+%d\n", n, i, n-i);
        }
    }
}
int prime(int n) {
    int i;
    if (n == 2)     return 1;
    if (n>2)
    {
        for ( i = 2; i <n-1; i++)
        {
            if (n%i==0)     return 0;
        }
        return 1;
    }
}

 

  • 23
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值