c语言编程题经典100例——(46~50例)

1、实现字符串转数字。

在C语言中,可以使用库函数atoi()将字符串转换为整数。该函数接受一个字符串作为参数,并返回对应的整数值。以下是一个示例代码:

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    char str[] = "12345";  
    int num = atoi(str);  
    printf("The integer value of \"%s\" is %d\n", str, num);  
    return 0;  
}

运行结果:

The integer value of "12345" is 12345

如果要将字符串转换为其他类型的数字,可以使用相应的库函数,例如atof()用于将字符串转换为浮点数。

2、实现字符串的排序。

以下是使用C语言实现字符串排序的示例代码:

#include <stdio.h>  
#include <string.h>  
  
#define MAX_LENGTH 100 // 字符串最大长度  
  
int main() {  
    char strings[10][MAX_LENGTH]; // 存储待排序字符串的数组  
    char temp[MAX_LENGTH]; // 用于交换字符串的临时数组  
    int n, i, j;  
    char *p;  
  
    printf("请输入待排序字符串的数量:");  
    scanf("%d", &n);  
  
    printf("请输入%d个待排序字符串:\n", n);  
    for (i = 0; i < n; i++) {  
        scanf("%s", strings[i]);  
    }  
  
    // 使用冒泡排序对字符串进行排序  
    for (i = 0; i < n - 1; i++) {  
        for (j = 0; j < n - i - 1; j++) {  
            p = strings[j];  
            if (strcmp(strings[j+1], p) < 0) {  
                strcpy(temp, p);  
                strcpy(p, strings[j+1]);  
                strcpy(strings[j+1], temp);  
            }  
        }  
    }  
  
    // 输出排序后的字符串  
    printf("排序后的字符串为:\n");  
    for (i = 0; i < n; i++) {  
        printf("%s\n", strings[i]);  
    }  
  
    return 0;  
}

在上述代码中,我们首先定义了一个二维字符数组strings,用于存储待排序的字符串。然后,我们使用scanf()函数从标准输入中读入待排序的字符串,并将它们存储到strings数组中。接下来,我们使用冒泡排序对字符串进行排序,排序时使用strcmp()函数比较字符串的大小。最后,我们输出排序后的字符串。

3、实现字符串的查找。

以下是使用C语言实现字符串查找的示例代码:

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char str[100], sub[20];  
    int i, pos;  
  
    printf("请输入要查找的字符串:");  
    fgets(str, 100, stdin);  
    printf("请输入要查找的子字符串:");  
    fgets(sub, 20, stdin);  
  
    pos = strstr(str, sub);  
    if (pos == NULL) {  
        printf("未找到子字符串!\n");  
    } else {  
        printf("子字符串在主字符串中的位置为:%d\n", pos);  
    }  
  
    return 0;  
}

        在上述代码中,我们首先定义了两个字符数组strsub,分别用于存储主字符串和待查找的子字符串。然后,我们使用fgets()函数从标准输入中读入这两个字符串。接着,我们使用strstr()函数在主字符串中查找子字符串,如果找到了,则返回子字符串在主字符串中的位置;否则返回NULL。最后,我们根据返回值输出查找结果。

4、实现数字的加密和解密。

以下是一个简单的C语言程序,用于实现数字的加密和解密。该程序使用简单的替换算法,将数字0-9分别替换为它们的平方根(取整数部分),即0-9分别替换为0-3、5-9。加密和解密的过程实际上就是这种替换的逆操作。

#include <stdio.h>  
#include <math.h>  
  
int main() {  
    int num, encrypted, decrypted;  
    printf("请输入要加密的数字:");  
    scanf("%d", &num);  
  
    encrypted = encrypt(num);  
    printf("加密后的数字为:%d\n", encrypted);  
  
    decrypted = decrypt(encrypted);  
    printf("解密后的数字为:%d\n", decrypted);  
  
    return 0;  
}  
  
int encrypt(int num) {  
    int encrypted = 0;  
    while (num > 0) {  
        int digit = num % 10;  
        encrypted = encrypted * 10 + sqrt(digit) - 1;  
        num /= 10;  
    }  
    return encrypted;  
}  
  
int decrypt(int encrypted) {  
    int num = 0, sqrt_val;  
    while (encrypted > 0) {  
        int digit = encrypted % 10;  
        sqrt_val = sqrt(digit + 1);  
        num = num * 10 + sqrt_val % 10;  
        encrypted /= 10;  
    }  
    return num;  
}

        该程序中的encrypt函数和decrypt函数分别用于加密和解密数字。encrypt函数将输入的数字按位拆分,将每个数字的平方根(取整数部分)作为新的数字,再将这些数字按原来的顺序拼接起来作为加密后的数字。decrypt函数则是encrypt函数的逆操作,将加密后的数字按位拆分,计算出每个数字的平方根(取整数部分)的逆运算,再将这些数字按原来的顺序拼接起来作为解密后的数字。

5、实现链表中节点的删除。

在C语言中,链表是一种常见的数据结构。链表中的每个节点都包含数据和指向下一个节点的指针。删除节点需要找到该节点,然后断开它与其前一个节点的连接,同时更新它前一个节点的连接,使其指向当前节点的下一个节点。

以下是一个简单的示例,说明如何在C语言中删除链表中的节点:

首先,定义链表节点的结构:

#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct Node {  
    int data;  
    struct Node* next;  
} Node;

然后,创建一个函数来删除链表中的节点:

Node* deleteNode(Node* head, int key) {  
    // 如果头节点为空,或者头节点的数据就是关键字,那么直接返回NULL  
    if (head == NULL || head->data == key) {  
        return head;  
    }  
      
    // 找到前一个节点  
    Node* prev = head;  
    while (prev->next != NULL && prev->next->data != key) {  
        prev = prev->next;  
    }  
      
    // 如果关键字不在链表中,返回原始链表  
    if (prev->next == NULL) {  
        return head;  
    }  
      
    // 断开当前节点与前一个节点的连接,并释放当前节点的内存空间  
    Node* temp = prev->next;  
    prev->next = temp->next;  
    free(temp);  
    return head;  
}

        这个函数首先检查头节点是否为空或者头节点的数据是否为关键字。如果是,那么它直接返回NULL,因为删除头节点或者空链表是没有意义的。然后,它遍历链表,找到与关键字匹配的节点的前一个节点。最后,它断开当前节点与前一个节点的连接,并释放当前节点的内存空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十启树

您的认可是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值