![](https://img-blog.csdnimg.cn/8bac375521194389a92fb945cdd0dde0.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言程序设计
文章平均质量分 62
C基础程序的实现
Ritchie_Zeng
欢迎你来到我的星球!
展开
-
算法 - 递归实现汉诺塔(The Tower of Hanoi)
今天接触到了一个非常有意思的游戏,名字叫做汉诺塔(Tower of Hanoi),小时候没有玩过这个益智游戏,所以今天利用代码把这个益智游戏实现一下。(Tower of Hanoi),又称,是一个源于古老传说的。创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。原创 2022-10-19 13:54:55 · 3308 阅读 · 0 评论 -
C语言 - 删除数组中的指定元素(Delete)
如果此时数组里面填充的元素分别是1,2,3,4,5,6,7,8,8,9,那么当i下标向前迁移一位后,重新指向8就再次进入循环,输出结果就为1,2,3,4,5,6,7,9,0,0,i下标向前迁移一位的作用就是对原先位置的元素重新进行是否符合条件的判断。这个程序其实代码不难写,主要在过程的剖析和理解上,其实删除这种操作在程序中理论是不能实现的(暂时),我们就可以通过覆盖的方式来达到删除的目的。原创 2022-10-03 22:50:54 · 37278 阅读 · 1 评论 -
C语言 - 四种方法解决杨辉三角问题(数学规律、一维数组、二维数组、递归)
杨辉三角是一个经典的数学问题,也是我在学习C语言过程中结合条件判断语句和循环语句的一个经典题目,在之前系统的学习二维数组时曾经使用二维数组对这个程序进行过编写,但经过思考我发现这个题目有多种不同的方法,这篇文章会对解决杨辉三角问题的几种不同方法进行总结,并讨论哪一种方法的效率最高,空间占用最小。原创 2022-09-09 12:04:32 · 7043 阅读 · 1 评论 -
C语言-多层for循环详解
在之前写过的程序里,循环这个东西的使用频率非常高,无论我们是实现基础C语言题目,例如打印一维数组、杨辉三角、打印九九乘法表还是实现种类繁多且适用场景不同的排序算法,例如,冒泡排序,选择排序,插入排序,希尔排序,这些程序都像一个树状的结构,我们先要梳理清楚程序的原理,然后再将原理转化为机器语言,这些程序的主干部分就是循环,然后再在循环里分出枝干并进行功能的完善,最终完成整个程序。在这篇文章里,我将对for循环进行详细的分析。原创 2022-09-05 17:30:55 · 7852 阅读 · 3 评论 -
C语言-5月10日 输入一行字符,分别统计出其中英文字母、空格、数字、和其他字符的个数
#include<stdio.h>#include<ctype.h>int main(){ char a;//定义字符a int i = 0; int number = 0;//定义数字 int space = 0;//定义空格 int letter = 0;//定义英文字母 int other = 0;//定义其他字符 while ((a = getchar()) && a!='\n') { .原创 2022-05-17 16:29:53 · 264 阅读 · 1 评论 -
C语言-8月5日-结构体和变量
但是结构体却是不一样的,虽然结构也是一些值的集合,这些值都称为结构的成员,一个结构里面的成员可能有着不一样的数据类型,例如我们要创建一个学生信息的结构体,里面的成员就包括学生的姓名,年龄,身高,性别,考试成绩。与数组不同,结构体中的每个成员都有自己的名字,结构体中的成员也是通过名字进行访问的。之前接触到的数据类型大多都是基本数据类型,例如int类型、double类型,而结构体是一种自定义数据类型,他可以根据我们的需要来让我们自己设计,一个结构体中可以包含多种数据类型。..................原创 2022-08-18 23:10:51 · 587 阅读 · 0 评论 -
C语言-8月1日-递归与动态内存管理
递归所产生的代价大,而函数执行所需的空间是在栈区进行开辟的(.stack),Windows的默认栈区大小是1M,所以递归也是危险的,如果在没有手动对计算机栈区空间进行扩充的前提下,使用递归实现一个所需区域极其大的功能,有可能会让程序崩溃。从斐波那契序列中我们可以看出,要通过递归的方式解决问题时,我们首先要做的就是分析问题,摸清楚问题的规律,将一个大的问题分解为小的问题,例如斐波那契序列我们直接把它分解为从第一个数开始,摸清楚规律后分解问题,问题规模不断缩小,最后再通过反方向将问题合并,最终解决问题。....原创 2022-08-02 16:47:06 · 1597 阅读 · 0 评论 -
C语言-7月31日-指针的总结以及typedef关键字
可以知道,这个二维数组三行四列,那么我们如何定义一个指针,使它指向这个二维数组?指向二维数组共有三种典型的情况,分别是指针指向二维数组的一行;指针指向二维数组中的一个元素;指针指向整个二维数组;.....................原创 2022-08-02 22:12:32 · 512 阅读 · 0 评论 -
【剑指offer系列】面试题日记(前期题)
在第二行中,我们先观察有没有小括号和中括号,因为他们的优先级均高于“*”,第二行中有中括号,首先明确他是一个数组,“*”在前面,所以我们可以推断这是一个存放指针变量的数组,只要是指针,无论是什么类型,它的大小始终都是4字节,a中存放了三个指针,所以大小是12。在第三行中,没有小括号的存在,可以发现这是一个二维数组,二维数组中存放的是(int**)类型的值,因为存放的是指针,所以大小为4,所以大小为3*4*4=48。第五问不使用上述四种方法,其他的方法?.....................原创 2022-07-31 09:32:06 · 322 阅读 · 0 评论 -
C语言-5月10日 给一个不多于5位的正整数,要求:求出他是几位数,按照顺序输出各位数字,按照逆序输出各位数字。
//输入一个不多于五位的正整数,求出他是几位数,并输出各位数;#include<stdio.h>int main(){ int num; printf("请输入一个不多于五位的正整数:\n"); scanf("%d",&num); if(num < -1 || num > 99999){ printf("输入不合法,请重新输入。\n");//第一步:判断输入的数字是不是一个不多于五位的正整数且是不是正整数。 .原创 2022-05-17 17:00:40 · 1200 阅读 · 0 评论 -
C语言-7月21日-指针的深入
今天对指针进行了更加深入地学习,回顾一下今天所讲的知识点,并进行指针的相关训练。原创 2022-07-22 21:55:07 · 341 阅读 · 0 评论 -
C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
NULL和nullptr的深入了解以及编译器问题的解决原创 2022-07-22 15:01:22 · 2844 阅读 · 0 评论 -
C语言-7月19日-指针的学习
首先需要明确的是指针,就是地址的别名,用来存放一个值的地址。原创 2022-07-20 11:14:30 · 577 阅读 · 0 评论 -
C语言-5月7日 从键盘输入两个整型,交换两位数字:a = 10; b = 20;
第一种方法:利用交换算法#include<stdio.h>int main(){ int a = 10; int b = 20;//定义a b两个整型值 int temp = 0;//定义中间变量 temp = b; b = a; a = temp;//交换算法 printf("a = %d,b = %d\n",a,b);//输出两个交换后的两个整型值 return 0;}如图所示,a b整型值的数据已经交换:原创 2022-05-17 15:28:44 · 2821 阅读 · 0 评论 -
C语言-7月18日-二维数组的学习
二维数组的学习原创 2022-07-18 19:09:53 · 566 阅读 · 0 评论 -
C语言-6月12日-字符替换问题,将一个‘ ’替换为2个‘#’
执行替换规则的前后:"i am a student" -> "i##am##a##student"原创 2022-06-15 01:12:48 · 456 阅读 · 2 评论 -
C语言-6月10日-my_strcat函数的编写
my_strcat_array(char *str,char*arr);形式参数自定义,将array1、array2中的数据连接到str数组中:array1:"hello" array2:"world" -> str:helloworld原创 2022-06-13 00:26:37 · 188 阅读 · 0 评论 -
C语言 - 将一个数组中的内容复制到另外一个数组
my_strcpy_array(char *str);形参自定义,将str数组的内容拷贝一份出来原创 2022-06-12 19:33:23 · 4755 阅读 · 0 评论 -
C语言-6月8日-给定一个字符数组‘i am a student’ 统计字符a的个数并进行输出
给定一个字符数组‘i am a student’ 统计字符a的个数并进行输出原创 2022-06-09 19:15:52 · 633 阅读 · 0 评论 -
C语言-5月11日-经典题型两个乒乓球队进行比赛的问题和钱的组合问题以及猴子吃桃问题的编写
两个乒乓球队进行比赛各出三人。甲队为A,B,C3人,乙队为X,Y,Z3人。以抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编写程序找出三对赛手的名单。#include<stdio.h>int main(){ int a,b,c; for(a='X';a<='Z';a++)//建立a所对应对手的循环条件 { for(b='X';b <='Z';b++)//建立b所对应对手的循环条件 {原创 2022-05-19 12:57:23 · 461 阅读 · 0 评论 -
C语言-6月8日-求两个数的最小公倍数和最大公因数;判断一个数是否为完数,且打印出它的因子
一个数如果恰好等于它的因子之和,这个数就被称为“完数”,例如,6的因子为1,2,3,而1+2+3刚好等于6,因此6是完数,编写程序找出1000以内所有的完数,并按照下面的格式输出其因子:6 It's factor are 1,2,3.如图所示为输出结果: 输出完成..................原创 2022-06-09 12:50:02 · 585 阅读 · 0 评论 -
C语言-5月17日-求m到n的和
中有提到过,因为函数在执行完涉及到了栈帧的回退,交换就失败了,所以问题就是出现在了交换函数上,结果与正确输入m和n的区间值一样,交换完成。原创 2022-05-23 04:54:19 · 1084 阅读 · 0 评论 -
C语言-5月11日 求Sn = a+aa+aaa+…aa…a之值,其中a是一个数字,n表示a的位数,n由键盘输入,例如:a = 2 2+22+222+2222+22222(此时n=5)
#include<stdio.h>#include<math.h>int main(){ int a = 0; int n = 0;//定义a,n的整型值,并进行初始化 scanf("%d%d",&a,&n); int num = a;//每一循环后的值 int sum = 0;//最后加起来的总值 for(int i = 1;i<=n;i++) { sum = sum + num;.原创 2022-05-18 18:31:48 · 2103 阅读 · 0 评论 -
C语言-5月23日-指针(一)
在了解指针之前,有一个必须要先了解的名词——内存内存,在程序中的名字是(DRAM),这个东西是组成计算机的重要部件之一,没有内存,装载在磁盘中的应用软件和种种资料将无法在计算机中执行并显示,所以可以理解为内存就是外存(硬盘)和CPU之间沟通的桥梁。计算机中所有应用软件包括操作系统都是在内存中运行的,他们存储在磁盘里,但却要通过内存这个桥梁使他们能够外存中进入计算机并执行。为了能让计算机更好的利用内存,就把内存以8位二进制(bit)划分为存储单元(也就是每一个字节)。那么为了能够方便的访问到内存的每一个单原创 2022-06-01 00:27:35 · 110 阅读 · 0 评论 -
C语言-5月11日 如何判断一个数为素数,并遍历出一个区间内的所有素数
#include<stdio.h>int main(){ int num; printf("请输入一个正整数:\n"); scanf("%d",&num); for(int num = 100;num<=200;num++){//定义范围 if(num == 1 || num == 2){ printf("您输入的数字是素数!\n"); return 0; } .原创 2022-05-19 17:24:49 · 722 阅读 · 1 评论 -
C语言 - 三种方法输出一个数组内的所有元素
运行结果: 输出完成 运行结果:如图所示为运行结果: 当我们要进行删除元素函数的时候,理论上的删除元素是不能实现的,我们可以通过让后面的元素对前面的元素进行替换来达到这一效果,在这里我先举一个以删除数组中指定元素的例子:例如在这里我们需要删除一个长度为10个单位的数组里面的指定元素4,我们需要做的是使用下标i对原始数组进行遍历,当满足i号下标元素等于我们指定要删除的元素这个条件时,再使用一个j下标定位至i下标的位置,j的循环结束边界为数组末尾的前一个元素,利用循环将后一个元素的值覆盖前一个元素的原创 2022-05-20 16:44:06 · 16730 阅读 · 0 评论 -
C语言-5月17日 重写头文件#include<math.h>中的库函数 pow
#include<stdio.h>double my_pow(double x,int y)//定义pow函数{ double temp = x;//定义中间交换值 for(int i = 0 ;i < y-1; i++){//这里也可以写成for(int i = 1;i < y;i++) x *= temp;//对x施行累乘 } return x;//返回值为x}int main(){ double a; .原创 2022-05-23 05:28:51 · 282 阅读 · 0 评论 -
C语言-5月11日 求1-1/2+1/3-1/4+1/5-1/6…求前n项的和//求1-1/2+1/3-1/4+1/5-……1/n的结果
方法一:利用i转化为二进制的值和0x1的值进行相与来进行奇偶性判断#include<stdio.h>int main(){ int n; double result = 0;// printf("请输入n的值:\n"); scanf("%d",&n); for(int i = 1;i<=n;i++) { if(i & 0x1 == 0)//奇偶性判断i的取值转化为二进制和二进制的1相与,如果为0符号就原创 2022-05-19 16:58:31 · 1233 阅读 · 0 评论 -
C语言-5月20日 经典题型:斐波拉契序列
非递归类型解决斐波拉契序列:#include<stdio.h>int Fibonacci(int n){ int a = 0;//序列第一个数为0 int b = 1; int c = 0; int i = 0; if(n == 0)//如果序列的第一位是0的话,直接返回 { return 0; } for(i = 2;i <= n;i++){//从序列的第二位开始循环 c = a +原创 2022-05-25 21:58:59 · 142 阅读 · 0 评论 -
C语言-5月18日 身份证号码的验证
身份证号码的验证规则:身份证号码前17位分别和加权因子{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 }相乘后再相加,加出来的和对11取余,余数为{0,1,2,3,4,5,6,7,8,9,10 },对应身份证号第18位{1,0,X,9,8,7,6,5,4,3,2 }加权因子:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 }余数:{0,1,2,3,4,5,6,7,8,9,10 }身份证号第18位:{1,0,X.......原创 2022-05-24 01:07:07 · 803 阅读 · 0 评论 -
C语言-5月23日-输出三位数中所有的水仙花数以及三角形面积的计算
输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 1 ^3+5^3+3^3,所以153就是一个水仙花数:#include<stdio.h>#include<math.h>int main(){ int n = 0; for(n = 100;n<=999;++n){ int num1 = n / 100;//让三位数除以100即可求出百位数字原创 2022-05-31 02:03:16 · 1083 阅读 · 0 评论 -
C语言-5月20日 利用for循环打印出9*9乘法表、由“*”构成的七行菱形的打印、数字金字塔
#include<stdio.h>int main(){ int sum = 0; for(int i = 1;i <= 9;i++){//控制行数 for(int j = i;j <= 9;j++){//控制每行的输出 if(i <= j) { sum = i * j; printf("%d * %d = %d ",i,j,su.原创 2022-05-26 21:40:00 · 425 阅读 · 0 评论 -
C语言-5月7日 从键盘输入两个整型,输出两个整型的最大值。
#include<stdio.h>int main(){int num1 = 0;int num2 = 0;//定义两个整型变量。int max = 0;//定义max整型值printf("请输入两个整型变量:\n");scanf("%d%d",&num1,&num2);//从键盘输入两个整型值if(num1 >= num2){max = num1;//如果num1的值大于num2的值,num1的值赋给max}else{max原创 2022-05-17 14:22:37 · 2945 阅读 · 0 评论