本节介绍c语言的编程实例。

    (1)求方程ax^2+bx+0的解:

方程有解有以下几种可能:

1.b^2-4ac=0,方程有两个相等实根。

2.b^2-4ac>0,方程有两个不等实根。

3.b^2-4ac<0,方程有两个共轭复根。

程序中需要判断b^2-4ac是否等于0,由于它是实数,在存储时会有一些微笑的误差,因此不能直接进行(b*b-4ac)==0的判断。因为这样可能会出现本来是0的量,由于上述误差被判断不等于0而导致错误的结果。所以采取的办法是判别其绝对值是否小于一个很小的数(例如10^-6),如果小于此数,就认为它等于0.

 #include<stdio.h>
#include<math.h> int main(){
double a,b,c,disc,x1,x2,realpart,imagpart;
scanf("%lf,%lf,%lf",&a,&b,&c);//输入三个数据时用逗号作为分隔符
disc=b*b-*a*c;
if(fabs(disc)<=1e-)
printf("has two equal roots:%8.4lf\n",-b/(*a));
else if(disc>1e-){
x1=(-b+sqrt(disc))/(*a);
x2=(-b+sqrt(disc))/(*a);
printf("has distinct real roots:%8.4lf\n",-b/(*a));
}
else{
realpart=-b/(*a);
imagpart=sqrt(-disc)/(*a);
printf("has complex roots:\n");
printf("%8.4lf+%8.4lf i \n",realpart,imagpart);
printf("%8.4lf+%8.4lf i \n",realpart,imagpart);
}
return ;
}

      (2)从键盘输入年号和月号,试计算改年该月共有几天:

 #include<stdio.h>

 int main(){
int year,month,days=;
printf("please input year and month:(use \',\' to distinct)\n");
scanf("%d,%d",&year,&month); switch(month){
case :
case :
case :
case :
case :
case :
case :days=;break;
case :
case :
case :
case :days=;break;
case :
if(year%==&&year%!=||year%==)
days=;
else
days=;
break;
default:
printf("Data error!");
}
printf("%d年%d月有%d天\n",year,month,days);
return ;
}

    (3)输入今天的日期y(年),m(月),d(日),输出明天的日期:

 #include<stdio.h>

 //验证输入值是否正确的函数
4 int valid(int y,int m,int d){
if(y<=|m<|m>|d>|d<){
printf("Input errors!");
return ;
}
else
return ;
} //进行运算的过程函数,输出结果的算法
void outTom(int y, int m,int d){
d++;
switch(d){
case :{
d=;
m++;
if(m==){
m=;y++;
}
break;
}
case :{
switch(m){
case :
case :
case :
case :
case :
case :
case :
{
break;
}
case :
case :
case :
case :
{
d=;
m++;
break;
}
default:
printf("This month has no such day!"); }
break;
}
case :{
if((m==)&&((y%==)||(y&==&&y%!=))){
m++;
d=;
}
break;
}
case :{
if(!((y%==)||(y&==&&y%!=))){
m++;
d=;
}
break;
}
default: break; }
printf("Tomorrow is %d/%d/%d",y,m,d);
} int main(){
//第一步完成数据的输入
int y,m,d;
printf("please input the date today:year,moth,day,using \',\' to distinct!\n");
scanf("%d,%d,%d",&y,&m,&d);
//完成数据的验证
if((valid(y,m,d))==){
return ;
}
printf("The date today is %d/%d/%d\n",y,m,d);
//输出结果
outTom(y,m,d);
return ;
}

(4)用两种方法求平方根:

1.用迭代法求数a的平方根Xn=1/2*(Xn-1)+a/Xn-1),取a/2作为迭代的初值,迭代结束条件取|Xn-Xn-1|<=10e-5:

 #include<stdio.h>
#include<math.h> int main(){
float a,x0,x1;
scanf("%f",&a);
x1=a/;
do{
x0=x1;
x1=(x0+a/x0)/;
}while(fabs(x1-x0)>1e-);
printf("a=%f,squart(a)=%f\n",a,x1);
return ;
}

2.用二分法求数a的平方根:

 #include<stdio.h>
#include<math.h> float find(float low,float high,float a){
float middle=(low+high)/;
if(middle*middle<fabs(a))
return middle;
else if(middle*middle>a)
high=middle;
else if(middle*middle<a)
low=middle;
float result=find(low,high,a);
return result;
} float sqt(float in){
float low,high;
if(in<){
low=;
high=;
}
else{
for(int i=;i<=in;i++){
if((float)i*i==in)
return (float)i;
else if(i*i<in&&(i+)*(i+)>in){
low=(float)i;
high=(float)(i+);
}
}
}
return find(low,high,in);
} int main(){
float a,result;
printf("please input a float number:\n");
scanf("%f",&a);
if(a<){
printf("Input error!");
return ;}
result=sqt(a);
printf("Squrt(%f)=%f",a,result);
return ;
}

    (5)利用公式求sinX的近似值:

sinx=x-x^3/3!+x^5/5!-x^7/7!+.....+(-1)^(2n+1)/(2n+1)!

这里x是弧度。这是一个级数求和问题。

 #include<stdio.h>
#include<math.h> int main(){
int k,i,n;//这里n是控制精确度的,n越大精确度越高。
double s,a,b,x;
scanf("%d%lf",&n,&x);
s=;
x=x*3.141593/;//将输入的角度转化为弧度
for(int i=;i<=n;i++){
a=b=;
for(k=;k<=*i-;k++){
a=a*x;
b=b*k;
}
s=s+pow(-,i+)*a/b;
}
printf("sinx=%lf\n",s);
return ;
}

    (6)计算正弦曲线y=sin(x)在[0,PI]上与x轴所围成的平面图形的面积:

计算定积分的公式为:s=(h/2)*[f(a)+f(b)]+h*(从i=1到n-1)Ef(Xi),其中,Xi=a+ih,h=(b-a)/n,本例取n=100。

 #include<stdio.h>
#include<math.h> int main(){
int i,n;
double a,b,h,s;
printf("Input a b:");
scanf("%lf%lf",&a,&b);
n=;
h=(b-a)/n;
s=0.5*(sin(a)+sin(b));
for(i=;i<=n-;i++){
s+=sin(a+i*h);
}
s*=h;
printf("s=%8.4lf\n",s);
return ;
}

    (7)找出100~999之间的所有"水仙花"数:

所谓"水仙花"数是指一个三位数,其各位数字的立方和等于该数其各位数字的立方和等于该数本身,例如153=1^3+3^3+5^3,所以153是水仙花数。

   方法一:

设100<=n<=999,i,j,k分别代表数n百位、十位,个位上的数字,则:

i=n/100

j=n/10%10

k=n%10

如果j^3+i^3+k^3=n,则n即为所求。

 #include<stdio.h>
#include<math.h> int main(){
int i,j,k,n;
for(n=;n<=;n++){
i=n/;
j=n/%;
k=n%;
if(n==(i*i*i+j*j*j+k*k*k))
printf("%d\n",n);
}
return ;
}

    方法二:

 #include<stdio.h>
#include<math.h> int main(){
int i,j,k;
int n;
for(i=;i<;i++)
for(j=;j<;j++)
for(k=;k<;k++){
n=i*+j*+k;
if((i*i*i+j*j*j+k*k*k)==n){
printf("%d是水仙花数!\n",n);
}
}
return ;
}

    (8)输入两个正整数m和n,求其最小公倍数:

 #include<stdio.h>

 int main(){
int a,b;
printf("Please input two int number: ");
scanf("%d%d",&a,&b);
if(a<=|b<=)
printf("Input error!");
for(int i=a>b?a:b;;i++){
if(i%a==&&i%b==){
printf("最小公倍数是%d",i);
break;
}
}
return ;
}

更好的算法:

 #include<stdio.h>

 int main(){
int a,b;
int n;
printf("Please input two int number: ");
scanf("%d%d",&a,&b);
if(a<=|b<=)
printf("Input error!");
n=a>b?a:b;
for(int i=;;i++){
if((i*n)%a==&&(i*n)%b==){
printf("最小公倍数是%d",i*n);
break;
}
}
return ;
}

    (9)编写程序读入n,输出不超过n的所有完全数:

如果一个正整数的因子所有之和等于该正整数,则称这个正整数为完全数。

 #include<stdio.h>

 int main(){
int n;
int k;
int s;
printf("Please input a number:\n");
scanf("%d",&n);
for(k=;k<=n;k++){
s=;
for(int i=;i<k;i++){
if(k%i==)
s+=i;
}
if(s==k){
printf("%d是完全数!",k);
}
}
return ;
}

c的详细学习(4)选择结构与循环结构的编程练习的更多相关文章

  1. 大数据学习--day04(选择结构、循环结构、大数据java基础面试题)

    选择结构.循环结构.大数据java基础面试题 switch: 注意: byte short int char String(jdk1.7支持) 不能是 long float double boolea ...

  2. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  3. Chrome弹窗的简单应用(选择结构与循环结构)

    ★选择结构★ ★JS实现弹窗显示随机数 示例代码效果图   ★ 弹窗实现对随机数的进一步判断 示例代码效果图 ★综合应用   比较大小 ★ 判断成绩等级 ): : : : : alert(" ...

  4. Java程序流程控制:判断结构、选择结构、循环结构

    本文内容: 判断结构 if 选择结构 switch 循环结构 while do-while for for each break.continue return 首发时间:2017-06-22 21: ...

  5. java顺序结构、循环结构、选择结构

    java顺序结构.选择结构.循环结构 顺序结构: 语句与语句之间,框与框之间是从上到下的顺序进行的,它是由若干个依次执行的处理步骤执组成的,它是任何一个算法都不离开的一种基本算法结构. 选择结构: 1 ...

  6. 黑马程序员——JAVA基础之程序控制流结构之循环结构,循环嵌套

    ------- android培训.java培训.期待与您交流! ---------- 循环结构: 代表语句:while ,do while ,for while语句格式 : while(条件表达式) ...

  7. 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述

    039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...

  8. java系统化基础-day02-运算符、选择结构、循环结构

    1.java中的运算符 package com.wfd360.day02; import org.junit.Test; import java.math.BigInteger; /** * 1.算术 ...

  9. 黑马程序员——C语言基础 流程控制 选择结构和循环结构

    ---恢复内容开始--- Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)流程控制 1> 顺序结构:默认的流程 ...

  10. luogg_java学习_03_流程控制及循环结构

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 程序流程控制 顺序结构 分支结构:if-else,sw ...

随机推荐

  1. 单机Redis实现分布式互斥锁

    代码地址如下:http://www.demodashi.com/demo/12520.html 0.准备工作 0-1 运行环境 jdk1.8 gradle 一个能支持以上两者的代码编辑器,作者使用的是 ...

  2. LinkedHashMap的实现讲解

    http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html LinkedHashMap 是HashMap的一个子类,保存了记录的插入 ...

  3. C# 使用UUID生成各种模式方法

    UUID简单说明 常见的方式.可以利用数据库也可以利用程序生成,一般来说全球唯一. 优点: 1)简单,代码方便. 2)生成ID性能非常好,基本不会有性能问题. 3)全球唯一,在遇见数据迁移,系统数据合 ...

  4. C# string[ ][ ] 与string[,]

    1.string[][] 是一维数组,数组中的元素是string[],相当于锯齿数组 例如:string[][] arrar = new string[][] {                  n ...

  5. 不需要Root即可Hook别人APP的方法

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  6. 解决Incorrect integer value: &#39;&#39; for column &#39;id&#39; at row 1的方法

    在使用Navicat for MySQL还原数据库备份时.出现Incorrect integer value: '' for column 'id' at row 1的错误; 网上查资料发现5以上的版 ...

  7. 使用OSChina代码托管管理项目(四)

    本篇主要介绍使用Eclipse的Egit插件克隆远程project到本地的操作步骤 一.在Git资源库管理视图中新建一个远程资源库位置 点击红框中button进行加入 二.输入远程资源库相关信息.选择 ...

  8. python单元测试unittest实例详解

    转自:http://blog.csdn.net/five3/article/details/7104466 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也 ...

  9. AI关注的网址

    中科院计算技术研究所博士招生:http://admission.ucas.ac.cn/info/ZhaoshengDanweiDetail/9adf9e50-424b-44c8-b2dc-900ef9 ...

  10. 题目3 : Fibonacci

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Given a sequence {an}, how many non-empty sub-sequence of it ...