解密英文藏头诗C语言,《C语言指针进阶》PPT课件.ppt

2020年3月26日 第1页 第11章指针进阶 2020年3月26日 第2页 本章要点 指针数组和指向指针的指针是如何被定义和使用的 指针如何作为函数的返回值 指向函数的指针的意义是什么 什么是结构的递归定义 哪种应用需要这种定义方法 对链表这种数据结构 如何进行动态内存分配操作 如何建立单向链表并实现插入 删除以及查找操作 2020年3月26日 第3页 11 1布袋中的彩色球 例1已知一个不透明的布袋里装有红 蓝 黄 绿 紫同样大小的圆球各一个 现从中一次抓出两个 问可能抓到的是什么颜色的球 2020年3月26日 第4页 程序解析 includeintmain void char color 5 red blue yellow green purple 初始化 intcount 0 i j for i 0 i 4 i for j 0 j 4 j if i j continue count printf 6d count printf 10s 10s n color i color j return0 1redblue2redyellow3redgreen4redpurple5blueyellow6bluegreen7bluepurple8yellowgreen9yellowpurple10greenpurple 指针数组 2020年3月26日 第5页 2 指针数组的概念 char color 5 类型名 数组名 数组长度 inta 10 a是一个数组 它有10个元素每个元素的类型都是整型char color 5 color是一个数组 它有5个元素每个元素的类型都是字符指针 2020年3月26日 第6页 char color 5 red blue yellow green purple color是一个数组 它有5个元素每个元素的类型都是字符指针数组元素可以处理字符串对指针数组元素的操作相当于对同类型指针变量的操作printf 10s 10s n color i color j 2020年3月26日 第7页 includeintmain void inti char color 5 red blue yellow green purple tmp 输出字符串的地址和内容 思考 for i 0 i 5 i printf x s n color i color i return0 420064 red42005c blue420054 yellow42004c green420044 purplecolor 0 purple color 4 red 例2使用指针数组输出5种颜色的英文名称 2020年3月26日 第8页 交换color 0 与color 4 的值 2020年3月26日 第9页 3 指向指针的指针 1 定义 指向指针的指针 二级指针 类型名 变量名inta 10 int p 2020年3月26日 第10页 inta 10 b 20 t int pa 例11 4 操作 1 ppt ppb ppb ppa ppa ppt 操作 2 pt pb pb pa pa pt 操作 3 t b b a a t 2020年3月26日 第11页 例3改写例1 用指向指针的指针实现 includeintmain void char color 5 red blue yellow green purple char pc color intcount 0 i j for i 0 i 4 i for j 0 j 4 j if i j continue count printf 6d count printf 10s 10s n color i color j return0 指向指针的指针 pc i pc j 2020年3月26日 第12页 4 用指针数组处理多个字符串 处理多个字符串二维字符数组charccolor 7 red blue yellow green purple 指针数组char pcolor red blue yellow green purple 使用指针数组更节省内存空间 2020年3月26日 第13页 1 用指针数组处理多个字符串 排序 例11 5将5个字符串从小到大排序后输出 includeintmain void inti inta 5 6 5 2 8 1 voidfsort inta intn fsort a 5 for i 0 i 5 i printf d a i return0 includeintmain void inti char pcolor 5 red blue yellow green purple voidfsort char color intn fsort pcolor 5 for i 0 i 5 i printf s pcolor i return0 2020年3月26日 第14页 例11 5字符串排序 voidfsort inta intn intk j inttemp for k 1 ka j 1 temp a j a j a j 1 a j 1 temp voidfsort char color intn intk j char temp for k 1 k0 temp color j color j color j 1 color j 1 temp 2020年3月26日 第15页 pcolor 0 pcolor 1 pcolor 2 pcolor 3 pcolor pcolor 4 排序前 pcolor 0 pcolor 1 pcolor 2 pcolor 3 pcolor pcolor 4 排序后 2020年3月26日 第16页 2 动态输入多个字符串 例6输入一些球的颜色 以 作为输入结束标志 再输出这些颜色 其中颜色数小于20 颜色的英文名称不超过10个字符 2020年3月26日 第17页 include include includeintmain void inti n 0 char color 20 str 10 printf 请输入颜色名称 每行一个 结束输入 n scanf s str while str 0 color n char malloc sizeof char strlen str 1 strcpy color n str n scanf s str printf 你输入的颜色是 for i 0 i n i printf s color i return0 请输入颜色名称 每行一个 结束输入 redblueyellow 你输入的颜色是 redblueyellow 2020年3月26日 第18页 3 对指针数组的进一步讨论 char color red blue yellow green purple color 二级指针 char color 0 color 2 指向color 2 color 2 和color 2 等价color 0 指向字符串 red 的首字符rcolor 0 2 指向首字符r后的第2个字符d 2020年3月26日 第19页 color k color k printf s color 2 printf s color 2 2020年3月26日 第20页 11 1 5命令行参数 2020年3月26日 第21页 11 2解密藏头诗 11 2 1程序解析11 2 2指针作为函数的返回值11 2 3指向函数的指针 2020年3月26日 第22页 11 2解密藏头诗 例8输入一首藏头诗 假设只有4句 输出其真实含义 藏头诗 将这首诗每一句的第一个字连起来 所组成的内容就是该诗的真正含义 请输入藏头诗 一叶轻舟向东流 帆梢轻握杨柳手 风纤碧波微起舞 顺水任从雅客悠 一帆风顺 2020年3月26日 第23页 includechar change chars 20 chart intmain void inti chars 4 20 t 10 p printf 请输入藏头诗 n for i 0 i 4 i scanf s s i p change s t printf s n p return0 char change chars 20 chart inti for i 0 i 4 i t 2 i s i 0 t 2 i 1 s i 1 t 2 i 0 returnt 2020年3月26日 第24页 例9输入一个字符串和一个字符 如果该字符在字符串中 就从该字符首次出现的位置开始输出字符串中的字符 要求定义函数match s ch 在字符串s中查找字符ch 如果找到 返回第一次找到的该字符在字符串中的位置 地址 否则 返回空指针NULL 例如 输入字符r和字符串program后 输出rogram 2020年3月26日 第25页 includechar match char s charch while s 0 if s ch return s 若找到字符ch 返回相应的地址 elses return NULL 没有找到ch 返回空指针 intmain void charch str 80 p NULL printf PleaseInputthestring n scanf s str getchar ch getchar if p match str ch NULL printf s n p elseprintf NotFound n return0 PleaseInputthestring Universityvversity 字符指针p接收match返回的地址 从p指向的存储单元开始 连续输出其中的内容 直至 0 为止 PleaseInputthestring schoolaNotFound 2020年3月26日 第26页 11 2 3指向函数的指针 每个函数都占用一段内存单元 有一个入口地址 起始地址 函数名 函数的入口地址函数指针 一个指针变量 接收函数的入口地址 让它指向函数通过函数指针调用函数做为函数的参数 2020年3月26日 第27页 例11建立一个学生成绩信息 包括学号 姓名 成绩 的单向链表 学生记录按学号由小到大顺序排列 要求实现对成绩信息的插入 修改 删除和遍历操作 11 3学生信息管理的链表实现 2020年3月26日 第28页 1链表的概念 一种动态存储分布的数据结构若干个同一结构类型的 结点 依次串接而成单向链表 双向链表 头指针 结点 尾结点 2020年3月26日 第29页 结点定义 structstud node intnum charname 20 intscore structstud node next 结构的递归定义 2020年3月26日 第30页 链表 与数组比较 数组事先定义固定长度的数组在数组元素个数不确定时 可能会发生浪费内存空间的情况链表动态存储分配的数据结构根据需要动态开辟内存空间 比较方便地插入新元素 结点 使用链表可以节省内存 提高操作效率 2020年3月26日 第31页 动态存储分配函数malloc void malloc unsignedsize 在内存的动态存储区中分配一连续空间 其长度为size若申请成功 则返回一个指向所分配内存空间的起始地址的指针若申请不成功 则返回NULL 值为0 2020年3月26日 第32页 malloc 示例 int ip int malloc sizeof int structstudent p p structstudent malloc sizeof structstudent 调用malloc时 用sizeof计算存储块大小虽然存储块是动态分配的 但它的大小在分配后也是确定的 不要越界使用 2020年3月26日 第33页 动态存储释放函数free 当某个动态分配的存储块不再用时 要及时将它释放voidfree void ptr 释放由动态存储分配函数申请到的整块内存空间 ptr为指向要释放空间的首地址 free ip free p 2020年3月26日 第34页 3单向链表的常用操作 链表的建立链表的遍历插入结点删除结点 2020年3月26日 第35页 1 链表的建立 structstud node head tail p head tail NULL size sizeof structstud node p structstud node malloc size 2020年3月26日 第36页 head tail NULL scanf d s d 2020年3月26日 第37页 for ptr head ptr NULL ptr ptr next printf ld d ptr num ptr score 2020年3月26日 第38页 s next ptr nextptr next s先连后断 3 插入结点 2020年3月26日 第39页 ptr2 ptr1 nextptr1 next ptr2 next free ptr2 先接后删 4 删除结点 2020年3月26日 第40页 习题111 3题

展开阅读全文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA加密解密算法是一种非对称加密算法,它使用了两个密钥,即公钥和私钥。下面是一个简单的RSA加密解密算法的C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> // 求最大公约数 int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } // 判断是否为素数 int isPrime(int num) { if (num <= 1) { return 0; } for (int i = 2; i <= sqrt(num); i++) { if (num % i == 0) { return 0; } } return 1; } // 生成公钥和私钥 void generateKeys(int p, int q, int *n, int *e, int *d) { *n = p * q; int phi = (p - 1) * (q - 1); // 选择一个与phi互质的数e for (*e = 2; *e < phi; (*e)++) { if (gcd(*e, phi) == 1) { break; } } // 计算私钥d for (*d = 1; *d < phi; (*d)++) { if ((*e * (*d)) % phi == 1) { break; } } } // 加密 int encrypt(int message, int e, int n) { int encryptedMessage = 1; for (int i = 0; i < e; i++) { encryptedMessage = (encryptedMessage * message) % n; } return encryptedMessage; } // 解密 int decrypt(int encryptedMessage, int d, int n) { int decryptedMessage = 1; for (int i = 0; i < d; i++) { decryptedMessage = (decryptedMessage * encryptedMessage) % n; } return decryptedMessage; } int main() { int p, q, n, e, d; int message, encryptedMessage, decryptedMessage; printf("请输入两个素数p和q:"); scanf("%d %d", &p, &q); if (!isPrime(p) || !isPrime(q)) { printf("输入的p和q必须为素数!\n"); return 0; } generateKeys(p, q, &n, &e, &d); printf("生成的公钥为:%d\n", e); printf("生成的私钥为:%d\n", d); printf("请输入要加密的消息:"); scanf("%d", &message); encryptedMessage = encrypt(message, e, n); printf("加密后的消息为:%d\n", encryptedMessage); decryptedMessage = decrypt(encryptedMessage, d, n); printf("解密后的消息为:%d\n", decryptedMessage); return 0; } ``` 这段代码实现了RSA加密解密算法,包括生成公钥和私钥、加密和解密过程。你可以根据需要行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值