C语言练习题06

练习1:请自行学习以下函数的使用以及功能

int strncmp(const char *s1, const char *s2, size_t n);

strcmp函数用于比较两个字符串s1和s2的前n个字符,比较规则如下:

  1. 如果s1 < s2,则返回一个负数;
  2. 如果s1 = s2,则返回0;
  3. 如果s1 > s2,则返回一个正数。

参数说明:

  • s1:指向要比较的第一个字符串的指针;
  • s2:指向要比较的第二个字符串的指针;
  • n:要比较的字符个数。
    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char str1[] = "hello";
        char str2[] = "world";
        
        int result = strncmp(str1, str2, 3);
        
        if (result < 0) {
            printf("str1 < str2\n");
        } else if (result == 0) {
            printf("str1 = str2\n");
        } else {
            printf("str1 > str2\n");
        }
        
        return 0;
    }

char *strncat(char *dest, const char *src, size_t n);

strncat函数用于将源字符串src中的最多n个字符连接到目标字符串dest的末尾,连接后的目标字符串dest将以空字符'\0'结尾。

参数说明:

  • dest:指向要连接的目标字符串的指针;
  • src:指向要从中复制字符的源字符串的指针;
  • n:要复制的字符个数。
    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char dest[50] = "Hello, ";
        const char src[] = "world!";
        
        printf("Before strncat: %s\n", dest);
        
        strncat(dest, src, 3);
        
        printf("After strncat: %s\n", dest);
        
        return 0;
    }

char *strncpy(char *dest, const char *src, size_t n);

strncpy函数用于将源字符串src中最多n个字符复制到目标字符串dest中,并在复制后的目标字符串dest末尾添加空字符'\0'。如果源字符串的长度小于n,则目标字符串将以空字符'\0'进行填充。

参数说明:

  • dest:指向要复制到的目标字符串的指针;
  • src:指向要复制的源字符串的指针;
  • n:要复制的字符个数。
    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char dest[20];
        const char src[] = "Hello, world!";
        
        strncpy(dest, src, 5);
        dest[5] = '\0'; // 给目标字符串末尾添加空字符以确保正确输出
        
        printf("Copied string: %s\n", dest);
        
        return 0;
    }

练习2.输入一个字符串。删除空格

hello world ! ! !

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char arr[128];
    puts("请输入字符串:");
    gets(arr);
    int i,j=0;
    for(i=0;arr[i]!='\0';i++){
        if(arr[i]!=' '){
            arr[j]=arr[i];
            j++;
        }
    }
    arr[j]='\0';
    printf("删除空格后的字符串:\n");
    puts(arr);
    return 0;
}                                                         

练习3. 输入一个字符串,实现单词的逆置

good good study ---->study good good

//1,先整体逆置

yduts doog doog

//、2单词逆置

study good good

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,const char *argv[])
{
    char str[128];
    printf("请输入一个字符串:");
    gets(str);

    int len = strlen(str);

    int start = 0;
    int end = len - 1;
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
    puts(str);
    printf("%d %c\n",len,str[len-1]);
    start = 0;
    for (int i = 0; i <=len; i++) {
        if(str[i]=='\0'|| str[i]==' '|| str[i]=='\n') {
            end = i - 1;
            while (start <= end) {
                char temp = str[start];
                str[start] = str[end];
                str[end] = temp;
                start++;
                end--;
            }
            start = i+1;
        }                                                                   
    }

    printf("单词逆置后的字符串为:");
    puts(str);

    return 0;
}

练习4.输入一个字符串,计算单词的个数

"good good study" 3

ii+1 ii+1 ii+1

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char str[128];
    int count = 0;
    printf("请输入一个字符串:\n");
    gets(str);

    for(int i=0;i<strlen(str);i++){
        if((str[i]!=' '&&str[i+1]==' ') || (str[i]!=' '&& str[i+1]=='\0') ){
                count++;
        }
    }
    printf("该字符串中单词的个数为:%d\n",count);
    return 0;
}                                                                                  

练习5.穷举算法:“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int a,b,c;
    for(a=0;a<100;a++){
        for(b=0;b<100;b++){
            for(c=0;c<100;c++){
                if(a+b+c==100&& 5*a*3+3*b*3+c==300){
                    printf("鸡翁:%d  鸡母:%d  鸡雏:%d\n",a,b,c);
                }
            }
        }
    }
    return 0;
}                                                                            

练习6. 打印图形

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    int i,j;
    for(int i=1;i<=9;i++){
        for(int j=1;j<=i;j++){
            printf("%d*%d=%2d ",j,i,j*i);
        }   
        putchar(10);
    }   
    return 0;
}                                                    

练习7.循环输入n个元素,交换数组中最大值和最小值

12 3 5 2 5 --->2 3 5 12 5

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char str[128];
    int a,b;
    char min,max,temp;
    printf("请输入一个字符串:");
    scanf("%s",str);                                        
    int len = strlen(str);
    max = str[0];
    min = str[0];
    for(int i=0;i<strlen(str);i++){
        if(max<str[i]){
            max = str[i];
            a = i;
        }
        if(min>str[i]){
            min = str[i];
            b = i;
        }
    }
    temp = str[a];
    str[a]=str[b];
    str[b]=temp;
    printf("交换最大值和最小值后的数组为:");
    puts(str);
    
    return 0;
}

练习8.输入字符串,输入变量k的值,将字符循环右移k位

eg: k=2

char arr[]="abcde"

移动的结果是:

deabc

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[]){
    char arr[100], temp;
    int k, len;

    printf("请输入一个字符串:\n");
    gets(arr);

    len = strlen(arr);

    printf("请输入整数k的值:\n");
    scanf("%d", &k);

    k = k % len;

    for (int i = 0; i < k; i++) {
        temp = arr[len - 1];
        for (int j = len - 1; j > 0; j--) {
            arr[j] = arr[j - 1];
        }
        arr[0] = temp;
    }

    printf("移动的结果是:%s\n", arr);

    return 0;
}

练习9.定义字符串并输入,请实现对字符串每个字符升序排序

“bdcae” --->"abcde"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char str[128];
    printf("请输入一个字符串:");
    scanf("%s",str);

    int len = strlen(str);
    for(int i=0;i<len-1;i++){
        for(int j=0;j<len-i-1;j++){
                if(str[j]<str[j+1]){
                    char temp = str[j];
                    str[j] = str[j+1];
                    str[j+1] = temp;
                }
        }
    }
    printf("降序后的字符串为:");
    puts(str);
    return 0;                                                 
}

练习10.输入5个学生的姓名,请输出姓名中的最大值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char names[5][30];
    char maxname[30];

    printf("请输入5个学生的姓名:\n");
    for(int i=0;i<5;i++){
        printf("姓名%d:",i+1);
        scanf("%s",names[i]);
    }

    strcpy(maxname,names[0]);
    for(int i=0;i<5;i++){                                           
        if(strcmp(maxname,names[i])<0){
            strcpy(maxname,names[i]);
        }
    }
    printf("5位学生姓名中的最大值为:%s\n",maxname);
    return 0;
}
                                                                    

  • 44
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值