C语言
记录并分享自己C语言学习的过程
编程小程
这个作者很懒,什么都没留下…
展开
-
八大排序之快速排序以及优化(5)
文章目录快速排序快速排序递归形式算法步骤代码实现快速排序非递归形式算法优化快速排序快速排序是一个在大多数情况下排序性能最好的一个算法,通常情况下,数据规模越大,数据越乱,快速排序的性能越好。下面将说明快速排序具体实现进行说明,并对其进行优化。快速排序递归形式算法步骤代码实现在这里插入代码片快速排序非递归形式算法优化...原创 2022-04-24 10:53:09 · 302 阅读 · 0 评论 -
C语言每日一练---旋转图像
文章目录题目题目要求示例:题目分析程序实现测试算法复杂度分析题目给定一个n∗nn*nn∗nF的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。题目要求必须在原地旋转图像,不能借助额外的空间,这就意味着必须直接修改二维矩阵。示例:输入:matrix= {{1,2,3},{4,5,6},{7,8,9}}输出:{{7,4,1},{8,5,2},{9,6,3}}题目分析以上图为例,我们分析图像顺时针旋转90度后,每个数字的变化规律,我们需要先将外圈数据[1,2,3,6,9,8,7,原创 2022-03-30 22:15:59 · 1134 阅读 · 0 评论 -
八大排序之二路归并排序(4)
文章目录归并排序排序规则代码实现测试算法复杂度分析归并排序首先将所有数据默认每个数据单独分成一个组,接下来两两合并,当所有数据在同一个组内,则排序完成。排序规则将所有数据单独给每个数每个组(每个数据单独看,就是有序的)然后将数据进行两两合并成一组,对每一组数据进行排序然后继续把数据两两合并排序,直到只有一组数据原始数据: 84 9 18 19 48 12 90 &原创 2022-03-29 21:19:16 · 291 阅读 · 0 评论 -
C语言实现飞机订票系统
为了增加对数据结构中链表知识的理解和对实际问题的应用,文中将用C语言实现飞机订票系统,主要实现了机票信息的添加、查找、显示、修改和订票、退票功能,其中用链表来存储数据,程序结束时,可以把数据保存到文件中。原创 2022-03-24 11:24:29 · 12245 阅读 · 14 评论 -
C语言每日一练---移动数组中的零元素
题目:移动数组中的零元素给定一个数组nums,编写一个函数将所有的000移动到数组末尾,同时保持非零元素的想对顺序,要求不借助额外空间,在原数组的基础上进行操作。示例输入:nums = [0,1,0,3,12]输出:[1,3,12,0,0]题目分析代码实现void Swap(int* a, int* b){ int tmp = *a; *a = *b; *b = tmp;}void MoveZeroes(int* nums, int numsSize){ int left =原创 2022-03-19 10:21:20 · 2091 阅读 · 0 评论 -
C语言每日一练---旋转数组
题目描述:给你一个数组,将数组中的元素向右轮转K个位置,其中K是非负数,然后返回新数组示例:输入:[1,2,3,4,5,6,7],k=3;输出:[5,6,7,1,2,3,4]方法一:使用额外的数组,申请一个和原数组长度等同的数组来把每个元素放到正确的位置上。先把原数组的最后k个值放到新数组的前k个位置,再把原数组剩下的元素依次放在后面。void rotate(int* nums, int numsSize, int k){ int* new_nums = (int*)m原创 2022-03-12 22:56:39 · 1960 阅读 · 0 评论 -
哈希----链地址法
代码#pragma once//链式哈希//链地址法中后边链接的单链表的有效节点设计:typedef int ELEM_TYPE;#define MAX_SIZE 12typedef struct Node{ ELEM_TYPE data; //一个数据域 struct Node* next; //一个指针域}Node,*PNode;typedef struct Head{ struct Node arr[MAX_SIZE]; //每一个格子存放一个单链表的表头(用...原创 2022-03-12 22:09:44 · 15616 阅读 · 2 评论 -
C语言每日一练----买卖股票的最佳时机
题目描述:给定一个最佳数组prices,其中prices[i]表示股票第i天的价格。在每一天,你可能会决定购买和出售股票。你在任何时候最多只能持有一股股票。你也可以购买它,然后在同一天出售。你需要返回你所能获得的最大利润。示例: 输入: prices = {7,1,5,3,4,6,1}输出: 7解释:第二天买入,,第三天卖出,获利4,第四天买入,第六天卖出,获利3,一共获得利润为7.分析:我们需要在股价低的时候买入股票,股价高的时候卖出。因此购买时间可这样定...原创 2022-03-11 14:46:12 · 1973 阅读 · 0 评论 -
C语言每日一练---利用双指针的方法删除排序数组中的重复项
给定一个升序排列的数组nums,请原地删除重复出现的元素,使每个元素只出现一次,返回删除后的数组新长度。元素的相对顺序应保持一致。要求:返回新数组的长度和数组元素,不能使用额外空间,必须在原数组上进行修改。例:输入:nums = [1,1,2]输出: 2, nums = [1,2]定义两个指针fast和slow,fast表示遍历数组到达的下标位置,slow表示下一个不同元素要填入的下标位置,初始两个指针都指向1,假设数组nums的长度为n,那么fast将遍历1到n-1每一个位置,对于每个位置原创 2022-03-10 21:05:20 · 623 阅读 · 0 评论 -
C语言小项目----图书馆管理系统
一个用C语言实现的图书馆管理系统的小项目,项目中实现了图书的增删改查功能和读者的增删改查功能以及借还书登记功能。原创 2022-03-05 22:21:30 · 19648 阅读 · 11 评论 -
C语言--文件操作
1.文件是什么,文件:储存在外部介质上的数据集合 文件的唯一标识:三要素(路径,文件名,后缀)如:D:\CC\temp\file1.txt (红色部分为路径,蓝色部分为文件名,黑色部分为后缀)2.文件操作函数 2.1 fopen 打开文件的函数 返回值:文件指针FILE* 两个参数(第一个参数[文件名] 第二个参数[以什么方式打开文件] )const char *path = "www.txt";FILE *fw = fopen(path, "w");还有一...原创 2022-01-01 22:49:07 · 581 阅读 · 0 评论 -
汉诺塔问题
题目:Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A、B、C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中3个座上都始终保持大盘子在下,小盘子在上。在移动过程中可以利用B座。要求编写程序输出移动一盘子的步骤。、分析:将n个盘子从A座移动到C座可以分为3个步骤:(1)将A上n-1个盘借助C盘先移动到B座上(2)把A座上剩下的一个盘移到C座上(3)将n-1个盘从B座借助于A座到C座上.原创 2021-12-24 11:36:50 · 367 阅读 · 0 评论 -
判断回文串
回文串是从左到右或者从右到左看起来一样的字符串,如:abcba 即为一个回文串。写一个程序判断输入的字符串是否为回文串,若是输出Yes,不是则输出No:程序如下:#include<stdio.h>#include<assert.h>#include<malloc.h>#include<string.h>//判断回文串bool Is_string(char* p){ assert(p != NULL); bool flog = 1.原创 2021-12-23 19:53:06 · 1431 阅读 · 0 评论 -
C语言---一维数组动态求和
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。题目来源:https://leetcode-cn.com/problems/running-sum-of-1d-array首先,为了保存数组动态和,我们可以额外开辟一个新数组用..原创 2021-12-21 10:25:07 · 4041 阅读 · 0 评论 -
C语言---信用卡号校验
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。该校验的过程:1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。3、将奇数位总和加上偶数位总和,结果应该可以被10整除。例如,卡号是:5432123456788881 则奇数、偶数位(用红色标出)分布:54321234原创 2021-12-19 20:59:22 · 942 阅读 · 0 评论 -
C语言练习(蓝桥杯)---有趣的平方数
题目:625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?请编写程序,寻找所有这样的3位数:它的平方的末3位是这个数字本身。输出结果中,从小到大,每个找到的数字占一行。比如那个625就输出为:625#include<stdio.h>void Func(){ int temp = 0; for (int i = 100; i <= 999; ++i) { temp = i * ..原创 2021-12-17 09:00:00 · 454 阅读 · 0 评论 -
C语言练习(蓝桥杯)----欧拉与鸡蛋
题目:大数学家欧拉在集市上遇到了本村的两个农妇,每人跨着个空篮子。 她们和欧拉打招呼说两人刚刚卖完了所有的鸡蛋。 欧拉随便问:“卖了多少鸡蛋呢?” 不料一个说:“我们两人自己卖自己的,一共卖了150个鸡蛋,虽然我们卖的鸡蛋有多有少, 但刚好得了同样的钱数。你猜猜看!” 欧拉猜不出。 另一个补充道:“如果我按她那样的价格卖,可以得到32元;如果她按我的价格卖,可以得到24.5元”。 欧拉想了想,说出了正确答案。利用C语言编程“暴力求解”如下:#include<stdio.h>#...原创 2021-12-16 09:00:00 · 351 阅读 · 0 评论 -
C语言---整型、浮点型数字与字符串的相互转换(2)
字符串转化为整型、浮点型数字原创 2021-12-15 15:37:07 · 1104 阅读 · 0 评论 -
C语言---整型、浮点型数字与字符串的相互转换(1)
整型、浮点型数字转化为字符串一:整型转字符串:1.int转化为字符串使用库函数_itoa_s_itoa_s(int _Value, char *_Buffer, size_t _BufferCount, int _Radix);_Value:是要转换的数字;_Buffer:存储结果的字符串_Radix:表示进制,若十进制则Radix为10_BufferCount:表示存储的大小,必须小于等于Buffer大小示例如下:2.long int转为字符串 ...原创 2021-12-14 09:00:00 · 1992 阅读 · 0 评论 -
C语言练习(蓝桥杯)---求和
题目:小明对数位中含有2、0、1、9的数字很感兴趣,在1到40中这样的数包括1、2、9、10至32、39和40,共28个,它们的和为574。求,在1到2019中,所有这样的数的和为多少?#include<stdio.h>int Get_Sum(int tmp){ int sum = 0; int n = 0; for (int i = 1; i <= tmp; i++) { n = i; while (n) { if (n % 10 ...原创 2021-12-13 09:00:00 · 557 阅读 · 0 评论 -
打印单月日历
void Func(int n,int m){ int count = 0; for (int k = 1; k < m; k++) { printf(" "); } for (int i = 1; i <= n / 7 + 1; i++) { for (int j = 1; j <= 7; j++) { if (i == 1 && j == 1) j = m; count++; if (count > n).原创 2021-11-19 09:00:00 · 145 阅读 · 0 评论 -
C语言实现将不同进制数字的字符串转化为10进制数字的方法
要求:输入一个字符串,里面包含 ,可能为10进制或者8进制或者16进制的数字然后将字符串里面各个进制的数转化为十进制数字输出c程序实现如下:#include<stdio.h>#include<assert.h>#include<ctype.h>static int to_Hex(const char* str){ //0123456789abcdefABCDEF int sum = 0; while (isxdigit(*str)) {原创 2021-11-21 08:39:31 · 3256 阅读 · 0 评论 -
关于C语言的隐式类型转换规则
基于C89标准下的隐式类型转换规则:1.算术运算中或者逻辑判断表达式中操作式,不匹配的时候2.赋值时,如果左右操作数类型不匹配3.函数传递进去的实参和匹配的形参对应不上4.函数返回的表达式的类型和函数返回类型不匹配整值提升:将出现的字符类型(char)和短整型(short)统一提升为int类型(特殊情况下,也会提升为unsigned int)1.如果左右操作数中存在浮点值 1.1如果一个操作数是long double,另一个操作数自动转换为long double 1.2如果一个...原创 2021-11-14 09:00:00 · 2775 阅读 · 0 评论 -
打印字符串中字母,数字,空格以及其它字符出现次数
编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输人字符串以及输出上述的结果。#include<stdio.h>#include<assert.h>#include<ctype.h>void Judge_word(const char* str){ int alpha = 0; int num = 0; int space = 0; int other = 0; while (*str != ...原创 2021-11-08 09:00:00 · 160 阅读 · 0 评论 -
16进制转化为10进制函数
要求:编写一个函数,输入一个16进制数,输出相应的10进制数注意:输入的是一个字符串如: “0x123", "-0X123a", " +0XABC",要将输入的情况考虑全面. 输出要求是一个数如“54,6456c语言实现如下:#include <stdio.h> #include<limits.h>#include<ctype.h>int Get_0x(const char* str){ int index ...原创 2021-11-12 09:26:57 · 4689 阅读 · 0 评论 -
C语言-字符串合并函数和比较函数的实现
字符串合并函数的实现#include<stdio.h>#include<assert.h>//字符串合并函数//"abcde"+"xyz" ->"abcdexyz"char* My_strcat(char* des, const char* src){ assert(des != NULL && src != NULL); //1.让指针p 指向des的结尾标志'\0' char* p = des; while (*p != '\0'.原创 2021-11-05 09:00:00 · 619 阅读 · 0 评论 -
C语言二维数组练习
1.对某一二维数组进行转置注意:调用函数里面的二维数组,需要用到数组指针的形式#include <stdio.h>void Transpose(int (*p)[5],int row,int col){ int tmp[10][10] = {}; for (int i = 0; i < col; i++) { for (int j = 0; j < row; j++) { tmp[i][j] = p[j][i]; printf("%2d .原创 2021-11-11 09:00:00 · 486 阅读 · 0 评论 -
准确搞懂指针数组与数组指针
指针数组一个数组,其中元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量,即,由数组构成的指针。一般形式:类型名 *数组名[数组长度];如:int *p[4]cahr *q[4]数组指针:指向数组的指针 。首先,这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,也就是说这个指针指向一个数组的首地址一般形式:类型名 (*指针名)[数组长度];char (*p)[4];int (原创 2021-11-16 20:01:43 · 266 阅读 · 0 评论 -
C语言-复制特定的字符串
要求:有一个字符串,包含n个字符。写一函数,将此字符串从第m个字符开始的全部字符复制成另一个字符#include<stdio.h>#include<string.h>#include<stdlib.h>#include<assert.h>char* My_strncopy(const char* src, int m){ int i = 0; m = m - 1; assert(NULL != src); if (NULL == sr.原创 2021-11-20 15:05:57 · 1490 阅读 · 0 评论 -
c语言报数(1-3)排序问题
题目如下:有n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?编程实现如下:#include<stdio.h>int Get_sort(int n){ if (n > 100) { printf("输入值过大"); return -1; } int num[100] = {}; int k = 0; int count = 0; int lastone = 0; for (原创 2021-11-09 09:11:11 · 568 阅读 · 0 评论 -
c语言-动态内存
为什么要使用动态内存?静态数组存在的问题:1.不能根据变量n动态申请内存2.不能申请大块内存动态内存: 1.动态内存有什么用? 1.1:可以根据变量n动态申请数组 2.怎么使用动态内存? 2.1:malloc(90%):申请动态内存(从堆内),有可能失败,返回NULL(1.堆内空间不够 2.堆内空间足够,但是连续空间不够) 2.2:calloc(1%): 在ma...原创 2021-11-17 09:00:00 · 115 阅读 · 0 评论 -
筛选100内素数,杨辉三角形,折半查找,翻译密码
#include<stdio.h>#include<assert.h>void Get_prime() //筛选一百以内素数{ for (int i = 2; i < 100; i++) { for (int j = 2; j <= i; j++) { if (i % j == 0 && i != 2) { break; } if (j >= i - 1) { prin...原创 2021-11-02 09:00:00 · 105 阅读 · 0 评论 -
C语言 解一元二次方程
要求分别输入一元二次方程的三个系数a,b,c,输出此方程的解#include<stdio.h>#include<math.h>void Solve_Equation(double a, double b, double c){ double tmp = 0; double x1 = 0; double x2 = 0; tmp = pow(b, 2) - 4 * a * c; if (tmp > 0) { x1 = -b + sqrt(tmp) /.原创 2021-11-10 09:00:00 · 1407 阅读 · 0 评论 -
C语言 求二维数组鞍点
要求如下:找出一个二维数组鞍点,即在该位置上的元素在该行最大、在该列上最小,也可能没有鞍点。 输入 :一个二维矩阵 输出 :一个鞍点,如果存在并打印鞍点所在行列的下标,如果不存在,打印一个错误值(int类型极大值)c程序实现如下:#include <stdio.h>#include<limits.h>int Andian(int (*p)[3],int row,int *max_row,int *max_col){ int max = 0; //int..原创 2021-11-13 08:35:12 · 2783 阅读 · 0 评论 -
杨辉三角三种解法(二维数组,一位数组,不用数组)
杨辉三角,是二项式系数在三角形中的一种几何排列。它的规律是这样子的:前提:每行端点与结尾的数为1. 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。 前n行共[(1+n)n]/2 个数。 第n行的m个数可表示为C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。 第n行的第m个数和第n-m+1个数相等 ,为组合数性质之一。 每个数字等于上一行的左右两个数字之和。可用此性质写出整个..原创 2021-11-15 09:00:00 · 1748 阅读 · 0 评论 -
筛选法求素数
输入:要求从键盘输入一个n,输出:利用筛选法求出前n个数中有多少个素数#include<stdio.h>#include<malloc.h>#include<assert.h>void Func(int n){ int* p = (int*)malloc(n * sizeof(int)); assert(p != NULL); for (int i = 0; i < n; i++) { p[i] = 1; } p[0] =原创 2021-11-18 09:00:00 · 59 阅读 · 0 评论 -
数组排序-冒泡算法和选择算法
冒泡排序: 从前向后,两两比较,如果前面大于后面,则交换void BubbleSort(int* arr, int len){ for (int i = 0; i < len - 1; i++) //控制层数 { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > (arr[j + 1])) { int tmp = 0; tmp = arr[j + 1]; arr[j + ..原创 2021-11-03 09:24:47 · 99 阅读 · 0 评论 -
字符串逆序打印
写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。char* Reversal(char* arr, int len){ char* p = arr; char* q = arr + (len - 2); int tmp = 0; for (p, q; q >= p; p++, q--) { tmp = *q; *q = *p; *p = tmp; } return arr;}int main(){ char arr[] = "abc原创 2021-11-06 09:00:00 · 301 阅读 · 0 评论 -
求一个字符串中最长单词,并将这个单词输出
.写一个函数,输入一行字符,将此字符串中最长的单词输出。 在一个字符串中,单词与单词之间会被其它字符隔开如:‘,’,‘;’,‘!’,如果这个单词在字符串末尾则不会有其它字符隔开。假设不考虑单词的拼写是否正确,只要中间没有其它非字母字符,则认为这是一个单词,c语言代码如下:#include<stdio.h>#include<string.h>#include<ctype.h>char cupWord[100]; char maxWord[...原创 2021-11-07 09:00:00 · 2590 阅读 · 0 评论 -
c语言-字符串长度与拷贝函数的实现
char* My_strcpy(char *des, const char *src){ //assert assert(des!=NULL &&src!=NULL); if(des==NULL || src==NULL) { return NULL; } char *address = des;//address作用是防止 return的时候 des指向最后了 while(*des++ = *src++); return address;}//"ab.原创 2021-11-04 09:00:00 · 204 阅读 · 0 评论