CS50 IDE学习笔记(3)

这篇博客介绍了如何使用C语言实现Caesar密码的加密过程。程序接受命令行参数k作为位移,对输入的明文字符串进行加密。文章提到了在CS50IDE中编写代码与Visual或Dev的不同,并强调了#include<cs50.h>头文件中的函数在该环境中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,分享一个网站:https://manual.cs50.io/

注:一个装满cs50 ide 头文件库函数的网站
在这里插入图片描述

接下来:上代码——

Caesar凯撒密码:程序接受一个命令行参数:k(非负整数)。输入明文字符串,通过将每个字母“旋转”k个位置来加密并输出,非字母字符输出不变。

在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<cs50.h>
#define N 50

int main(int argc, char * argv[])//带形参的main函数,如 main( int argc, char* argv[], char **env ) ,是UNIX、Linux以及Mac OS操作系统中C/C++的main函数标准写法,并且是血统最纯正的main函数写法。
{
//判断命令行参数个数(argc的值等于位置参数(命令行参数)总个数)
    if(argc != 2)
    return 1;
// main()函数的返回值并不是返回给程序的其他部分,而是返回给操作系统。 通常约定,返回值为0意味着程序运行成功,为非0则意味着存在问题。
    string s;
    char p[N];
    int k;
//判断k是否合法
    k = atoi(argv[1]);//atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数
    if(k<0)
    {
        printf("Error caesar key\n");
        return 1;
    }
// input k
//  printf("k = %d\n",k);
    s = get_string("plaintext: ");

    printf("ciphertext:");
    for(int i=0 , n=strlen(s); i<n ; i++ )
    {
        if(s[i] >='A'&&s[i]<='Z')
            p[i] = ((s[i] - 65 + k) % 26) + 65;
        else if(s[i]>='a'&&s[i]<='z')
            p[i] = ((s[i] - 97 + k) % 26) + 97;
        else
            p[i] = s[i];
        printf("%c",p[i]);
    }

    getchar();
    return 0;
}

CS50 IDE上写代码与在visualdev上写代码还是不一样的,尤其是#include<cs50.h>里面的函数调用。

### 关于哈佛大学CS50课程《计算机导论》学习笔记 #### CS50中的C语言编程基础 在哈佛大学CS50课程中,早期阶段确实引入了一些简化工具帮助学生更好地理解编程概念。例如,在第四周之前,学员们可以利用名为`cs50.h`的库文件作为辅助资源[^1]。 此库提供了一系列便捷函数用于处理输入输出、字符串操作以及基本数据结构管理等功能,使得初学者能够专注于算法逻辑而非底层实现细节上。对于想要记录这部分内容的学习笔记而言: - **重点一**:了解并熟悉如何导入头文件`#include <cs50.h>`到自己的程序开头位置; - **重点二**:掌握该库内常用API的应用场景及其语法格式; ```c #include <stdio.h> #include <cs50.h> int main(void){ string name = get_string("What&#39;s your name? "); printf("hello, %s\n",name); } ``` 上述代码片段展示了获取用户姓名并通过控制台打印问候语句的过程,其中调用了来自`cs50.h`里的`get_string()`方法来读取键盘输入。 #### 链表遍历技巧 当涉及到更复杂的数据结构如链表时,则需要掌握相应的遍历方式。下面给出了一段伪代码表示法,它描述了一个典型的单向链表节点访问循环体[^2]: ```c for (node* tmp = list; tmp != NULL; tmp = tmp->next) { // 对当前结点执行某些特定的操作... } ``` 这段代码实现了从给定列表头部开始逐个检查直至到达末端(即遇到null指针)。这里的关键在于每次迭代都将临时变量指向下一个地址直到结束条件满足为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值