![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言学习
A_stupid_dog
这个作者很懒,什么都没留下…
展开
-
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
只要用一个for循环即可达到目的#includeint main(){ int i,j,a,Sn = 0; scanf("%d", &a); j = a; for (i = 1; i <= 5; i++) { Sn = Sn + a; a = j + 10 * a; } printf("Sn=%d\n", Sn); return 0;}可以进一步优化为求前n项之原创 2016-06-23 16:16:56 · 1486 阅读 · 0 评论 -
2015-12-18 学习心得
今天学习了c语言的一些库函数用法。 比如:strcpy(),strlen(),strchr(),strcmp(),strcat(),strstr()。 下面是我写的一些代码和结果。1.strlen#include#includeint main(){ char a[10] = "12345"; printf("%d\n", strlen(a)); system("pause");原创 2016-06-23 16:17:55 · 222 阅读 · 0 评论 -
12-20学习记录
今天练习了一些新代码包括 一.编写一个函数,它从一个字符串中提取一个子字符串。#include#include#include#includeint substr(char dst[], char src[], int start, int len){ assert(dst); assert(src); int i = 0; for (i = 0; i < len; i++)原创 2016-06-23 16:17:57 · 227 阅读 · 0 评论 -
12-21学习记录 初识Linux
今天初步学习了Linux的简单操作,简单的命令。比如ls,cp,mv,pwd,cd等等。 ls命令是list的缩写,可以根据不同的选项,列举指定目录或文件的相关信息。它也是最基础的命令之一。 cd命令是最基础的命令,用于目录间的切换。比如:cd code,cd ..。 mv命令是move的缩写,可以用来移动文件或者将文件改名。 cp命令是capy的缩写,用于复制文件或目录。 pwd命令用来查看”当原创 2016-06-23 16:18:00 · 249 阅读 · 0 评论 -
最近的一个多星期
最近的一个星期,其他的事情很多,恰逢考试周,本人身体也出现了一些问题,所以博客没有更新。 虽然博客没有更新,但是我学习c语言的脚步并没有停下来。今天时间总算空出来了,所以来做一个总结。 我学习了指针的用法,指针和数组的区别,还有其他数据类型,比如结构体、共同体等,浮点数在内存中的储存形式。 还有就是我写的几个代码。 1.编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(b原创 2016-06-23 16:18:03 · 231 阅读 · 0 评论 -
新年第一段代码
#include#include#includeint getline(char line[],int limits){ int i = 0; int ch = 0; while ((limits > 1) && (((ch = getchar()) != EOF) && (ch != '\n'))) { line[i++] = ch; limits--; } if原创 2016-06-23 16:18:06 · 1941 阅读 · 0 评论 -
左旋字符串
#include#includevoid reverse(char *left, char *right){ while (right > left) { char tmp = *right; *right = *left; *left = tmp; right--; left++; }}void left(char src[], int len){ i原创 2016-06-23 16:18:09 · 244 阅读 · 0 评论 -
用递归和非递归的方法求解n的k次方
递归的方法#includeint my_power(int n,int k){ if (k-- > 1) n*=my_power(n, k); return n;}int main(){ int n = 0, k = 0, ret = 0; scanf("%d%d", &n, &k); ret = my_power(n, k); printf("%d^%d=%d\n原创 2016-06-23 16:18:12 · 637 阅读 · 0 评论 -
编写一个函数(递归实现) 实现:将参数字符串中的字符反向排列。
#include#includevoid reverse_string(char * start,char * end){ assert(start); assert(end); char tmp; if (start < end) { tmp = *start; *start = *end; *end = tmp; reverse_string(++start,原创 2016-06-23 16:18:15 · 415 阅读 · 0 评论 -
再次编写折半查找程序
看了看以前写的程序,觉得应该再写一次。#include#includechar* find(char *left, char *right,int len){ char k; char *mid= left + len / 2; printf("k="); scanf("%c", &k); while ((*mid != *left) && (*mid!=*right)) {原创 2016-06-23 16:18:17 · 356 阅读 · 0 评论 -
C语言中memset函数详解
功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 用 法: void *memset(void *s, char ch, unsigned n); 程序例: #include #include #include int main(void) { char buffer[]转载 2016-06-23 16:18:21 · 218 阅读 · 0 评论 -
用c语言指针实现给整形数组冒泡排序
#includevoid reverse(const int *start,const int *end){ int *tstart = start; while (start != end) { int *left = tstart; while (left != end) { if (*left > *(left + 1)) { *left = *l原创 2016-06-23 16:18:23 · 1748 阅读 · 0 评论 -
字符串的输出
说到输出首先就想到了printf函数,例如: char *p="123456789"; printf("123456789"); printf("%s","123456789"); printf(p);那有没有其他方法呢,我查阅了一些资料。比如用fputs函数fputs(p,stdout);这样也可以在屏幕上打印出123456789用puts函数puts(p);可以打印出123456789并且原创 2016-06-23 16:18:27 · 421 阅读 · 0 评论 -
一大波库函数的模拟实现
#include#include//指针streln//int my_strlen(const char *src)//{// int count = 0;// while (*src++)// count++;// return count;//}//数组strlen//int my_strlen(const char src[])//{// int count原创 2016-06-23 16:18:30 · 279 阅读 · 0 评论 -
冒泡排序多个字符串
#include#includevoid str_bobble_sort(char *a[],int count){ int i = 0, j =0 ; for (i = 0; i < count - 1; i++) { for (j = 0; j < count - 1 - i; j++) { if (strcmp(a[j],a[j+1])>0) { c原创 2016-06-23 16:18:32 · 310 阅读 · 0 评论 -
模拟实现atoi函数
atoi函数就是把一串字符串转换为int型整数的函数,通过将字符串中的字符一个一个强制类型转换,并且存入一个临时数组中,再将数组中的数字处理一下即可得到我们需要的整数。实现这个函数的过程中,我们需要注意负数的处理,要进行一次判断,确定返回值的正负。其他的字符按照ASCII码表进行转换即可。下面是代码:#include#includeint my_atoi(char a[],int sz){原创 2016-06-23 16:18:35 · 403 阅读 · 0 评论 -
对整形数组进行快速排序
快速排序就是首先找到一个基准点,之后把比它小的都放到左边(升序排序),把比它大的都放到右边去,然后把基准点归位到中间处,最后对数组中的前后两部分进行同样的步骤就可以完成快速排序。程序中用递归的方式来完成。下面是代码#includevoid quicksort(int src[], int left, int right){ if (left >= right) return; in原创 2016-06-23 16:18:38 · 1421 阅读 · 0 评论 -
关于if语句中的小细节
if语句都会用,但是有一些小细节并不容易被发现。比如我们不应该写这样的代码:if(flag==0)flag为布尔变量,布尔变量的值为真或假,用0表示假,真是多少是不一样的。所以我们应该避免将布尔变量与0或1这样的整型值进行比较。那么我们也不应该写这样的代码:if(i)i为一个整型变量,但是写成上面那样就会被人误以为是布尔值,良好的编程习惯是这样的:if(i==0)或if(i!=0)还有重要的一点是原创 2016-06-23 16:18:41 · 432 阅读 · 0 评论 -
12-17 学习记录
今天复习了一个代码,编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使这个程序能够处理的输入行的长度没有限制。 这个代码之前写过,可是今天再次编写的时候还是遇到了一些困难。我发现自己对于while语句的使用理解还是不够深刻。putchar的位置搞了半天。 代码如下:#includeint main(){ int line =原创 2016-06-23 16:17:52 · 221 阅读 · 0 评论 -
2015-12-16 一些学习感想
今天复习了之前写过的一些代码,发现许多知识以及淡忘了,看来以后不仅要向后看也要向前看。 比如,我复习求ax^2+bx+c=0二元一次方程的根,我编写代码的时候定义a,b,c三个局部变量定义成了整形,这根本就是错的。我还复习到float型变量跟零进行比较的时候需要与一个特别小的数代替零。比如0.0000000001比如1e-6,我就想是为什么,我查阅了资料,发现是因为实数在计算和存储过程中会有一些原创 2016-06-23 16:17:49 · 276 阅读 · 0 评论 -
求n!
开始最先想到#includeint main(){ int n=0; int i = 1; int nj=1; printf("输入n="); scanf("%d", &n); if (n == 0) { printf("n!=0\n"); } if (n != 0) { for (i = 1; i { nj = i*nj; } printf("n!=%d\n", nj); } s原创 2016-06-23 16:16:59 · 276 阅读 · 0 评论 -
从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。
编写这个程序的时候一开始没有思路 后面参考了网上的一些方法 熟悉了getchar的使用方法#includeint main(){int ch;int i = 1, j = 1;printf("请输入:\n");while ((ch = getchar()) != EOF){if (j == 1){printf("%d.", i);i++;j++;}if (ch == '\n')j = 1;putc原创 2016-06-23 16:17:02 · 293 阅读 · 0 评论 -
求一个数的二进制数中的1的个数
#includeint main(){ int num = -1, count = 0; while (num) { count++; num = num&(num - 1); } printf("%d\n", count); system("pause"); return 0;}用函数编写#includeint count_one_bit(num){ int count = 0; w原创 2016-06-23 16:17:05 · 302 阅读 · 0 评论 -
查找一串字符中有没有我想查找的字符
#includeint is_in(char *s, char c){ while (*s!='\0') { if (*s == c) { return 1; } else { s++; } return 0; }}int main(){ char *p = "abcdefg"; char s = 'w'; int ret = is_in(p,s); if (ret == 1原创 2016-06-23 16:17:08 · 320 阅读 · 0 评论 -
交换两个数的值以及不使用临时变量交换两个数的值
使用临时变量非常简单#includeint main(){ int a = 1, b = 2, c = 0; printf("a="); scanf("%d", &a); printf("b="); scanf("%d", &b); c = a; a = b; b = c; printf("a=%d,b=%d\n", a, b); system("pause"); return 0;}这时候我考虑原创 2016-06-23 16:17:11 · 320 阅读 · 0 评论 -
不使用临时变量 依次交换两个已知数组的值
刚开始编写中间使用了一个临时数组!!浪费空间!后面优化到只使用一个临时变量!最后到不使用临时变量!#includeint main(){ int arr1[] = { 1, 2, 3 }; int arr2[] = { 4, 5, 6 }; int i = 0; int sz = sizeof arr1 / sizeof arr1[0]; for (i = 0; i { arr1[i] = a原创 2016-06-23 16:17:14 · 386 阅读 · 0 评论 -
获取一个数二进制序列中所有的偶数位和奇数位
代码如下:650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/77/98/wKiom1ZqK6ORIu5HAAAfXgBgMTI519.png" title="QQ图片20151211094859.png" alt="wKiom1ZqK6ORIu5HAAAfXgBgMTI519.png" />原创 2016-06-23 16:17:17 · 367 阅读 · 0 评论 -
求二元一次方程ax^2+bx+c=0的根
刚开始写的程序里还定义了x1,x2两个变量 后面发现根本不需要这两个变量代码如下:650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/77/9E/wKiom1ZqRu7B_ugkAAA2lpkNrJI794.png" title="QQ图片20151211114458.png" alt="wKiom1ZqRu7B_ugkAAA2lpk原创 2016-06-23 16:17:20 · 1223 阅读 · 0 评论 -
傻瓜计算器
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/77/A6/wKioL1Zqj-qgRCoTAAAgdInoEyw460.png" title="QQ图片20151211165731.png" alt="wKioL1Zqj-qgRCoTAAAgdInoEyw460.png" />650) this.width=650;" src=原创 2016-06-23 16:17:23 · 591 阅读 · 0 评论 -
一直接受键盘字符 接收小写字符出输出大写 接受大写输出小写 数字不输出
#includeint main(){ int ch = ' '; while ((ch = getchar()) != EOF) { if (ch >= 'a' && ch <= 'z') { putchar(ch - 32); } else if (ch >='A' && ch <= 'Z') { putchar(ch + 32); } els原创 2016-06-23 16:17:26 · 291 阅读 · 0 评论 -
编写程序输出杨辉三角
#includeint main(){ int i,j; int a[100][100]; int row; printf("row="); scanf("%d",&row); for(i=1;i<=100;i++) { a[i][0]=1; a[i][i]=1; } for(i=2;i<=100;i++) {原创 2016-06-23 16:17:29 · 2120 阅读 · 0 评论 -
让我想输出的字符串 从两端向中间汇聚
#include#includeint main(){ char ch[] = " "; char a[] = "1234567890"; int i = 0, j = 9; while (i <= j) { ch[i] = a[i]; ch[j] = a[j]; printf("%s\n", ch); Sleep(2000); i++;原创 2016-06-23 16:17:32 · 242 阅读 · 0 评论 -
简单的密码登陆
#includeint main(){ char *mima = "123"; char ch[10] ; int i = 0; printf("请输入密码"); for (i = 1; i < 4; i++) { scanf("%s", ch); printf("还有%d次输入机会\n", 3 - i); if (*mima == *ch) { printf原创 2016-06-23 16:17:34 · 542 阅读 · 0 评论 -
简单的三子棋游戏
简单的三子棋游戏,我能力有限把电脑玩家的走子写的比较简单。#includevoid qipan(){ printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n"); printf("_ _|_ _|_ _\n");}void player_and_pcdo(){ int i = 0, j = 0; static char a[3][3] = { ' ', ' '原创 2016-06-23 16:17:37 · 391 阅读 · 0 评论 -
求1!+2!+·····10!
#includeint main(){ int i = 0, sum = 0, n = 1,tmp=1; for (n = 1; n { tmp = 1; for (i = 1; i { tmp *= i; } sum += tmp; } printf("%d\n", sum); system("pause"); return 0;}这个代码很罗嗦 非常不好可以优化为#incl原创 2016-06-23 16:17:40 · 408 阅读 · 0 评论 -
输出一个整数的每一位
#includeint main(){ int i = 0,n = 0; printf("请输入数字:"); scanf("%d", &i); while (i) { n = i % 10; i = i / 10; printf("%d ", n); } system("pause"); return 0;}原创 2016-06-23 16:17:43 · 375 阅读 · 0 评论 -
简单的猜数游戏
#include#includeint main(){ int k = 0; int count = 0; srand((unsigned)time(NULL)); int a = rand() % 100; int i = rand() % 100; for (k = 0; k<2; ) { count++; int j = 0; printf("请输入一个0~9原创 2016-06-23 16:17:46 · 296 阅读 · 0 评论 -
单链表的学习
链表是一种很重要的数据结构,它由两部分组成,第一个部分是我们要储存的数据,第二个部分是指向下一个储存单元的指针。链表在使用中有顺序表无法比拟的灵活性,免去了储存空间不够,又有可能浪费的尴尬。单链表有一个头指针pHead,当我们没有数据要储存的时候它指向NULL,当我们有数据的时候它指向第一块储存单元。储存单元里面有两个部分,前面的部分是我们要储存的数据data,后面的部分是指向下一个储存单元的指针原创 2016-06-23 16:18:46 · 322 阅读 · 0 评论