xcode-C语言出接触_基本概念

要点1:数据类型 

char  1; short 2; int float 4 ;double 8; long 应与系统的位数有关;

要点2;转换格式控制: 

printf("%04d",12);//不足位补0;

printf("%-4d",14);//左对齐

printf("%m.nf",123.456);

其中m是输出宽度,n是精度,f是格式化控制符

m指定的是输出数字字符串的最小长度,比如你输出

printf("%2.3f" , 123.456 ); //由于实际输出的数字123.456共有7个字符,大于2个字符数量,所以这里的2其实实际上没起到什么作用,不过如果你printf("%8.3f" , 123.456 );8-7=1,那么结果将在数字前面补一个空格字符,使用printf( "%08.3f" , 123.456 );则是补一个字符'0'

所以e如果存在于被输出的数字串里的话(比如使用%e),它也是要占用m的计数的,包括小数点。

n则是指定输出精度,也就是小数点后保留几位,默认不指定.n的时候printf会自动调整输出到默认精确位,如果指定了n的话,printf则把数字保留小数点后n位输出。

所以printf( "%f",  123.456 );如果输出123.456000的话,那么printf("%.2f",  123.456 );则输出123.46

 要点3:printf();转换符与对应类型

 转化符      类型

%d           int 

%sd        short 

%c          char 

%f         float double 

%ld        long    

要点4:辗转相除法

简单的想法

  设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用b除a,得a÷b=q......r1(0≤r1)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b÷r1=q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零除数即为(a,b)。

原理

设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a mod b 为a除以b以后的余数,k为a除以b的商,即a÷b=k.......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。
第一步:令c=gcd(a,b),则设a=mc,b=nc
第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根据第二步结果可知c也是r的因数
第四步:可以断定m-kn与n互质【否则,可设m-kn=xd,n=yd,(d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公约数成为cd,而非c,与前面结论矛盾】
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。
 伪代码
这个算法可以用递归写成如下:
function gcd(a,b) {
if b<>0
return gcd(b,a mod b);
else
return a;
}

C语言实现

/*题目:输入两个正整数,求其最大公约数。*/
#include <stdio.h>
unsigned gcd ( unsigned,unsigned ) ;
int main( void )
{
unsigned m,n;
printf("请输入两个正整数:");
scanf("%u%u",&m,&n);
printf("%u与%u的最大公约数为:%u\n",m,n,gcd ( m,n ) );
return 0;
}
/* 功能:返回正整数m和n的最大公约数*/
unsigned gcd ( unsigned m,unsigned n )
{
unsigned temp;
if (m<n)
{
temp=m;
m=n;
n=temp;
}
if ( m % n == 0)
{
return n;
}
else
{
return gcd ( n,m % n) ;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值