C语言知识
文章平均质量分 54
我是日蚀之影
记住,你不是一个人在战斗,再过几年,你且看他,你且看你。
展开
-
C 返回一个数组的最大项的项数
题目:编写一个函数,返回存储在double类型数组中最大值的下表,并在一个简单的程序中测试改函数。程序如下:#includeint arr_max_i(int arr[], int n);int main(){int arr[10] = { 13,23,4,6,35,39,21,5,9,1 };printf("arr_max_i=%d\n", arr_max_i(arr原创 2016-10-08 21:33:04 · 401 阅读 · 0 评论 -
C 冒泡排序
冒泡排序是数组中的入门排序算法。算法思路如下:(从小到大排序)存在10个不同大小的气泡,由底至上地把较少的气泡逐步地向上升,这样经过遍历一次后,最小的气泡就会被上升到顶(下标为0),然后再从底至上地这样升,循环直至十个气泡大小有序。在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去程序如下:#include void swap(int *a, int *b);in原创 2016-10-08 21:35:16 · 460 阅读 · 0 评论 -
C 数组插入排序
题目:有一个已经排好序的数组,现在加入一个数,要求按原来的规律把它插入到数组中程序分析:首先判断该数是否大于最后一个数,然后再考虑插入中间数的情况,插入后此元素之后的数,依次向后移动一个位置。程序如下:#includeint main(){ int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,numbe原创 2016-10-10 20:46:27 · 430 阅读 · 0 评论 -
C 自定义输入函数
题目:自定义两个输入函数,第一个打印字符串,不添加'\n',第二个打印字符串,并统计打印的字符数分析:第一个函数利用传入的指针参数循环判断是否为'\n',否则putchar,指针指向下一个。第二个函数增加一个计数变量。程序如下:#includevoid put1(const char * string);int put2(const char * string);int原创 2016-10-10 20:54:32 · 1205 阅读 · 0 评论 -
C 字符串
今天讲讲有关字符串的知识。创建一个字符串可以通过字符数组或者是指向字符串的指针实现。然而这两者看上去差不多,起始还是有一定的差别的。看如下程序:#define MSG "hello"#includeint main(){const char arr[] = MSG;const char *ptr= MSG ;//*ptr = 'a'; errorprintf(原创 2016-10-11 20:21:38 · 193 阅读 · 0 评论 -
C 二维数组统计不同整数
题目:编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数程序:#includeint原创 2016-11-02 23:30:25 · 471 阅读 · 0 评论 -
一个C程序是如何生成的
C编程的基本策略是用程序把源代码文件转换成可执行文件。C通过编译和链接这两个步骤来完成这一过程。编译器把源代码转换成中间代码,链接器把中间代码和其他代码包括预编译的库代码合并,生成可执行文件。中间代码有很多种形式,最普遍的就是把源代码转换为机器语言代码,并把结果放在目标代码文件里。但是目标文件缺失许多代码:1是启动代码,启动代码充当这程序和操作系统之间的接口。2是库函数,例如printf()函原创 2016-09-26 21:05:56 · 651 阅读 · 0 评论 -
C 最长数字子串
题目:查找字符串中长度最长的数字子串,返回最长子串在数组中的位置,项数,长度。分析:利用循环逐个查找字符串,找到数字串时记下首字母位置,长度,再与其他子串比较,得出最长子串。程序如下:#include#includechar * s_gets(char * st, int n);int main(){char str[30];printf("please ent原创 2016-10-22 21:50:20 · 538 阅读 · 0 评论 -
C 直接选择排序
C中的经典排序算法,直接选择排序,是最为简单的排序算法。通过for循环依次从数组首元素开始,与后面的元素依次比较,找到最小的项的下标,并与之交换,最后成功排序。程序如下:#include int main(){int arr[10] = { 3,2,73,15,67,9,26,1,53,35 };int i, j, k,temp;for (i = 0; i{k原创 2016-10-23 22:15:14 · 347 阅读 · 0 评论 -
C 倒置句子
题目: 编写一个C函数,将”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.分析:利用二维数组存储字符串,再利用指针数组指向二维数组,改变指针数组中元素的次序,从而将句子单词倒置#includevoid reversestr(char *str[],int n);int ma原创 2016-11-03 21:05:57 · 607 阅读 · 0 评论 -
C sizeof 与 strlen()
在C语言中有两个计算长度的函数sizeof() 与 strlen(),今天就来讲讲他们的不同。sizeof 是C语言的内置运算符,以字节为单位给出指定类型的大小。通常使用%zd转换说明匹配sizeof的返回类型。strlen()给出字符串中的字符长度。因为1字节存储1个字符,大家可能认为把两种方法应用与字符串得到的结果相同,但事实并非如此,大家看一下下面的程序。#inc原创 2016-09-27 20:31:48 · 323 阅读 · 0 评论 -
C strcmp 与 strncmp
strcmp是常见的字符串比较函数,如果两个字符串参数相同,改函数就返回0,否则返回非零值。看以下程序:#include#include#define ANSWER "Grant"#define SIZE 40char * s_gets(char * st, int n);int main(){char try[SIZE];puts("Who is buri原创 2016-10-13 21:15:43 · 369 阅读 · 0 评论 -
C sizeof() 与 strlen()
在C语言中有两个计算长度的函数sizeof() 与 strlen(),今天就来讲讲他们的不同。sizeof 是C语言的内置运算符,以字节为单位给出指定类型的大小。通常使用%zd转换说明匹配sizeof的返回类型。strlen()给出字符串中的字符长度。因为1字节存储1个字符,大家可能认为把两种方法应用与字符串得到的结果相同,但事实并非如此,大家看一下下面的程序。#include原创 2016-09-27 20:02:10 · 427 阅读 · 0 评论 -
C strcmp 与 strncmp
strcmp是C语言字符串比较函数。如果两个字符串参数相同,该函数就返回0,否则返回非零值。看以下程序:#include#include#define ANSWER "Grant"#define SIZE 40char * s_gets(char * st, int n);int main(){char try[SIZE];puts("Who is buri原创 2016-10-13 21:29:56 · 256 阅读 · 0 评论 -
C josephus环
题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.分析:这是一个经典的josephus环问题,使用数组实现,通过循环查找被删除的项。程序如下:#include void josephus(int num, int start, int distance);int main(){int num原创 2016-10-24 21:28:24 · 233 阅读 · 0 评论 -
C 指针记录奇偶数
题目:编写函数 fun(int *a, int n, int *odd, int *even), 功能是:求出数组 a[]中所有奇数之和以及所有偶数之 和。并利用指针 odd 返回奇数之和,利用指针 even 返 回偶数之和。 例如:a[]的值依次为:1,9,2,3,11, 6;则利用指针 odd 返回奇数之和 24;利用指针 even 返 回偶数之和 8思路:函数形参为指针,主函数传实参的地原创 2016-11-04 21:32:26 · 1013 阅读 · 0 评论 -
C scanf()函数的妙用
大家都知道scanf()函数用来输入确定转换说明的数据,然而scanf()的返回值确是大家忽略的地方。scanf()函数返回成功读取的项数。如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值字符串,scanf()便会返回0。利用这个特性,我们就可以在while循环中利用scanf()的返回值来检测和处理不匹配的输入。下面看一个例子:#includeint main(){原创 2016-09-28 19:07:23 · 506 阅读 · 0 评论 -
C 字符串合法帧
题目:输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.提示:帧头和帧尾分别是head和tail 字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧思路:通过字符串匹配子串bf算法查找帧头和帧尾,输出合法帧程序如下:#include#includevoid legalstr(char原创 2016-11-05 22:51:09 · 396 阅读 · 0 评论 -
C 显示约数与素数的程序
我们利用嵌套if else来设计一个程序:给定一个整数,显示所有能整除它的约数。如果没有约数,则报告该数是一个素数。为了方便起见,程序应该使用一个循环让用户能够连续输入待测试的数,这样测试一个新的数字时不必每次都要重新启动程序。程序如下:#include#includeint main(){unsigned long num;unsigned long div;原创 2016-09-29 20:41:22 · 386 阅读 · 0 评论 -
C 菱形
题目:输出如图所示的菱形 * *** ***** ******* ********* *********** ********* ******* ***** *** *分析:通过for循环依次打印*和原创 2016-10-15 22:37:33 · 442 阅读 · 0 评论 -
C 链表记录学生信息
题目:编写程序 STUDENT *Create(STUDENT studs[],int n)。 STUDENT 是一个结构类型,包含姓名、成绩和指针域。 studs 数组中存储了 n 个 STUDENT 记录。 create 函数的 功能是根据 studs 数组建立一个链表,链表中结点按成 绩降序排列,函数返回链表头指针思路:利用结构数组,动态分配内存,用单链表实现#include#i原创 2016-11-06 21:13:03 · 506 阅读 · 0 评论 -
C 数组 层叠矩阵
通过数组来打印一系列矩阵是C 中很常见的题目。今天就使用数组来打印一个层叠矩阵,输入行数与起始数字,实现以下类似的输出:1 4 9 162 3 8 155 6 7 14 10 11 12 13起始数放在左上角,然后从起始数开始在现在同列然后在同行递增,层层叠叠的形成一个层叠矩阵。程序如下:#include int原创 2016-09-30 21:17:31 · 738 阅读 · 0 评论 -
C 高精度pi
如下代码能求解出高精度的PI值[cpp] view plain copy#include #include long a=10000,b,c=2800,d,e,f[2801],g; int main() { for(;b-c;) f[b++]=a/5;转载 2016-10-16 20:52:38 · 830 阅读 · 0 评论 -
C 任意进制转换程序
题目:编写一程序,实现任意10进制整数转换为任意进制的数思路:利用数组存储各个位的值,再利用ascll码转换为字符。程序:#includevoid to_base_n(int n, int b);int main(){int num, base;printf("输入整数 和 要转换的进制(输入q退出):");while (scanf("%d %d",原创 2016-11-07 21:13:20 · 606 阅读 · 0 评论 -
C 菜单浏览
许多程序都把菜单作为用户界面的一部分,然后程序根据用户所选项完成任务。作为一名程序员,自然希望这一过程能够顺利进行。因此,第一个目标是:当目标遵循指令程序顺利运行;第二个目标是:当用户没有遵循指令时,程序也能顺利运行。显而易见,要实现第二个目标的难度更大,因为很难预料用户在使用程序时的所有错误情况。下面看一个有着用户友好特性的菜单浏览程序:#includechar get_choice原创 2016-10-02 21:10:07 · 532 阅读 · 0 评论 -
C 素数
题目:计算100到200间的素数,并在一行输出五个素数 。分析:通过for循环寻找能被整除的数,找到就则不是素数。程序如下:#includeint main(){int i,j,num;j = 0;for (num = 100; num {for (i = 2; i if (!(num%i))break;if (i > (num / i)){原创 2016-10-17 21:15:16 · 368 阅读 · 0 评论 -
C 递归和倒序计算
递归在处理倒序时非常方便,在下面的问题中,使用递归比循环简单。我们要解决的问题是,编写一个函数,打印一个整数的二进制数。在二进制中,奇数的末尾一定是1,偶数的末尾一定是0,利用5%2即可确定5的二进制数的最后一位是1还是0.一般而言,对于数字n,其二进制的最后一位一定是n%2.因此,计算的第一位数字实际是待输出二进制数的最后一位。利用这一规律,在递归调用前计算n%2,在递归调用后打印计算结果。这样原创 2016-10-03 21:53:11 · 912 阅读 · 0 评论 -
C 利用循环单链表存储数组的值
题目:建立一个带有头结点的单向链表,并将存储 在数组中的字符依次转储到链表的各个结点中程序:#include#includetypedef struct node{char ch;struct node * next;}Node;typedef Node * Link;void create_empty_list(Link *head);原创 2016-11-08 20:33:27 · 521 阅读 · 0 评论 -
C fibonaccio 递归与循环
斐波那契数列的定义如下,第一个和第二个数字是1,而后续的每一个数字都是其前两个数字之和。例如:1,1,2,3,5,8....斐波那契数列可以用递归和循环两种方法实现。然而使用递归时用到了双递归,即函数每一次递归都要调用本身两次。这么做非常浪费计算机资源,因为随着每次递归,会生成指数级增长的变量。用循环的话就没有这个问题,但是程序比较繁琐。递归程序如下:unsigned long fibon原创 2016-10-05 21:05:22 · 428 阅读 · 0 评论 -
C 字符串数组冒泡排序
题目:实现字符串数组的冒泡排序思路:利用二维数组存储字符串,再用strcmp比较字符串大小,strcpy用来赋值程序如下:#include#includeint main(){int i, j,n;char temp[20];char arrs[5][20];printf("输入5个字符串:");for (i = 0; i {scanf("%s"原创 2016-10-28 21:20:21 · 689 阅读 · 0 评论 -
C 寻找一个字节的整数中1的个数
题目:查找1个字节的整数中1的个数思路:将整数转化为二进制形式,利用按位与判断每位是否为1程序如下:#include int bitnum(int num);/*计算1的位数的函数*/void bitout(int num);/*输出二进制形式的函数*/int main(){int num;printf("enter num(0 to 255):原创 2016-10-28 21:25:42 · 661 阅读 · 0 评论 -
C 循环双链表
双链表比单链表多了一个prev指针域,用来指向一个节点的前一个节点,操作起来比单链表快捷许多,可以从前从后遍历整个链表。程序:#include#includetypedef struct dbnode{int num;struct dbnode *prev;struct dbnode *next;}DbNode;typedef DbNode * Db原创 2016-11-09 20:36:26 · 195 阅读 · 0 评论 -
C 进制转换程序
今天写一个简易的进制转换程序,能够转换2到10中的任意一个进制。原理就是十进制转换成二进制的取余除法。程序如下:#includevoid to_base_n(int n, int b);int main(){int num, base;printf("enter num and base :");while (scanf("%d %d", &num, &base)原创 2016-10-06 20:52:11 · 366 阅读 · 0 评论 -
C 重写power函数 递归与循环
重写power()函数,返回一个double型的正整数的任意次幂。另外要处理0的任意次幂都为0,任何数的任意次幂都为1(函数应报告0 的 0 次幂未定义,并将该值返回1)。分别使用循环和递归实现。利用循环程序如下:#includedouble power(int n, int x);int main(){int num, x;printf("please enter n原创 2016-10-04 21:41:47 · 864 阅读 · 0 评论 -
C 分解质因数与完数
今天再来做两道类似的循环题目,用到了数学知识中的因数与质数。题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。(2)但n能被k整除,则应打印出k的值,并用n除原创 2016-10-01 21:41:46 · 418 阅读 · 0 评论 -
C 默森尼数
题目:找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.分析:调用判断素数函数,循环判断.程序:#include#includeint ispri原创 2016-10-29 21:32:37 · 1464 阅读 · 0 评论 -
C 模拟进程调度
题目;利用单链表模拟了进程调度的实现,主要功能有先来先服务算法,优先级算法,时间片轮转算法#include#include#include#include#include//时间延迟#define DELAY 500//时间片#define SJP 3unsigned short TIME = 0; //时间unsigned short NUM原创 2016-11-10 20:59:54 · 346 阅读 · 0 评论 -
C 交叉存放字符串
题目:编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字符串中过长的剩余字符接在c指向数组的尾部。程序如下:#include#includevoid change(char *a, char *b, char*c);//将a,b字原创 2016-10-30 21:20:35 · 415 阅读 · 0 评论 -
C 一个数的立方等于连续奇数和
题目:验证任意一个正整数的立方都是一系列连续奇数的和。思路:根据举例发现任何一个数的立方都可以由中项为这个数的平方,项数为这个数,的一系列连续奇数的和表示程序如下:#include#includeint main(){int i, j;int arr[20];int temp,sum;for (i = 2; i {sum = 0;temp = (原创 2016-10-20 20:43:57 · 6085 阅读 · 0 评论 -
C 堆栈的链式表示
题目:用没有头节点的单链表来表示堆栈,功能执行效率比线性表更高,入栈与出栈操作都通过头插入和头删除实现程序:#include#include#define MAX 10typedef struct linkedstack{int num;struct linkedstack *next;}LinkedStack;typedef LinkedStack原创 2016-11-11 20:48:40 · 227 阅读 · 0 评论