例题4-1
#include <stdio.h>
#include <math.h>
double a = 0, b = 0, c = 0;
double deta = 0;
double x1 = 0, x2 = 0;
int main(void)
{
printf("请输入a、b、c\n");
scanf("%lf%lf%lf", &a, &b, &c);
deta = b * b - 4 * a * c;
if (deta < 0)
printf("此方程无实根\n");
else
{
x1 = (-b + sqrt(deta)) / (2 * a);
x2 = (-b - sqrt(deta)) / (2 * a);
printf("x1 = %7.2f,x2 = %7.2f", x1, x2);
}
return 0;
}
例题4-2 输入两个实数,按由小到大的顺序输出这两个数。
#include <stdio.h>
//由题意知,输入的两个数是实数,所以代码这里定义为float类型。
float a = 0;
float b = 0;
float max = 0;
float min = 0;
int main(void)
{
printf("请输入两个数a和b\n");
scanf("%f%f", &a, &b);
if (a > b)
{
max = a;
min = b;
}
else if(a < b)
{
max = b;
min = a;
}
else
{
max = a;
min = b;
}
printf("min = %5.2f\n", min);
printf("max = %5.2f", max);
return 0;
}
例题4-3 输入3个数a、b、c,要求按由小到大的顺序输出。
#include <stdio.h>
//由题意知,输入的两个数是实数,所以代码这里定义为float类型。
float a = 0;
float b = 0;
float c = 0;
float bottle = 0;
int main(void)
{
printf("输入三个数a、b、c\n");// a b c
scanf("%f%f%f", &a, &b, &c); //冒泡排序法 例如:-5 1 -6
if (a > b)
{
bottle = a;
a = b;
b = bottle;
}
if (b > c)
{
bottle = b;
b = c;
c = bottle;
}
if (a > b) //this is very important
{
bottle = a;
a = b;
b = bottle;
}
printf("三个数从小到大为%5.2f,%5.2f,%5.2f", a, b, c);
return 0;
}
例题4-4 输入一个字符,判别他是否为大写字母,如果是,将它转换为小写字母。如果不是,不转换,然后输出最后得到的字符。
#include <stdio.h>
char a = 0;
int main(void)
{
printf("请输入一个字符\n");
//A ascii 65
//a ascii 97
scanf("%c", &a);
/*if ('A' <a < 'Z') //方法1
{
a = a + 32;
}*/
a = (a >= 'A' && a <= 'Z') ? (a + 32) : a; //方法2
printf("字符为%c\n", a);
return 0;
}
之后的程序讲解主要是程序思路讲解加程序代码的编写。
例题4-5
思路:本题目可以用if-else if-else的语句来实现。当然也可以使用if-else语句,这个时候需要进行if语句的嵌套。
方法1
#include <stdio.h>
float x;
int y;
int main(void)
{
printf("请输入x的值\n");
scanf("%f", &x);
if (x < 0)
y = -1;
else if (x == 0)
y = 0;
else
y = 1;
printf("输出的y的值y=%d", y);
return 0;
}
方法2
#include <stdio.h>
float x;
int y;
int main(void)
{
printf("请输入x的值\n");
scanf("%f", &x);
if (x < 0)
y = -1;
else
{
if (x == 0)
y = 0;
else
y = 1;
}
printf("输出的y的值y=%d", y);
return 0;
}
或者
float x;
int y;
int main(void)
{
printf("请输入x的值\n");
scanf("%f", &x);
if (x < 0)
y = -1;
else
{
y = 1;
if (x == 0) y = 0;
}
printf("输出的y的值y=%d", y);
return 0;
}
例题4-6
本题建议用switch方法来实现,最重要的一点当然是switch要了熟于心呀。下图是需要用到的函数,需要注意的是其中的表达式值得类型可以为整型和字符型。
#include <stdio.h>
char grade;
int main(void)
{
printf("请输入考试成绩等级\n");
scanf("%c", &grade);
switch (grade)
{
case 'A': printf("your score is 85 ~ 100\n"); break;
case 'B': printf("your score is 70 ~ 84\n"); break;
case 'C': printf("your score is 60 ~ 69\n"); break;
case 'D': printf("your score is 0 ~ 60\n"); break;
default : printf("message error,please type your grade again!\n");
}
return 0;
}
例题4-7
思路:本题依然需要使用switch语句,需要注意得是当满足’A’或’a’的时候均会执行A操作(这里的A操作可以任意,比如打印或者运行函数等等)。
#include <stdio.h>
char action;
int a = 5, b = 2;
void action1(int a, int b);
void action2(int a, int b);
int main(void)
{
//printf("请输出你的操作,输入A或a,可以执行加法操作,输入B或b,可以执行乘法操作\n");
printf("please type your action code\n");
printf("if you type A or a,this program will preform add action\n");
printf("if you type B or b,this program will preform multiply action\n");
action = getchar();
switch (action)
{
case 'A':
case 'a': action1(a,b); break;
case 'B':
case 'b': action2(a,b); break;
default: printf("message error,please type again");
}
return 0;
}
void action1(int a, int b)
{
printf("a + b = %d", a + b);
}
void action2(int a, int b)
{
printf("a * b = %d", a * b);
}
例题4-8
#include <stdio.h>
int year = 0;
int leap = 0;
//leap = 1 是闰年
//leap = 0 不是闰年
//年份能被4整除,不能被100整除。 例如:2004
//年份能被400整除。 例如:2400
int main(void)
{
printf("please type year\n");
scanf("%d", &year);
if (year % 4 == 0) //%表示求余
{
if (year % 100 == 0)
{
if (year % 400 == 0)
{
leap = 1;
}
else
{
leap = 0;
}
}
else
{
leap = 1;
}
}
else
{
leap = 0;
}
printf("leap = %d\n", leap);
if (leap)
printf("%d is leap year\n", year);
else
printf("%d is not leap year\n", year);
return 0;
}
例题4-9
//变量为double,我们一般定义为double类型
#include <stdio.h>
#include <math.h>
//数值初始化
double a = 0.0, b = 0.0, c = 0.0;
double deta = 0.0;
double x1 = 0.0, x2 = 0.0;
double real = 0.0, unreal = 0.0;
//这里需要考虑三种情况,deta = 0,deta >0,deta <0
int main(void)
{
printf("please type a value and b value and c value\n");
scanf("%lf%lf%lf", &a, &b, &c);
deta = b * b - 4 * a * c;
if (fabs(a) <= 1e-6)
{
printf("function come arcoss error");
}
else
{
if (fabs(deta) <= 1e-6)
{
x1 = x2 = -b / (2 * a);
printf("x1 = %f,x2 = %f\n", x1, x2);
}
else if (deta > 1e-6)
{
x1 = (-b + sqrt(deta)) / (2.0 * a);
x2 = (-b - sqrt(deta)) / (2.0 * a);
printf("x1 = %f,x2 = %f\n", x1, x2);
}
else if (deta < 1e-6)
{
real = -b / (2.0 * a);
unreal = sqrt(-deta) / (2.0 * a);
printf("x1 = %f + %fi,x2 = %f - %fi\n", real, unreal, real, unreal);
}
}
return 0;
}
例题4-10
#include <stdio.h>
//每吨每千米货物基本运费为p(price),货物重w(weight),距离为s(distance),折扣为d(discount),总运费为f(freight)
//f = p*w*s*(1-d)
int s = 0,c = 0;
double p, w, f, d;
int main(void)
{
printf("please enter price,weight,distance\n");
scanf("%lf%lf%d", &p,&w,&s);
if (s >= 3000)
d = 15;
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;
}
}
f = p * w * s * (1 - d/100);
printf("f = %10.2f", f);
return 0;
}
习题4-3
#include <stdio.h>
int a = 3, b = 4, c = 5;
int x = 0, y = 0;
int value1 = 0, value2 = 0, value3 = 0, value4 = 0,value5 = 0;
int main(void)
{
value1 = a + b > c && b == c;
//3+4>5 && 4 == 5
//先计算3+4为7 -->7>5 && 4 == 5
//接着计算7>5为1 -->1 && 4 == 5
//接着计算4 == 5为0 --> 1 && 0 == 0
printf("value1= %d\n", value1);
value2 = a || b + c && b - c;
//3||4+5 && 4-5
//先计算4+5为9 --> 3||9 && 4-5
//接着计算9 && 4为1 -->3||1-5
//接着计算1-5为-4 --> 3||-4 == 1
printf("value2= %d\n", value2);
value3 = !(a > b) && !c||1;
//!(3>4) && !5 ||1
//先计算3>4为0 --> !0 && !5 ||1
//接着计算!0为1 --> 1 && !5 ||1
//接着计算!5为0 --> 1 && 0 ||1
//接着计算 1 && 0为0 --> 0||1 == 1
printf("value3= %d\n", value3);
value4 = !(a + b) + c - 1 && b + c / 2;
//!(3+4)+5 -1 && 4 + 5/2
//先计算3+4为7 --> !7+5 -1 && 4 + 5/2
//接着计算!7为0 --> 0+5 -1 && 4 + 5/2
//接着计算0+5为5 --> 5 -1 && 4 + 5/2
//接着计算5 -1为4 --> 4 && 4 + 5/2
//接着计算5/2为2 --> 4 && 4 + 2
//接着计算 4 + 2为6 -->4 && 6 == 1
printf("value4= %d\n", value4);
value5 = !(x=a)&& (y = b)&& 0;
//!(x=3) && (y=4) && 0
//先计算x=3为3 --> !3 && (y=4) && 0
//接着计算y=4为4 --> !3 && 4 && 0
//接着计算!3为0 --> 0 && 4 && 0 = 0
printf("value5= %d\n", value5);
return 0;
}
习题4-4
#include <stdio.h>
int a = 0, b = 0, c = 0;
int a1 = 0, b1 = 0, c1 = 0;
int bottle = 0;
int main(void)
{
printf("please type a's value and b's value and c's value\n");
scanf("%d%d%d", &a, &b, &c);
a1 = a;
b1 = b;
c1 = c;
if (a1 > b1)
{
bottle = b1;
b1 = a1;
a1 = bottle;
}
if (b1 > c1)
{
bottle = c1;
c1 = b1;
b1 = bottle;
}
printf("max = %d", c1);
return 0;
}
习题4-5
从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是整数,则输出其整数。要求在输入数据后先对其进行检查是否小于1000的正数,若不是,则要求重新输入。
#include <stdio.h>
#include <math.h>
int a = 0;
int value = 0;
double value_f = 0.0;
int main(void)
{
scanf("%d", &a);
if (a >= 1000)
printf("the value is over 1000,you should type again");
else
{
value_f = sqrt(a);
printf("value_f = %f\n", value_f);
value = (int)(sqrt(a));
printf("value = %d\n", value);
}
return 0;
}
习题4-6
#include <stdio.h>
double x = 0.0, y = 0.0;
int main(void)
{
scanf("%lf",&x);
if (x < 1)
y = x;
else if(x>=1 && x<10)
y = 2 * x;
else
y = 3 * x - 11;
printf("x = %5.2f,y = %5.2f", x, y);
return 0;
}
习题4-7
第一个代码缺少一对括号。
第二个代码缺少一对括号。
习题4-8
#include <stdio.h>
char grade = 0;
int main(void)
{
printf("please type your grade\n");
grade = getchar();
switch (grade)
{
case 'A': printf(">=90"); break;
case 'B': printf("80~89"); break;
case 'C': printf("70~79"); break;
case 'D': printf("60~69"); break;
case 'E': printf("<60"); break;
default: printf("please type correct grade"); break;
}
return 0;
}
习题4-9
本题写的不是很完美,要求的功能是有的,待优化。
#include <stdio.h>
int number = 0;
int len = 0;
//for example 23456
int main(void)
{
printf("please type a number\n");
scanf("%d", &number);
printf("the number is %d\n", number);
if (number / 10000 == 0)
printf("please type correct number that compatible with the program\n");
else
{
if (number / 10000 != 0)
{
len = 5;
}
if (number / 100000 != 0)
{
len = 6;
}
if (len == 5)
{
printf("len = %d\n", len);
printf("%d,%d,%d,%d,%d\n", number / 10000, (number / 1000) % 10, (number / 100) % 10, (number / 10) % 10, number % 10);
printf("%d%d%d%d%d\n", number % 10, (number / 10) % 10, (number / 100) % 10, (number / 1000) % 10, number / 10000);
}
if (len == 6)
{
printf("len = %d\n", len);
printf("%d,%d,%d,%d,%d,%d\n", number / 100000, (number / 10000) % 10, (number / 1000) % 10, (number / 100) % 10, (number / 10) % 10, number % 10);
printf("%d%d%d%d%d%d\n", number % 10, (number / 10) % 10, (number / 100) % 10, (number / 1000) % 10, (number / 10000) % 10, number / 100000);
}
}
return 0;
}
注意:习题4-10、习题4-11这里不做证明。
习题4-12
#include <stdio.h>
double x = 0.0, y = 0.0;
int height = 0;
int main(void)
{
printf("please type x value and y value\n");
scanf("%lf%lf", &x, &y);
height = 0;
if ((x - 2) * (x - 2) + (y - 2) * (y - 2) <= 1)
height = 10;
else if ((x + 2) * (x + 2) + (y - 2) * (y - 2) <= 1)
height = 10;
else if ((x - 2) * (x - 2) + (y + 2) * (y + 2) <= 1)
height = 10;
else if ((x + 2) * (x + 2) + (y + 2) * (y + 2) <= 1)
height = 10;
else
{ }
printf("x = %f,y = %f,height = %d",x,y,height);
return 0;
}