浙大版《C语言程序设计(第3版)》题目集(编程题q31-q40)
习题3-5 三角形判断 (15分)
给定平面上任意三个点的坐标(x1 ,y1 )、(x2 ,y2 )、(x3 ,y3 ),检验它们能否构成三角形。
#include "stdio.h"
#include "math.h"
int main()
{
float x1, x2, x3, y1, y2, y3;
float a, b, c, s, l, area; //定义三边,半周长,周长,面积
scanf("%f%f%f%f%f%f", &x1, &y1, &x2, &y2, &x3, &y3);
a = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
b = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));
c = sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2));
if (a + b > c && a + c > b && b + c > a) {
s = (a + b + c) / 2;
area = sqrt(s * (s - a) * (s - b) * (s - c)); //海伦公式求面积
l = a + b + c;
printf("L = %.2f, A = %.2f\n", l, area);
} else {
printf("Impossible\n");
}
return 0;
}
练习4-3 求给定精度的简单交错序列部分和 (15分)
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + … 直到最后一项的绝对值不大于给定精度eps。
#include "stdio.h"
int main()
{
int fenmu, flag; //定义分母,符号判断
double eps, item, sum; //定义正实数
scanf("%lf", &eps);
flag=1;
fenmu=1;
sum=0;
item=1.0;
do{
item=flag*1.0/fenmu;
sum=sum+item;
flag=-flag;
fenmu=fenmu+3;
}while(fabs(item)>eps);
printf("sum = %.6f\n", sum);
return 0;
}
练习4-6 猜数字游戏 (15分)
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
#include
int main()
{
int rand_number, n; //定义随机数,猜的次数
scanf("%d %d", &rand_number, &n);
int i;
int m;
int flag = 0;
for (i = 1; i <= n; i++)
{
scanf("%d", &m);
if (m < 0)
break;
if (m > rand_number)
printf("Too big\n");
if (m < rand_number)
printf("Too small\n");
if (m == rand_number)
{
if (i == 1)
{
flag = 1;
printf("Bingo!\n");
break;
}
if (i == 2 || i == 3)
{
flag = 1;
printf("Lucky You!\n");
break;
}
if (i > 3)
{
flag = 1;
printf("Good Guess!\n");
break;
}
}
}
if (flag == 0)
printf("Game Over\n");
return 0;
}
练习4-7 求e的近似值 (15分)
自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。
#include "stdio.h"
int main()
{
int i, j, n;
double item, sum;
sum=1;
scanf("%d", &n);
for(i=1; i<=n; i++){
item=1;
for(j=1; j<=i; j++){ //算出阶乘
item=item*j;
}
item=1.0/item;
sum=sum+item;
}
printf("%.8f", sum);
return 0;
}
练习4-10 找出最小值 (20分)
本题要求编写程序,找出给定一系列整数中的最小值。
#include "stdio.h"
int main()
{
int n,m,min; //定义输入个数,输入数,最小值
scanf("%d",&n);
int cnt=1;
for(int i=1;i<=n;i++,cnt++){
scanf("%d",&m);
if(cnt==1){ //只有一个数则它为最小数
min=m;
}
if(m<min){
min=m;
}
}
printf("min = %d",min);
return 0;
}
练习4-11 统计素数并求和 (20分)
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
#include "stdio.h"
#include "math.h"
int isPrime(int n) //判断素数函数
{
int flag=1;
if(n==1){
flag=0;
}else{
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){ //能整除则不为素数
flag=0;
}
}
return flag;
}
}
int main()
{
int m,n;
int sum=0,cnt=0;
scanf("%d %d",&m,&n);
for (int i=m;i<=n;i++){
if(isPrime(i)){
cnt++;
sum+=i;
}
}
printf("%d %d",cnt,sum);
return 0;
}
习题4-1 求奇数和 (15分)
本题要求计算给定的一系列正整数中奇数的和。
#include"stdio.h"
int main()
{
int num,sum=0;
for (int i=1; ;i++){
scanf("%d",&num);
if(num<=0){
break;
}
if(num%2!=0){
sum+=num;
}
}
printf("%d",sum);
return 0;
}
#include "stdio.h"
#include "math.h"
double fun(double x,double n)//求数列每一项的值
{
double y = 0; //每项值
double i = 0;
double num = 1;
for (i = 1; i <=n; i++) //求阶乘
{
num = num*i;
}
y = pow(x, n) / num;//数列每一项的值
return y;
}
int main()
{
double x = 0;
double sum = 0;
double n = 0;
scanf("%lf", &x);
do
{
sum = sum + fun(x, n);
n++;
} while (fabs(fun(x, n)) >= 0.00001);
sum = sum + fun(x, n);//最后一项的绝对值必须小于0.00001
printf("%.4f\n", sum);
return 0;
}
习题4-3 求分数序列前N项和 (15分)
本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。
#include "stdio.h"
//分子,分母为斐波那契数列,
int main()
{
int n;
double sum=0;
double x=2,y=1,t=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
sum+=x/y;
t=x;
x=x+y;
y=t;
}
printf("%0.2f",sum);
return 0;
}
习题4-4 特殊a串数列求和 (20分)
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
#include "stdio.h"
#include "math.h"
int main()
{
int a,n;
int num=0;
int sum = 0;
scanf("%d %d",&a,&n);
for (int i=1;i<=n;i++){
num=num+pow(10,i-1)*a;
sum+=num;
}
printf("s = %d",sum);
return 0;
}