C语言
从简单的代码到实现基本用户需求,且能完成小项目。
竹等寒
本洞府用来记录心得与笔记,道友们权当进来看个热闹。
若寒舍能助道友领悟大道,本散修也为之感到高兴。
展开
-
C语言:通讯录程序设计(多功能)
作者前言:该通讯录作品是我大一的C语言结课作业,代码像shi山一样,之所以拿出来是想回忆一下我当时的想法和想结合一下我现在所学看能否有一些更新颖的想法碰撞出来,同时也会发出没有修改过的源代码。解释:首先我在写程序过程中遇到的必然是学校机房在单独将菜单清除再重新打印的时候会发生乱码的现象,这个原因我到现在还不明白,因为进入程序他不会乱,只有在我开始进行输入输出的时候就一下子乱了,所以我最后也是想到了要不直接将所有打印出来的都清掉重新打印,然后就有了现在这个刷屏这函数,所以也让我后面在写添加联系人和修改联系人原创 2022-12-31 14:17:00 · 1875 阅读 · 0 评论 -
C语言:使用链式栈检测txt文件中的括号匹配
i. 如果都匹配,则返回都匹配。ii. 若不匹配,则返回第几行第几列不匹配。iii. 将不匹配的行打印出来。栈(stack)是一个先进后出的一个线性表(一般)使用............原创 2022-06-18 23:43:30 · 542 阅读 · 0 评论 -
C语言:顺序存储循环队列#保存文件中单词的最后三个字母
将文档中每个单词的最后三个字母保存到一个新文档中,并打印在屏幕上。例如,原文档中有这样一句话“Near the ancient water townof Wuzhen”,保存完则为“ear the ent ter own of hen”。四个任务全局变量和结构体代码①计算文件中的单词数量该操作是为了分配空间,事先一次性分配完所需要的空间。计算完成后该函数会返回一个int数值,该数值就是单词数量,所以利用这个返回值进行空间分配。co............原创 2022-06-19 16:05:17 · 381 阅读 · 0 评论 -
C语言:将txt文件的单词导入链表&&删除链表重复单词
可以在目录中找到对应位置进行浏览。1:将文件单词导入链表2:删除链表重复的单词内容我们下面用链表存储txt文件中单词作为内容进行去重,学会了这个操作之后应该对其他内容形式的存储也会得心应手,只要修改一下存储的内容形式是什么就可以,主要是代码思想的重要性。下面的几个任务对应的函数我在文章后面都会详细解释。①需要一个寻找txt文件中最长单词的函数。( 可以跳转置下面博客链接,在本篇文章中我就不再赘述了,里面写得比较详细。##如何找到txt文件中最长单词## )③需要一个导入文件单词函数④需要一个去除原创 2022-06-18 15:43:29 · 1344 阅读 · 0 评论 -
C语言:删除顺序表中重复的信息—(删除顺序表中重复的单词)
如何删除顺序表中的重复单词:(容朕说一句:如果你最后怎么都运行不了你想要的结果,①我敢保证大概率是你的下标越界你的下标越界了你的下标越界了。②在我这程序里面你肯定打少了p--,少了p--,少了p--,少了p--)在一个顺序表中,所有元素都是有序着排放着,所以在遍历重复的时候就需要灵活利用下标位置。我们拿第一个单词元素为例子,用一个临时数组存放单词,方便后面用下标和strcmp函数进行比较单词是否重复。从第一个单词元素往后遍历,下标为0,我们用一个变量c存放该下标,在往后遍历是否有重复的时候我原创 2022-04-25 22:45:16 · 2493 阅读 · 0 评论 -
C语言:将文件中所得到的单词表保存到一个顺序表中--使用动态分配数组。
在很多时候我们想要在程序中存储想要的信息,但是又不知道该信息的大小或者说不知道需要多长的数组来存放。动态分配空间这个很好的解决了这个问题,动态分配不仅只可以用在链表中分配节点空间,其实更多时候用来分配数组的空间。今天我记录的这个代码就是一次性分配好信息所需要的空间大小。假设: ............原创 2022-04-25 00:46:56 · 2561 阅读 · 4 评论 -
C语言:找到在文件单词中字符个数最多的单词。
第一点:这是一个传回指针的指针函数,所以在定义的时候是char*类型的函数,传进的参数是一个文件指针,(敲重点了,一定一定一定要把文件打开了才能传这个文件指针进来!!)因为这是在你的文本文件里面进行查找最长的单词。第二点:这个功能实现有点类似于打擂台法,知道打擂台法的uu们应该很容易看懂这个功能,基本算法就是通过每次一边录入一个字符,一边计算录入了多少个字符作为该单词的长度。 当然你肯定会想到用strlen来计算(记得单词末尾要加上\0才可以用哈),这个方法当然可以,但我这个是一边想一边实现的,没有考虑原创 2022-04-24 23:51:54 · 1365 阅读 · 0 评论 -
C语言:约瑟夫问题——使用循环链表解决
传说有30个乘客同乘一条船,因为严重超载,加上风浪水作,危险万分。船长告诉乘客,只有将全船一半的乘客投入海 中,其余人才能幸免于难。他们约定了一个规则:30个人围成一圈,由第一个人数起,依次报数,数到第9个人,便把他投入大海中,然后再从他的下一个人数起,数到第9个人,再将其扔下大海,如此循环地进行,直到剩下15个乘客为止。请问哪些位置是将被扔下大海的位置,留下的是谁。(由这个传说产生了约瑟夫问题,总数n,删除数为k)最后我写了一个函数是将结果输出到外部文本txt中。我所写出的循环链表是基于单原创 2022-04-16 22:47:47 · 3295 阅读 · 2 评论 -
C语言:单链表删除学生信息,增加学生信息(简易版)
假设用户都是正常的,不会输入一些乱七八糟的东西。功能1:输出学生学号和成绩,用动态连链表来存放,继续存放学生信息的时候可以继续输入之前输入过的学号信息,打印的时候会分开打印(因为是简易版本,没有太完善)功能2 :删除信息,用户输入要删除的学号的时候,如果这个学号在之前录入信息的时候录入了多次,比如说有两个学号都是2,那么在你输入要删除2这个学号的时候,会把所有学号为2的学生信息删除掉。叨叨几句:因为找不到很好的办法去删除有多个相同学号的办法,所以我采用了每次删除了一个之后,要重新从单链表的头冲洗原创 2022-04-09 10:54:02 · 3359 阅读 · 1 评论 -
C语言:生成单词列表----使用单链表实现
解决之前用数组结构体导致内存过剩问题,使用动态分配内存优化单词列表。#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdbool.h>#include<stdlib.h>/* / ********************************************** / This is Jackson.W's Experiment report.原创 2022-04-07 13:53:40 · 945 阅读 · 0 评论 -
C语言:if语句嵌套应用(小剧场)
#include <stdio.h>int main(){ int num,i; printf("一天Jackson.W打开了电脑想学习C语言\n"); printf("突然微信来了好多条信息\n"); printf("他点开了第"); for(i = 0;i < 4;i++) { scanf("%d", &num); printf("里面的信息是:\n"); if(num < 8) { printf("快去写作业啦,扑街!\n").原创 2022-03-11 14:25:14 · 1222 阅读 · 0 评论 -
C语言:卖鸭子问题---递归法实现
1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?代码:#include<stdio.h>int circ(int);int main(){ int all, v, sum; all = circ(7); printf("总共有%d只鸭鸭。\n",all); for(v = 0; v < 7; v++) { sum = all / 2 + 1;原创 2022-03-11 19:59:55 · 4589 阅读 · 0 评论 -
C语言:学生成绩排名----冒泡排序
题目: /* 输入10个学生成绩、 计算总分以及平均分数、 求出高于等于平均分的人数、 再按降序(由大到小)排序成绩并输出 */用到的冒泡算法代码模板://外层控制轮数 for(i = 0; i < i; i++) { //内层控制每轮比较次数 for(j = 0; j < i; j++) { if(num[j] > num[j + 1]) //注意!!!!!把 <...原创 2022-03-11 20:40:35 · 8697 阅读 · 1 评论 -
C语言:将有顺序的数组进行逆序排序
//设计逆向排序之,数字有序排列,进行逆向排序主要思想就是头和尾进行交换,前提是------数字必须是排好序的才能进行逆序排 /*假设数组为: 7,8,9,10,11 1 N 2 N - 1 3 不继续交换了 */交换的次数应该是该数组的长度除以2,用int 类型除2,因为这样不论是否有小数点,都会直接舍去取整数。#include <stdio.h>#define N 5int main()...原创 2022-03-11 20:50:21 · 6433 阅读 · 0 评论 -
C语言:将字符逆反排列再输出的问题
代码:#include<stdio.h>#define N 10int main(){ /*输入字符串,str[10],将里面的字符逆反排列,再输出。*/ char ch[N]; int num = 0,i,j,temp; gets(ch);//gets函数会自动在最后补一个\0 for(i = 0; i < N; i++) { if(ch[i] != '\0') { num++; } } for(i = 0; i < num/2原创 2022-03-11 20:28:31 · 382 阅读 · 2 评论 -
C语言:冒泡排序---详细解释
//冒泡排序数字,仅仅适用于数组无序的时候,若有序则不能使用冒号排序 例如: 数字组:5,54,64,98,47 /* 1: 54,64,98,47,5 4次 2: 64,98,54,47,5 3次 3: 98,64,54,47,5 2次 4: 98,64,54,47,5 1次 */ //规律:比较轮数 = N - 1 //每轮比较次数 = N - i - 1代码如下:#...原创 2022-03-11 20:44:35 · 243 阅读 · 0 评论 -
C语言:计算长方形面积问题
#include <stdio.h>#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) { float height=150.0;//高 float width=27.0;//长 float s;//面积 s=.原创 2022-03-11 14:53:31 · 7532 阅读 · 0 评论 -
C语言:如何打印星星
//打印星星 /*i j k j 0 0 (上) 4(下) 1 6 1 2 3 2 4 2 4 2 3 2 3 6 1 4 ...原创 2022-03-12 10:29:00 · 2244 阅读 · 0 评论 -
C语言:++ --优先级的深入理解
#include <stdio.h>int main(){ int num = 11; int result = ++num > 11 && --num < 20; printf("result = %d\t num = %d\n",result,num); return 0;}&&符号是并且的意思,A&&B指的是A并且B,所以两个运算都会进行那么 问题是结果出来试试什么呢?result = .原创 2022-03-11 15:13:01 · 400 阅读 · 0 评论 -
C语言:Hello Word(梦开始的地方)
#include <stdio.h>//标准输入输出头文件,下面的printf打印的函数包含在这个头文件里面int main(){ printf("Hello Word!"); return 0; } int代表一个整型类型( 一个函数在返回值的时候返回一个整型类型的值)main是主函数return 0;代表一个程序中函数正常运行结束的标志,告诉电脑我的程序安全运行到最后了return 0中的0是告诉调用函数的人,该程序正常退出。...原创 2022-03-11 14:10:02 · 1286 阅读 · 0 评论 -
C语言:如何让printf输出更加美化(用游戏英雄属性作例子)
#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[]) { double attach=100.32; //伤害值 double attachAdd=4.5; //伤害增加值 int attachRange=172; //攻击距离 .原创 2022-03-11 14:37:41 · 4869 阅读 · 0 评论 -
C语言:输入一个整数并让其逆反输出。123->321
主要思想为:a)计算输入的位数有多少个b)计算出最高位的单位(若最高位为是万位, 那么需要一个变量存储最高位数值1000)c)用取模的方法从个位数开始进行取出每一个单位上的数字d)从个位数开始,乘以最高位数的值,乘完后最高位数值除等于10。以此类推。一直对这个整数取模完成注意的是:要灵活利用临时变量存储输入的整数,方便对该数进行不同的操作而不改变最初的整数变量的数值代码如下:#include <stdio.h>int main(){ int i, time =原创 2022-03-12 11:31:13 · 7955 阅读 · 1 评论 -
C语言:输出大写的三角形字母表(进阶)
//该程序只支持输入大写字母,输入G,就输出A~G的三角形字母表/* 从A到Z的输出数量应该是1 3 5 7 9..... */利用这个特性,对空格和字母进行输出A字母在ascii码里面是65,所以减64,如果减出来的结果等于1就是A,直接输出A即可。如果大于1,就进行输出字母按照三角形的顺序输出结果。#include<stdio.h>int main(){ int h,i; char j,k,c; j = getcha...原创 2022-03-12 12:31:17 · 5574 阅读 · 1 评论 -
C语言:输入一串字符串,统计字符串中有多少个数字
gets函数会在输入完字符后自动补上一个\0,所以用这个特性可以计算出字符串是否结束。因为数字在字符中对应的ascii码就是0~9,只要遇到小于9的字符就是数字,所以计数器加一#include<stdio.h>int c (char *); int main(){ char ch[100]; char *p_ch = ch; int i, j = 0; gets(ch); j = c(ch); printf("一共有%d个数字",j); return原创 2022-03-12 12:40:12 · 10332 阅读 · 0 评论 -
C语言:判断是否为素数,并且打印素数表
/* 构造素数表, 只需要用数字除以已经判断出来的数是否能整除就行, 不需要除以这个数之前所有的数字, 前提是这个数除以的素数是要比他自己小的 */注意一点:int a[number] = {2,};//先把2给赋初值进去,因为2也算素数,能被1和本身整除而已还有一点需要注意的是,在输出的时候记得输出的美观性,养成良好习惯。代码如下:#include<stdio.h>#define number 50 //存储五十个素数 int...原创 2022-03-12 13:03:02 · 938 阅读 · 0 评论 -
C语言:水仙花
//水仙花数也就是指一个 3 位数,它的每个单位上的数字的 3次方之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。#include<stdio.h>int main(){ //水仙花数 153 = 1 + 5^3 + 3^3 int i, j, k, num,sum, d; int t; int s; //scanf("%d", num); num = 3; int temp = 1; for(i = 1; i < num;.原创 2022-03-12 21:31:15 · 8602 阅读 · 0 评论 -
C语言:实现数组的删除和增加
/* 删除方法: 如:12 32 56 84 95 用覆盖的方法 若删除第三个,则第四个要覆盖第三个,第五个要覆盖第四个 覆盖完:12 32 84 95 95 所以要实现删除,还要删除最后一个数字,即不打印,数组元素 - 1 */增加方法就简单,因为数组在定义的时候没有定义空间大小,所以可以随意增添。#include <stdio.h>#define N 5int main(){ //实现数组的删除...原创 2022-03-12 23:31:16 · 3780 阅读 · 0 评论 -
C语言:头文件ctype.h的内置函数
#include <stdio.h>#include <ctype.h>//内置函数的头文件 #include <math.h>int main(){ int i,j,num; int count = 5; char nuit[10][20] = {"零" ,"壹" , "贰" , "叁" , "肆" , "伍" , "陆" , "柒" , "捌" , "玖"}; int Index[10] = {}; //内置函数的种类与使用...原创 2022-03-12 23:39:16 · 450 阅读 · 0 评论 -
C语言:对fgets进行封装
因为fgets在赋值完字符后,在最后会加一个\n换行符,所以为了能够把数组当成字符串,就必须把\n改成\0代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define username "JacksonWu"#define password "新年快乐" int strlength(char *);//尝试封装fgetsvoid getstring(char *, int);原创 2022-03-12 23:44:04 · 136 阅读 · 0 评论 -
C语言:窗口控制台颜色改变(不断换色)
了解了stdlib头文件中的system 函数之后突发奇想想要做一个蹦迪效果后台代码如下:#include <stdio.h>#include <stdlib.h>#include <time.h> int main (){ long time; while(1)//死循环 { for(time = 0; time < 3; time++) system("color A8"); Sleep(50); for(time =原创 2022-03-12 23:49:48 · 1555 阅读 · 0 评论 -
C语言:渔夫捕鱼算法问题
题目:渔夫捕鱼A,B,C,D,E五个渔夫夜间合伙捕鱼,,第二天清A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼?#include<stdio.h>int main(){ /* 第五个渔夫醒来至少看到 6 条鱼,才能分五份 */ //倒推法 int num = 6; int i; for(i = 1; i < 5原创 2022-03-13 08:38:30 · 4031 阅读 · 4 评论 -
C语言:send + more = money,单词相加求解字母数字谜问题
我用的是穷举法,虽然有点笨,但是在想不到其他更好的方法对我而言就是穷举法。有程序员大大想到其他方法也可以私信我一起探讨一下~#include<stdio.h>int main(){ /* send more money s e n m d o y r */ //穷举法 int count; int open = 1; int i,j; int find[10]; int sum1 = 0, sum2 = 0, sum3 = 0; .原创 2022-03-13 08:45:27 · 2707 阅读 · 0 评论 -
C语言:贮油点建设问题(详解题目意思)
!!!!先看解析,后面附有代码!!!!!!!,希望大家不懂的能认真看看,这些都是我在写的过程中不能理解,遇到的困难,然后弄懂之后总结出来给大家的,想学的一定要认真看完。规律是:贮油点之间相差500升,从最后一站倒推回来的每次往返次数规律是:1、3、 5、 7 、9、 、、、、、/* 第一站距离终点:500/1 贮油点500升 第二站距离终点:500 + 500/3 500*2 第三站 ...原创 2022-03-13 09:26:56 · 1126 阅读 · 3 评论 -
C语言:ACLLIB图形库——如何搭建环境(附三个文件代码)
看一下我配置完的运行结果:1)首先创建一个项目。2)选择win项目和C语言3)然后找到你保存项目的文件夹里面拷贝两个.c和.h文件,两个文件代码我附在最后。4)现在还不能用,找到项目属性5)打开参数,点开连接,你可以看到我已经粘贴进去了如果你是64位和我一样的话那就粘贴下面的两个其中一个(因为我的电脑这些文件位置不一样)A种)C:/Program Files/Dev-Cpp/MinGW64/x86_64-w64-mingw32/lib/lib...原创 2022-03-13 09:56:48 · 4044 阅读 · 1 评论 -
C语言:算法题判断是否有效字符({[]})---括号
给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 输入:s = "{[]}" 输出:true 输入:s = "()[]{}" 输出:true [{}] [[{} ...原创 2022-03-13 10:06:24 · 1552 阅读 · 0 评论 -
C语言:如何实现在txt文件中删除超链接、统计单词数量、生成单词列表 (文本流操作并解决乱码)
1、首先读取原文件内容文本流(包含中英文)2、删除超链接3、统计单词数量4、去除重复单词读取文件需要自己在文本笔记中保存一个网页,保存为txt文件注意的是,在这个代码实现过程中,我学到的是如何避免输入内容时出现乱码的现象,第一是必须要用fprintf、fread、fwrite等 用于文本流的函数,而不能用fputc、fputs这些用于二进制文本的函数,虽然说当你内容少的时候,可能不会出现乱码情况,当你输入内容多起来的时候就不一定了。(以上只是向txt文件输入内容的时候)所以记住,原创 2022-03-17 23:15:00 · 2135 阅读 · 2 评论 -
C语言:如何删除超链接
单独写出一个函数出来,基本思想就是用fgetc一个一个字符读取出来,遇到<的时候就停止读取,先把之前存进copy数组里面的字符先写进txt文件里面,记得要用fprintf,用于文本流,不然用fputc或者fputs这些都是用于二进制流的。有一个细节就是要把字符数组留一个空位出来,当遇到<或者扫描到数组倒数第二个空位的时候,记得把最后一个空位赋值为‘\0’,这样才能用fprintf进行字符串原本的输入到文本里面去。然后若遇到用一个字符类型的变量继续从遇到 < 开始扫描,一直遇到&g.原创 2022-03-20 12:08:20 · 499 阅读 · 1 评论 -
C语言(较深入原理):%s通过字符串首元素地址输出,用指针数组来作示例
首先,我们输出一个字符串都知道是用%s来输出,但是我们并没有多想是通过什么方式来输出的。今天我在看指针数组的时候发现了一个问题,按就是定义一个字符类型的指针数组,/*字符串的输出本身就需要他的地址,字符串没有单独的类型变量表示,只能用char类型数组来表示,指针数组所有空间存放的都是指针,所以在放字符串的时候,你这个字符串已经是一个地址了*/我用一个通俗易懂的例子来说明一下:(你必须要知道的就是字符串的输出是要第一个字符的首地址)刚刚说到每一个指针数组的空间都是用来存放地址的,所以不管你放什原创 2022-03-23 23:18:41 · 5680 阅读 · 3 评论 -
C语言:汉诺塔问题(Hanoi Tower)------递归算法
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。(忍不住调侃一下,难怪印度神片能这么有“内味”)#######最后会附上源代码#######先声明一下,我们之间约定三根柱子分别为:X Y Z, 先来一..原创 2022-03-26 17:17:29 · 862 阅读 · 0 评论 -
C语言:快速排序(详解)
快速排序采用的是两头对比交换。https://blog.csdn.net/qq_40941722/article/details/94396010上面这个连接大家可以点进去看看博客李小白大大的图文解释,我觉得这个是对我启发比较大的,对刚接触快速排序的人来说非常友好,很快就可以了解到其中的原理。然后我的代码稍微和里博客李小白的稍稍有点不一样;我在敲代码过程中发现快速排序对条件限制非常严格,我认为如果你对在从左到右扫描的时候,和从右到左扫描的时候那个限制条件理解了,说明你对这个快速排序的的代码才原创 2022-03-31 16:50:43 · 4691 阅读 · 0 评论