本次作业来自于王化雨老师
已完成
1【程序题】
成绩统计。用户输入一批0到100分之间的考试成绩,程序给出总的成绩数目和平均成绩,并输出最高成绩和次高成绩。编程要求 :在提示信息score:后面,用户输入一个整数分数,在输入一批分数后,通过输入负数表示输入结束。程序的输出结果有3种形式:①如果程序运行过程中,输入了2个及以上规定值域内的有效成绩,输出时:先以total=A,avarage=B的形式输出成绩个数和平均分数,再换行以first=X,second=Y形式输出成绩最高、次高的两个成绩;②如果程序运行过程中,只输入了1个有效成绩,则输出的第2行只有first=X;③如果程序运行过程中,自始至终没有输入规定值域内的有效成绩,则只输出:no valid scores。
注意:①程序显示score:等待用户输入成绩,用户按Enter后,再次显示score:等待用户输入下个成绩;②当用户在score:后输入的成绩大于100,程序忽略不计;③当用户在score:后输入的成绩小于0时,程序输出结果后结束;④除平均成绩保留2位小数外,其余显示出的数值均为整数。下面是程序的运行效果:
我的答案:
#include<stdio.h>
#include<math.h>
int main()
{
int sum, total, max = 0, sec = 0;
int score;
double average;
sum = 0;
total = 0;
do
{
printf("score:");
scanf("%d", &score);
if (0 <= score && 100 >= score)
{
sum += score;
total += 1;
}
else if (100 < score)
{
continue;
}
else
{
break;
}
if (score > max)
{
if (total != 1)
{
sec = max;
}
max = score;
}
else if (max > score && sec < score)
{
sec = score;
}
average = (double)sum / total;
} while (score >= 0);
if (total == 0)
{
printf("no valid scores");
}
else if (total == 1)
{
printf("total=%d,average=%.2lf", total, average);
printf("\n");
printf("first=%d", max);
}
else
{
printf("total=%d,average=%.2lf", total, average);
printf("\n");
printf("first=%d,second=%d", max,sec);
}
return EOF;
}
2【程序题】
统计字符类别。编程要求 :在提示信息string:后面,用户输入一个字符串(字符串中可以包含空格),按Enter表示输入结束。程序先以total=A形式输出字符串中所有字符个数后,再换行以letter=B,digit=C,space=D,others=E的形式输出这个字符串中的英文字母letter的个数B、数字字符digit的个数C、空格sapce的个数D以及其他字符others的个数E。
注意:①程序输出结果后,继续显示提示信息string:,等待用户的下一次输入,并根据输入的字符串输出相应的统计结果total=A和letter=B,digit=C,space=D,others=E,直到用户没有输入字符串而直接按Enter为止;②当用户在提示信息string:后直接按下Enter,程序输出Bye!后结束。下面是程序的运行效果:
我的答案:
#include <ctype.h>
#include <stdio.h>
#include <string.h>
void print(int total, int ns, int nd, int nsp, int no)
{
printf("total=%d", total);
printf("\n");
printf("letter=%d,digit=%d,space=%d,others=%d", ns, nd, nsp, no);
printf("\n");
}
int main()
{
char m;
int total=0;
int ns = 0, nd = 0, nsp = 0, no = 0;
do
{
printf("string:");
m = getchar();
while (m != '\n')
{
if (isalpha(m))
ns += 1;
else if (isdigit(m))
nd += 1;
else if (m == ' ')
nsp += 1;
else
no += 1;
total += 1;
m = getchar();
}
print(total, ns, nd, nsp, no);
} while (m != '\n');
}
3【程序题】
圆周率。利用下面公式计算π值(当前、后两次计算出的π值差的绝对值小于规定精确度后,程序输出得到的π值。):
此处(n-1)的平方应为(n+1)的平方
编程要求:①在提示accuracy:后用户输入精确度(输入时只可用指数形式,并且使用小写e),程序给出计算的结果pi(保留4位小数)与当时计算公式中的n值;②程序输出运算结果后,继续提示accuracy:等待用户输入,并再次输出相应结果,直到用户输入的数小于等于0为止;③当用户在accuracy:后输入的数小于等于0时,程序输出Bye!结束。注意:程序中涉及到浮点数时要使用double型。下面是程序的运行效果:
我的答案:
#include<stdio.h>
#include<math.h>
double Max(double Pi, double pi)
{
if (Pi > pi)
return 2 * Pi;
else
return 2 * pi;
}
int main()
{
double ac;
double pi, n, Pi;
do
{
pi = (double)4 / 3; Pi = 1;
n = 1;
printf("accuracy:");
scanf("%lf", &ac);
if (ac > 0)
{
while (2 * fabs(pi - Pi) > ac)
{
n += 2;
if (pi > Pi)
{
Pi = pi * (n + 1) * (n + 1) / (n * (n + 2));
}
else
{
pi = Pi * (n + 1) * (n + 1) / (n * (n + 2));
}
}
Pi = Max(Pi, pi);
printf("pi=%.4lf,n=%.0lf\n", Pi, n);
}
else
printf("Bye!\n");
} while (ac > 0);
return 0;
}
4【程序题】
正整数分析。编程要求 :①在提示integer:后用户输入一个正整数,程序以reverse=ZYX, digits=A的形式输出这个正整数各位数字的逆序(即如果是3位数,则ZYX代表这个3位数的个、十、百位数字自左到右排列)和这个正整数的位数A;②程序输出结果后,继续提示integer:等待用户输入,并再次输出相应结果,直到用户输入的数小于等于0为止;③当用户在integer:后输入的数小于等于0时,程序输出Bye!结束。
下面是程序的运行效果:
我的答案:
#include<stdio.h>
#include<math.h>
int main()
{
int num, i=1;
int Mid;
do
{
printf("integer:");
scanf("%d", &num);
Mid = num;
i = 1;
if (Mid <= 0)
{
printf("Bye!");
break;
}
printf("reverse=");
while (num / 10)
{
printf("%d", num % 10);
num = num / 10;
i++;
}
printf("%d", num % 10);
printf(",");
printf("digits=%d", i);
printf("\n");
} while (Mid > 0);
}
5【程序题】
圆覆盖点。键盘输入一个正整数作为圆的半径,圆心在坐标原点。编程输出:有多少个横坐标和纵坐标都是整数的点被圆覆盖?
编程要求 :①在提示radius:后用户输入一个正的浮点数r,程序以points=A的形式输出以直角坐标系原点为圆心、以浮点数r为半径的圆,可以覆盖多少个横坐标和纵坐标都是整数的点的个数;②程序输出结果后,继续提示radius:等待下个输入,并再次输出相应结果,直到用户输入的数小于等于0为止;③当用户在radius:后输入的数小于等于0时,程序输出Bye!结束。下面是程序的运行效果:
我的答案:
#include<stdio.h>
#include<math.h>
int points(double r)
{
int i, j;
int total = 0;
for (i = 0 - r;i <= r;i++)
{
for (j = 0 - r;j <= r;j++)
{
if (((i * i) + (j * j)) <= (r * r))
total++;
}
}
return total;
}
int main()
{
double r;
int total = 0;
do
{
printf("radius:");
scanf("%lf", &r);
if (r <= 0)
{
printf("Bye!");
break;
}
total=points(r);
printf("points=%d\n", total);
} while (r > 0);
}