每个程序小白都该会的基础C语言算法,你会了吗

小编近日在重新学习C语言基础知识,发现了很多的盲点,当初上学的时候不理解的东西,现在看看也理解了很多,今天写一写最近学过的C语言的基础算法。一些很基础的算法,以后A题会用的到哦!

  • 输出斐波那契数列
    1、用for循环输出斐波那契数列前20个数(很基础哦!)
#include<stdio.h>
void main(){
	int a,b,i;
	for(a=1,b=1,i=1;i <= 10;i++){
		printf("%d\t%d\t",a,b);
		a=a+b;
		b=b+a;
		if(i%2==0){
			printf("\n"); 
		} 
	}
} 

2、将斐波那契数列前40个数放入一个数组f中,并循环输出数组元素
方法一:

#include<stdio.h>
main(){
	int a,b,i,f[40],*p;
	p=f;
	for(a = 1,b = 1,i = 0;i < 40; i++){
		f[i]=a;
		f[++i]=b;
		a=a+b;
		b=b+a;
	}
	for(i = 0;i < 40;i++){
		printf("%12d",*(p+i));
	}
	return 0;
}

方法二:

#include<stdio.h>
main(){
	long f[40]={1,1},*p;
	int i;
	p=f;
	for(i = 2;i < 40;i++){
		f[i]=f[i-1]+f[i-2];
	}
	for(i = 1;p < f+40; i++,p++){
		printf("%12d",*p);
		if(i%4==0)
			printf("\n");
	}
}
  • 素数
    1、求一个数m是否为素数;
#include<stdio.h>
main(){
	int m,c=2;
	scanf("%d",&m);
	while(m%c!=0){
		c++;
	}
	if(m==c){
		printf("%d is a prime number.\n",m);
	}
	else{
		printf("%d is not a prime number.\n",m);
	}
}

2、求200-230之间的全部素数。
提示:如果一个数m不能被2到√m中任一数整除,就可以确定这个数是素数。(可以降低时间复杂度哦)

#include<stdio.h>
#include<math.h>
main(){
	int m,i,j,k;
	for(i=201;i < 2000;i+=2){
		m = (int)sqrt(i);
		for(j = 2;j <= m;j++){
			if(i%j==0)
				break;	
		}
		if(j > m){
			printf("%12d",i);
		}
	}
}
  • 求两数最大公约数和最小公倍数
    最大公约数要用取余迭代的方式求出,最小公倍数=两数乘积/最大公约数
#include<stdio.h>
main(){
	int a,b,c,m,n;
	scanf("%d%d",&a,&b);
	m = a,n = b;
	for(c=a%b ; c!=0 ; a=b,b=c,c=a%b);
	printf("%d is the largest common divisor\n",b);
	printf("%d is the least common multiple\n",m*n/b);
}
  • 用指针的方式输出数组
    要想学会C语言的指针就要充分理解&和 * 的含义。
&多种用途,这里主要说它是取地址运算符。
*为取内容运算符

下面展示一些指针数组的用法

#include<stdio.h>
main(){
	int a[8]={1,2,3,4,5,6,7,8};//a是指针常量 
	int i,*p;//p是指针变量 
	for(i = 0 ;i < 8;i++){
		printf("%6d",a[i]);
	}
	printf("\n");
	for(p=a;p < a+8;p++){
		printf("%6d",*p);
	}
	printf("\n");
}
  • C语言中字符串和字符的理解
    以一段代码的形式给大家展示
#include<stdio.h>
main(){
	char s = 'a';//字符 
	char *p = "This is a string!";//字符串数组 
	printf("%c\n",s);//输出字符串
	while(*p!='\0'){//字符串数组以\0结尾
		printf("%c",*p) ;
		p++;
	} 
}
  • 冒泡排序
    经典中的经典,冒泡排序算法。将乱序排列的数字按从小到大的顺序排列,大数沉底,小数上浮。
#include<stdio.h>
#define N 5
main(){
	int a[N],i,j,t,*p;
	for(p = a;p < a+N;p++){
		scanf("%d",p);
	}
	for(i = 0;i < N-1;i++){
		for(j = 0;j < N-i-1;j++){
			if(a[j] > a[j+1]){
				t = a[j+1];
				a[j+1] = a[j];
				a[j] = t;
			}
		}
	}
	for(p = a;p < a+N;p++){
		printf("%6d",*p);
	}
}
  • 二分法查找有序数组中的数
#include<stdio.h>
#define N 6
main(){
	int a[6]={-22,-11,2,6,9,23},*p;
	p = a;
	int low = 0,high = 5;
	int x,m;
	scanf("%d",&x);
	while(low <= high){
		m = (low+high)/2;
		if(x == *(p+m))
			break;//注意跳出循环!
		else if(x > *(p+m)){
			low = m+1;
		}	
		else{
			high = m-1;
		}
	}
	if(low <= high){
		printf("%d positon is %d",x,m);
	}
	else
		printf("Not found\n");
}
  • 在有序数组中插入一个数,使之仍然有序
#include <stdio.h>
#define N 11
main(){
	int a[N] = {-3, -1, 8,16 ,22,23,25,34,47,65};
	int i,j,x,*p;
	scanf("%d",&x);
	for(i = 0,p = a;x > *p && i < N-1; p++,i++);
	for(j = N - 1;&a[j]!=p;j--){
		a[j]=a[j-1]; 
	}
	*p = x;
	for(i = 0 ;i < N; i++){
		printf("%6d",a[i]);
	}
}

上边代码两个for循环用到指针的知识,大家不要混淆,如果有不理解,欢迎评论区骚扰。今天就到这啦!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值