精华内容
下载资源
问答
  • C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础
  • c语言经典算法

    2012-11-25 14:39:34
    特色:着重讨论了算法设计技巧,包括贪婪算法、分治算法、动态规划、随机化算法以及回溯算法。系统介绍了当前流行的论题和新的数据结构,如斐波那契堆、斜堆、二项队列、跳跃表和伸展树。详细讨论了摊还分析,考查书...
  • c语言课件 算法

    2012-07-12 22:15:30
    与其它高级语言一样,C语言也是利用函数体中的可执行语句,向计算机系统发出操作命令。按照语句功能或构成的不同,可将C语言的语句分为五类。 1.控制语句 控制语句完成一定的控制功能。C语言只有9条控制语句,又...
  • C语言经典算法100例(一)

    万次阅读 多人点赞 2013-10-12 00:31:44
    C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。...

        C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。

      接下来我们先来看10道:

      (1)输出9*9乘法口诀。 

    //9*9乘法口诀表
    void Table99()
    {
    	int i,j;
    	for(i = 1; i <= 9; i++)     //外层循环控制行
    	{ 
    		for(j = 1; j <= i; j++) //内层循环控制列
    		{
    			printf("%d*%d=%-4d",i,j,i*j);
    		}
    		printf("\n");
    	}
    }

    运行结果:

    (2)古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(兔子的规律为数列1,1,2,3,5,8,13,21....)这也是著名的斐波那契数列。

    //斐波那契数列
    void Fabocci()
    {
    	long int f1,f2;
    	f1 = f2 = 1;
    	int i;
    	for(i = 1; i <= 20; i++)
    	{
    		printf("%12ld %12ld ",f1,f2);
    		if(i % 2 == 0)     //控制输出,每行输出4个
    			printf("\n");
    		f1 = f1+f2;       //后一个数是前两个数的和
    		f2 = f1+f2;       //后一个数是前两个数的和
    	}
    
    }

    运行结果:

    (3)1-100之间有多少个素数,并输出所有素数及素数的个数。
         程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

    //输出1-100的所有素数
    void Prime()
    {
    	int i,j,flag,n;
    	n = 100;   //100以内的素数
    	flag = 1;  //标识变量,是素数则为1
    
    	for(i = 2; i <= 100; i++)  //从2开始,遍历到100
    	{
    		flag = 1;
    		for(j = 2; j*j <= i; j++) //能被2 - sqrt(i)整除的数
    		{
    			if(i % j == 0)
    			{
    				flag = 0;
    				break;
    			}
    		}
    		if(flag == 1)
    		   printf("%d ",i);   //输出素数
    	}
    }

    关于一个数是否是素数,还有更高效的算法,大家可以先考虑一下,以后我会给出算法。

    运行结果:

    (4)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6 = 1+2+3
         找出10000以内的所有完数。

    //找出1000以内的所有完数(一个数等于其因子之和)
    void PerfectNumber()
    {
    	int p[80];  //保存分解的因子
    	int i,num,count,s,c = 0;
        int MaxNum = 10000; 
    
    	for(num = 2; num < MaxNum; num++)
    	{
    		count = 0;
    		s = num;
    		for(i = 1; i < num/2+1; i++)      //循环处理每个数
    		{
    			if(num % i == 0)          //能被i整除
    			{
    				p[count++]  = i;      //保存因子,让计数器count增加1
    				s -= i;               //减去一个因子
    			}
    		}
    		if( 0 == s)
    		{
    			printf("%4d是一个完数,因子是:",num);
    			printf("%d = %d",num,p[0]);  //输出完数
    			for(i = 1; i < count; i++)
    				printf("+%d",p[i]);
    			printf("\n");
    			c++;
    		}
    	}
    	printf("\n共找到%d个完数。\n",c);
    }

    运行结果:

     (5)下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出。

    void Array4_4()
    {
    	int A[4][4],B[4][4],i,j;
    
    	printf("Please Input 16 numbers:");
    	for(i = 0; i < 4; i++)
    		for(j = 0; j < 4; j++)
    		{
    			scanf("%d",&A[i][j]);  //输入16个数
    			B[3-j][i] = A[i][j];   //旋转90度赋值
    		}
    	printf("Array A:\n");          //输出矩阵A
    	for( i = 0; i < 4; i++)
    	{
    		for(j = 0 ; j < 4; j++)
    		{
    			printf("%4d",A[i][j]);		
    		}
    		printf("\n");
    	}
    	printf("Array B:\n");          //输出矩阵B
    	for( i = 0; i < 4; i++)
    	{
    		for(j = 0 ; j < 4; j++)
    		{
    			printf("%4d",B[i][j]);		
    		}
    		printf("\n");
    	}
    }

    运行结果:

    (6)编程打印杨辉三角。

    //打印杨辉三角
    void YangHuiTriangle()
    {
    	int i,j,triangle[8][8];
    	
    	for(i = 0; i < 8; i++)
    		for(j = 0; j < 8; j++)
    			triangle[i][j] = 1;
    
    	for(i = 2; i < 8; i++)
    	{
    		for(j = 1; j < i; j++)
    		{	
    			triangle[i][j] = triangle[i-1][j]+triangle[i-1][j-1];
    		}
    	}
    	for(i = 0; i < 8; i++)
    	{
    		for(j = 0; j <= i; j++)
    			printf("%-4d",triangle[i][j]);
    		printf("\n");
    	}
    
    }

    运行结果:


    (7)实现将输入的字符串反序输出。

    /*实现字符串翻转*/
    char* reverse_str(char* str)
    {
    	if(NULL == str) //字符串为空直接返回
    	{
    		return str;
    	}
    	char *begin;
    	char *end;
    	begin = end = str;
    
    	while(*end != '\0') //end指向字符串的末尾
    	{
    		end++;
    	}
    	--end;
    
    	char temp;
    	while(begin < end) //交换两个字符
    	{
    		temp = *begin;
    		*begin = *end;
    		*end = temp;
    		begin++;
    		end--;
    	}
    
    	return str; //返回结果
    }

    运行结果:

    (8)实现字符串拷贝函数strcopy(char*src,char* dest)

    void strcopy(char *str, char *dest)
    {
    	while(*str != '\0')
    	{
    		*dest++ = *str++;
    	}
    	*dest = '\0';
    }

    (9)求近似Pi值。可以用公式(如:pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+.....)

    void Pi()
    {
    	double pi = 2,temp = 2;            //初始化pi值和临时值
    	int numerator = 1,denominator = 3; //初始化分子和分母
    
    	while(temp > 1e-16)                //数列大于指定精度
    	{
    		temp = temp*numerator/denominator;//计算一个数列的值
    		pi += temp;
    		numerator++;
    		denominator += 2;
    	}
    	printf("PI = %.18f\n",pi);
    }

    这里求得的只是近似的值,精度不高,对于求任意位的pi值就无能无力了,大家可以考虑如何求任意位数的pi值,

    关于任意位数的pi值求法,可以参见我的博客:《计算任意位数的Pi》

    运行结果:

      (10)输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。

    //判断一个字符串是否是回文
    void IsHuiWen()
    {
    	char str[100];
    	int i,j,n;
    	printf("请输入一段字符串:");
    	gets(str);
    	n = strlen(str);
    	for(i = 0,j = n-1; i < j; i++,j--)
    		if(str[i] != str[j])
    			break;
    	if(i >= j)
    		printf("是回文!\n");
    	else
    		printf("不是回文!\n");
    
    }

    运行结果:


    转载请标明出处:http://blog.csdn.net/u012027907/article/details/12624829

    展开全文
  • 基于C语言的广工大四高级算法实验,广工计算机科学与技术专业专用
  • C语言常用算法题 (嵌入式算法题) 28道

    万次阅读 多人点赞 2018-07-26 08:46:40
    最近准备打牢一点C语言,我会把这些基础的算法粘贴出来,一起,学习交流。   实现加减乘除计算器。 输入两个数并输出最大值,最小值 判断输出,输入0,1,2,3,输出aaaa,bbbbb,cccc,dddd 输入一个大写或者...

    最近准备打牢一点C语言,我会把这些基础的算法粘贴出来,一起,学习交流。

     

    1. 实现加减乘除计算器
    2. 输入两个数并输出最大值,最小值
    3. 判断输出,输入0,1,2,3,输出aaaa,bbbbb,cccc,dddd
    4. 输入一个大写或者小写,输出其相反的大小写。
    5. 输入一个年份,判断一年是否为瑞年
    6. 输入两个年份,判断两个年份之间相差多少天
    7. 输入一个数字,输出它的累加和。
    8. 输入一个数字,输出它的阶乘结果
    9. 输入一个字符串,求它的长度,并输出。
    10. 输入N个数字,并计算出它们的累加和,并输出。
    11. 输出这个数字的斐波那契数列的前30项。
    12. 数组里有10个数,随机输入一个数插入到数组中,并对其进行排序输出。
    13. 行转列,把三行四列转换为四行三列并输出。
    14. 输出杨辉三角
    15. 输入字符串,并对其大小写和字符进行统计输出。
    16. 输入输入是否为回文(如“abcba”和”123321”都是回文)。
    17. 输入四个字符串,并判断输出其最大字符串
    18. 输入一个字符串,判断里面有多少个单词
    19. 输入10个数,用冒泡法实现排序
    20. 输入四个数字,并输出它们的和。
    21. 请输入一个ea15de*^#@$^sdf中存在的字符,并输出 它所在的位置。
    22. 连接两个字符串,并输出字符串的首地址。
    23. 用字符串实现计算器的加减乘除 如:add 1+2+3 (sub 减法,mul 乘法,chu 除法)
    24. 实现一个学生管理系统,实现增删改查 学员信息。
    25. 用线性表实现学生管理系统
    26. 用链表实现学生管理系统
    27. 学员管理文件操作。
    28. 实现把一个IP转换成整型,并输出,并且能把整型转换为IP地址。

     

     

     

    展开全文
  • C语言五子棋算法

    千次阅读 2012-04-13 16:17:03
    这样计算机的AI也就不一样,最后我们把分值最小的L1'值定为1,则我们就得到了下面各种棋型的分值,由c语言表示为:  F[2][5]={{0,2,5,50,16000},{0,10,30,750,16000}};  L[2][5]={{0,1,5,50,3750},{0,10,30,...

        任何一种棋类游戏其要害是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:
        gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3,
        gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4,
        在定义方向时,也应该注重一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:
        Const DIR_UP = 1
        Const DIR_UPRIGHT = 2
        Const DIR_RIGHT = 3
        Const DIR_RIGHTDOWN = 4
        Const DIR_DOWN = 5
        Const DIR_DOWNLEFT = 6
        Const DIR_LEFT = 7
        Const DIR_LEFTUP = 8
        这样我们前四个方向可以通过加四得到另一个方向的值。假如你还是不太明白,请看下面的图:
    ---------
    ---------
    ---oo----
    -ox*xx---
    ---------
    ---------
        图中的*点从标为(4,4),(打*的位置是空位),则:
        gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1
        gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2
        gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2
        gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3
        ...


        一旦把所有空点的棋型值填完,我们很轻易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的棋称为活)组成的。对于而白棋在垂直方向上点(4,4)的价值是一个活1,而在/方向也是活1所以,只要我们把该点的对于黑棋和白棋的价值算出来,然后我们就取棋盘上各个空点的这两个值的和的最大一点作为下棋的点。然而,对各种棋型应该取什么值呢?我们可以先作如下假设:
        Fn 表示先手n个棋子的活棋型,如:F4表示先手活四
        Fn'表示先手n个棋子的冲棋型,如:F4'表示先手冲四
        Ln 表示后手n个棋子的活棋型,如:L3表示后手活三
        Ln'表示后手n个棋子的冲棋型,如:L3'表示后手冲三


        根据在一行中的棋型分析,得到如下关系:
        L1'<= F1'< L2'<= F2'<= L1 < F1 < L2 < F2 < L3'<= F3'< L4' < F4' = F4
        从这个关系包含了进攻和防守的关系(当然,这个关系是由我定的,你可以自己定义这些关系)。对这些关系再进一步细化,如在一个可下棋的点,其四个方向上都有活三,也比不上一个冲四,所以我们可以又得到4*F3<L4'这个关系,同样,我们还可以得到其它的关系,如:4*F2<L3、4*L3<F3...,这些的关系由于你的定法和我的定法制可能不一样,这样计算机的AI也就不一样,最后我们把分值最小的L1'值定为1,则我们就得到了下面各种棋型的分值,由c语言表示为:
        F[2][5]={{0,2,5,50,16000},{0,10,30,750,16000}};
        L[2][5]={{0,1,5,50,3750},{0,10,30,150,4000}};
        F数组表示先手,第一个下标为0时表示冲型,第二个下标表示棋子数,则F2'对应F[0][2]L数组表示后手,第一个下标为0时表示冲型,第二个下标表示棋子数,则L2对应F[1][2]Ok,棋型的分值关系确定好了以后,我们把每一个可下点的四个方向的棋型值相加(包括先手和后手的分值),最后选择一个最大值,并把这一点作为计算机要下的点就OK了:)。


    后话:
        1、得到最大值也许不止一个点,但在我的程序中只选择第一个最大点,当然你可以用于个随机数来决定选择那一个最大值点,也可以对这些最大值点再作进一步的分析。
        2、在这个算法中我只考虑了四周有棋子的点,而其它点我没有考虑。
        3、可以再更进一步,用这个算法来猜测以后的几步棋,再选择猜测值最好的一步,这样电脑的AI就更高了
        4、这个算法没有考虑黑棋的禁手(双3、双四和多于五子的连棋)。因为在平时我下的五子棋是没有这些禁手的。


    转载:http://www.21shipin.com/html/62057.shtml


    展开全文
  • 第一章:程序设计和C语言 程序:就是一组计算机能够识别和执行的指令。(指令:计算机能够识别的命令)。 计算机的一切操作都是由程序控制的。如果没有程序就如同人变成植物人一样。 机器指令:计算机能够...

    第一章:程序设计和C语言

    程序:就是一组计算机能够识别和执行的指令。(指令:计算机能够识别的命令)。

    计算机的一切操作都是由程序控制的。如果没有程序就如同人变成植物人一样。

    机器指令:计算机能够直接识别和接受的二进制代码。

    机器语言:机器指令的集合就是机器语言。

    汇编语言:为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串

    高级语言:语言功能很强,并不依赖具体机器,用它写出来的程序对任何型号的计算机都适用。(它是时代的必然产物,继机器语言、汇编语言之后的完整的计算机语言。现在已经拥有上千种的高级语言,常见的有:C、C++、

    高级语言的发展历程:非结构化语言、结构化语言、面向对象的语言。

     

    最简单的C语言程序:

    #include

    int main()

    {

        printf("Hello Word!!!");

        return 0;

    }

    这就是最简单的一段程序,只有一个执行语句。

    这就是最基本的格式。(至于里面内容代表的内容没必要细说,这句话不在重复说了)

    当然也可以写成:

    #include"stdio.h"

    int main()

    {

        printf("Hello Word!!!");

        return 0;

    }

    #include"stdio.h"与#include//""与<>差别在于调用函数时是否直接在标准库中找。

    int main()为主函数结束时一定要以return 0;结尾代表程序结束。每句语句结束时都要以“;”结尾如:printf("Hello Word!!!");

    求和:

    #include

    int main()

    {

        int a,b,sum;//变量的定义

        scanf("%d %d",&a,&b);//输入语句

        sum=a+b;//求和语句

        printf("a+b=%d",sum);//输出语句

        return 0;

    }

    书写scanf("%d %d",&a,&b);这个语句注意加粗加色的地方。

    C语言程序的结构:

    1) 一个程序有一个或多个源程序文件组成。

    ① 预处理指令

    ② 全局声明

    ③ 函数定义

    2) 函数是C程序的主要组成部分。

    3) 一个函数包括两部分。

    ① 函数首部

    ② 函数体

    4) 程序总是从main函数开始执行。

    5) 程序对计算机的操作是由函数中的C语句完成的。

    6) 在每个数据声明和语句的最后必须有一个分号。

    7) C语言本身不能提供输入输出语句。

    8) 程序应当包含注释。

    第二章:算法

     程序:算法+数据结构

     可见算法的重要性。

     算法:通俗地讲就是解决问题的方法就是算法。

     算法的特性:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性。

     表示算法的方法:自然语言表示算法、流程图表示算法、伪代码表示算法、程序语言表示算法。

     结构化程序设计方法:自顶向下、逐步求精、模块化设计、结构化编码。

     

     这就是本章节的总结,为什么这么少因为内容太丰富,所以就简单的概括一下什么是算法。让大家对算法有一  个简单认知,想要深入的学习算法还是要靠自己,目前我也在学习算法,从大一到现在,差不多有一年的时间  里,只能说对算法有一个大概地认识。

     

    展开全文
  • c语言高级课件

    2014-03-23 20:40:30
    这是一个c语言高级课件,共十章,包括编译预处理、c语言编程实践、数据结构与算法概述、链表、c语言在嵌入式中的应用、以及一些常用的排序算法等等。另外附上嵌入式c程序的编译与调试及单独对指针和数组的讲解。
  • C语言高级实例解析

    2018-04-21 16:15:29
    通过对本书的学习,对C语言高级编程将有一个深刻的理解和掌握,而不仅局限于简单的数据结构和算法。 本书既可以供一般读者作为深入学习C语言的教材,也可以作为工程人员的参考手册。本书适合中、高级读者,学习让...
  • 基于C语言的广工大四高级算法课设源代码及报告,广工计算机科学与技术专业专用
  • “第3篇算法高级应用篇”讲解了算法的一些高级应用技术,包括在密码学和数据压缩/解压缩中的应用。计算机技术的发展和普及不仅改变了人们的生活和娱乐方式,也改变了人们的工作方式,这其中最为重要的便是计...
  • C语言高级编程技术,设置C环境,还有C的最基础的算法,,
  • 今天将本博客的部分文章建立一个索引,方便大家进行阅读,当然每一类别中的文章都会持续的添加和更新(PS:博文主要使用C语言) 博客地址:http://www.cnblogs.com/archimedes/ C语言 C语言相关原理与技巧: ...
  • C语言算法大全

    2012-12-09 16:11:07
    是关于C++语言及其程序设计的最重要的著作,是在C++领域中地位无法替代的一部杰作。最新版本,也最能反映最新的C++标准。
  • C语言高级

    万次阅读 多人点赞 2018-01-24 14:43:51
    C语言高级部分 一、内存大话题 { 1.0、内存就是程序的立足之地,体现内存重要性。 1.1、内存理解:内存物理看是有很多个Bank(就是行列阵式的存储芯片),每一个Bank的列就是位宽 ,每一行就是Words,则存储...
  • C语言经典编程900例源码集,涉及了基础知识和高级编程,代码中有英文注释,个人觉得,这是学习C语言编程非常不错的范例素材。 代码测试截图: 有人说C语言是世界上最牛逼的语言,因为操作系统就是用C语言编写...
  • 通过对本书的学习,对C语言高级编程,将育一个深刻的理解和掌握,而不仅局限于简单的数据结构和算法。 本书既可以供一般读者作为深入学习C语言的教材,也可以作为工程人员的参考手册。本书适合中、高级读者,学习...
  • 此文档由资深c语言专家所编写的,教你如何进行c语言高级编程,而且还介绍了如何解答IT大公司的一些面试题,例如,微软公司,百度,google等大公司。很值得一看的呦!积力推荐爱好c语言编程者。
  • C语言算法速查手册

    千次阅读 2010-04-24 17:57:00
    1.1.3 高级语言 2 1.1.4 C语言 3 1.2 C语言的优点和缺点 4 1.2.1 C语言的优点 4 1.2.2 C语言的缺点 6 1.3 算法概述 7 1.3.1 算法的基本特征 7 1.3.2 算法的复杂度 8 1.3.3 算法的准确性 10 1.3.4...
  • C语言程序设计概述程序的基本概念机械语言汇编语言高级语言C语言的诞生C语言的特点C语言字符集C语言严格区分大小写标识符关键字32个C语言程序的上机执行过程C语言开发环境 程序的基本概念 为了让计算机能够贯彻执行...
  • 10个经典C语言算法—零基础小白必学

    万次阅读 多人点赞 2018-06-08 16:53:43
    C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。...
  • 高级加密标准AES优胜算法Rijndael c语言源代码
  • 但在实际应用中,很多算法是需要通过高级编程语言来实现的。这样Matlab就不能发挥其作用了。其次Matlab对矩阵的运算效率不及C语言高,尤其在工程中对海量数据进行运算时Matlab的弱点就显示出来。又由于C语言没有提供...
  • C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,010
精华内容 18,004
关键字:

c语言高级算法

c语言 订阅