12.9练习。

题目如下。结果均通过编译(dev)

1、:(1)分析程序, 写出输出结果?
/*  char *ptr; 
    if ((ptr = (char *)malloc(0)) == NULL) 
    puts("Got a null pointer"); 
    else 
    puts("Got a valid pointer"); 
*/

    //申请时,会返回一个有效的指针。这个可以通过 linux 的man手册查询malloc的使用方法。当使用malloc申请一个空间大小为0的空间的时候,编译器会返回一个默认的最小空间,空间的大小看编译器的默认设置。

    (2) 分析程序, 写出输出结果?
/*char * GetStr()
    {
        char *tmp;
        tmp = "123"
        return tmp;
    }
    void main()
    {
        printf("%s.\n", GetStr());
    }
*/
    //编译器在使用完函数之后会释放函数的内存,让函数里边定义的一个指针成为野指针,所以即使你可以使用此方法调用成功并打印出‘123’,还是放弃这种形式的使用。尽量在main函数中使用字符串,或者函数中使用malloc申请空间(函数结束后不会被释放)。


2、输入一个正整数,输出原数并逆序打印出各位数字。
//例如:原数:123456 逆序:654321
//逆序函数原型:int invers_int(int x)(需要用到递归实现)

#include <stdio.h>
#include <string.h>
#define max 100
char* invers_int(char *x)
{
    int i = 0;
    char change;
    int len = strlen(x)-1;
    for(i=0; i<len/2; i++)
    {
        change = x[i];
        x[i] = x[len-i];
        x[len-i] = change;//感觉使用字符串比起整数方便很多。将字符串首尾交换可以得到最后的结果。
    }
    return x;
}
int main(void)
{
    char s[max];
    printf("enter a number !\n");
    scanf("%s", s);
    printf("x = %s.\n", invers_int(s));
    return 0;
}

//下面来一个非字符串的形式。主要是因为用整形表达的数的范围实在是特别小。
#include <stdio.h>
#include <string.h>
#define max 100
int invers_int(int x)
{
    int l = 0, s = 0;
    l = x;
    while(l)
    {
        s = s*10 + l%10;
        l = l / 10;
    }
    return s;
}
int main(void)
{
    int s;
    printf("enter a number !\n");
    scanf("%d", &s);
    printf("x = %d.\n", invers_int(s));
    return 0;
}

3、按以下规律翻译密码:将每一个字母变成它后面的字母,例如,将A变成B,B变成C,…,Z变成A,非字母字符不变,“!”作为电文结束标志。
#include <stdio.h>
#include <string.h>
#define max 100
void change(char *s)
{
    int i = 0;
    int len = strlen(s) ;

    for(i=0; i<len; i++)
    {
        if((s[i] >= 'a' && s[i] <= 'y' ) || (s[i] >= 'A' && s[i] <= 'Y' ))//根据题意添加控制条件
            s[i] = s[i] + 1;
        else if(s[i] == 'z' || s[i] == 'Z')//将小z和大z单独分出。比较独特,减去与小a和大a的差距。
            s[i] = s[i] - 25;
    }
}
int main(void)
{
    char s[max];
    int i = 0;
    for(i=0; i<max; i++)
    {
        scanf("%c", &s[i]); //一个一个输入输入到!时结束输入
        if(s[i] == '!')
            break;
    }
    s[i] = '\0';// 在!号后面添加结束标志。
    change(s);//调用加密函数
    printf("s = %s.\n", s);
    return 0;
}
目前,官方 NVIDIA CUDA Toolkit 的最新稳定版本为 12.4(截至 2024 年 6 月),尚未发布 12.9 版本。然而,如果用户期望了解如何为 Ubuntu 系统配置未来版本的 CUDA(如 CUDA 12.9)环境,可基于现有安装流程提供一个通用指南框架,以适配未来版本的安装与配置流程。 ### 安装步骤概览 1. **系统准备** - 确保系统为 Ubuntu 20.04 或更高版本,并已安装基础开发工具。 - 更新系统软件包列表并升级所有可用包: ```bash sudo apt update && sudo apt upgrade -y ``` 2. **安装 NVIDIA 驱动** - 安装与目标 CUDA 版本兼容的 NVIDIA 显卡驱动程序。例如: ```bash sudo apt install nvidia-driver-545 ``` - 重启系统以确保驱动生效: ```bash sudo reboot ``` 3. **添加 CUDA 仓库** - 下载并添加 CUDA 仓库密钥: ```bash wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 ``` - 下载并安装 CUDA 仓库包(假设版本为 12.9): ```bash wget https://developer.download.nvidia.com/compute/cuda/12.9.0/local_installers/cuda-repo-ubuntu2004-12-9-local_12.9.0-545.23.08-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2004-12-9-local_12.9.0-545.23.08-1_amd64.deb ``` - 添加 GPG 密钥并更新 APT 缓存: ```bash sudo cp /var/cuda-repo-ubuntu2004-12-9-local/cuda-*-keyring.gpg /usr/share/keyrings/ sudo apt update ``` 4. **安装 CUDA Toolkit** - 安装 CUDA Toolkit 12.9: ```bash sudo apt install cuda-toolkit-12-9 ``` 5. **环境变量配置** - 编辑用户环境变量文件(如 `~/.bashrc`)并添加以下内容: ```bash export PATH=/usr/local/cuda-12.9/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.9/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} ``` - 应用环境变量更改: ```bash source ~/.bashrc ``` 6. **验证安装** - 检查 CUDA 编译器版本: ```bash nvcc --version ``` - 编译并运行一个简单的 CUDA 示例程序以验证环境是否正常工作。 ### 配置 cuDNN(可选) 1. **下载 cuDNN** - 从 NVIDIA 官方网站下载适用于 CUDA 12.9 的 cuDNN SDK。 2. **安装 cuDNN** - 解压并复制文件到 CUDA 安装目录: ```bash tar -xzvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz sudo cp cuda/include/cudnn*.h /usr/local/cuda-12.9/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-12.9/lib64 sudo chmod a+r /usr/local/cuda-12.9/include/cudnn*.h /usr/local/cuda-12.9/lib64/libcudnn* ``` 3. **验证 cuDNN** - 可通过运行示例程序或检查库文件是否存在来确认安装成功。 ### 常见问题处理 - **驱动版本不兼容**:确保所安装的 NVIDIA 驱动版本与 CUDA Toolkit 兼容,可参考 NVIDIA 官方文档获取兼容性信息。 - **环境变量未生效**:确认 `~/.bashrc` 文件中已正确设置 `PATH` 和 `LD_LIBRARY_PATH`,并执行 `source ~/.bashrc`。 - **缺少依赖库**:如果运行程序时提示缺少库文件,可尝试手动复制相关库文件到系统库目录并更新链接: ```bash sudo cp /usr/local/cuda-12.9/lib64/libcudart.so.12.9 /usr/local/lib/libcudart.so.12.9 && sudo ldconfig ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值