c练习
mxrrr_sunshine
这个作者很懒,什么都没留下…
展开
-
递归与迭代
递归递归是什么? 简单来说,就是函数自己调自己的一种方法。 通常可以把一个大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解。 递归的两个必要条件:限制条件,必须存在一个递归出口,当满足这个条件时,递归便不再继续。每次递归之后都将问题规模缩小化,并且越来越接近这个限制条件。以下用几个实例来说明: 题目一:接受一个无符号整数,把它转化为字符并打印它。void Print(int原创 2017-12-10 15:40:54 · 485 阅读 · 1 评论 -
c语言指针相关面试题
例1int main(){ int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf("%d %d\n", *(a + 1), *(ptr - 1)); system("pause"); return 0;}程序结果:2 5 分析:数组名在sizeof内部单独出现和&(数组名)这两种原创 2018-01-06 17:09:37 · 1524 阅读 · 0 评论 -
c语言内存管理相关面试题
整理了一些有关内存管理测试题类型一1.#define BUFFER_SIZE 256void GetMemory(char **ppszbuf){ if (NULL == ppszbuf) { assert(0); return 0; } ppszbuf = (char *)malloc(BUFFER_SIZE); //*原创 2018-01-17 12:06:12 · 2171 阅读 · 1 评论 -
数据存储相关练习
题目1 char a = -1; signed char b = -1; unsigned char c = -1; printf("a=%d b=%d c=%d\n", a, b, c); 解析:a是char型,默认有符号char,所以存储时八个比特位全1,读取时要进行整形提升,因为是有符号数,所以补符号位1,即32个1。因为是有符号数,存储为补码,读取时要转换为原创 2018-01-25 23:46:41 · 172 阅读 · 0 评论 -
模拟实现Linux命令-wc
模拟实现linux下一个小命令:wc #include <stdio.h>#include <stdlib.h>#include <ctype.h>int main(int argc,char *argv[]){ int c=0; int l=0; int w=0; int len=0; int i=0; int status=0; i原创 2018-02-27 17:18:13 · 3826 阅读 · 0 评论 -
模拟实现Linux下命令-ls
首先我们对Linux下ls命令已经非常熟悉了,我在这里用C语言仅实现ls -l及ls -l xxx。(仅作练习使用)首先需要了解ls -l命令都做了那些活动,那么就需要研究以下: 我们可以看到有七列主要内容,先来逐个分析:文件的类型,此图里所有文件均为目录,所以是d。权限=本用户权限+本组用户权限+其他用户权限硬链接数文件所输用户名 文件所输用户组名文件大小时间(这个时间是该文件最后一次原创 2018-03-08 15:28:22 · 546 阅读 · 0 评论 -
模拟实现Linux下cp命令
首先要了解cp命令,可以通过man手册进行查看。 接下来分析以下可能出现的几种情况: 以下是代码:#include <stdio.h>#include <unistd.h>#include <sys/stat.h>#include <stdlib.h>#include <string.h>#include <dirent.h>void cp_dir(const char *src原创 2018-03-08 15:47:16 · 2141 阅读 · 0 评论 -
判断回文数与回文字符串
判断回文数判断一个数是否为回文数。 回文数:回文数也是一个数字,数字的特点是正反序是同一个数字,如:12321,3443思路:给一个数字,求出它的反序数字,与本身进行比较,相同即是回文数。 代码:int Palindrome(int num){ int tmp=num; int ret=0; if(num < 1) return -1; else原创 2018-03-09 14:11:05 · 241 阅读 · 0 评论 -
冒泡排序字符串
用冒泡排序可以排序任意数据类型,这次用冒泡排序排序字符串。 思路与一般的冒泡排序思路是大致相同的。 注意的点: 第一:比较字符串大小时不能用<>=,应该用strcmp函数比较 第二:交换字符串,应该先创建一个足够大的临时空间,使用strcpy函数进行拷贝达到交换的目的。 第三:我考虑将多个字符串放入二维数组中。代码:#include <stdio.h>#include <string.h原创 2018-03-09 15:07:38 · 977 阅读 · 0 评论 -
模拟实现strcpy,strcmp,strcat函数
模拟实现strcpy(strcpy)#include <stdio.h>#include <windows.h>#include <assert.h>char *my_strcpy(char *dst, const char* src){ assert(dst); assert(src); char *ret = dst; while (*dst++ = *原创 2018-03-02 17:42:35 · 188 阅读 · 0 评论 -
模拟实现memcpy,memcpy,memmove函数
模拟实现memcpy:#include <stdio.h>#include <windows.h>#include <assert.h>void *my_memcpy(void *dst, void* src, int size_t){ assert(dst); assert(src); char *ret = dst; char *p = (char *)d原创 2018-03-02 17:53:28 · 135 阅读 · 0 评论 -
内存对齐相关面试题
题目一#pragma pack (4) unsigned short* pucchararray[10][10];typedef union unRec{ unsigned long L1; unsigned short S2[7]; unsigned char C3;}REC_S;REC_S stmax, *pstmax;int main(){ prin原创 2018-01-14 20:21:42 · 628 阅读 · 1 评论 -
c语言左旋字符串中的k个字符
实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB由上面的例子我们可以明白旋转的含义,所以下面直接给出三种接法。方法一: 可以使用循环移位法,比如说字符串ABCD,左旋一次,得到BCDA。 可以先将A取出放在一个临时变量中,然后将后面的字符依次前移一位。此时最后一位就空出来了, 再将第一次放入临时变量中的A放入最后一位。左旋几个字符原创 2017-12-17 15:33:46 · 277 阅读 · 0 评论 -
c语言:99乘法表+输出素数
c语言输出99乘法表:#include int main(){ int i,j,k; k=i*j; for(i=1;i for(j=1;j printf("%d*%d=%-3d\t",j,i,k); //为什么是%-3d? } printf("\n"); }}输出100—200之间的素数:#include in原创 2017-11-01 20:12:38 · 491 阅读 · 0 评论 -
c编程之求出水仙花数
水仙花数求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。 这道题出现在谭浩强c程序设计中,算是c语言基础中比较经典的一道题,算法并不复杂。 /* 在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong nu原创 2017-12-12 16:10:59 · 797 阅读 · 0 评论 -
c编程之逆转比特位
编写一个函数,unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000原创 2017-12-12 23:44:43 · 671 阅读 · 0 评论 -
多种方法求平均数
求两个数的平均数最常用的方法就是(a+b)/2,不过这种方法很容易溢出,原因是由于整形数据存储中,以补码形式存储,整型的取值范围为:unsigned int :0~2^32-1signed int : -2^31~2^31-1所以当两个很大的数相加时就会溢出。提出第二种方法: printf("avg = %d\n", x+(y-x)/2);//分不同的部分怎么理解呢?其实很简单,比如原创 2017-12-13 18:34:03 · 1679 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student“ 分析: 思路是这样的,可以先将每个单词逆置,以空格为分界。 再将整个字符串全部逆置。 这里使用数组和指针两种操作,指针更为方便一些。程序1:void Reverse_string(char *s,int left,int right){ while (left < rig原创 2017-12-13 21:03:36 · 424 阅读 · 0 评论 -
c编程之乘法表+素数+闰年
乘法表 不局限于99乘法表,而是由我们自定义输入一个行数,输出对应的乘法表,原理与99乘法表相同。int Multip_table(int i,int j){ int k = 0; k = i*j; return k;}int main(){ int i = 0, j = 0; int n = 0; int ret = 0;原创 2017-11-19 22:38:43 · 228 阅读 · 0 评论 -
求二进制序列中1的个数及奇偶序列+输出整数的每一位+两个数中多少个bit位不同
题目一:求一个整数的二进制序列中1的个数 分析:首先,我们知道数在内存中是以补码得形式储存的,而正数的原码补码反码都相同。 做法一:int main(){ int count = 0; int num = 0; printf("输入一个数:"); scanf("%d", &num); while (num) { if (num %原创 2017-11-18 15:37:02 · 354 阅读 · 0 评论 -
c语言:用switch模拟售货机
用switch模拟实现售货机: 代码如下:#define _CRT_SECURE_NO_WARNINGS 1int main(){ int b = 0; char good[10][10] = {"巧克力","奶油蛋糕","香葱饼干","雪碧 ","可乐"}; float price[] = { 5, 2.5, 4.5, 3, 3 }; printf("*****原创 2017-11-11 14:39:48 · 1786 阅读 · 1 评论 -
c语言:多种方法实现两个数的交换
交换两个数的内容是c语言中常见的问题,所以在此总结一下我所学到的几种方法。 首先,举一个例子,假设a=10,b=20. 第一种方法,借助一个临时变量来进行保存,这是最容易也是最直观的方法。 代码如下:int a, b, t; a = 10; b = 20; printf("a=%d b=%d", a, b); t = a; a = b; b =原创 2017-11-11 14:09:17 · 6099 阅读 · 0 评论 -
c语言:解一元二次方程及浮点数的比较
首先,需要确定分支结构,用if else语句结构。 判断a=0?————————yes:输出不是一元二次方程。 no | 判断b^2-4ac=0?——————yes:输出只有一个根,并计算。 no | 判断b^2-4ac>0?———————yes:输出有两个根,并计算。 no | 输出无解用i原创 2017-11-05 21:25:57 · 644 阅读 · 0 评论 -
c语言-模拟实现atoi
这是一道被我遗漏了好久的一道题,最近被考到了,才发现好像被自己遗漏了,再次记录一下,就算查漏补缺吧。atoiatoi函数功能:用来将一个字符串转换为整形。 该函数会从第一个字符开始跳过前面的空格,直到遇到正负号才开始转换,遇到非数字或‘\0’结束转换。如果不能转换或是空字符串就返回0。首先我们先考虑需要用到的测试用例: 比如 正负数:“+1234”“-1234” 非数字:“abcd” 数字原创 2018-04-06 15:18:28 · 196 阅读 · 0 评论