第四章:选择程序设计

二元一次方程无实根情况

disc = b * b - 4 * a * c;
	if (disc < 0)//也可用fabs(disc)<1e-6
		printf("无实根\n");
	else
	{
		p = -b / (2.0 * a);
		q = sqrt(disc) / (2.0 * a);
		x1 = p + q;
		x2 = p - q;
		printf("x1=%7.2f\nx2=%7.2f", x1, x2);
	}

升序输出两实数

if (a > b)
	{
		t = a;
		a = b;
		b = t;
	}

函数域分段

if (number > 500)//也可以用整型和swich性质选择
	{
		cost = 0.15;
	}
	else if (number > 300)
	{
		cost = 0.10;
	}
	else if (number > 100)
	{
		cost = 0.075;
	}
	else if (number > 50)
	{
		cost = 0.05;
	}

逻辑性变量

bool a, b;
	a = t >= 60;
	b = t < 70;
	if(a==true&&b==true)
		printf("成绩属于C级\n");

max函数的符号等效

max = (a > b) ? a : b;
	printf("%5.2f\n", max);
	return 0;

利用上面函数的性质,将输入的字符的大小写互换

char ch;
	scanf_s("%c", &ch);
	ch = (ch >= 'A' && ch <= 'Z') ? (ch + 32) : ch;//满足前面条件就ch+32,不满足就ch
	printf("%c\n", ch);

简单的分段函数

if (y < 0)
	{
		a = -1;
	}
	else if (y == 0)
	{
		a = 0;
	}
	else if (y > 0)
	{
		a = 1;
	}
	else
		printf("error\n");
	printf("%5.2f\n", a);

swich依据输入的字符选择输出

switch (grade)
	{
	case'a':
	case'A':printf("85-100\n"); break;
	case'b':
	case'B':printf("70-84\n"); break;
	case'c':
	case'C':printf("60-69\n"); break;
	case'd':
	case'D':printf("0-59\n"); break;
	default:printf("error\n");
	}

swich同上

switch (ch)
	{
	case'a':
	case'A':actional(a,b); break;
	case'b':
	case'B':action2(a,b); break;
	default:printf("error\n");
	}

判断闰年的详细算法

	{
		if (year % 100 == 0)
		{
			if (year % 400 == 0)
				leap = 1;
			else
				leap = 0;
		}
		else
			leap = 1;
	}
	else
		leap = 0;
	if (leap)
		printf("%d年是闰年\n", year);
	else
		printf("%d年不是闰年\n", year);
在这里插入代码片

二元一次包括虚根的解

if (fabs(a) <= 1e-6)//判断a是否为零的更准确的算法
        printf("这不是一个二元一次方程\n");
    else
    {
        disc = b * b - 4 * a * c;//▲
        if (fabs(disc) <= 1e-6)//▲=0,注意【fabs(disc)是指取disc的绝对值】
            printf("方程有两个相等根%8.4f\n",-b/(2*a));
        else
            if(disc>1e-6)//▲>0
            {
                p = -b * (2.0 * a);//利用p = -b * (2.0 * a)    q = sqrt(disc) / (2.0 * a)来简化解的形式,使函数易读
                q = sqrt(disc) / (2.0 * a);//
                x1 = p + q;x2 = p - q; 
                printf("方程有两不同实根\n");
                printf("x1=%8.4f\nx2=%8.4f\n", x1, x2); }
            else
            {
                realpart = -b / (2 * a);//一个复数的实部
                imagpart = sqrt(-disc) / (2 * a);//一个复数的虚部
                printf("方程有两虚根\n");
                printf("%8.4f+%8.4fi\n", realpart, imagpart);//一个复数解的形式
                printf("%8.4f-%8.4fi\n", realpart, imagpart);
            }
    }

处理溢出数据的方法

int c, s;
	float p, w, d, f;
	printf("输入p,w,s的值\n");
	scanf_s("%f%f%d", &p, &w, &s);
	if (s >= 3000)c = 12;//这道题在理解上很简单,但是难点在于如何处理数据溢出
	else c = s / 250;//用整型处理数据,降低树蕨复杂度
	switch (c)
	{
	case 0:d = 0; break;
	case 1:d = 2; break;
	case 2:
	case 3:d = 5; break;
	case 4:
	case 5:
	case 6:
	case 7:d = 8; break;
	case 8:
	case 9:
	case 10:
	case 11:d = 10; break;
	case 12:d = 15; break;
	}
	f = p * w * s * (1 - d / 100);

输出三个实数的最大值

m = (a > b) ? a : b;
	n = (b > c) ? b : c;
	max = (m > n) ? m : n;

平方根

int a;
    double b;
    printf("请输入一个小于1000的正数\n");
    scanf("%d",&a);
    if(a>0&&a<1000)
    {
        b=sqrt(a);//sqrt()函数的标准数据结构是double,但是用int也可
        printf("平方根是:%2.0f\n",b);
    }
    else
        printf("error\n");

swich加上整型进行输出分类


    int iNum;
    scanf_s("%d",&iNum);
    if(iNum<0||iNum>100)//输出错误数据
        printf("error\n");
    else
        switch(iNum/10)//利用整型的性质
        {
    case 10:printf("A\n");break;
    case 9:printf("A\n");break;
    case 8:printf("B\n");break;
    case 7:printf("C\n");break;
    case 6:printf("D\n");break;
    default:printf("E\n");break;
    }

判断一个数是几位数,并且输出个到百位

if(a>=100000)//处理错误的数据
        printf("error\n");
    else
        printf("这个数从个位依次排列为:\n");
        while(a>0)//判断输入的有几位数字,利用整型的性质,也可以存进一个数组里在修改
    {
        printf("%d\t",a%10);//a%10指代a的个位数
        a=a/10;//a的十位数
        b++;//执行一次循环,b+1
        }
        printf("这个数是%d位数\n",b);

分段函数的处理方法,如果函数有六段,则设置5个中间饱和量

 double bonus,bon1,bon2,bon4,bon6,bon10;//分段函数的处理方法,如果函数有六段,则设置5个中间饱和量
    bon1=100000*0.1;
    bon2=bon1+100000*0.075;
    bon4=bon2+100000*0.05;
    bon6=bon4+100000*0.03;
    bon10=bon6+400000*0.015;
    printf("输入利润i\n");
    scanf("%d",&i);
    if(i<=100000)
        bonus=i*0.1;
    else if(i<=200000)
        bonus=bon1+(i-100000)*0.075;
    else if(i<=400000)
        bonus=bon2+(i-200000)*0.05;
    else if(i<=600000)
        bonus=bon4+(i-400000)*0.03;
    else if(i<=1000000)
        bonus=bon6+(i-600000)*0.015;
    else
        bonus=bon10+(i-1000000)*0.01;
    printf("奖金是%10.2f\n",bonus);

swich加上整型处理上题

 double bonus,bon1,bon2,bon4,bon6,bon10;
    int branch;
    bon1=100000*0.1;
    bon2=bon1+100000*0.075;
    bon4=bon2+100000*0.05;
    bon6=bon4+100000*0.03;
    bon10=bon6+400000*0.015;
    printf("输入利润i\n");
    scanf("%d",&i);
    branch=i/100000;
    if(branch>10)
        branch=10;//利用整型的性质
    switch(branch)
    {case 0:bonus=i*0.1;break;
    case 1:bonus=bon1+(i-100000)*0.075;break;
    case 2:
    case 3:bonus=bon2+(i-200000)*0.05;break;
    case 4:
    case 5:bonus=bon4+(i-400000)*0.03;break;
    case 6:
    case 7:
    case 8:
    case 9:bonus=bon6+(i-600000)*0.015;break;
    case 10:bonus=bon10+(i-1000000)*0.01;break;
    }

冒泡排序的标准形式

for(i=0;i<4;i++)//一维数组冒泡排序的标准形式
    {
        if(a[i]>a[i+1])
        {
            m=a[i];
            a[i]=a[i+1];
            a[i+1]=m;
        }
    }
    for(i=0;i<4;i++)
        printf("%d",a[i]);

坐标系

float x1=2,x2=-2,x3=-2,x4=2,y1=2,y2=2,y3=-2,y4=-2,x,y,d1,d2,d3,d4;
    printf("输入一个点的坐标(x,y)\n");
    scanf("%f%f",&x,&y);
    d1=(x-x1)*(x-x1)+(y-y1)*(y-y1);
    d2=(x-x2)*(x-x2)+(y-y2)*(y-y2);
    d3=(x-x3)*(x-x3)+(y-y3)*(y-y3);
    d4=(x-x4)*(x-x4)+(y-y4)*(y-y4);
    if(d1>1&&d2>1&&d3>1&&d4>1)//处理边界外的数据
        h=0;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值