C语言作业--数据类型
一、PTA实验作业
题目1:7-7 发红包
1. 本题PTA提交列表
2. 设计思路
-
1定义整型变量hundred,fifty,twenty,ten,five,two,one分别存放不同金额的张数,number做为输入的数
-
2输入number的值
-
3 hundred=number/100;
fifty=number%100/50;
twenty=number%50/20;
ten=(number%50-twenty* 20)/10;
five=number%10/5;
two=number%5/2;
one=number%5-2* two;分别得出所需要的100,50,20,10,5,2,1的张数 -
4输出所需要的100,50,20,10,5,2,1的张数值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己在编写代码时公式的使用不够准确,在各自张数的输出有欠缺
在重新思考关系编写后,修改格式,空格关系后才准确
题目2:7-8 判断合法标识符
1. 本题PTA提交列表
2. 设计思路
- 1定义整型变量repeat,i,j,用于循环count,flag用于判断的中间条件变量,字符型变量ch
- 2输入repeat的值,并用getchar把输入时的换行符吸收
- 3令i=1,i<=repeat,做repeat次下列步骤(1循环)
- 4令 j=count=flag=0做为每次循环开始的赋值
- 5若i>1,输入字符
- 6当字符不为‘\n’进入下列2循环
- 7输入字符,j++
- 8当j=1时,若满足以字母或下划线开头,则flag=1
- 9满足字符为字母或数字或下划线时,count++(循环2结束)
- 10 若flag=1且count=j-1即满足以字母或下划线开头,满足条件的数比输入的数少1(换行符),输出Yes,否则输出No(循环1结束)
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
最开始自己没有在repeat后加上getchar吸收换行符,导致运行时以输入repeat的值就结束
加上后运行的结果并不正确,自己调试后发现字符的值并没有想象中的去改变
继续调试发现自己在一个判断的地方把判断的==写成=造成赋值
改正后发现字符并没一个一个逐渐输入改变,自己在循环里面添加一个输入,但是输入的字符串得出的结果都是No
后自己进行调试,发现外循环赋初值的问题,逐渐改正后正确
自己No的输出问题,与题目输出不同,答案错误
题目3:7-9 切分表达式——写个tokenizer吧
1. 本题PTA提交列表
2. 设计思路
- 1定义整型变量flag=0,count=0用于判断条件的变量,i=0用于循环次数,字符型变量ch
- 2当i<=40时进入下列步骤(循环1)
- 3当ch!='\n'时进入下列循环(循环2)
- 4输入字符种类
- 5一旦输出的是换行符直接结束循环2
- 6若i=0,输入的字符是+或-则是正负数符号问题,结束循环2,不执行下面的换行
- 7输入的字符是点则结束循环2,不换行
- 8较多次循环时,上一个是非数字,下一个直接输入-,则表示是负号不是减号,输出字符不换行,count清0,结束2循环
- 9若ch不是‘-’或数字时,count=i
- 10当flag=1且ch不为数字时输出换行(表示多个数字输入的结束)
- 11当输入的是数时,flag=1,结束2循环,不换行
- 12输出ch的情况,并换行(循环2结束)
- 13 i++(循环1结束)
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
自己开始编辑时,没有很好考虑,把所有的都输出,重新思考‘—’的存放问题,以及数据的输出问题
一开始自己的运行不正确,经调试器调试后发现,i并没有按我想象中的增加,造成失误,随后自己在循环后加了break,保证每循环一次i就增加
改正后,运行与pta相同,交上去发现格式错误,自己一开始很不理解,后来观察自己与同学的运行结果发现自己多了几个换行,修改后部分正确
在考虑pta的错误点之后,运行正确
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
- 1定义:数组类型 数组名[数组长度];数组长度是一个常量
- 2初始化:类型名 数组名 [数组长度]=
- 3静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0
- 4数组元素的引用:数组名[下标] ,数组下标从0开始,下标不能越界
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
数组名是一个地址常量,存放数组内存空间的首地址
1.3 为什么用数组?
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来互相区分,他的优点是表达简洁,可读性好,便于使用循环结构。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
选择法
- 定义i,index,k,n,temp变量
- 输出n的值
- 定义数组a[n]
- for(k=0;k<n-1;k++)
- index=k;
- for(i=k+1;i<n;i++)
- 若a[i]<a[index]
- index=i;结束内循环
- temp=a[index];a[index]=a[k];a[k]=temp
- 结束外循环
冒泡法
- 定义n,i,j,t
- 输入n
- 定义数组a[n]
- for(i=0;i<n-1;i++)
- for(j=0;j<n-1;j++)
- 若a[j]<a[j+1]
- t=a[j];a[j]=a[j+1];a[j+1]=t
- 结束循环
直接插入排序
- 定义整型变量n,i,j,k,temp
- 输入n的值
- 定义数组a[n]
- for(i=0;i<=n-1;i++)
- temp表示最小值的角标,判断数据a[j]和temp的大小
- 如果temp<a[j],a[j]=temp
- 通过a[k+1]=a[k]实现插入位置后的数据整体往右挪
- 结束循环
1.5 介绍什么是二分查找法?它和顺序查找法区别?
- 二分查找法:对一组有序的数字中折半查找,比较与元数据相同的数据,若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找。
- 区别
二分查找法是一种效率较高的查找方法,但折半查找只适用于有序表,且限于顺序存储结构
顺序查找对表中的元素排序无要求,但其方法是一个个比较查找,效率低下
1.6 二维数组如何定义、初始化?
- 定义:类型名 数组名 [行长度][列长度]
- 初始化:
- 1分行赋初值
一般形式:类型名 数组名 [行长度][列长度]={{初值表0},...,{{初值表k},...}
把初值表中的K中所有数据依次赋给第k行的元素 - 2顺序赋值法
一般形式:类型名 数组名 [行长度][列长度] = {初值表}
根据数组元素在内存中的存放顺序,把初值表中的数据依次赋给元素
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
- 行列下标互换
- 下三角:i<=j
- 上三角:i>=j
- 对称矩阵:a[i][j]=a[j][i]
1.8 二维数组一般应用在哪里?
- 矩阵形式的赋值
- 方阵转置
- 二维数据表格的计算