目录
一、顺序程序设计
1.求三角形面积
area = s=(a+b+c)/2
#include <stdio.h>
#include <math.h>
int main ()
{
double a,b,c,s,area;
scanf("%lf %lf %lf",a,b,c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%f\tb=%f\tc=%f\n",a,b,c;
printf("area=%f\n",area);
return 0;
}
二、选择结构程序设计
1.判断是非为闰年
闰年条件:①能被4整除并且不能被100整除。②能被400整除。
#include <stdio.h>
int main()
{
int year,leap;
printf("enter year:");
scanf("%d",&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap)
printf("%d is",year);
else
printf("%d is not",year);
printf("a leap year.\n");
return 0;
}
2.求
方程的解
解题思路:
①a=0,不是二次方程。
②,有两个相等实根
③,有两个不等实根。
④,有两个共轭复根。应当以p+qi和p-qi的形式输出复根。
#include <stdio.h>
#include <math.h>
int main()
{
double a,b,c,disc,x1,x2,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);
printf("The equation");
if(fabs(a)<=1e-6)
printf("is not a quadratic\n");
else
{
disc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("has two equal roots:%8.4f\n",-b/(2*a));
else
if(disc>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distinct real roots: %8.4f and %8.4f\n",x1,x2);
}
else
{
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("%8.4f+%8.4fi\n",realpart,imagpart);
printf("%8.4f-%8.4fi\n",realpart,imagpart);
}
}
return 0;
}
3.斐波那契数列
描述:F1=1(n=1) F2=1(n=2) Fn=F(n-1)+F(n) 括号内为下标(n>=3)
#include <stdio.h>
#include <math.h>
int main()
{
int f1=1,f2=1,f3;
int i;
printf("%12d\n%12d\n",f1,f2);
for(i=1;i<=38;i++)
{
f3=f1+f2;
printf("%12d\n",f3);
f1=f2;
f2=f3;
}
return 0;
}
程序改进
#include <stdio.h>
#include <math.h>
int main()
{
int f1=1,f2=1;
int i;
for(i=1;i<=20;i++)
{
printf("%12d %12d",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f2+f1;
}
return 0;
}
4.输出一个大于3的整数n,判断它是否为素数
#include <stdio.h>
int main()
{
int n,i;
printf("please enter a integer number,n=");
scanf("%d",&n);
for(i=2;i<n;i++)
if(n%i==0) break;
if(i<n) printf("%d is not prime number.\n",n);
else printf("%d is a prime number.\n",n);
return 0;
}
程序改进
其实n不必被2~(n-1)的个整数去除,秩序被2~的整数除即可。
开根号法:从2到n均整除判断,时间复杂度O()(原因:素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt(c) ,一个小于sqrt(c) 。所以m必有一个小于或等于其平方根的因数,那么验证素数时就只需要验证到其平方根就可以了。即一个合数一定含有小于它平方根的质因子。)
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,k;
printf("please enter a integer number,n=");
scanf("%d",&n);
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0) break;
if(i<=k) printf("%d is a prime number.\n",n);
else printf("%d is a prime number.\n",n);
return 0;
}
5.输入两个正整数m和n,求其最大公约数和最小公倍数
辗转相除法
将较大的数跟较小的数相除,将余数设为下一轮的除数,该轮除数设为下一轮被除数,当该轮相除结果取余等于0时,该轮的除数即为最大公约数。
e.g. 输入 76 16
模拟过程:76/16 4/12
16/12 1/4
12/4 3/0
int main()
{int a,b,c,m,t;
printf("请输入两个数:\n");
scanf("%d%d",&a,&b);
if(a<b)
{
t=a;a=b;b=t;
}
m=a*b; c=a%b;
while(c!=0)
{
a=b; b=c; c=a%b;
}
printf("最大公约数是:\n%d\n",b);
printf("最小公倍数是:\n%d\n",m/b);
}
6.水仙花数
#include <stdio.h>
int main()
{
int hun, ten, ind, n;
printf("result is:");
for( n=100; n<1000; n++ ) /*整数的取值范围*/
{
hun = n / 100;
ten = (n-hun*100) / 10;
ind = n % 10;
if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind) /*各位上的立方和是否与原数n相等*/
printf("%d ", n);
}
printf("\n");
return 0;
}
7.猴子吃桃
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第十天早上在想吃时,就只剩一个桃子了.求第一天共摘了多少个桃子?
#include <stdio.h>
int main()
{
int day,x1,x2; /*定义 day、x1、x2 3 个变量为基本整型*/
day=9;
x2=1;
while(day>0)
{
x1=(x2+1)*2; /*第一天的桃子数是第二天桃子数加1后的2倍*/
x2=x1;
day--; /*因为从后向前推所以天数递减*/
}
printf("the total is %d\n",x1); /* 输出桃子的总数*/
return 0;
}
三、数组程序设计
1.杨辉三角形
#include <stdio.h>
#define N 5
int main()
{
int i,j,n=0,a[17][17]={0};
while(n<1||n>16)
{
printf("请输入杨辉三角形的行数:");
scanf("%d",&n);
}
for(i=0;i<n;i++)
a[i][0]=1;
for(i=0;i<n;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<n;i++)
{ for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}