C语言学习
垆边人似月
人生道路上
感谢每一个走了的人
期待每一个到来的人
珍惜每一个身边的人
展开
-
用c语言实现1+2+3+...+n求和
在做蓝桥杯题的时候,做到最简单的等差数列求和,我就先用for循环写了一个程序,其中的核心就是很简单的:sum += i;具体的函数如下:#include int main(){ int n; int i; int sum = 0; printf ("输入一个整数 n = "); scanf ("%d",&n); for (i = 1; i <= n; i++)原创 2017-02-15 22:56:56 · 65768 阅读 · 3 评论 -
寻找符合条件的四位数
编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12。 这是一个四位数,且是完全平方数,首先可以计算出最小和最大的完全平方的四位数,分别是32的平方为1024,99的平方为9801.另外第一,三位和为10,就是千位和十位利用和10相除,取余等一系列算法可以完成,而最后一个条件和前一个是类似的,可以仿照着来。源程序如下:#in原创 2016-11-29 22:34:15 · 1378 阅读 · 0 评论 -
如何计算一个数n从0到n中0到9出现的次数
之前学循环时,曾经做过只要计算9出现次数的题,对于一个数n,要算出它9出现的次数,因为不知道是几位,就要从个位到十位,百位....依次计算,n就需要对10取余得到个位数与9比较,然后n除以10就是向左移一位,再对10取余就可以得出十位再与9比较,依次循环。而要得到0到n的所有数中9出现的次数,就还需要一重循环。程序如下:#include int main(){ int num;原创 2016-11-27 22:20:56 · 2200 阅读 · 2 评论 -
关于简单排序
刚学了简单的排序法,就是冒泡排序法和简单选择排序法。它们的区别就在前者取一个最大值,后者要取一个最小值。 冒泡排序法的思想是就是比较第一个数和第二个数,如果第一个大于第二大就交换,直到最后两个数比较,完成一轮排序,将最大的数至于最后一位;然后下面每一轮循环都把找到的最大的由最后一位往前来一位,最后实现从小到大的排序。 而选择排序就是找出所有数中最小的,将其与第一原创 2016-11-25 22:49:42 · 212 阅读 · 0 评论 -
如何找到素数?
刚开始学C语言时,曾经遇到过要求素数的题,当时有源程序,可我怎么都看不懂,我一度把这道题列为最难题之一,是因为我弄不懂它的思想。素数是什么呢?素数其实就是除了它本身和1,不能被其他数整除。假设有一个数i,只要i不被从2到(i-1)的数整除,也就是取余为0时,它就不是素数。那么,我们可以定义一个标志位flag,令其为1时为素数,flag=0时自然就不是素数,这里可以想到做个for循环,取余为0时就跳原创 2016-11-24 21:43:23 · 1102 阅读 · 0 评论 -
如何快速找出一个数组中最大数和第二大数
看到一道题是:快速找出一个数组中最大数和第二大数。 我之前学了一些数组排序,例如冒泡排序,简单选择排序等等,然后我就想可不可以利用冒泡排序来实现呢?之前写过冒泡排序实现从小到大的排列,那么可以改成从大到小,然后输出第一个和第二个数就是最大和第二大的数。具体的源程序如下:#include#define N 5int main(){ int a[N]; int i原创 2016-11-23 22:29:54 · 5236 阅读 · 0 评论 -
段错误
我今天在编程时,编译没有问题,但每次都会出现一个词叫“段错误”。 “段错误”,一句话说就是指访问的内存超过了系统给这个程序设定的内存。 之前也出现过"段错误",但那时是因为scanf()中要输入一个值,但没有取地址。但还有什么其他原因呢?我总结了下: 1.访问不存在的内存地址 2.访问系统保护的内存地址 3.访问只读的内存 4原创 2016-11-22 13:31:21 · 222 阅读 · 0 评论 -
字符串数组的注意点
昨天做到一道题是对字符串数组进行冒泡排序,因为之前做过对整型量进行冒泡排序,基本的格式已经掌握了。那么,对于字符串呢?是不是只要将整型int变为字符型char就好呢?我编写了一个程序试了下,发现是可以运行出的! 这与我一开始设想是一致的,但在之前我还在想是不是要对字符进行比较,这就使我进入了一个误区,我想用比较函数strcmp(),但我查阅资料发现这个函数适用于两个字符串之间比较起始字原创 2016-11-22 13:12:52 · 276 阅读 · 0 评论 -
指针是什么
C语言中有一个很有用,但通常很很让人困扰的东西就是指针。我记得我第一次接触的时候,我就搞不清它的用法,一般用p(point)来表示,它的用法前面有一个*,若是*p表示什么呢?还有&a又有什么用法呢? 经过后期再次的学习,我自己查阅资料,我总结出p 表示地址,而*表示一个万能钥匙,对p取它的地址,就可以访问到这个地址中值。笼统的来说,*p就是表示一个值。此外,&a就是取a的地址,是一个地原创 2016-11-20 23:35:44 · 329 阅读 · 0 评论 -
谁是凶手?
我看了一些循环结构,像if,while之类的,让我觉得一般的一重循环是挺简单的,但一旦涉及到二三重的循环嵌套就很让我头疼了。作为一个女生,逻辑关系一般都或多或少的有所欠缺,可即便是这样,循环结构却是C语言程序中很基础重要的一环,我只有多做一些来弥补自身的缺陷。 我看到一个很有趣的题,试问谁是凶手,现有A,B,C,D四个嫌疑人,A说:不是我;B说:是C;C说:是D;D说:C在胡说。其中有一个说原创 2016-11-19 23:35:41 · 595 阅读 · 0 评论 -
在虚拟机下输
前几天遇到的一个问题就是在虚拟机下我想要给程序注释,可我怎么调我的输入法都没有用,可我必须得注释啊!这怎么办呢? 之前我将在windows环境下的复制粘贴到虚拟机环境下,发现是可以显示中文字体啊!就在昨天同学来我宿舍玩,我问了她这件事,她说她有同学也有这种情况,然后我打开虚拟机让她来给我操作下。 她只是连续在键盘上按了很多次shift+ctrl键(同时按下),之原创 2016-11-18 17:08:05 · 226 阅读 · 0 评论 -
对sheii脚本的认识
之前从来没有接触过shell脚本,今天又复习了一下。在这里总结一下我所掌握的知识。 Shell是可以读取这个文件并执行其中的命令。这样的文件被称为脚本文件。 开头是#!/bin/bash ,可以指出shell的类型。 运行时是chmod +x filename.sh,enter键,./filename.sh,再enter键即可。其中echo命令用于在屏幕上显示消息,原创 2016-11-17 21:13:36 · 373 阅读 · 0 评论 -
关于取消高亮的方法
当我在写程序时,发现我的代码中出现高亮的现在,而这是我所不需要的,所以我就想取消掉,可怎么取消呢?经过查阅资料,我发现了:在vi下,输入set nohlsearch即可;而若想显示高亮,只需输入set hlsearch,大家可以试试哦!原创 2016-11-16 22:40:33 · 2879 阅读 · 0 评论 -
如何在虚拟机中设置行号
今天在运行程序时有报错的地方,每次找错在哪一行都非常麻烦,为了简单一点,我决定去设定行号,可怎么设呢?我记得老师讲过有一种设置方法,可却是临时的方法,我上网上搜了一下,发现了一种有效的方法,与大家分享! vim /etc/vimrc,进入vi中,在最底下写set nu,然后按esc键,:x,再次进入vi中时就有行号了!原创 2016-11-15 23:21:19 · 4534 阅读 · 0 评论 -
关于linux中的中文输入
今天我敲了些C语言程序,发现了一个很严重的问题,在虚拟机下我无法输入中文,我查了很多资料,可却都没有成效,这个问题让我在程序中无法注释,今天解决不了了,明天再请教别人,一定要争取解决!原创 2016-11-14 23:03:49 · 407 阅读 · 0 评论 -
交换两个数
C语言中有道非常简单的题就是交换a和b的值,只需要定义一个临时变量temp即可,源程序如下:#includeint main(){ int a = 1; int b = 2; int temp; printf ("a = %d\nb = %d\n",a,b); temp = a; a = b; b = temp; printf原创 2016-11-28 21:06:55 · 151 阅读 · 0 评论 -
拼接两个字符串
众所周知,将两个字符串拼接起来可以使用strcat函数,但这必须使用头文件#include。如果不用这个函数也是可以用while循环来实现的,首先要知道的是字符串以'\0'结束,具体程序如下:#includeint main(){ char str1[20]; char str2[20]; int i = 0; int j = 0; printf ("原创 2016-11-30 18:20:12 · 1361 阅读 · 2 评论 -
读取一个5*5数组,然后显示每行的和与每列的和
要读取一个5*5的二维数组,首先应该定义一个二维数组并要将之初始化赋值。因为需要读取这一数组,就需要利用一个二重循环。将行号确定,列号改变,在遍历列号时再其后加上换行,之后就可以在终端打印出数组了。 要求显示每行每列的和,就要定义两个整型的变量来存放和的值,就还需要两个二重循环。若是用i表示行,j表示列,那么算每行的和就是在循环中保证i不变时,j变化;而算每列的和是保证j不变,i变化。原创 2016-12-18 21:35:02 · 5052 阅读 · 1 评论 -
手动创建两个文本文件text1.txt和text2.txt,按要求创建text3.txt
实现在text1.txt和text2.txt文件中除去首行和末尾对应的数据,要求三个文本内容如下: text1 text2 text3 begin begin begin原创 2016-12-12 10:56:57 · 1973 阅读 · 0 评论 -
实现字符串的复制功能
之前写过用for循环来来实现字符串strcpy函数的功能,今天我又学会了一个用指针作为函数的返回值将字符串2复制给字符串1,通过调用函数来实现功能。程序如下:#includechar *strcpy (char *str1,char *str2){ int i; for (i = 0; str2[i] != '\0'; i++) { str1[i]原创 2016-12-10 21:24:30 · 1869 阅读 · 0 评论 -
创建单链表并赋值,要求遍历能输出1~9
用表头创建单链表,用头插法创建链表,遍历的结果是9 8 7 6 5 4 3 2 1 具体的源程序如下:#include #include #define OK 0#define ERROR -1#define MALLOC_ERROR -2 typedef int ElementType;typedef struct node{原创 2016-12-09 21:04:18 · 10347 阅读 · 1 评论 -
打印菱形星号组合
* * * * * * * * * * * * 要打印出如上图所示的菱形,我曾想了一个非常没有技术含量的程序,就是先列举出来,再用puts()打印,程序如下:#include int main(){ int i; char lx[8][8] = {{' ',' ',' ','*',' ',' ',' '},原创 2016-12-08 19:15:29 · 587 阅读 · 0 评论 -
蓝桥杯之取球问题
今盒子里有n个小球,A、B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下多少个,并且两人都很聪明,不会做出错误的判断。 我们约定: 每个人从盒子中取出的球的数目必须是:1,3,7或者8个。 轮到某一方取球时不能弃权! A先取球,然后双方交替取球,直到取完。 被迫拿到最后一个球的一方为负方(输方)原创 2016-12-16 17:03:13 · 500 阅读 · 0 评论 -
输入n个整数,输出其中最小的k个。
做这道题要借助冒泡排序,将这n个数放在一个定义的数组中,对其进行排序就可以输出前k个较小的数。由于一个数组的大小已经提前定义好了,就还需定义一个int型变量m,将n赋值给m,当m大于0时,用m自减1就可以得到这n个数。源程序如下:#include int main(){ int n; int k; printf ("Please input the values of n and k:原创 2016-12-14 19:31:33 · 1468 阅读 · 0 评论 -
将字符串逆序
如何将I am a student逆序成student a am I? 字符串逆序首先考虑要用到指针指向字符串的开头,然后还需要一个指针来遍历字符,将这一指针走到'\0',然后再往回走一个字符到达这个字符串的最后一个字符,指向开头的指针往后走,指向末尾的指针往前走,分别交换这两个指针指向的值,直到开头指针大于末尾指针,这就实现了将字符串倒置为“tneduts a ma I”,这是第一步原创 2016-12-12 22:43:41 · 539 阅读 · 0 评论 -
将十进制数转化成八进制数
遇到一道将十进制转化成八进制数的C语言题,并且不能用%o,这就需要明白如何将十进制转化成八进制。 一般的算法是将这个数对8取余,再保存下来,然后让这数除以8(也就是左移,从个位移动到十位)之后再取余,每次取余得到的结果都保留下来放到一个数组中。但是由于一开始保留下的值是作为低位,而放在数组中是从a[0]开始,所以要逆序输出,最后就可以得到八进制数了! 而对于十进制转化成R进制的原创 2016-12-07 14:18:28 · 7495 阅读 · 1 评论 -
用C语言 实现strcmp(),strncmp()相同功能的myStrcmp()函数和myStrncmp()函数
strcmp()函数是比较两个字符串是否相等,相等时返回值0,若不相等时,比较第一个不相等的字符,返回值是字符串1减去字符串2的ASC||码值,可以用C语言来实现。同样的,strncmp()函数是比较前n个字符的字符串是否相等,只要在while()循环中加入n--即可。我将这两个函数写入到了同一个程序中。#include int strcmp (const char *str1,const c原创 2016-12-06 22:06:12 · 5999 阅读 · 1 评论 -
打印九九乘法表
九九乘法表 要编写如图所示的九九乘法表,需要用到二重循环,定义两个参数i和j,第一重从1遍历到9,第二重从1遍历到i,但要达到如图格式在外层循环执行后要换行,具体程序如下:#include int main(){ int i = 0; int j = 0; for (i = 1; i <= 9; i++) { for (j原创 2016-12-05 22:42:33 · 993 阅读 · 0 评论 -
累加单向链表结点数据域中的数据
一个单向链表的结点包括数据域与指针域,对其数据域中的数据进行操作,需要用到结构体struct. 现有一道题是将a,b,c三个结点链成一个单向链表,并给各个结点的数据域赋值累加单向链表结点数据域中的数据作为函数值返回。源程序:#include typedef int Elementtype;typedef struct list{ Elementtype data原创 2016-12-04 18:59:08 · 1137 阅读 · 0 评论 -
判断一个字符串是不是回文?
用指针的方法可以判断字符串是否是回文(如“abccba”,“123321”是回文),可以函数调用来实现。定义两个指针p1和p2,p1记录字符串第1个字符的地址,p2记录字符串最后1个字符的地址。具体的源程序如下:#include #include int hw (char s[10]){ char *p1; char *p2; p1 = s; p2 =原创 2016-12-03 21:32:38 · 948 阅读 · 0 评论 -
将字符串1复制给字符串2
不用字符串复制函数也可以实现将字符串1复制给字符串2,其实就是将字符串1盖住字符串2,最后,串1和串2都输出串1的字符就可以了。/* 将字符串1复制给字符串2 */#includeint main(){ char str1[20]; char str2[20]; int i = 0; scanf ("%s",str1); scanf ("%s",st原创 2016-12-02 20:21:43 · 2962 阅读 · 0 评论 -
计算字符串长度
计算字符串长度可以用字符串strlen函数,当然也可以用循环实现,这个很简单,只要考虑到字符串以'\0'结束就可以。源程序:#includeint main(){ char str[20]; int i = 0; printf ("输入一个字符串:\n"); scanf ("%s",str); while (str[i] != '\0')原创 2016-12-01 20:24:14 · 310 阅读 · 0 评论 -
嵌入式第一周学习心得
昨天是第一天去学习Linux系统,由于第一周有事没有去,进度慢了一些,上周自己自学了老师的讲义,但是还有很多没有看懂,尤其是一些基础的内容,自己用虚拟机敲代码却是运行不起来,在群里看到同学的程序,我就连最基本的进入目录都没有试出来,我一直在思考怎么新建一个文件夹,关于根目录什么的还是有一点了解,通过同学笔记了解了一些指令代码。例如在cd /home目录下我想创建一个hello的文件夹,我以为是m原创 2016-11-13 21:10:36 · 390 阅读 · 0 评论