本节介绍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. PLSQL Developer设置及快捷键设置

    1.登录后默认自动选中My Objects 默认情况下,PLSQL Developer登录后,Brower里会选择All objects,如果你登录的用户是dba,要展开tables目录,正常情况都需 ...

  2. 定制一个类似地址选择器的view

    代码地址如下:http://www.demodashi.com/demo/12832.html 前言: 这几天也是闲来无事,看看有什么和Scroller相关的控件需要巩固下,原因很简单,前几天看到相关 ...

  3. Eclipse.ini参数设置

    最近Eclipse不知道是由于项目过多还是其他原因导致Eclipse进程容易卡死,一卡死Workspace保存出错,项目就全都不见了,又得重新导入...鉴于此原因,自己也上网查询了相关资料,现整理如下 ...

  4. static 关键字的使用,静态和非静态类的区别

    直接以一个例子说明: using System; using System.Collections.Generic; using System.Diagnostics; using System.IO ...

  5. 设置VisualSVN在提交修改时必须输入一定数量的备注信息

    我发现在使用SVN中,提交时,很多人不习惯填写备注信息,虽然在培训中.平时使用时多次提醒备注信息的好处,但是效果不大,每次提交时还是不写,或者随便写两字. 所以很有必要通过系统设置强制填写足够数量的备 ...

  6. StringUtils工具类详解

    StringUtils判断字符串大概有四种方法: 下面是 StringUtils 判断是否为空的示例: 判断是否为空,但是要注意,空格不算空,这个最好能不用则不用. StringUtils.isEmp ...

  7. EularProject 39:给周长推断构成直角三角形个数

    华电北风吹 天津大学认知计算与应用重点实验室 完毕日期:2015/7/30 Integer right triangles Problem 39 If p is the perimeter of a ...

  8. Mybatis_遇到的问题汇总

    1.The setting logImpl is not known 我在参考某个网站学习mybatis时,出现这个错误,后来找到的原因是因为mybatis的版本(3.1.1)太低,换成3.3.1就没 ...

  9. getOutputStream() has already been called for this response的解决方法

    1.问题描述:spring mvc中下载文件结束后,跳转到list页面,问题报上面的异常. 2.原因:写文件的时候response调用一次,在跳转的时候,spring调用ActionForward类中 ...

  10. CentOS下使用yum快速安装memcached

    1. 查找Memcached yum search memcached 首先检查yum软件仓库中是否存在memcached,如果有 直接进入第3步安装即可,否则执行第2步. 2. 安装第三方软件库(可 ...