c语言

小白C语言Leetcode————23.合并连个有序链表。

Deadly 提交于 2020-02-07 10:02:00
小白不太会用leetcode,上交的代码总是运行失败,只能自己在codeblock上运行试试。有许多地方写的不太规范,在此记录,希望以后继续努力。 # include <stdio.h> # include <stdlib.h> # define LEN sizeof(struct listnode) typedef struct listnode { int data ; struct listnode * next ; } listnode , * linklist ; int main ( ) { linklist merge ( linklist l1 , linklist l2 ) , p1 , p2 , m ; linklist creat ( ) ; printf ( "请输入链表p1的值:" ) ; p1 = creat ( ) ; printf ( "请输入链表p2的值:" ) ; p2 = creat ( ) ; printf ( "输出合并链表m的值:" ) ; m = merge ( p1 , p2 ) ; while ( m != NULL ) { printf ( "%d\t" , m -> data ) ; m = m -> next ; } return 0 ; } linklist merge ( linklist l1 , linklist l2

C语言系统函数

穿精又带淫゛_ 提交于 2020-02-07 08:56:16
////以下是网上收藏记录的笔记,由于找不到原作者,所以没有原作者连接,侵权请私聊! 1:查找文件是否存在 函数原型: int access(const char *filename, int mode); 所属头文件:io.h filename:可以填写文件夹路径或者文件路径 mode:0 (F_OK) 只判断是否存在 2 (R_OK) 判断写入权限 4 (W_OK) 判断读取权限 6 (X_OK) 判断执行权限 用于判断文件夹是否存在的时候,mode取0,判断文件是否存在的时候,mode可以取0、2、4、6。 若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。 2:打开文件 fopen() 函数即可打开文件,它的用法为: 头文件include<stdio.h> FILE *fp =fopen(char *filename, char *mode);. 打开文件出错时,fopen() 将返回一个空指针,也就是 NULL. “r” 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。 “w” 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。 “a” 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾

C语言 第五章 循环结构

跟風遠走 提交于 2020-02-07 07:19:23
目录 一、for 二、while 三、do while 四、continue 五、break 一、for 请在屏幕上输出1000个*号 printf("*************************...."); #include "stdio.h" void main() { int i; for(i=1;i<=1000;i++){ printf("*"); } } for(表达式A;表达式B;表达式C) { 要重复执行的代码块D; } 1、表达式A先执行,且只执行一次 2、表达式B再执行,如果为真则执行代码块D 3、再执行表达式C,再选择表达式B,回到第2步 4、ABCD都可以省去 for(;i>=100;); 5、表达式1通常用来给循环变量赋初值,一般是赋值表达式i=1 i=-1,j=100 6、表达式2通常是循环条件,一般为关系表达式或逻辑表达式i>=5 i>5&&j<=8 7、表达式3通常可用来修改循环变量的值,一般是复合赋值语句i++,i--, i+=5,j++ 8、这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。 #include "stdio.h" void main() { int i,j; for(i=1;i<=10;i++) { printf("%d \n",i); } } #include "stdio

快速乘C语言

对着背影说爱祢 提交于 2020-02-07 05:59:11
快速乘 其实快速乘和幂有异曲同工之妙(其实都是乘法)。 这里我们引见我的快速幂中的幂的求法(二进制的按权展开求和)。 快速幂的链接 这里我们发现快速幂是由于多次运算,数据太大,而简化的;而快速乘也是这个道理,那怎么把快速幂转化到快速乘呢? 我们可以发现幂的运算是对于底数的幂次循环所以我们只要把他的幂简化就可以了,而乘法(x*y)是对于x(或y)的 y ( x ) 次相加 所以把他的y(x)化简就可以了。 怎么样实现 很简单,只要把他的x(y)的二进制按加权求和就可以了。如以下例子: 12 11=12 1011(二进制)=12 * 2^ 3+12 * 2^ 1+12 * 2^0=96+24+12=132 而代码就和幂运算差不多,如下: int Quick - Multiple ( int a , int b ) { long long int ans = 0 , int base ; base = a ; while ( b ) { if ( b % 2 == 1 ) ans + = base ; base = base * 2 ; b / = 2 ; } return ans ; } 当然我们需要取模来保证数据不会溢出最终如下 int Quick - Multiple ( int a , int b, int mod ) { long long int ans = 0 , int

PTA L1-033 出生年 C语言版

烂漫一生 提交于 2020-02-07 03:43:38
以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于 y 年,直到 x 岁才遇到 n 个数字都不相同的年份”这句话。 输入格式: 输入在一行中给出出生年份 y 和目标年份中不同数字的个数 n ,其中y在[1, 3000]之间, n 可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。 输出格式: 根据输入,输出 x 和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“ n 个数字都不相同”是指不同的数字正好是 n 个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。 输入样例1: 1988 4 输出样例1: 25 2013 输入样例2: 1 2 输出样例2: 0 0001 题解: 数组num[10]下标代表数字0-9,先初始化num[10]值为0,再用num[10]将年份中在0-9中出现的数字标为1,count标记0-9中被标为1的数字个数,count与n相同则输出,不同则y++后循环 代码: # include <stdio.h> int main ( ) { int y , y1 , n , t , i ,

编写高效C语言的四大绝招 !!!

≯℡__Kan透↙ 提交于 2020-02-07 02:28:21
编写高效简洁的C语言代码,是许多软件工程师追求的目标。本文就是针对编程工作中的一些体会和经验做相关的阐述。   第一招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值: 方法A:通常的办法 1#define LEN 32 2char string1 [LEN]; 3memset (string1,0,LEN); 4strcpy (string1,"This is a example!!"); 方法B:使用的时候可以直接用指针来操作。 1const char string2[LEN] ="This is a example!"; 2char * cp; 3cp = string2 ; 从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。   如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。该招数的变招--使用宏函数而不是函数。举例如下: 方法C: 1#define bwMCDR2_ADDRESS 4 2

c语言 局部变量做返回值 问题

倖福魔咒の 提交于 2020-02-07 01:10:19
一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确的来说, 函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。 下面以函数返回局部变量的指针举几个典型的例子来说明: 1: [cpp] view plain copy #include <stdio.h> char *returnStr() { char *p= "hello world!" ; return p; } int main() { char *str; str=returnStr(); printf( "%s\n" , str); return 0; } 这个没有任何问题,因为"hello world!"是一个字符串常量,存放在 只读数据段 ,把该字符串常量存放的 只读数据段 的首地址赋值给了指针,所以returnStr函数退出时,该该字符串常量所在内存不会被回收,故能够通过指针顺利无误的访问。 2: [html] view plain copy #include < stdio.h >

C语言寒假大作战02

夙愿已清 提交于 2020-02-06 23:56:32
问题 答案 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2019-2 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10257 这个作业的目标 使用函数、Switch语句来完成菜单程序 作业正文 见下文 其他参考文献 百度 https://baijiahao.baidu.com/s?id=1616367741584583839&wfr=spider&for=pc 1 设计思路和遇到的问题 1.1 心路历程 刚开始看到这个题目的时候很懵b吧,不知道该从何处开始下手,后面慢慢查阅资料和借鉴一下别人的代码才渐渐明白,最后自己静下心来才完成。当编辑运行成功时自己内心终于开心起来。 1.2 遇到的问题 (1)玩了这么久,还是大意了,前面几个符号就没调成英文模式了,直接就导致程序运行不起来 (2)不知道如何让操作列表在每一步完成后自动跳出 (3)为什么n要赋初值 1.3 程序设计思路 用switch语句和for循环搭配,并阅读了资料怎样从控制台程序中模拟一个选项菜单功能,并从中得到一些灵感。 2. 程序结果截图 2.1 程序开始 2.2 一年级题目 2.3 二年级题目 2.4 三年级题目 2.5 帮助信息操作 2.6 执行错误操作 2.7退出程序操作 3

Redis学习-简单动态字符串SDS

梦想与她 提交于 2020-02-06 20:24:47
SDS(simple dynamic string)简单动态字符串 SDS与C语言字符串在redis用法上的区别: C语言字符串用于字符串不被修改的地方,如日志输出 SDS是一个可以被修改的字符串,如键,值 结构体保存在sds.h/sdsdr文件中 struct sdhdr { //记录buf数组中已经使用的字节的数量 int len ; //记录buf数组中未使用的数量 int free ; //字节数组用于保存字符串 char buf [ ] ; } ; 注意C语言字符串的最后一个空字符‘\0’不属于len 打印字符串时用 printf ( "%s" , s - > buf ) ; SDS与C语言字符串的区别 1.常数复杂度获取自妇产长度 C语言求长度是需要遍历的 2.杜绝缓冲区溢出 C语言有一个函数 char * strcat ( char * dest , const char * src ) ; 用于把src字符串拼接到dest上面,但是如果dest空间不足就会产生溢出。 Redis有自己的SDS拼接函数 sdscat 用于拼接,会先检查是否有足够大的内存空间,不够就进行内存拓展,然后再进行拼接。 3.减少修改字符串带来的内存分配次数 C语言不用说,每次都是重新分配,但是SDS不一样,实现了: 空间预分配 若对SDS修改之后,长度小于1MB,则分配 len+free

C语言寒假大作战01

我们两清 提交于 2020-02-06 20:09:52
这个作业属于哪个课程 C语言程序设计 这个作业要求在哪里 作业链接 我在这个课程的目标是 gitee与git基础命令学习与使用 作业正文 码云界面 参考文献 学长录制的Git基础操作视频 1.1 码云界面 1.2 Git界面 1.3 本地仓库截图 仓库界面 1.4学习命令 1.添加文件 git add +文件名 2.建立储存库 git init 3,查看当前状态 git status 4,覆盖文件 git commit -m 文件名 5,添加远程原点 git remote add origin 你的仓库ssh 1.5主页地址 个人主页 来源: https://www.cnblogs.com/luoanluoan/p/12268202.html