C语言仿写strlen函数以及编程常见的错误、以及,打印菱形、空瓶换水、水仙花数、反转字符串等小案例

devtools/2024/9/25 8:20:17/

文章目录

  • 前言
  • 一、仿写strlen函数
  • 二、编程常见的错误
    • 1. 编译型错误(语法错误)
    • 2. 链接型错误(链接期间)
    • 3. 运行时错误(最难找)
  • 三、小案例
    • 1. 打印菱形
    • 2. 两个空瓶换一瓶水的实现
    • 3. 打印 a+aa+aaa+aaaa+aaaaa......的和
    • 4. 打印0-100000"水仙花数"
    • 5. 反转字符串
  • 总结


前言

C语言仿写strlen函数以及编程常见的错误、以及,打印菱形、空瓶换水、打印a+aa+aaa+aaaa+aaaaa…的和、水仙花数、反转字符串等小案例


一、仿写strlen函数

#include <stdio.h>
#include <assert.h>int my_strlen(const char* str)// 只计算长度不修改内容,所以const修饰
{int count = 0;// 不能对空指针解引用assert(str); // 如果str时空指针,则为假,assert报错while (*str != '\0'){count++;str++;}return count;
}int main()
{char ch[] = "hello bit";int len = my_strlen(ch);printf("%d", len);return 0;
}

二、编程常见的错误

  • 从源文件 test.c 到 可执行程序,经历了 编译链接 连个步骤。

1. 编译型错误(语法错误)

  • 在编译阶段发生的错误就叫编译错误。
  • 通常是指语法错误,这列错误编译器会直接报错,比较好找。

2. 链接型错误(链接期间)

  • 在链接阶段发生的错误就叫链接错误。
  • 链接型错误通常发生在链接阶段,如 函数调用,但没有声明。
  • 或者,函数调用,但声明函数名书写错误。

3. 运行时错误(最难找)

  • 这种错误发生通常是 编译 和 链接 通过, 但是程序运行结果错误,或没有结果。
  • 只能通过调试慢慢去找。
  • 积累经验。

三、小案例

1. 打印菱形

 // 打印菱形
#include <stdio.h>int main()
{int line = 0;scanf("%d", &line);int i = 0;for (i = 0; i < line; i++){int j = 0;for (j = 0; j < line - 1-i; j++){printf(" ");}for (j = 0; j < 2 * i + 1; j++){printf("*");}printf("\n");}for (i = 0; i  < line-1; i++){int j = 0;for (j = 0; j < i + 1; j++){printf(" ");}for (j = 0; j < 2 * (line -1-i)-1; j++){printf("*");}printf("\n");}return 0;
}

2. 两个空瓶换一瓶水的实现

  • 题目大致为
  • 1瓶水1块钱,2个空瓶子可以换1瓶水,共有money钱,问可以喝几瓶水?

#include <stdio.h>
int main()
{int empty = 0;int money = 0;int total = 0;scanf("%d", &money);total = money; // 有多少钱就总共喝几瓶水empty = money; // 有多少钱就有几个空瓶子while (empty >= 2){total += empty / 2; // 两个空瓶子换一瓶水 加到 原来的总数上empty = empty / 2 + empty % 2; // 空瓶子个数重置为,换了水之后重新得到的空瓶子,以及不够换剩下的空瓶子的和}printf("%d", total);return 0;
}
  • 也可总结为 2 * money - 1。(数学规律)

3. 打印 a+aa+aaa+aaaa+aaaaa…的和


#include <stdio.h>
int main()
{int a = 0;int n = 0;scanf("%d %d", &a, &n);int i = 0;int sum = 0;int k = 0;for (i = 0; i < n; i++){k = k * 10 + a;sum = sum + k;}printf("%d", sum);return 0;
}

4. 打印0-100000"水仙花数"

  • 水仙花数指的是三位数,这里认为满足各位数的位数次方的和等于整个数字的都是水仙花数
#include <stdio.h>
#include <math.h>
int main()
{int i = 0;for (i = 0; i < 100000; i++){int count = 1;int sum = 0;int tmp = i;while (tmp / 10 != 0){count++;tmp = tmp / 10;} // 先求出位数tmp = i;while (tmp){sum += pow(tmp % 10, count); // 各位数 count 次方的和tmp /= 10;}if (sum == i) // 是否等于原数{printf("%d ", i);}}return 0;
}

5. 反转字符串

#include <stdio.h>
#include <string.h>
int main()
{char arr[100001] = { 0 };gets(arr);int left = 0;int right = strlen(arr) - 1;while (left < right){char tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}printf("%s", arr);return 0;
}

总结

C语言仿写strlen函数以及编程常见的错误、以及,打印菱形、空瓶换水、打印a+aa+aaa+aaaa+aaaaa…的和、水仙花数、反转字符串等小案例


http://www.ppmy.cn/devtools/23662.html

相关文章

任务调度xxljob的使用记录

1.基本使用 a.下载代码&#xff0c;地址&#xff1a;https://gitee.com/xuxueli0323/xxl-job.git b.执行sql&#xff0c;修改配置&#xff0c;启动任务调度中心的代码 启动代码后任务调度中心访问地址&#xff1a;http://localhost:8080/xxl-job-admin&#xff08;自己机器…

超赞!只需几步,打造高颜值的CSS表单!(附代码)

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具…

Linux中core dump开启使用教程

Linux中core dump开启使用教程 一、 什么是coredump? 程序由于各种异常或者bug导致在运行过程中异常退出或者中止&#xff0c;会产生一个叫做core的文件。 core文件会包含了程序运行时的内存&#xff0c;寄存器状态&#xff0c;堆栈指针&#xff0c;内存管理信息还有各种函数…

2023最新!Git2.40.0于win10环境下的安装

2023最新&#xff01;Git2.40.0于win10环境下的安装 git官网地址&#xff1a;https://git-scm.com/download/win/ 导航 文章目录 2023最新&#xff01;Git2.40.0于win10环境下的安装导航一、下载Git二、安装Git三、检验 一、下载Git Git官网选择自己所需的版本下载 二、安装…

开发使用Git的实践操作

程序员在使用Git进行代码管理时&#xff0c;涉及到许多常用的Git命令和功能&#xff0c;以下是详细的解释和分析&#xff1a; 程序员常用的Git命令 git init - 初始化一个新的Git仓库。这是开始使用Git跟踪项目的第一步。git clone - 复制一个远程仓库到本地&#xff0c;这样…

mysql8.0备份,在mysql5.7还原的步骤。备份的sql文件需要做哪些修改?

MySQL 8.0备份在MySQL 5.7还原的步骤涉及几个关键操作。请注意&#xff0c;由于MySQL 8.0和MySQL 5.7在特性和语法上可能存在差异&#xff0c;所以还原过程可能需要特别小心以确保数据的完整性和准确性。以下是一般性的步骤&#xff0c;但具体的实现可能会根据你的系统和环境有…

clickhouse与oracle传输数据

参考 https://github.com/ClickHouse/clickhouse-jdbc-bridge https://github.com/ClickHouse/clickhouse-jdbc-bridge/blob/master/docker/README.md clickhouse官方提供了一种方式&#xff0c;可以实现clickhouse与oracle之间传输数据&#xff0c;不仅仅是oracle&#xff0…

不同语言在算法使用方面的差异(Java 、C++篇)

由于我认为的会了是能得到结果了&#xff0c;所以我亲自去把题解的C代码给改成了Java的&#xff0c;尽管代码和逻辑上的高度统一。编译器还是报错了。 第三个死都过不去。而且后面的还超时了。 这使我十分怀疑是不是超时或者空间不够所导致的。但是去问讯飞星火&#xff0c;它…