第五次作业

一.改错题

(1)输出华氏摄氏温度转换表:输入两个整数lower和upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是{lower,upper},每次增加2℉。计算公式如下:

c = 5×(f-32)/9
其中,c表示摄氏温度,f表示华氏温度。
输入输出样例1:
  Enter lower:32
  Enter upper:35
  fahr celsius
  32 0.0
  34 1.1
输入输出样例2:
  Enter lower:40
  Enter upper:30
  fahr celsius
源程序(有错误的程序)
#include <stdio.h>
int main(void)
{
int fahr , lower, upper; /* fahr表示华氏度 /
double celsius; /
celsius表示摄氏度 */

    printf("Enter lower:");
    scanf("%d",&lower);
    printf("Enter upper:");
    scanf("%d",&upper);
    printf("fahr  celsius\n");             /* 显示表头 */
    /* 温度转换 */
    for (fahr = lower , fahr <= upper, fahr ++) ;
        celsius = 5 /9 * (fahr - 32.0); 
        printf("%3.0f %6.1f\n", fahr, celsius); 

   return 0; 
}

1.错误信息:

错误原因:

改正方法:把所有“,”改为“;”。

2.错误信息:

错误原因:for语句后不用加;

改正方法:for后去掉;

3.错误信息:只能循环一次

错误原因:for后没有{}

改正方法: 将for下面的语句用{}括起来。

4.错误信息:

错误原因:int fahr 定义错误

改正方法: fahr定义为double

5.错误信息:

错误原因:celsius保留一位小数

%6.1f改为%.1f

6.错误信息:

错误原因:程序与题意不一样

改正方法: fahr = fahr + 2

(二)学习总结

1.有如下程序:

include <stdio.h>

int main()
{
int i,num,odd,even;
odd = 0;
even = 0;
for(i = 1; i <= 10;i++)
{
scanf("%d",&num);
if(num % 2 == 0)
{
even++;
}
else
{
odd++;
}
}
printf("%d %d",even,odd);
return 0;
}

详细描述程序的执行过程,即说明程序的每一步是执行的哪条代码,执行顺序如何。循环需描述前两次循环和最后一次循环的详细执行过程。最后说明程序实现的功能是什么。

int i,num,odd,even;定义变量

odd = 0;
even = 0; 

给odd even赋值

for(i = 1; i <= 10;i++)

进行循环,输入num。

如果num等于0
even+1
否则odd+1
一次结束后,i+1
当i=10是输出even和odd的值。
这个程序是统计偶数和技术的个数

(1)运行下面程序,结果是什么?增量运算符在单独使用时,前缀和后缀形式有区别吗?

#include <stdio.h>
int main()
{    
 int i,j;
 i = 2;
 j = 2;
 i++;
 ++j;
printf("i = %d\n",i);
printf("j = %d\n",j);   
return 0; 
}

在单独使用时前缀后缀没有区别

(2)运行下面的程序,结果是什么?两条输出语句的执行过程是怎样的?说明什么问题?这两条输出语句执行完后,i和j的值分别是多少?

#include <stdio.h>
int main()
{    
    int i,j;
    i = 2;
    j = 2;  
    printf("%d\n",i++);
    printf("%d\n",++j);     
    return 0; 
}

对于“i++”,是先输出“i”的值,然后给“i”加上1,;对于“++j”,是先给j+1,得到然后再输出j的值。说明当增量运算符作为表达式的一部分时,前缀形式和后缀形式的执行过程是不一样的。执行完两条语句后得到的

i=3 j=2。

3.有些循环语句后面有{},有些没有,有些语句有缩进,运行下面的四个小程序,运行结果有什么不同?循环体的认定与缩格形式是否有关?与{}是否有关?那么,应该如何正确判断一个循环语句中的循环体?下面的程序中,哪几种格式是正确的缩进格式。

(1)

#include <stdio.h>
int main()
{    
    int i;
    for(i = 1;i <= 5;i++)
        printf("*");
    printf("\n");   
    return 0; 
}

(2)

#include <stdio.h>
int main()
{    
    int i;
    for(i = 1;i <= 5;i++)
        printf("*");
        printf("\n");   
    return 0; 
}

(3)

#include <stdio.h>
int main()
{    
    int i;
    for(i = 1;i <= 5;i++)
    {
        printf("*");
        printf("\n");
    }
    return 0; 
}

(4)

#include <stdio.h>
int main()
{    
    int i;
    for(i = 1;i <= 5;i++)
    {
        printf("*");
    } 
    printf("\n");
    return 0; 
}

第一和第二只有两个printf语句有区别,第二个printf缩进,但是输出的结果是一样,所以循环体的认定与缩格形式无关;

第二个和第三个程序的区别在于多了一个大括号{},但是输出的结果不同说明加个括号,结果不一样。说明与{}有关

第三个和第四个差一个大括号,单输出的结果不一样。所以和大括号有关。

4.对其他你认为需要进行总结的内容进行总结。

(1)在进行逗号运算的时候要从左往右一次运算。
(2)循环体语句既可以是单条语句也可以是复合语句
(3)无限循环中,通过在循环体中加break语句对循环进行控制。

(三)实验总结

1.(1)题目

7-1求奇数分之一序列前N项和:

(2)

(3)

#include <stdio.h>
int main()
{
     int N;
    double sum,i;
    sum=0;
    i=1;
    scanf("%d",&N);
    for(i=1;i < 2*N;i = i + 2)
    {
	    sum=sum+1/i;
    }
    printf("sum = %.6f",sum);
} 

(4)实验分析

问题1:输出的数老是不对
原因:sum的值是随机的

解决办法:加上sum=0

(5)

3.(1)题目

7-3 奇偶分家

(2)流程图

(3)源代码

#include <stdio.h>
int main()
{
int n,i,s,o,j;
i=0;
o=0;
j=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
    scanf("%d",&s);
    if(s % 2 == 0)
    {
     o=o+1;
    }
    else
    {
    j=j+1;
    }
}
    printf("%d %d",j,o);
}

此题没有问题

(5)

5.(1)题目

统计字符

(2)流程图

(3)源代码

#include<stdio.h>
int main()
{
char str[10];
    int i=0,letter=0,blank=0,digit=0,other=0;
    while(i<10)
    {
    str[i++]=getchar();
    }
    for(i=0;i<10;i++)
    {
        if(str[i]==' ')
        {
        blank++;
        }
        else if(str[i]=='\n')
        {
        blank++;
    }
    else if(str[i]>='0'&&str[i]<='9')
    {
      digit++;
    }
    else if(str[i]>='A'&&str[i]<='Z')
    {
      letter++;
    }
    else if(str[i]>='a'&&str[i]<='z')
    {
      letter++;
    }
    else 
    {
      other++;
    }
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}

(4)实验分析

不知如何去定义一系列的变量

(5)

7.(1)

7-7 求交错序列前N项和

(2)

(3)源代码

#include <stdio.h>
int main()
{
    int N,i;
    double j,sum,a=0,b=0;
    sum=0;
    scanf("%d",&N);
    for(i=1;i < N+1;i++)
    {
	    j=i;
	if(i%2==0)
	{
		
		a=a-(j/(2*j-1));
	}
	else
	{
		
		b=b+(j/(2*j-1));
	}
}
sum=a+b;
printf("%.3f",sum);
} 

(4)实验分析

问题1:输出的答案错误

原因:在进行负数项加和时出现错误

解决方法:去掉了a前多余的﹣号

(5)本题PTA提交列表



(四)博客互评
姚纪远 http://www.cnblogs.com/yjy751522356/p/7816925.html
吉炎臣 http://www.cnblogs.com/yahaha/p/7820452.html
曲儿说 http://www.cnblogs.com/abc15369938639/p/7810952.html

posted @ 2017-11-12 12:30  李攀¥  阅读(275)  评论(0编辑  收藏  举报