//选择结构
//例4.1求根
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main() {
double a, b, c;
scanf("%lf%lf%lf", &a, &b, &c);//输入abc
double d;
double x1, x2;
d = b * b - 4 * a * c;//算出得他值
if (d < 0) {
printf("无实根\n");
}
else if(d==0){
printf("有两个相等实根:\n");
x1 = x2 = (-b + sqrt(d)) / (2.0 * a);//2.0必须写不能漏
printf("%.2lf\n%.2lf\n", x1, x2);
}
else {
printf("有两个不相等实根:\n");
x1= (-b + sqrt(d)) / (2.0 * a);
x2= (-b - sqrt(d)) / (2.0 * a);
printf("%.2lf\n%.2lf\n", x1, x2);
}
return 0;
}
图4.1
//例4.2输入两个实数,按从小到大的顺序输出
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
double a, b;
scanf("%lf%lf", &a, &b);
double temp;
if (a > b) {//如果是从大到小的顺序则交换
temp = a;
a = b;
b = temp;
}
printf("%.2lf %.2lf", a, b);
return 0;
}
图4.2
//例4.4判断输入的字符是否为大写如果是则转换为小写
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
char c;
scanf("%c", &c);
if (c >= 'A' && c <= 'Z') {//包含A和Z
c = c + ('a' - 'A');//大写ASCII小于小写
}
printf("%c", c);
return 0;
}
图4.3
//例4.5越阶函数,输入x求y
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//y=-1,(x<0)
//0(x=0)
//1(x>0)
int main() {
int x,y;
scanf("%d", &x);//输入x
if (x < 0) {//(x<0)
y = -1;
}
else if(x == 0) {//(x=0)
y = 0;
}
else {//(x>0
y = 1;
}
printf("%d", y);//输出y值
return 0;
}
图4.4
//按照成绩等级输出百分数分数段,switch case
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
char c;
scanf("%c", &c);//输入等级
switch (c) {
case 'A':printf("成绩为85-100\n"); break;//每一个都要加break
case 'B':printf("成绩为70-84\n"); break;
case 'C':printf("成绩为60-69\n"); break;
case 'D':printf("成绩为<60\n"); break;
default:printf("error\n"); break;
}
return 0;
}
图4.6
//例4.7简单菜单+函数+switch应用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//输入a或A调用Add函数,两个成绩相加
//输入b或B调用Mul函数,两个成绩相乘
//输入c或C调用Aver函数,求平均数
double Add(double a, double b) {//加法函数
double sum;
sum = a + b;
return sum;
}
double Mul(double a, double b) {//乘法函数
double sum;
sum = a * b;
return sum;
}
double Aver(double a, double b) {//求平均数
double sum;
sum = (a + b)/2.0;
return sum;
}
int main() {
printf("*****欢迎进入菜单*****\n");
printf("相加请按a或A\n");
printf("相乘请按b或B\n");
printf("求平均数请按c或C\n");
char c;
scanf("%c", &c);//先输字母后输数字
printf("请输入两门成绩:");
double a, b;
scanf("%lf%lf", &a, &b);
switch (c) {
case 'a':
case 'A': printf("结果为:%.2lf", Add(a, b)); break;//两数相加
case 'b':
case 'B':printf("结果为:%.2lf", Mul(a, b)); break;//两数相乘
case 'c':
case 'C': printf("结果为:%.2lf", Aver(a, b)); break;//求平均数
default:printf("error"); break;
}
return 0;
}
图4.7
//习题5,输入一个小于1000的数,输出平方根,没有则输出整数部分,大于1000重新输入
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main() {
int n;
scanf("%d", &n);
while(1){//不小于1000则一直循环
if (n > 1000) {
printf("请重新输入");
scanf("%d", &n);
}
else {
break;
}
}
n = sqrt(n);//小于1000,取平方根
printf("%d", n);
return 0;
}
图4.8
//习题9,输入n位数(n<5),输出n并逆序输出每一个数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//此代码能输入n>五位的数
int main() {
int n;
int sum = 1;//sum从一开始
int n2;
scanf("%d", &n);//输入一个数
n2 = n;//用另一个符号再存一便这个数
while (1) {
n2 = n2 % 10;//取末位数
printf("%d", n2);
n = n / 10;//舍末位数
if (n > 0) {
n2 = n;
sum = sum + 1;
}
else {
break;
}
}
printf(" %d",sum);
return 0;
}
图4.9