C语言经典算法100例(一)

C语言经典算法100例(一)C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的、更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础。 接下来我们先来看10道:  (1)输出9*9乘法口诀。 //9*9乘法口诀表voidTable99(){ inti,j; for(i=1;i<=9;i+

大家好,又见面了,我是你们的朋友全栈君。

    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");
	}
}

运行结果:

C语言经典算法100例(一)

(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;       //后一个数是前两个数的和
	}

}

运行结果:

C语言经典算法100例(一)

(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);   //输出素数
	}
}

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

运行结果:

C语言经典算法100例(一)

(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);
}

运行结果:

C语言经典算法100例(一)

 (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");
	}
}

运行结果:

C语言经典算法100例(一)

(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");
	}

}

运行结果:

C语言经典算法100例(一)
(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; //返回结果
}

运行结果:

C语言经典算法100例(一)

(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》

运行结果:

C语言经典算法100例(一)

  (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");

}

运行结果:

C语言经典算法100例(一)
转载请标明出处:http://blog.csdn.net/u012027907/article/details/12624829

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133061.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm最新激活码2021(最新序列号破解)

    pycharm最新激活码2021(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    104
  • S3服务器规格和性能指标,云服务器s3与s4

    S3服务器规格和性能指标,云服务器s3与s4云服务器s3与s4内容精选换一换创建一台或多台云服务器。V1.1版本创建云服务器的接口兼容了V1版本创建云服务器(按需)的功能,同时合入新功能,支持创建包年/包月的弹性云服务器。本接口为异步接口,当前创建云服务器请求下发成功后会返回job_id,此时创建云服务器并没有立即完成,需要通过调用查询任务的执行状态查询job状态,当Job状态为SUCCESS时代表云服务器创在申请SAPS/4HAN…

    2022年5月11日
    59
  • vue富文本编辑器的使用_elementui富文本

    vue富文本编辑器的使用_elementui富文本写好的富文本编辑器,附带功能齐全,复制即用!!!(Quill官方中文文档)一、安装二、注册1.在.main.js中注册富文本编辑器三、使用1.以下是写好的富文本编辑器,附带功能齐全(Quill官方中文文档)2.新建一个Editor文件夹,文件夹下创建一个index.vue文件,将此复制到vue文件里3.将Editor文件夹放入Vue项目的components组件包里方便其他页面直接引用富文本编辑器5.页面引入刚刚写好的富文本编辑器组件6.效果:………

    2022年10月14日
    0
  • pycharm激活码2021年7月【2021免费激活】

    (pycharm激活码2021年7月)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlBI7JCUH1TG-eyJsa…

    2022年3月22日
    46
  • js中map遍历数组对象_js遍历数组

    js中map遍历数组对象_js遍历数组forEach()和map()都是遍历数组的方法,用法类似,但是还是有很大区别:相同点:      1.都是循环遍历数组中的每一项;      2.在遍历中执行匿名函数都可以接收三个参数,分别为:遍历过程的每一项、遍历序号(索引值)、原数组;      3.执行的匿名函数中的this都指向window。  不同点:      map():      根据遍历执行的匿名函数,对于原数…

    2022年9月2日
    6
  • 微机原理与接口技术课件_微型计算机原理与接口技术课后答案

    微机原理与接口技术课件_微型计算机原理与接口技术课后答案原标题:微机原理与接口技术课程教与学(教学大纲)《微机原理与接口技术》教学大纲文/牟琦英文名称:MicrocomputerPrincipleandInterfaceTechnology适用专业:计算机类专业、自动化类专业、电子信息类专业教材:牟琦.微机原理与接口技术(第3版).[M].北京:清华大学出版社,2018一、课程的性质“微机原理与接口技术”是计算机类、电子信息类、自动化类等相关专业…

    2022年10月2日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号