自我记录 仅供参考
7-1 求cosx的近似值
已知cosx的近似计算公式如下:
cosx=1−x2/2!+x4/4!−x6/6!+...+(−1)nx2n/(2n)!
其中x为弧度,n为整数(0≤n≤100)。
现编写程序,根据用户输入的x和n的值,利用上述近似计算公式计算cosx的近似值(为保证数据准确,使用双精度浮点类型),输出结果时要求保留小数点后6位。
输入格式:
输入表示弧度的实数 x ,以及整数 n。
输出格式:
按“cos(x)=近似值”格式输出计算结果,保留小数点后6位。
#include <stdio.h>
int main(){
double x,cos=1,j;
int n;
scanf("%lf %d",&x,&n);
int i,t=-1;
j=x*x/2;
for(i=2;i<=2*n;i=i+2){
cos=cos+t*j;
j=j*x*x/((i+1)*(i+2));
t=-t;
}
printf("cos(%.6lf)=%.6lf",x,cos);
return 0;
}
不要直接用一个变量去储存n!哦,当n逐渐增大,n!会越来越大甚至超出数据类型所能存储的范围,比如int类型只能存储至16!,所以换一种方式吧。
7-2 评委评分
某次比赛有n个评委对参赛选手打分。编程输入各个评委的评分,去掉一个最高分和1个最低分后,输出该选手的平均分。
输入格式:
输入在第一行中给出正整数n,在第二行给出n个0~10之间的浮点数,用空格分开。
输出格式:
在一行中输出去掉最高分和最低分之后的平均分,精确到小数点后2位。
#include <stdio.h>
int main(){
int n;
float x,max,min,ave,s;
scanf("%d",&n);
scanf("%f",&x);
max=x;min=x;s=x;
int i;
for(i=2;i<=n;i++){
scanf("%f",&x);
if(x>=max)max=x;
if(x<=min)min=x;
s=s+x;
}
printf("%.2f",(s-max-min)/(n-2));
return 0;
}
7-3 简写转全称
在一行中输入若干个字符作为简写字符,字符之间没有空格间隔,并按如下规则产生输出:
- 每个简写字母对应一行输出
- 若字符为
C
或c
,则该行输出"BEIJING OLYMPIC GAMES" - 若字符为
J
或j
,则该行输出"JAPAN WORLD CUP" - 若字符为
K
或k
,则该行输出"KOREA WORLD CUP" - 若为其他字符,则该行原样输出该字符。
输入格式:
输入在一行中输入若干个字符,字符之间没有空格间隔,以回车结束。
输出格式:
按题目要求产生若干行输出。
#include <stdio.h>
int main(){
char c;
scanf("%c",&c);
if(c=='C'||c=='c')printf("BEIJING OLYMPIC GAMES");
else if(c=='J'||c=='j')printf("JAPAN WORLD CUP");
else if(c=='K'||c=='k')printf("KOREA WORLD CUP");
else printf("%c",c);
while(1){
scanf("%c",&c);if(c=='\n')break;
if(c=='C'||c=='c')printf("\nBEIJING OLYMPIC GAMES");
else if(c=='J'||c=='j')printf("\nJAPAN WORLD CUP");
else if(c=='K'||c=='k')printf("\nKOREA WORLD CUP");
else printf("\n%c",c);
}
return 0;
}
7-4 统计整数的位数
从键盘读入一个整数,统计该数的位数。例如,输入12534,输出5;输入-99,输出2;输入0,输出1。
输入格式:
输入一个整数N(−105≤N≤105)。
输出格式:
在一行中按如下格式输出该数的位数。
It contains 位数 digits.
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int s=1;
while(1){
if((n/10)!=0){s=s+1;n=n/10;}
else break;
}
printf("It contains %d digits.",s);
return 0;
}
7-5 穷举法搬运砖块问题
这是中国古典算术问题,某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。有多少种搬法用N人正好搬N块砖?
输入格式:
输入正整数N。
输出格式:
输出所有满足条件的搬法,每种搬法占一行。
每行按如下格式依次输出该搬法中男人、女人、小孩的人数,按男人人数的递增顺序输出,中间用空格间隔(=
前后没有多余的空格,行末也无空格)。
men=男人数 women=女人数 child=小孩数
若没有满足条件的搬法,则输出"No solution!"
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
int i,j,k,s=0;
for(i=0;i<=n/3;i++){
for(j=0;j<=n/2;j++){
for(k=0;k<=n;k=k+2){
if(3*i+2*j+k/2==n&&i+j+k==n&&s==0){
printf("men=%d women=%d child=%d",i,j,k);
s++;
}
else if(3*i+2*j+k/2==n&&i+j+k==n&&s!=0){
printf("\nmen=%d women=%d child=%d",i,j,k);
s++;
}
}
}
}
if(s==0)printf("No solution!");
return 0;
}
7-6 数字金字塔
输入一个正整数repeat (repeat<10),做repeat次下列运算:
- 输入一个正整数n(n<10),输出n行数字金字塔。
输出时使用以下语句:
printf(" ");
printf("%d ", i);
printf("\n");
输入格式:
输入在第1行中给出1个正整数repeat(repeat<10)
接下来repeat行,每行给出一个正整数n(n<10)
输出格式:
按照对应顺序的n值,依次输出repeat个数字金字塔 (n行数字金字塔的格式如样例所示,注意:每个数字后面跟一个空格。)
#include <stdio.h>
int main(){
int repeat;
scanf("%d",&repeat);
int i,j,k,n;
for(i=1;i<=repeat;i++){
scanf("%d",&n);
for(j=1;j<=n;j++){
for(k=1;k<=(n-j)*2;k++)
printf(" ");
for(k=1;k<=j*2-1;k++)
printf("%d ",j);
if(i==repeat&&j==n)break;
printf("\n");
}
}
return 0;
}
(不是全部输入再处理而是一边输入一边处理 但是能通过pta测评)