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反之;
  1. %m.nf的含义为:占用m个字节,保留n位小数(若输出数据不到m个细节则会从左开始用空格补齐),参考文献C语言中,%m.ns与%m.nf的区别
  2. 在给字符型数据赋值时,所赋值字符要使用''(例:char sex; sex = 'M'; );
  3. 输出时使用什么符号要结合具体的实际情况.**

1.1.5 随机数使用

  1. 首先输入头文件#include<stdlib.h>和#include<time.h> ;
  2. srand(time(0));//使用函数time()取一个1970年1月1日起当前时间的秒数作为srand()的随机数种子 ;
  3. 使用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语句,最终拿下了答案正确
好耶!

posted @ 2020-11-06 21:55  Qurare  阅读(188)  评论(1编辑  收藏  举报