六分九用计算机怎么计算出来,实验6-1 近似求PI (15分)--实验6-8 简单计算器 (20分)(switch-case用法)--实验6-9 统计一行文本的单词个数...

实验6-1 近似求PI (15分)

本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。

​2

​π

​​ =1+

​3

​1!

​​ +

​3×5

​2!

​​ +

​3×5×7

​3!

​​ +⋯+

​3×5×⋯×(2×i+1)

​i!

​​ +⋯

输入格式:

输入在一行中给出精度eps,可以使用以下语句来读输入:

scanf("%le", &eps);

输出格式:

在一行内,按照以下格式输出π的近似值(保留小数点后5位):

PI = 近似值

输入样例:

1E-5

输出样例:

PI = 3.14158

#include

int fac(int n){

int temp=1;

for(int i=1;i<=n;i++){

temp=temp*i;

}

return temp;

}

int pl(int n){

int temp=1;

for(int i=1;i<=n;i++){

temp=temp*(2*i+1);

}

return temp;

}

int main(){

double t,eps;

double sum=1.0;

int i=1;

scanf("%lf",&eps);

t=1.0*fac(i)/pl(i);

while(t>eps){

i++;

t=1.0*fac(i)/pl(i);

sum=sum+t;

}

double x=sum*2;

printf("pi=%.6lf\n",x);

return 0;

}

实验6-8 简单计算器 (20分)

模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。

输入格式:

输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。

输出格式:

在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。

输入样例:

1+2*10-10/2=

输出样例:

10

#include

int main(){

int a,b;

char c;

scanf("%d",&a);

while(scanf("%c",&c)){

switch(c){

case'+':{scanf("%d",&b);a+=b;break;}

case'-':{scanf("%d",&b);a-=b;break;}

case'*':{scanf("%d",&b);a*=b;break;}

case'/':{

scanf("%d",&b);

if(b==0){

printf("error");

}else

a/=b;

break;

}case'=':{printf("%d",a);return 0;};

default:{printf("error");return 0;};

}

}

return 0;

}

实验6-9 统计一行文本的单词个数 (15分)

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let’s go to room 209.

输出样例:

5

gets()函数的用法

头文件:#include

gets()函数用于从缓冲区中读取字符串,其原型如下:

char *gets(char *string);

gets()函数从流中读取字符串,直到出现换行符或读到文件尾为止,最后加上NULL作为字符串结束。所读取的字符串暂存在给定的参数string中。

【返回值】若成功则返回string的指针,否则返回NULL。

注意:由于gets()不检查字符串string的大小,必须遇到换行符或文件结尾才会结束输入,因此容易造成缓存溢出的安全性问题,导致程序崩溃,可以使用fgets()代替。

【实例】请看下面一个简单的例子。

#include

int main(void)

{

char str[10];

printf("Input a string.\n");

gets(str);

printf("The string you input is: %s",str); //输出所有的值,注意a

}

如果输入123456(长度小于10),则输出结果为:

Input a string.

123456↙

The string you input is:123456

如果输入12345678901234567890(长度大于10),则输出结果为:

Input a string.

12345678901234567890↙

The string you input is:12345678901234567890

同时看到系统提示程序已经崩溃。

如果不能正确使用gets()函数,带来的危害是很大的,就如上面我们看到的,输入字符串的长度大于缓冲区长度时,并没有截断,原样输出了读入的字符串,造成程序崩溃。

考虑到程序安全性和健壮性,建议用fgets()来代替gets()。

#include

int main(){

char a;

int cnt=0;

int cntword=0;

while(1){

scanf("%c",&a); //判断每个读入进来的char

if(a=='\n') { //如果是换行符的话,要跳出循环;

break;

}else if(a!=' '){ //如果不是空格,那如果是字母或者数字的话,统计数要分别上加;

if((a>='a'&&a<='z')||(a>='A'&&a<='Z')||(a>='0'&&a<='9')){

cntword++; //统计开头是字母或者数字的个数。

cnt++; //统计一个单词字母的个数;

printf("1)cnt=%d,cntword=%d,a=%c\n",cnt,cntword,a);

}

while(1){

scanf("%c",&a);

if(a==' '||a=='\n'){

break;

}

//因为跳出循环是在cnt之前,所以不是空格或者换行符的时候,这个才会被统计cnt的数量;

cnt++;

printf("2)cnt=%d,a=%c\n",cnt,a);

}

printf("3)%c",a); //读入以后就能跳出了,这里下一个读入的a是空格;

//if(cnt>1){ //循环结束以后,如果cnt数量大于1,

//if(a>='a'&&a<='z'||a>='A'&&a<='Z'||a>='0'&&a<='9'){

// cntword++;

// printf("4)cntword=%d",cntword);

// }

// }

if(a=='\n'){//这行必须写,应该到最后读入了一个换位行,说明应该跳出程序;没有写的话,程序将进入无停止。

break;

}

}

}

printf("%d",cntword);

return 0;

}

程序分析的过程:

the summer holiday

1)cnt=1,cntword=1,a=t

2)cnt=2,a=h

2)cnt=3,a=e

3) 1)cnt=4,cntword=2,a=s

2)cnt=5,a=u

2)cnt=6,a=m

2)cnt=7,a=m

2)cnt=8,a=e

2)cnt=9,a=r

3) 1)cnt=10,cntword=3,a=h

2)cnt=11,a=o

2)cnt=12,a=l

2)cnt=13,a=i

2)cnt=14,a=d

2)cnt=15,a=a

2)cnt=16,a=y

3)

3Program ended with exit code: 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值