C博客作业01--分支、顺序结构
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业00--顺序分支结构 |
| 这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |
0.展示PTA总分
顺序结构:
分支结构:
1. 本章学习总结
1.1 学习内容总结
1.1.1 顺序结构
1.printf与scanf的基本用法:
(1)printf语句:
printf("输出内容");
(2)scanf语句:
scanf("输入内容",&输入内容对应的标识符或字符);
注:
1. 输入内容时不要忘记"&";
2. 输出时可以使用\n进行换行;
3. 输入字符型数据时要用"char"定义且要注意用"getchar()"处理换行符和空格;
1.1.2 分支结构
1. if的条件语句:
if(条件) {
执行语句块;
}
注:只有条件满足是才会进入分支;
2. if-else语句:
if(条件1){
执行语句块1;
} else if(条件2) {
执行语句块2;
} else if(条件3) {
执行语句块3;
} ... else if(条件n) {
执行语句块n;
}
3. switch-case语句:
switch(表达式) {
case 值1:
执行语句块1;
break;
case 值2:
执行语句块2;
break;
...
default:
执行语句块n;
break;
}
注:1. switch-else语句无需像if语句一样按次序进行必较;
2. 只有遇到break;时语句才会跳出循环,否则会依次进行下去.
1.1.3 "!"的用法与含义
(1) 若"!"与"="结合使用时表示为不等于;
(2)若"!"后是数值的话会进行取反,例如:if语句中的(!x),当表达式"非0"为"真",0"为假,因为x前有"!"号表示取反,所以,若条件成立,则x为0,若条件不成立,则x为非零.(简单来说就是非0变0,0变1)
1.1.4 基本数据类型
数据类型 | 使用符号 | 占用字节数 | 输入 |
---|---|---|---|
整型 | int | 4 | %d |
单精度浮点型 | float | 4 | %f |
双精度浮点型 | double | 8 | %lf |
字符型 | char | 1 | %c |
注: | |||
**1. float与double的区别:float内存小精度低,double反之; |
- %m.nf的含义为:占用m个字节,保留n位小数(若输出数据不到m个细节则会从左开始用空格补齐),参考文献C语言中,%m.ns与%m.nf的区别
- 在给字符型数据赋值时,所赋值字符要使用''(例:char sex; sex = 'M'; );
- 输出时使用什么符号要结合具体的实际情况.**
1.1.5 随机数使用
- 首先输入头文件#include<stdlib.h>和#include<time.h> ;
- srand(time(0));//使用函数time()取一个1970年1月1日起当前时间的秒数作为srand()的随机数种子 ;
- 使用rand()%100;//生成随机数(范围为0~99) ;
1.2 编程技巧总结
1.2.1 统计学生成绩
#include <stdio.h>
int main()
{
int n;
int Lv = 0;
int Grade;
int a = 0, b = 0, c = 0, d = 0, e = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &Grade);
Lv = Grade / 10;
switch (Lv)
{
case 10:
case 9:
a++;
break;
case 8:
b++;
break;
case 7:
c++;
break;
case 6:
d++;
break;
default:
e++;
break;
}
}
printf("%d %d %d %d %d", a, b, c, d, e);
return 0;
}
技巧:对于将成绩由百分制转化为五分制,可先将分数除以10,只留下百位数和十位数,这样能简化switch语句中case的判断.
1.2.2 将给出的数据按大小次序排列
#include<stdio.h>
int main(void)
{
int x, y, z;
int temp;
scanf("%d %d %d", &x, &y, &z);
if (x > y)
{
temp = x;
x = y;
y = temp;
}
if (z < y)
{
temp = z;
z = y;
y = temp;
}
if (z < x)
{
temp = z;
z = x;
x = temp;
}
if (x > y)
{
temp = x;
x = y;
y = temp;
}
printf("x=%d,y=%d,z=%d",x,y,z);
return 0;
}
技巧:可以利用加入一个中间变量(temp)来进行数值的交换,从而避免长而繁琐又易出错的if复合判断语句.
1.2.3 判断"水仙花数"
#include<stdio.h>
#include<math.h>
int main()
{
int N, sum = 0;
int digit, tens, Hundreds_digit;
scanf("%d", &N);
if (N < 100 || N > 999)
{
printf("Invalid Value.");
}
else
{
digit = N % 10;
tens = (N % 100) / 10;
Hundreds_digit = N / 100;
sum = pow(digit, 3) + pow(tens, 3) + pow(Hundreds_digit, 3);
if (sum == N)
{
printf("Yes");
}
else
{
printf("No");
}
}
return 0;
}
技巧:利用"%"取个位数,用"/"和循环语句搭配依次取得其他位数.
1.3本章学习体会
C语言的学习非常考验自学能力和操作能力,肯花下去精力就会有提升👍。
2. PTA作业
2.1 前天是哪天
2.1.1 数据处理
定义输入变量int year1,month1,day1;输出变量int year2,month2,day2;
2.1.2 代码截图
百行代码巨献😭
2.1.3 PTA提交列表及说明
作为一个开学才开始学习C语言的真·萌新,啥都不会的我找不到简便方法硬是用if套娃套了百来行(好痛苦),这道题最重要的还是理清思路,将不同的年份与月份进行分类讨论,对于特殊情况进行特殊处理.
错误集中点:
(1)对于是否为闰年的判断;
(2)对于跨年、大小月、跨月的日期处理.
2.2 计算油费(这道题还是比较早的时候写的,变量名的定义还不规范,还望包容包容🙏🙏🙏)
2.2.1 数据处理
定义输入变量int a, b;char x; 输出变量double s;
2.2.2 代码截图
2.2.3 PTA提交列表及说明
错误集中点:
本来这里应该是要写给字符型变量赋值时要加'',但在下破解此番题目时有幸获得大佬对一些疑难杂症的指点,因此我只是粗心敲错了93号汽油油费价格😆
2.3 三个数由小到大输出
2.3.1 数据处理
定义输入变量int x, y, z;int temp;输出变量int x,y,z;
2.3.2 代码截图
2.3.3 PTA提交列表及说明
错误集中点:
由于我一开始是没有下面这段代码的,于是便有了这样的错误
但好在我们有非常nb的东西,是什么?--诶~对了,单步调试.
由错误提示可知这段代码仅仅只能实现对两种情况的3个数进行从小到大的排序😥,这样下去是不行的,所以我通过单步调试发现,好家伙!当x与y的值对换过后便不管后面z与x或y如何交换都不会再进行管x与y之间的大小
看到这里,我再也压制不住心中的愤慨,在极度愤怒的情况下又加上了一条给x,y排序的if语句,最终拿下了答案正确
好耶!
本文来自博客园,作者:Qurare,严禁转载至CSDN平台, 其他转载请注明原文链接:https://www.cnblogs.com/konjac-wjh/p/13919623.html