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

0.展示PTA总分


1.本章学习总结

1.1 学习内容总结

(1) 输入输出函数:

  • printf()函数:输出“ ”里面的内容,如果有%d或者%f则输出%d或者%f对应的内容;%d对应的数据是整型,%f对应的是浮点型,输出的时候要从左到右一 一对应;同时%d或%f可以加宽度限制词,制定数据的输出宽度,比如%4d,则这个数据的输出宽度就是4;%f也是可以如此,而且因为输出的是浮点型,所以%f还可以控制小数点位数,比如%.2f就是保留到小数点后两位,其余的会四舍五入舍去;此外还学到了%c对应的数据是字符型。
  • scanf()函数:输入数据读入变量里面;比如scanf("%d",&a),就是把我们输入的一个整型数据读入a这个变量里面;这里%d对应的是整型,还有%lf对应的数据是双精度浮点型,%f对应的数据是单精度浮点型;%c对应的是字符型。如果有多个数据的话,那么它们的类型、个数、位置要一 一对应
  • getchar()函数:用法是从键盘输入一个字符,并赋值给一个字符型变量。
  • putchar()函数:用法是输出一个字符型常量或者变量。

(2) 数据类型

  • 上文我们已经讲到了几个数据类型,那么它们是要怎么来的呢?它们是要定义来的,在一个程序中,所有的变量、标识符都是要定义的;目前我学到了几个C语言数据类型:int(整型);char(字符型);float(单精度浮点型)和double(双精度浮点型)。比如 int a = 3;就是定义一个整型变量a,这里赋给它的值是3。
  • 此外我了解到float和double都是浮点型(实型),用于存放浮点数(实数),但它们有区别,区别在于double型数据占用空间更大,精度更高,取值范围更大;所以如果没有题目要求,一般我会用double。

(3)选择结构:

  • if else语句,也就是二分支结构,先来看一下它的一般形式:
if(表达式)
    {
        语句1
    }
else
    {
        语句2
    }

这里如果表达式的值为“1”(真)(非0的数其实也可以),则执行语句1,如果表达式的值为“0”(假),则执行语句2,这里的话其实else可以省略,这样的话如果表达式的值是“0”,则什么也不做,继续执行下面的语句。

  • if else if语句:其实就是if else语句的升级版,可以有更多的分支,更多种的判断情况,更多路的选择,其一般形式为:
if(表达式1)
    {
        语句1;
    }
    else if(表达式2)
    {
        语句2;
    }
    ...
    else
    {
        语句n;
    }

用图来理解比较简单:

  • switch语句:switch语句可以处理多分支选择问题,如果在switch语句的每个语句段中都使用break语句,这是switch语句的主要使用方法,一般形式为:
switch(表达式)
    {
        case 常量表达式1:语句段1;break;
        case 常量表达式2:语句段2;break;
        case 常量表达式3:语句段3;break;
                            ......
        case 常量表达式n:语句段n;break;
        default:语句段n+1;break;

switch语句的执行流程如下图,首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后面的语句段,最后执行break语句,跳出switch语句。这里需要注意的是“常量表达式”必须是一个常量。

(4)运算优先级:

(5)常用的数学函数:

1.平方根函数sqrt(x):计算x的平方根;
2.绝对值函数fabs(x):计算x的绝对值;
3.幂函数pow(x,n):计算x的n次方;
4.指数函数exp(x):计算e的x次方;
5.对数函数log(x):计算ln(x)。

1.2本章学习体会

  • 学习感受:刚学习C语言时,似对世界说:Hello,World!如雨后春笋般在C语言的学习中疯长。上课学习效率不错,当把知识运用到题目完成解题后会很有成就感。在为pta题目努力思考后,我总是会想到老师在旁边的叨语:“C语言不可能看会、听会,只能练会!”这也成了我成为C语言学习者的第一柱里程碑。我对自己充满了信心。
  • 代码量:1146行(仅计算pta正确的代码量)

2.PTA实验作业

2.1jmu-c-二进制转10进制

2.1.1数据处理

  • 数据表达:
    char num;把我们要输入的二进制位数转化成许多字符1或0的合并。(因为后来我发现我们数据的输入超过了int的整型范围)
    int digit;digit就是二进制位对应的十进制位,是整型。
  • 数据处理:
    scanf("%c", &num);
    if (num != '1' && num != '0' && num != '\n')
    else if (num == '1')
    else if (num == '0')
    digit = digit * 2 + 0;

2.1.2代码截图

2.1.3 本题可扩展功能:

初看 char num;scanf("%c", &num);好像很奇怪,其实这样是将输入的一串数字转化为一个一个的字符,再一 一用for循环考虑每一位数,这样输入的数字就可以超过int整型范围,又可以每一个数都顾及到,比如输入1111111111111111(16个1),在char的定义下,就可以变成16个‘1’,最后运算各个数字,就可以得到digit。

2.1.4 PTA提交列表及说明:

  • 1.PTA测试点“多个1”其实已经超过了int整型范围(百思不得其解,错了好几次,后来询问别人才得知),我用int num;bit=num%10,(拿num的个位数)num=num/10(把num的个位去掉一位)去计算就错了。
  • 2.把int改用double以后发现%不能用了,需要寻找新方法新思路。于是就想到了把一串数字变成一串字符的思路。

2.2 7-11 简单计算器:

2.2.1数据处理

  • 数据表达:
    1.int num;//输入的数值(除了第一个数值给digit了);
    2.int digit;//循环结果;
    3.char op;//定义运算符号;
    4.int flag = 0;判断输入的正误;flag=1则输入错误;
  • 数据处理::digit = digit + num;
    digit = digit - num;
    digit = digit * num;
    flag = 1;
    digit = digit / num;

2.2.2代码截图


2.2.3本题可扩展功能:

考虑有括号运算()可以扩展此功能;
思路就是用if判断op是否是‘(’,是就进入另一个for循环里面在里面运算,直到遇到‘)’则结束运算,同时晚一点判断op是否是+-*/。

2.2.4 PTA提交列表及说明

  • 1.一开始把判断op是否是‘=’的判断句放着输入数字的语句的后面,使得\n被读进op里面变成非法运算符。
  • 2.除数为0的情况没有考虑,一看题目有思路就疏忽大意,原来题目已经把除数为0的情况给考虑了。
  • 3.非法运算符的情况没有考虑

2.3 7-12 任务06-02-01 于龙遇见日期,又哭了!

2.3.1数据处理

  • 数据表达:
    int num1, num2, num3;输入3个正整数
    char char1, char2;2个无关字符
    int year, month, day;年,月,日
    int optionalDay = 0;某一月的最后一天
    int leapyear = 0;//判断闰年
    int flag = 0;//判断数据正误
  • 数据处理:(看图片就好了,于龙又哭了)

2.3.2代码截图
















2.3.3本题可扩展可能:

算了吧,脑阔疼。

2.3.4PTA提交列表及说明:

  • 1、毫无思路,头脑空白。
  • 2、知道闰年并逐一判断,应该有哪里疏漏了,于是引进leapyear判断。
  • 3、只考虑输入值的大小是不够的,还要考虑月份。
  • 4、月份与日份的交换。

3.阅读代码

找一份优秀代码,理解代码功能,并讲出你所选代码优点及可以学习地方。

posted @ 2019-10-07 22:50  陈毅隆  阅读(321)  评论(3编辑  收藏  举报