第三章
程序设计T5
#include<stdio.h>
#include<math.h>
int main() {
int x1, x2, x3, y1, y2, y3;
double a, b, c,d,f,s;
printf("请输入第一个点的坐标:");
scanf("%d\t%d", &x1, &y1);
printf("请输入第二个点的坐标:");
scanf("%d\t%d", &x2, &y2);
printf("请输入第三个点的坐标:");
scanf("%d\t%d", &x3, &y3);
a = sqrt((y2 - y1)*(y2 - y1) + (x2 - x1)*(x2 - x1));
b = sqrt((y3 - y1)*(y3 - y1) + (x3 - x1)*(x3 - x1));
c = sqrt((y3 - y2)*(y3 - y2) + (x3 - x2)*(x3 - x2));
//a=sqrt(pow(y2-y1,2)+pow(x2-x1,x))
if (a + b > c&&a + c > b&&b + c > a) {
d = a + b + c;
s = (a + b + c) / 2;
f = sqrt(s*(s - a)*(s - b)*(s - c));
}
else {
printf("impossible");
}
printf("周长为:%.2lf,面积为:%.2lf", d, f);
return 0;
}
其中的pow(a,b)意为a的b次方,要加上math.h的库。
第四章
p72例4-2(平均成绩和不及格人数)
统计一批学生的平均成绩与不及格人数,从键盘输入一批学生的成绩,计算平均成绩,并统计不及格学生的人数。
#include<stdio.h>
#include<math.h>
int main() {
int a=0, b=0;//a为学生人数,b为不及格人数
double sum=0, c,adv;//c为学生成绩
printf("请输入学生成绩:");
scanf("%lf", &c);
while (c>0)
{
a += 1;
sum += c;
if (c < 60) {
b += 1;
}
scanf("%lf", &c);
}
adv = sum / a;
printf("一共%d个学生,平均成绩是%.2lf,不及格人数为%d", a, adv, b);
return 0;
}
p74例4-3(统计整数位数)
统计一个整数的位数。从键盘读入一个整数,统计该数的位数。例如12345输出5,-99输出2,0输出1
#include<stdio.h>
#include<math.h>
int main() {
//统计一个整数的位数。从键盘读入一个整数,统计该数的位数。例如12345输出5,-99输出2,0输出1
int a,b=0;//a为输入的数,b为位数
printf("请输入一个整数:");
scanf("%d", &a);
if (a < 0) {
a = -a;
}
do
{
b += 1;
a = a / 10;
} while (a!=0);
printf("%d", b);
return 0;
}
p76例4-4(逆序输出)
逆序输出一个整数的各位数字。输入一个整数,将其逆序输出,例如输入12345,输出54321.
#include<stdio.h>
#include<math.h>
int main() {
//逆序输出一个整数的各位数字。输入一个整数,将其逆序输出,例如输入12345,输出54321.
int a,b;
printf("请输入一个整数:");
scanf("%d", &a);
while (a != 0) {
b = a % 10;
a = a / 10;
printf("%d", b);
}
return 0;
}
p77例4-5(素数判断)
判断一个整数是否是素数。输入一个正整数m,判断它是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
#include<stdio.h>
#include<math.h>
int main() {
//判断一个整数是否是素数。输入一个正整数m,判断它是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
int a,i;
printf("请输入一个正整数:");
scanf("%d", &a);
if (a <= 1) {
printf("不是素数!");
}
else if (a == 2) {
printf("这是个素数!");
}
else {
for (i = 2; i <= a - 1; i++) {
if (a%i == 0) {
break;
}
}
if (i >= a) {
printf("这是个素数!");
}
else {
printf("不是素数!");
}
}
return 0;
}
p81例4-7(1!+2!+3!+...+n!)
#include<stdio.h>
#include<math.h>
int main() {
//1!+2!+3!+...+n!
int a,sum=0,b;
printf("输入整数n:");
scanf("%d", &a);
for (int i = 1; i <= a; i++) {
b = 1;
for (int j = 1; j <=i; j++) {
b = b * j;
}
sum = sum + b;
}
printf("%d", sum);
return 0;
}
p85例4-8(最值问题,求最高分)
从输入的n个成绩中选出最高分,用for语句实现
#include<stdio.h>
#include<math.h>
int main() {
//从输入的n个成绩中选出最高分,用for语句实现
int a,max,b;//a是学生个数,b是学生成绩
printf("学生的个数是:");
scanf("%d", &a);
printf("请输入%d个学生的成绩:",a);
scanf("%d", &b);
max = b;
for (int i = 1; i <a; i++) {
scanf("%d",&b);
if (b > max) {
max = b;
}
}
printf("最大值为%d", max);
return 0;
}
程序设计题
1.求奇数和,输入一批正整数(以0或负数作为结束标志),求其中的奇数和
#include<stdio.h>
#include<math.h>
int main() {
//求奇数和,输入一批正整数(以0或负数作为结束标志),求其中的奇数和
int a,sum=0;
printf("请输入正整数:");
scanf("%d", &a);
while (a > 0) {
if (a % 2 != 0) {
sum = sum + a;
}
scanf("%d", &a);
}
printf("%d", sum);
return 0;
}
2.展开式求和。输入一个实数 x,计算并输出下式的和,直到最后一项的绝对值小于 0.000 01 ,计算结果保留 4 位小数。要求定义和调用函数 fact(n) 计算 n 的阶乘,可以调用 pow() 函数求幂。试编写相应程序。
s=1+x+x²/2!+x三次方/3!+...
#include<stdio.h>
#include<math.h>
double fact(int n) {
double sum=1;
for (int i = 1; i <= n; i++) {
sum = sum * i;
}
return sum;
}
int main() {
//展开式求和。输入一个实数 x,计算并输出下式的和,直到最后一项的绝对值小于 0.000 01 ,计算结果保留 4 位小数。
//要求定义和调用函数 fact(n) 计算 n 的阶乘,可以调用 pow() 函数求幂。试编写相应程序。
//s = 1 + x + x² / 2! + x三次方 / 3! + ...
int i=1;
double s = 0,b,a;
double e = 0.00001;
printf("Enter x:");
scanf("%lf", &a);
b = 1;
while (fabs(b)>e)
{
s += b;
b = pow(a, i) / fact(i);
i += 1;
}
s += b;
printf("%.4lf", s);
return 0;
}
3.求序列和。输入一个正整数 n,输出 2/1+3/2+5/3+8/5+... 的前 n 项之和,保留 2 位小数。该序列从第 2 项起,每项的分子是前一项分子与分母的和,分母是前项的分子。试编写相应程序。
int main() {
//求序列和。输入一个正整数 n,输出 2/1+3/2+5/3+8/5+... 的前 n 项之和,
//保留 2 位小数。该序列从第 2 项起,每项的分子是前一项分子与分母的和,分母是前项的分子。试编写相应程序。
int i, n;
double x, x1, x2, sum = 0;
x1 = 2;//分子
x2 = 1;//分母
printf("input n:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += x1 / x2;
x = x1 + x2; // 临时存储:分子+分母,就是下一次的分子
x2 = x1; // 下一次的分母,就是上次的分子
x1 = x; // 下一次的分子
}
printf("sum = %.2lf\n", sum);
return 0;
}
4.求序列和。输入两个正整数 a 和 n,求 a+aa+aaa+aa...a ( n 个 a ) 之和。例如,输入 2 和 3 ,输出246 ( 2+22+222 )。试编写相应程序。
int main() {
//求序列和。输入两个正整数 a 和 n,求 a+aa+aaa+aa...a ( n 个 a ) 之和。例如,输入 2 和 3 ,输出246 ( 2+22+222 )。试编写相应程序。
int a, n,sum=0,i=1,t=0;
printf("enter a and n:");
scanf("%d\t%d", &a, &n);
while (i <= n) {
t = t * 10 + a;
sum += t;
i++;
}
printf("%d", sum);
return 0;
}
5.换硬币。将一笔零钱(大于 8 分,小于 1 元,精确到分 ) 换成 5 分,2 分和 1 分的硬币,每种硬币至少有一枚。输入金额,问有几种换法? 针对每种换法, 输出各种面额硬币的数量和硬币的总数量。试编写相应程序
int main() {
//换硬币。将一笔零钱(大于 8 分,小于 1 元,精确到分 ) 换成 5 分,2 分和 1 分的硬币,每种硬币至少有一枚。输入金额,问有几种换法?
//针对每种换法, 输出各种面额硬币的数量和硬币的总数量。试编写相应程序.
int count,a=0;
int x, y, z;
printf("enter count:");
scanf("%d", &count);
if (count <= 8 || count >= 100) {
printf("error!");
}
else {
for (x = 1; x <= count; x++) {
for (y = 1; y <= count; y++) {
for (z = 1; z <= count; z++) {
if (x*5 + y*2 + z == count) {
a++;
printf("5分:%d个,2分:%d个,1分:%d个,有%d个硬币\n", x, y, z,x+y+z);
}
}
}
}
printf("共有%d种", a);
}
return 0;
}
6.输出水仙花数。输入一个正整数 n ( 3≤n≤7 ), 输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幕之和等于它本身。 例如 153 的各位数字的立方和是13+53+3^3 =153。试编写相应程序。
int main() {
//输出水仙花数。输入一个正整数 n ( 3≤n≤7 ), 输出所有的 n 位水仙花数。水仙花数是指一个 n 位正整数,它的各位数字的 n 次幕之和等于它本身。
//例如 153 的各位数字的立方和是1^3+5^3+3^3 =153。试编写相应程序。
int n;
do
{
printf("input n (3≤n≤7):");
scanf("%d", &n);
} while (n > 7 || n < 3);
printf("水仙花数有:\n");
int i = pow(10, n) - 1; //上限
int limit = pow(10, n - 1); //下限
int digit, sum, s, m;
while (i >= limit)
{
sum = 0;
s = i;
m = n;
//循环获取每个位上的数字
while (s != 0)
{
digit = s / (int)(pow(10, m - 1));
s %= (int)(pow(10, m - 1));
sum += pow(digit, n); // 每个位上的数字的n次方和
m--;
}
if (sum == i)
{
printf("%d\t", i);
}
i--;
}
printf("\n");
return 0;
}
网友评论