第三周作业

  • 要求二

题目1、7-9 A乘以B
要求:输入的两个整数:A是你学号前两位数字,B是你学号后两位数字

1、实验代码

#include<stdio.h>
int main()
{
    int A=0,B=0;
    scanf("%d %d",&A,&B);
    if(-100<=A&&A<=100&&-100<=B&&B<=100)printf("%d",A*B);
    else printf("the input is error");
    return 0;
}

 2、设计思路

  • 第一步:基本框架之下定义整数型变量A、B;
  • 第二步:用scanf函数读入两个整数给A和B;
  • 第三步:用if条件句判断整数是否在范围之内;
  • 第四步:进行乘法运算A*B并输出结果的值。

注解:看到读入整数就想到用int定义和scanf函数输入,之后便是单数运算和printf函数打印结果,不过要注意数字之间有空格分割以及输入整数有范围要求。

(ps:我的学号为2017024100)

3、本题调试过程碰到问题及解决办法

在scanf函数一行:&A和&B之间没有用“,”隔开而是同前面“%d %d”的格式一样空格隔开,编译时出现错误提示

解决办法就是在&A和&B之间用“,”隔开

经尝试发现,scanf引号后的格式与引号内格式无关,必须要用“,”隔开且空格多少无影响

4、运行结果截图

题目2、7-10 求整数均值
要求:输入的整数是:你的身高、体重、学号前两位、学号后两位。另外平均值精确到小数点后一位(printf的格式控制字符串为%.1f)

1、实验代码

#include<stdio.h>
int main()
{
	int a=0,b=0,c=0,d=0,Sum=0;
	float Average=0;
	scanf("%d %d %d %d",&a,&b,&c,&d);
	Sum=a+b+c+d;
	Average=Sum/4.0;
	printf("Sum = %d; Average = %.1f",Sum,Average);
	return 0;
}

2、设计思路

  • 第一步:基本框架之下定义整数型变量a、b、c、d、Sum以及浮点型变量Average;
  • 第二步:用scanf函数读入四个整数给a、b、c、d;
  • 第三步:进行求和和求平均值运算,得到Sum和Average的值;
  • 第四步:输出结果即Sum和Average的值(这里注意平均值精确到小数点后一位)。

注解:同样看到读入整数就想到用int定义和scanf函数输入,目前水平看到浮点数就想到用float或double定义,不过要注意本题浮点型变量在print函数里要用“%.1f”来对应,且四个整数之间有空格分割。

(ps:我的学号为2017024100,身高为175,体重为52公斤)

3、本题调试过程碰到问题及解决办法

Average虽然使用了float定义,但输出结果在小数点后有很多位数而并非1位,从而在编译器上编译无错误提示,但在PTA上显示答案错误

 

因为我做PTA时是第三周作业的初稿发布当天,公告里还没有“%.1f”的提示

解决办法是网上搜索C语言编程“C语言编程时怎么控制浮点型输出的小数点精确到几位”得到答案在printf函数一行使用“%1.f”来精确小数点后一位数

4、运行结果截图

题目3、7-11 是不是太胖了
要求:输入的身高是你本人真实身高

1、实验代码

#include<stdio.h>
int main()
{
    int H=0;
    float a=0;
    scanf("%d",&H);
    if(100<H&&H<=300){
    a=(H-100)*0.9*2;
    printf("%.1f",a);}
    else printf("the input is error");
    return 0;
}

2、设计思路

  • 第一步:基本框架之下定义整数型变量H和浮点型变量a;
  • 第二步:用scanf函数读入整数即身高给H;
  • 第三步:判断整数H是否在范围之内;
  • 第四步:根据题目要求进行代数运算得a;
  • 第五步:输出结果a的值即市斤体重值(这里注意b的值精确到小数点后一位)。

注解:看到整数和浮点数就用int和float定义,只后按照题目所给关系进行代数运算并输出即可,但同样注意浮点型变量在print函数里要用“%.1f”来对应以满足题目要求,还有就是整数            H是有范围要求的。

(ps:我的身高为175)

3、本题调试过程碰到问题及解决办法

在进行第三步的列算式时受到传统数学观念影响,把算式列成了“a=(H-100)0.9*2”,编译时出现错误提示

解决办法就是在(H-100)和0.9之间加上乘法符号“*”即可

4、运行结果截图

题目4、7-6 输出各位数字
要求:输入整数是你学号后三位,注意本题需要使用运算符/

1、实验代码

#include<stdio.h>
int main()
{
    int a=0,b=0,c=0,d=0;
    scanf("%d",&a);
    b=a/100;
    c=(a/10)%10;
    d=(a%100)%10;
    printf("%d,%d,%d",b,c,d);
    return 0;
}
#include<stdio.h>
int main()
{
    int a=0;
    scanf("%d",&a);
    printf("%d,%d,%d",a/100,a/10%10,a%100%10);
return 0; }

2、设计思路

  • 第一步:基本框架之下定义整数型变量a、b、c、d;
  • 第二步:用scanf函数读入整数即任意一个三位数给a;
  • 第三步:通过整数变量代数运算中“/”和“%”使用或多次使用依次分离出三位数的百、十、个位;
  • 第四步:输出结果“b,c,d”即“百位,十位,个位”。

注解:解本题关键在于通过编程中整数运算(/和%)的特点来逐步分离出每一位数,同时注意输出时各个数字之间用逗号间隔,没有其它任何附加字符。

(ps:我的学号为2017024100)

3、本题调试过程碰到问题及解决办法

这道题我一开始的思路是如下图的,在读入三位数a后直接在printf函数里完成所有的数位分离并打印,但是这里我直接搬上了演算过程中因思考对于一位数先后运算分离而产生的小括号,编译时出现了错误

解决办法就是去掉小括号即可,但我后来认为这样子虽然结构简单,但如果面对更复杂的运算试,就势必显得局限了,所以我后来又改成了a、b、c、d四个整数型变量来分布分离每一位数

4、运行结果截图

  • 要求三

1、上传成功到coding.net截图

 Git地址:https://git.coding.net/cyq1076926262/666.git

2、PTA的提交列表的截图

 

  • 要求四

1、总结本周所学内容、遇到的问题

课堂上:

①复习巩固scanf函数的运用;

②学习了if语句的使用,在课堂上也有所练习;

③练习了关于整数型变量“/”和“%”运算的使用;

④学习了else if句型并在课堂上进行了练习;

⑤学习了如何判定已读入数范围是否符合题设。

作业中:

①学会了用“%.1f”来精确浮点型变量精确到小数点后位数;

②通过PTA作业编程错误来进一步熟悉了计算机的运算和逻辑,面对问题慢慢地从传统数学思想转换;

③更加熟练地运用运算符(尤其是整数型变量)进行代数运算。

问题:①课堂上老师强调的知识点:用float定义变量后面要用%f,而double定义变量后面要用%lf;但本周PTA作业第三题我意外发现因为自己粗心用double定义了的变量在printf函数一行用了“%f”却没有报错,且运行结果正确;后来我又尝试用float定义的变量对应“%lf”,得到了同样的正确的结果。

我在百度和博客都进行了搜索,得到了大致类似的如下图结果:

总结就是在printf函数中,无论是%f还是%lf效果都是一样的,但scanf函数中double必须用%lf,float必须用%f。

附链接:http://blog.csdn.net/bo_fengyu/article/details/39057021

②PTA作业的题目1和题目3对于所输入的变量有范围要求(如图):

虽然这次作业检测上没有对此作出要求,不过严格按照题目来编程地话还是有所欠缺的,关于这一点我有上网查询并浏览了多个类似解决办法,但都属于治标不治本,我对于解决这个范围的问题还是一知半解;不过我在评论何宗彦的作业时看到牛老师说下节课会讲解这个问题,所以我一定在课堂上认真听讲以学到这个知识点。

<10.19补充>:今天的C语言课程已经解决了这个问题,在scanf函数读入值后使用if条件语句来进行判定即可。

2、点评同学作业

      刘泽华http://www.cnblogs.com/liuzehua123/

      何宗彦http://www.cnblogs.com/hezongyan/

      姚爽http://www.cnblogs.com/yaoshuang/

3、学习进度条(10/15 8:00~10/21 8:00)

 

原文地址:https://www.cnblogs.com/cyq66992152/p/7680592.html