学习过程
WangJ_F_
这个作者很懒,什么都没留下…
展开
-
总结:宏函数和自定义函数的区别
宏函数和自定义函数的区别?自定义函数:#include<stdio.h> int max(int a,int b){ return a > b ? a : b ;}int main(){ printf("%d\n", max(1,2)); return 0;}宏函数:#include<stdio.h>#define...原创 2018-08-02 09:58:01 · 636 阅读 · 0 评论 -
递归和非递归分别实现求第n个斐波那契数
斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数#includeint fid(t)//递归{ if(t <= 2) { return 1; } else { return fid(t - 1) + fid(t-2); }}int fid1(t)//迭代{i原创 2018-03-26 18:17:36 · 267 阅读 · 0 评论 -
模拟实现printf函数,可完成下面的功能 能完成下面函数的调用。 print("s ccc d.\n","hello",'b','i','t',100); 函数原型: print(char *
#define _CRT_SECURE_NO_WARNINGS#include#include#includevoid print(char *tmp, ...) //实现可变形参{va_list arg; //声明va_list类型的变量arg,用于访问参数列表的未确定部分va_start(arg, tmp); //调用va_start来初始化。初始化过程把arg原创 2018-03-31 19:41:15 · 715 阅读 · 0 评论 -
对C语言函数递归的理解
什么是递归函数调用自身的技巧叫递归, 它通常把一个大型复杂问题转换成一个与原问题相似的小规模问题。递归策略只需要少量的代码就能完成需要多次重复计算的问题,多大的减少了程序的代码数量。递归特点1:大事化小 2:代码简单 3:可读性高递归两个必要条件1:存在限制,当满足限制条件之后,递归便不再继续2:每次递归后越来越接近这个限制条件#incl原创 2018-03-25 19:56:33 · 592 阅读 · 0 评论 -
数组指针,指针数组,函数指针,函数指针数组,函数指针数组的指针
数组指针:数组指针是一个指针,指向一个数组。 指针就是地址 int (*p)[10]; //[]的优先级高于 *,所以必须加上()保证p 与 *先结合 解释:p与*先结合,说明p是一个指针变量,指向一个数组,叫数组指针。指针数组指针数组是一个存放指针的数组创建一个数组相当于在内存中开辟一块连续的空间, int arr[2]就是开辟了一个大小为2*sizeof(int)字节的空间。原创 2018-04-07 23:18:49 · 229 阅读 · 0 评论 -
写冒泡排序可以排序多个字符串
#include#includevoid bubble_sort(char (*arr)[6],int size)//二维数组的一维数组指针{ int i = 0; char brr[9]; for(;i<size - 1;i++) { int j = 0; int flag = 0; for(;j<size - 1 -i;j++)原创 2018-04-07 21:33:25 · 297 阅读 · 0 评论 -
使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:命令
使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。 例如:命令行参数输入:test.exe -a 1 2 执行1+2输出3 Linux运行!!!#include#include#includeint add(x,y){return x +原创 2018-04-07 17:27:25 · 285 阅读 · 0 评论 -
可以将一个字符串左旋K个字符(0<=k<=字符串长度)的三种函数写法【C语言】
//1: 写一个函数可以将一个字符串左旋K个字符(0<=k<=字符串长度) abcdef—2—cdefab//将最前面的元素取出,剩下的向前移动,再将第一个放在最后,旋转k个,循环k次#include<stdio.h>#include<string.h>void rorate(char *a,int k){ int len = s...原创 2018-03-03 01:30:40 · 395 阅读 · 0 评论 -
c语言实现strstr字符查找, strcmp字符比较
实现strstr 字符串查找:strstr是一种函数,从字符串str1中查找是否有字符串str2, 如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。实现strcmp 字符串比较:设这两个字符串为str1,str2,若str1==str2,则返回零;若str1原创 2018-03-19 19:54:01 · 1767 阅读 · 0 评论 -
递归方式实现 1:打印一个整数的每一位 2:实现函数求出n的k次方
#includeint my_print(int k){ int i = 0; i = k % 10; printf("%d\n",i); k /= 10; if(k != 0) my_print(k);}int main(){int n = 1234;my_print(n);return 0;}#includeint power(int n,i原创 2018-03-27 18:00:47 · 387 阅读 · 0 评论 -
C语言分别实现递归和非递归strlen的三种方法
#includeint my_strlen(const char *arr)//计数方式{ int count = 0; while(*arr) { arr++; count++; } return count;}int my_strlen1(char *arr)//指针方式{ char *p = arr;//将数组首地址赋给指针p while(*p != '\0')原创 2018-03-28 12:49:42 · 540 阅读 · 0 评论 -
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, 例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#define _CRT_SECURE_NO_DEPRECATE#includeint DigitSum(int i){ if(i == 0) { return 0; } else { return i % 10 + DigitSum(i / 10); }}int main(){ int i = 0; printf("请输入数字: "); scanf("%d",&原创 2018-03-28 19:35:07 · 382 阅读 · 0 评论 -
C语言:free出错导致程序无法正常运行,并且不报错误
今天遇到这样一个问题:malloc申请空间,free释放时出错,程序无法正常运行,并且不报错误!通过下断点找到错误: 最终确定在malloc申请空间出错:pNode pNewNode = (pNode)malloc(sizeof(pNode));pNode是一个指针,只申请四个字节;调用时则按照Node节点来进行储存,当free是出现错误!free的原理:f...原创 2018-08-01 10:50:21 · 11322 阅读 · 3 评论 -
理解回调函数,模仿 qsort 的功能实现一个通用的冒泡排序,并使用qsort函数排序各类型数据
回调函数: 回调函数就是一个通过函数指针调用的函数,把函数的指针(地址)作为参数传递到另一个函数,当这个指针被用来调用其所指向的函数时,成为回调函数。 回调函数不是由该函数的实现方直接调用,,而是在事件或条件发生时由另一方调用。 回调函数就是函数指针的一种用法。你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了...原创 2018-08-04 14:43:32 · 252 阅读 · 0 评论 -
预处理标识符: __LINE__ __FILE__ __DATE__ __TIMRE__ # 与 ## 详解
预处理符号;① _ FILE _: 表示当前源文件编译的目录; ② _ TIME _: 文件被编译的时间; ③ _ DATE _: 文件被编译的日期; ④ _ LINE _: 当前文件所在的行号; ⑤ _ STDC _: 如果此编译器遵循ANSI C,其值为一,否则未定义; ⑥ #和###include<stdio.h>#include&l...原创 2018-07-30 23:47:14 · 1486 阅读 · 0 评论 -
函数malloc,calloc,realloc ,free 的介绍,区别,用法详解
动态内存函数介绍:动态内存分配:指在程序执行的过程中动态地分配或者回收储存空间的分配内存的方法。动态内存分配不像数组等静态分配方法那样需要预先分配储存空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。头文件:#include<stdlib.h>或#include<malloc,h>malloc 与 freemalloc:void* malloc(siz...原创 2018-06-06 11:26:49 · 489 阅读 · 0 评论 -
数据结构:静态栈与动态栈的实现
#pragma once#include<stdio.h>#include<stdlib.h>typedef int DataType;#define MAX_SIZE 100typedef struct Stack{ DataType _arr[MAX_SIZE];//栈的元素最大个数 int _top;//栈顶 int _bottom;//栈低 i...原创 2018-04-25 17:02:58 · 1727 阅读 · 0 评论 -
简单的通讯录实现教程
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人思路:将此次函数实现分为3个模块,1.头文件部分。2.主函数测试部分 3.函数实现部分首先我们可以分三个模块来解决这个...原创 2018-04-24 17:48:14 · 911 阅读 · 0 评论 -
使用可变参数,实现函数,求函数参数的最大值
#include#includeint max(int n, ...){va_list arg;int i = 0;int k = 0;int max = 0;va_start(arg,n);for(i=0;i<n;i++) { k = va_arg(arg,int); if(max<k) { max = k; } }va_end(arg); return m原创 2018-03-29 17:03:41 · 1137 阅读 · 0 评论 -
编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中 的字符串操作函数。
#includechar reverse_string(char * string){ if(* string) { string++; //自加到最后一位,因为先加所以打印时要减一 reverse_string(string); //递归 printf("%c",*(string - 1));//调用栈帧,按先进后出的顺序打印原创 2018-03-28 20:42:04 · 275 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。
#includeint my_num(int yuan){ if(yuan)//初始金钱不为零进入 { while(1 != yuan) //不等于1 { if(yuan&1)//按位与,判断是否为奇数 { return yuan - 1 + my_num((yuan>>1) + 1);//为奇数时的递归 } else { retu原创 2018-03-23 13:03:58 · 441 阅读 · 0 评论 -
一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和,编写一个程序,输入一个正整数,然后找出符合这种要求的所有 连续正整数序列,若不存在这种序列,则打印None。
//一个正整数有可能可以被表示为 m(m>=2) 个连续正整数之和,//如:// 15 = 1 + 2 + 3 + 4 + 5// 15 = 4 + 5 + 6// 15 = 7 + 8//编写一个程序,输入一个正整数,然后找出符合这种要求的所有//连续正整数序列,若不存在这种序列,则打印None。#include<stdio.h>int main(){ ...原创 2018-03-05 21:36:24 · 4664 阅读 · 0 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次#include#includeint main(){ int a = 0; int b = 0; int c原创 2018-01-21 21:52:42 · 403 阅读 · 0 评论 -
编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。#includeint main(){char ch;printf("请输入一个字母:\n");scanf("%c",&ch);if (ch>='a'&&ch{ch=ch-32;printf("%c",ch);}e原创 2017-12-19 16:32:04 · 336 阅读 · 0 评论 -
.编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。(细节提示)
.编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。#includeint main(){ char arr[]="123456"; char password[10]=" 0 "; //错误:char password[]需要scanf输入,只给出2个元素位置。所以要给原创 2017-12-19 16:09:37 · 1820 阅读 · 0 评论 -
简单实现:猜数字小游戏(rand函数)
#include#include#includevoid menu(){printf ("##########1.paly##########\n");printf ("##########2.exit##########\n"); }void game(){ int input=0; int num=0;num=rand()%100+1;原创 2017-12-18 19:01:15 · 1084 阅读 · 0 评论 -
C语言 总结数组指针相关知识点
C语言 总结数组指针相关知识点结论1:数组在内存中是连续存放的。2:内存中的一个内存单元对应一个地址。3:在32位平台上指针是4个字节,64位平台8个字节。4;数组的数组名其实是数组首元素的地址。数组名代表整个数组的时候只有两种情况:1: sizeof(数组名),这里数组名表示整个数组。2: &数组名,这里数组名表示整个数组。例子:(32位)原创 2018-01-01 21:43:19 · 679 阅读 · 0 评论 -
通过函数:1实现两个数的交换;2判断year是不是润年;3判断一个数是不是素数
使用函数实现两个数的交换。//正确认识形参与实参,形参只是实参的临时拷贝,若形参是指针,//则可以通过形参修改实参地址中内容,但是不能改变实参本事的值#include#includeint change(int *pi,int *pj)//形参是实参的临时拷贝{ int t=0; t= *pj;//通过*引用地址中的数据,进行交换(交换的是指针指向的数据)原创 2017-12-25 15:40:06 · 424 阅读 · 0 评论 -
for与while循环:实现菱形与字符渐变(Sleep函数)
1 #includeint main (){int i=0;int j=0;int k=0;for(i=0;i { for(j=0;j { printf(" "); } for(k=0;k { printf("*"); } printf("\n"); }for(i=0;i { for(j=0;j { pri原创 2017-12-16 17:58:22 · 451 阅读 · 0 评论 -
实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。 (无返回值需要传参)
实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。 #include#includevoid print(int num) //void无返回值()里一定要传参 //int与void区别在于函数是否有返回值 //i原创 2017-12-24 23:40:36 · 1285 阅读 · 0 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯 的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯 的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。 #includeint main(){int a = 0;int b = 0;int c = 0;in原创 2018-01-21 22:44:24 · 462 阅读 · 0 评论 -
创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。
//创建一个数组, //实现函数init()初始化数组、 //实现empty()清空数组、 //实现reverse()函数完成数组元素的逆置。 //要求:自己设计函数的参数,返回值。 #include#includevoid init(int arr[],int sz){int i=0;for(i=0;i{ arr[i]=i; printf(原创 2017-12-29 22:38:20 · 258 阅读 · 0 评论 -
1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回 值value的二进制位模式从左到右翻转后的值。 如: 在32位机器
1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回 值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000原创 2018-01-23 22:03:04 · 292 阅读 · 0 评论 -
杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
杨氏矩阵有一个二维数组.数组的每行从左到右是递增的,每列从上到下是递增的.在这样的数组中查找一个数字是否存在。数组:1 2 3 2 3 4 3 4 5#includevoid find(int arr[3][3],int k,int row,int col){ int x = 0; int y = col-1; while((x=0)) { if(原创 2018-03-12 23:21:45 · 456 阅读 · 0 评论 -
C语言实现strcpy strcat函数
1.实现strcpy 字符串拷贝通俗点就是:strptr(a,b)将b的值给a2.实现strcat 字符串连接连接两个字符串strcpy:把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。strcat先去掉str1的结束符后再把str2接连到str1末尾#include<stdio.h>...原创 2018-03-18 23:40:03 · 755 阅读 · 0 评论 -
一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现
#include#includevoid my_fun(int arr[],int size){int i = 0;int j = 0;int k = 0;for(i=0;i<size;i++){ int count = 0; for(j=0;j<size;j++) { if(arr[i] == arr[j]) { count++; } } i原创 2018-03-22 14:36:39 · 213 阅读 · 0 评论 -
. 查找一个字符串中第一个只出现1(K)次的字符, 找到了返回这个字符,找不到返回-1 adaaabcc
查找一个字符串中第一个只出现1(K)次的字符,找到了返回这个字符,找不到返回-1 字符的大小不会超过256,所以我们先设置一个大小为256的数组 开始进行字符串的遍历,将每一个字符作为数组的下标进行自增,(其实原理就是每一个字符都有自己对应的ASCII码值) 将字符串中每一个字符对应下标位置加一,再次进行字符串的遍历,找出次数是1的字符,此字符就是我们要找的字符 否则就是没找到返回-...原创 2018-03-04 00:05:15 · 1234 阅读 · 0 评论 -
C语言:实现冒泡排序及sizeof计算指针的问题
比较相邻的元素。如果第一个比第二个大,就交换他们两个两种写法思路相同,比较两个元素若是第一个较大,交换两者位置,循环一遍,在比较第二个与第三大小重复操作遇见问题:开始写程序时,并没有将size传进来,而是在函数内部进行计算这就导致了size长度为1,循环无法进去,传数组是使用了指针,可以直接修改实参但是size在计算时所求的是指针的长度,不管有多少元素大小都是4(32位·系统·)导致...原创 2018-03-16 23:13:15 · 398 阅读 · 0 评论 -
【C语言】输入n,打印对应n行的图案(等腰三角形,直角三角形,斜线)
122333444455555#includeint main(){ int i=0; int j=0;for(i=1;i<6;i++){ for(j=0;j<i;j++) { printf("%d",i); }printf("\n");}return 0;} 1 2 3 4 56原创 2018-02-28 23:29:39 · 23520 阅读 · 0 评论 -
【C语言】调整数组使奇数全部都位于偶数前面
//调整数组使奇数全部都位于偶数前面。//题目://输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有//的奇数位于数组//的前半部分,所有偶数位于数组的后半部分。#include#includeint main(){ int arr[] = {1,4,3,4,5,6,7,8,9}; int sz = sizeof(arr)/sizeof(arr[原创 2018-03-07 00:00:23 · 377 阅读 · 0 评论