【C】Practise1
来源:互联网 发布:爱丁堡 人工智能 编辑:程序博客网 时间:2024/05/04 14:10
【练手1】几个小习题
#include <stdio.h>
#include <math.h>
void main()
{
void PrintScores();//functionsPrototype declarations
void CalculateMultip();
void LeapYear(unsigned,unsigned);
void SequenceCal(int);
void JudgePrimeNumber();
void ComDivisorAndMultiple();
CalculateMultip();//functions call
PrintScores();
LeapYear(2000, 2500);
SequenceCal(10);
JudgePrimeNumber();
ComDivisorAndMultiple();
}
///////////////eg6.最大公约数与最小公倍数/////////////////////
倍数和约数:两个自然数a,b,若a能被b整除,则a为倍数,b为约数
void ComDivisorAndMultiple()
{
unsigned m= 0, n = 0, M_Divisor, N_Divided, res = 0, MinMultiple =0;
scanf("%d%d", &m, &n);
if(m>0 && n>0)
{
if(m > n)
{
M_Divisor = m;
N_Divided = n;
}
else
{
M_Divisor = n;
N_Divided = m;
}
res = M_Divisor%N_Divided;
while(res != 0)
{
M_Divisor = N_Divided;
N_Divided = res;
res = M_Divisor%N_Divided;
}
printf("The Max CommonDivisor is:%d\n", N_Divided);
MinMultiple = (m * n)/N_Divided;
printf("The Min CommonMultiple is:%d\n", MinMultiple);
}
else
printf("Error!\n");
}
/////////////////////P17.eg5,判素数//////////////////////////
素数:1)只能被1和自身整除的数!2)判别范围2~sqrt(n)截止!
#define PrimeNum 10
void JudgePrimeNumber()
{
unsigned i,j, PrimeNumber[PrimeNum], Flag = 0, PrimeJudge;
for(i=0; i<PrimeNum; i++)
scanf("%d",&PrimeNumber[i]);
for(i=0; i<PrimeNum; i++)
{
/*///*for(j=2; j<10;j++)////////////////////////////
{
if(PrimeNumber[i]%j ==0)//1.判据错误!25.26.disabled
Flag++;
}
if((2 == Flag) || (1 == Flag))
printf("ThePrimeNumber is:%d\n", PrimeNumber[i]);
else
printf("The Otheris:%d***\n", PrimeNumber[i]);
Flag = 1;///////////////////////////*/
PrimeJudge = (unsigned)sqrt(PrimeNumber[i]);
for(j=2; j<=PrimeJudge; j++)
{
if(PrimeNumber[i]%j == 0)
Flag++;
}
if(Flag || (1==PrimeNumber[i]))
printf("The Otheris:%d***\n", PrimeNumber[i]);
else
printf("ThePrimeNumber is:%d\n", PrimeNumber[i]);
Flag = 0;
}
}
/////////////////////P17.eg4,求和数列//////////////////////////
新手,易忽略的细节比较多啊~
void SequenceCal(int Count)
{
int i; //2.Sum必须初始化,否则为乱码!
float Sum= 0, Num; //3.Sum, Num不能作为int型
for(i=1; i <= Count; i++)//1.当i=0时会蹦出调试界面,提示遇到问题要关闭!因为0不能作分母!!!
{
Num = (float)(1.0/i);//0不能作分母!!!//4.不能写作(1/i,否则得到的是整数0)
if(i%2)
Sum += Num;
else
Sum -= Num;
printf("%f, %f\n", Num,Sum);
}
}
/////////////////////P16.eg3,判断闰年//////////////////////////
1.能被4整除,但不能被100整除;
2.能被100整除,且能被400整除;
条件之一满足即可!
voidLeapYear(unsigned StartYear, unsigned EndYear)
{
unsigned star, LeapYearNum = 0;
for(star = StartYear; star <= EndYear;star++)
{
if(((0 == star%4) &&(star%100)) || (0 == star%400))
{
printf("%d\n",star);
LeapYearNum ++;
}
}
printf("********%d********\n",LeapYearNum);
}
//////////////////P15,eg2.打印80分以上的学生/////////////////
#define STDNUM 5//define never has ";"
struct student
{
unsigned Num;
unsigned Score;
char Name[20];
}std[STDNUM];
voidPrintScores()
{
unsigned i;
for(i=0; i<STDNUM; i++)
scanf("%d,%d,%s",&std[i].Num, &std[i].Score, &std[i].Name);
for(i=0; i<STDNUM; i++)
if(std[i].Score < 80)
printf("%d,%d,%s\n",std[i].Num, std[i].Score, std[i].Name);
}
///////////////P15,eg.1【n的阶乘n!】///////////////////
void CalculateMultip()
{
unsigned long Sum, SumOdd, SumEven, i, Number;
Sum = SumOdd =SumEven = 1;
scanf("%d", &Number);
for(i=1; i<=Number; i++)
{
Sum *= i;//【n!】
printf("%d\n", Sum);
}
for(i=1; i<=Number; i++)
{
if(i%2)
{
SumOdd *= i;
printf("%d***\n",SumOdd);//【1*3*5*7*9...】
}
else
{
SumEven *= i;
printf("%d\n",SumEven);//【2*4*6*8*10...】
}
}
}
说明:
输入两个正整数m和n,求其最大公约数和最小公倍数.
<1>用辗转相除法求最大公约数
算法描述: m对n求余为a, 若a不等于0 ;则m <- n, n <- a, 继续求余 ;否则n 为最大公约数;
<2>最小公倍数 = 两个数的积/ 最大公约数
★ 关于辗转相除法, 搜了一下,在我国古代的《九章算术》中就有记载,现摘录如下:
约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
辗转相除法求最大公约数,是一种比较好的方法,比较快。
<3>用欧几里德算法(辗转相除法)求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止。那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互
质数)。
例如求1515和600的最大公约数,
第一次:用600除1515,商2余315;
第二次:用315除600,商1余285;
第三次:用285除315,商1余30;
第四次:用30除285,商9余15;
第五次:用15除30,商2余0。
1515和600的最大公约数是15。
<4>两个正整数的最小公倍数=两个数的乘积÷两个数的最大公约数
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个
数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。
例 求105和42的最小公倍数。
因为105和42的最大公约数是21,
105和42的积是4410,4410÷21=210,
所以,105和42的最小公倍数是210。
#include<math.h>
int 型
intabs(int x);
long 型
longlabs(int x);
浮点数 float double
doublefabs(double x);
- 【C】Practise1
- 循环控制Practise1
- Python-例题practise1
- c
- c
- c
- c
- C
- c
- c
- c
- C+
- c
- C
- c
- c
- c
- C
- WebKit中的Chrome和ChromeClient
- 字符串操作函数实现
- POJ3083 Children of the Candy Corn 搜索
- 潜入维基解密机房 更新中文视频+高清图
- service的生命周期
- 【C】Practise1
- xcode编译环境配置
- c++ 数组和指针
- 经历~
- 活动公告:201109011530
- linxu s3c2440 LCD驱动 测试程序
- MMU的简单介绍
- 支持有道词典单词本更新
- h.264 SODB RBSP EBSP的区别