二元一次方程无实根情况
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;