第4章(第四版)C语言程序设计练习
一、例题
1.求ax2+bx+c=0方程的根
#include<stdio.h> #include<math.h> int main() { double a, b, c; double x1, x2, x; printf("请输入a,b,c:\n"); scanf_s("%lf %lf %lf", &a, &b, &c); if (b * b - 4 * a * c > 0) { x1 = (-b + sqrt(b * b - 4 * a * c)) / (2.0 * a); x2 = (-b - sqrt(b * b - 4 * a * c)) / (2.0 * a); printf("x1=%lfx2=%lf", x1, x2); } else if (b * b - 4 * a * c == 0) { x = -b / (2.0 * a); printf("x=%lf", x); } else { printf("不存在根"); } return 0; }
2.输入两个实数,由小到大输出
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { float a = 0; float b = 0; scanf("%f%f", &a, &b); if (a > b) printf("%f%f\n", b, a); else printf("%f%f\n", a, b); return 0; }
3.输入三个数,由小到大输出
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { float a, b, c; float t; scanf("%f,%f,%f", &a, &b, &c); if (a > b) { t = a; a = b; b = t; } if (a > c) { t = a; a = c; c = t; } if(b > c) { t = b; b = c; c = t; } printf("%f%f%f", a, b, c); return 0; }
4.输入字符,判断是否为大写字符,大写字符转小写字符
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { char ch = 0; scanf("%c", &ch); if (ch >= 'A' && ch <= 'Z') //ch=(ch>='A'&&ch<='Z')?(ch+32):ch; { ch = ch + 32; printf("%c", ch); } else printf("%c", ch); return 0; }
5.输入x,输出y
- y = - 1 ( x < 0 )
- y = 0 ( x = 0 )
- y = 1 ( x > 0 )
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int x, y; scanf("%d", &x); if (x < 0) y = -1; else if (0 == x) y = 0; else y = 1; printf("y=%d\n",y); return 0; }
6.输入成绩等级,键盘输出成绩
- A:85分以上
- B:70~84分
- C:60~69分
- D:60分以下
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { char ch; scanf("%c", &ch); switch (ch) { case 'A': printf("85分以上\n"); break; case 'B': printf("70~84分\n"); break; case 'C': printf("60~69分\n"); break; case 'D': printf("60分以下\n"); break; default: printf("输入错误,请重新输入。"); break; } return 0; }
7.判断某一年是否为闰年
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() { int year; scanf("%d", &year); if ((year % 4 == 0 && year % 100!=0) || (year % 400 == 0)) printf("是闰年"); else printf("不是闰年"); return 0; }
9.
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int s; float p, w, d; scanf("%f,%f,%d", &p, &w, &s);//价格、重量、距离 if (s < 250) d = 0; else if (s >= 250 && s < 500) d = 0.02; else if (s >= 500 && s < 1000) d = 0.05; else if (s >= 1000 && s < 2000) d = 0.08; else if (s >= 2000 && s < 3000) d = 0.10; else d = 0.15; printf("%f", p * w * s * (1 - d)); return 0; }
二、习题
4.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a, b, c; printf("请输入三个整数:"); scanf("%d,%d,%d", &a, &b, &c); if (a < b) if (b < c) printf("max=%d\n", c); else printf("max=%d\n", b); else if (a < c) printf("max=%d\n", c); else printf("max=%d\n", a); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a, b, c, temp, max; printf("请输入三个整数:"); scanf("%d,%d,%d", &a, &b, &c); temp = (a > b) ? a : b; max = (temp > c) ? temp : c; printf("三个整数的最大数是%d\n", max); return 0; }
5.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #define M 1000 int main() { int i, k; printf("请输入一个小于%d的整数i:", M); scanf("%d", &i); if (i > M) { printf("输入的数不符合要求,请重新输入一个小于%d的整数i:", M); scanf("%d", &i); } k = sqrt(i); printf("%d的平方根的整数部分是:%d\n", i, k); return 0; }
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #define M 1000 int main() { int i, k; printf("请输入一个小于%d的整数i:", M); scanf("%d", &i); while (i > M) { printf("输入的数不符合要求,请重新输入一个小于%d的整数i:", M); scanf("%d", &i); } k = sqrt(i); printf("%d的平方根的整数部分是:%d\n", i, k); return 0; }
6.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int x, y; printf("输入x:"); scanf("%d", &x); if (x < 1) { y = x; printf("x=%3d, y=x=%d\n", x, y); } else if (x < 10) { y = 2 * x - 1; printf("x=%d, y=2*x-1=%d\n", x, y); } else { y = 3 * x - 11; printf("x=%d, y=3*x-11=%d\n", x, y); } return 0; }
8.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { float score; char grade; printf("请输入学生成绩:"); scanf("%f", &score); while (score > 100 || score < 0) { printf("\n 输入有误,请重输"); scanf("%f", &score); } switch ((int)(score / 10)) { case 10: case 9: grade = 'A'; break; case 8: grade = 'B'; break; case 7: grade = 'C'; break; case 6: grade = 'D'; break; case 5: case 4: case 3: case 2: case 1: case 0: grade = 'E'; break; } printf("成绩是 %5.1f,相应的等级是%c\n ", score, grade); return 0; }
9.
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int i, j; //定义全局变量,因为在逆序和顺序函数中也要使用变量i,j,这样可以减少定义的次数 int main() { void nixu(int p, int k); //声明求逆序的函数 void shunxu(int m, int p, int k); //声明求顺序的函数 int m = 1, p = 0 , n, k; scanf("%d", &n); //输入要操作的整数 k = n; for (i = 0; n != 0; i++) //计算位数的循环 { n = n / 10; } printf("位数:%d\n", i); for (j = 1; j <= i; j++) //进行10的n次方的计算,也可以用pow(10,i) ,但是在只用时要用<math.h>库函数。 { m = m * 10; } printf("顺序输出:\n"); shunxu(m, p, k); printf("逆序输出:\n"); nixu(p, k); return 0; } void nixu(int p, int k) { for (j = 1; j < i; j++) { p = k % 10; //求余来找到输入数中靠右边的数 printf("%d ", p); //依次输出求出来的数 k = k / 10; //k除10为下一次循环做准备 } printf("%d", k); //输出最后一个要输出的数 } void shunxu(int m, int p, int k) { for (j = 1; j < i; j++, m = m / 10) //除以10是因为要满足每一次循环时除数在一次小10倍 { p = k / (m / 10); printf("%d ", p); //依次输出求出来的数 k = k % (m / 10); //k求余为下一次循环做准备 } printf("%d\n", k); //输出最后一个要输出的数 }
10.
(1)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i; double bonus, bon1, bon2, bon4, bon6, bon10; 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:"); 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); return 0; }
(2)
#include <stdio.h> int main() { int i; double bonus,bon1,bon2,bon4,bon6,bon10; int branch; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf("请输入利润i:"); 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; } printf("奖金是 %10.2f\n",bonus); return 0; }
11.
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int t, a, b, c, d; printf("请输入四个数:"); scanf("%d,%d,%d,%d", &a, &b, &c, &d); printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d); if (a > b) { t = a; a = b; b = t; } if (a > c) { t = a; a = c; c = t; } if (a > d) { t = a; a = d; d = t; } if (b > c) { t = b; b = c; c = t; } if (b > d) { t = b; b = d; d = t; } if (c > d) { t = c; c = d; d = t; } printf("排序结果如下: \n"); printf("%d %d %d %d \n", a, b, c, d); return 0; }
12
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int h = 10; float x1 = 2, y1 = 2, x2 = -2, y2 = 2, x3 = -2, y3 = -2, x4 = 2, y4 = -2, x, y, d1, d2, d3, d4; printf("请输入一个点(x,y):"); scanf("%f,%f", &x, &y); d1 = (x - x4) * (x - x4) + (y - y4) * (y - y4); d2 = (x - x1) * (x - x1) + (y - y1) * (y - y1); d3 = (x - x2) * (x - x2) + (y - y2) * (y - y2); d4 = (x - x3) * (x - x3) + (y - y3) * (y - y3); if (d1 > 1 && d2 > 1 && d3 > 1 && d4 > 1) h = 0; printf("该点高度为 %d\n", h); return 0; }