第五次作业

一.改错题

(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.错误信息:1242734-20171109190132575-2007916142.png
错误原因:1242734-20171109191059388-1417483422.png
改正方法:把所有“,”改为“;”。
2.错误信息:1242734-20171109193441903-2111488061.png
错误原因:for语句后不用加;
改正方法:for后去掉;
3.错误信息:只能循环一次
错误原因:for后没有{}
改正方法: 将for下面的语句用{}括起来。
4.错误信息:1242734-20171110102052075-422730526.png
错误原因:int fahr 定义错误
改正方法: fahr定义为double
5.错误信息:1242734-20171110103622013-2126329863.png
错误原因:celsius保留一位小数
%6.1f改为%.1f
6.错误信息:1242734-20171110103843434-600703267.png
错误原因:程序与题意不一样
改正方法: 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; 
}
1242734-20171110110416950-1368258016.png

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

(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; 
}
1242734-20171110111059356-1296931846.png

对于“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; 
}
1242734-20171110112218903-1912079949.png

(2)

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

(3)

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

(4)

#include <stdio.h>
int main()
{    
    int i;
    for(i = 1;i <= 5;i++)
    {
        printf("*");
    } 
    printf("\n");
    return 0; 
}
1242734-20171110114506966-642222580.png
第一和第二只有两个printf语句有区别,第二个printf缩进,但是输出的结果是一样,所以循环体的认定与缩格形式无关;
第二个和第三个程序的区别在于多了一个大括号{},但是输出的结果不同说明加个括号,结果不一样。说明与{}有关
第三个和第四个差一个大括号,单输出的结果不一样。所以和大括号有关。
4.对其他你认为需要进行总结的内容进行总结。

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

(三)实验总结

1.(1)题目

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

(2)

1242734-20171110214353997-749648680.png

(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)1242734-20171110215700356-692505996.png
3.(1)题目

7-3 奇偶分家

(2)流程图

1242734-20171110221859450-400599452.png

(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)1242734-20171110222416325-1847334566.png
1242734-20171110222418575-2102321258.png

5.(1)题目
统计字符
(2)流程图
1242734-20171110232125888-174406575.png

1242734-20171110232130059-171024531.png

(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)1242734-20171110232557888-347604633.png
7.(1)

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

(2)

1242734-20171110233801403-1234929339.png

(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提交列表

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

转载于:https://www.cnblogs.com/lipan123/p/7821374.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值