C博客作业01--分支、顺序结构

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业00--我的第一篇博客 |
| 这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |

0.展示PTA总分

1.本章学习总结

1.1 学习内容总结

1.字符型数据的输入与输出

输入输出时,变量用%c读入输出:

char ch;

scanf("%c",&ch);
printf("%c",ch);

getchar()【括号内无参数】可以接收一个字符,putchar()【括号内有参数】则输出一个字符。

※注意事项

空格是一个字符,在输入时会被当做输入字符;在使用字符型常量时需要用一对单引号将字符括起来。

2.关系运算符

关系运算符用于关系运算,用来判断真假。如5>3为真,则数值为1,相反若3>5为假,则数值为0.
关系运算符有:

<
<=
>
>=
==//等于
!=//不等于

※注意事项

'=='代表的是等于,而'='用于赋值,二者不等同,与数学上存在差异。

3.如何控制输出位数

%xd——当数的位数少于x,则在数的左侧多出x-数的位数个空格。
%-xd——当数的位数少于x,则在数的右侧多出x-数的位数个空格。
如:

#include <stdio.h>
int main()
{
   int num1,num2;
   double num3;
   scanf("%d %d %lf", &num1,&num2,&num3);
   printf("%5d%-5d%5.3f", num1,num2,num3);
   return 0;
}

4.随机数

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
 int number;             //定义随机数的变量
 srand(time(0));         //生成种子
 number = rand() % 100;  //生成随机数的范围为0-100
 printf("%d", number);   //输出随机数
 return 0;
}

若想要生成的随机数有指定区间,可把number=rand()%100改为number=x+rand()%(100-x)。

1.2 编程技巧总结

1.利用flag改变数值正负

这种方法相比于利用pow函数计算的更快。
如:

#include<stdio.h>
#include<math.h>
int main()
{
  int denominator, flag;
	double item, pi;

	flag = 1;
	denominator = 1;
	item = 1.0;
	pi = 0;

	while (fabs(item) >= 0.0001) 
	{
		item = flag * 1.0 / denominator;
		pi += item;
		flag = -flag;
		denominator += 2;
	}
	pi *= 4;
	printf("pi=%.4f\n",pi);

	return 0;

}

2.求中间数

利用中间变量存储所要求得的中间数。

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

1.3 本章学习体会

在思维上感受到了数学与计算机的差别,意识到了以后不能够再用数学的思维来思考问题。
对于结构的理解不够深刻,往往碰到一道题的时候要思考很久才能够想出如何编写代码。
在格式上我认为自己得到了很大的提升,有意识的开始让自己定义的变量见名知意,也有意识的开始使用驼峰命名法。

2.PTA实验作业

2.1 前天是哪天

数据表达:用到的变量均为整型变量。有表示年份的year、有表示月份的month、有表示天数的day。
数据处理:首先判断是否为闰年,其次按照每个月天数的不同进行分支。

2.1.2 代码截图


2.1.3 PTA提交列表及说明

  • Q1:一开始跨月显示出现错误,但语法并没有错误。

  • A1:后来经过调试后发现是跨月的表达式写错了,跨月时的天数增加了一天,经过修改后正确。

  • Q2:没有考虑到非闰年的条件。

  • A2:经过长时间的思考,最终也没能想出一个更好的方案,只是把闰年情况下的所有语句复制粘贴一次后,将if判断条件改为非闰年。经过修改后正确。

  • Q3:当输入年数为闰年时,输出的结果总为两个数据。

  • A3:经过单步调试,发现原因是在判断是否为闰年时使用的是两个if语句,而每条if语句都会执行,导致如果是闰年的话年份减一变为非闰年,这样就会执行非闰年的if语句,最终输出两个数据。把if改为else if后最终答案正确。

2.2 计算油费

数据表达:加油量a,汽油品种b,服务类型c,须支付金额price。其中a、b为整型变量,c为字符型变量,price为双精度浮点型变量。
数据处理:将输入的数据先进行服务类型的判断,然后按照不同汽油的价格进行分支计算,得到最终结果。

2.1.2 代码截图

2.1.3 PTA提交列表及说明

  • Q1:编译出现错误,无法执行,查看后似乎没有错误

  • A1:翻书找了找相关资料后,发现字符型常量在使用时需要加一对单引号

  • Q2:编译还是出现了错误,再次查看,好像还是没有错误

  • A2:在编写的时候没有第一时间把数据表达放在前列,而是想到什么变量就就势写在那一行,结果把char ch;放在了scanf底下。将其移到scanf前列后答案正确。

2.3 单步调试————龟兔赛跑

2.3.1 单步调试截图

设置断点并输入数据

单步调试一次循环后的数据

2.3.2 代码截图

2.3.3 PTA提交列表及说明

虽然pta是一次成功,但在自己调试的过程中还是发现了思维上的错误,即一开始用做数学的角度来思考问题,导致出现了过多变量,最后自己也分不清哪个是哪个,于是重新思考后写出了当前的代码。

posted @ 2020-11-08 12:13  箱推人  阅读(165)  评论(0编辑  收藏  举报