一、PTA实验作业
题目1.打印菱形图案
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
定义整型变量n表示高度,i,j,k为循环变量
输入正的奇数n
for(i=1;i<=n/2+1;i++)循环实现输出菱形上半部分
for(j=0;j<n/2+1-i;j++)
输出两个空格
for(k=0;k<i*2-1;k++)
输出*号和空格
一个循环结束后换行
for(i=1;i<=n/2;i++)循环实现输出菱形下半部分
for(j=0;j<i;j++)
输出两个空格
for(k=0;k<(n/2-i)*2+1;k++)
输出*号和空格
一个循环结束后换行
return 0;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
①输出的菱形图案与题目不符,两个星号之间应该加一个空格,再次读题发现题目中要求每个星号后面要有一个空格
②输出的菱形图案与题目不符,图中圈出的三个星应该在同一条直线上,经观察发现应该是星前面少了一个空格因此把输出一个空格改为输出两个空格
题目2. 发红包
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
定义整型变量money为金额,count1~count7分别表示100、50、20、10、5、2、1元的张数
输入金额money
100元张数=金额/100;赋值金额=金额%100
50元张数=金额/50;赋值金额=金额%50
20元张数=金额/20;赋值金额=金额%20
10元张数=金额/10;赋值金额=金额%10
5元张数=金额/5;赋值金额=金额%5
2元张数=金额/2;赋值金额=金额%2
1元张数=金额/1;
输出各纸币金额及张数
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
①输出格式错误
②初步改正后dev中输出的答案与题目一致,但pta中显示格式错误
③换一个输入金额,发现格式依旧错误
④再次理解题意,题目需要个位对齐,发现问题并修改代码后正确
题目3. 简单计算器
1. 本题PTA提交列表(要提交列表,不是结果)
2. 设计思路
定义整型变量x存放数字,result存放结果,字符型变量ch存放符号
输入第一个数字存放在result中
逐个读入字符,当(ch=getchar())!='='时进入循环
输入数字x
当ch=‘+’时,result=result+x;break;
当ch=‘-’时,result=result-x;break;
当ch=‘*’时,result=result*x;break;
当ch=‘/’时,
如果x==0,输出ERROR,退出程序;
否则,result=result/x;break;
否则,输出ERROR,退出程序;
输出结果result
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
①用题目给的输入样式可以得到正确的输出样式,但其他的情况不能全部满足,比如除数为0时输出结果错误。
②通过调试发现当除数为0时,程序通过if语句后没有马上结束,跳到printf语句中继续输出结果。
③在两个输出ERROR的语句后面添加return 0,让程序在输出ERROR后直接跳出程序,不进入输出结果的printf语句。修改后正确
二、截图本周题目集的PTA最后排名
PTA排名
PTA提交列表
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
- 定义
一维数组定义的一般形式:类型名 数组名[数组长度]
类型名:数组中每个元素的类型
数组名:数组变量的名称,是一个合法的标识符。
数组长度:一个整型常量表达式,设定数组的大小 - 初始化
类型名 数组名[数组长度]={初值表};
静态数组的初始化:静态储存的数组如果没有初始化,系统自动给所有的数组元素赋 0 。
例:static int b[5]等价于static int b[5]={0,0,0,0,0}。
动态数组的初始化:动态数组如果没有初始化,系统自动给没有初始化的元素赋随机值。
例:auto int c[5]={1,2},则后面没有赋值的元素为随机值。
注:数组初始化时,如果对全部元素都赋了初值,就可以省略数组长度。
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
数组名:是一个地址常量,存放数组内存空间的首地址,数组名不允许修改。
1.3 为什么用数组?
①在程序中使用数组,可是让一批相同类型的变量使用同一个数组变量名,用下标来相互区分。
②数组的优点:表达简洁,可读性好,便于使用循环结构。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
选择法:
定义整型变量i,k,temp,index存放最小值所在下标,n存放正整数个数,定义数组a[10];
输入整数n;
for(i=0;i<n;i++)
输入a[i]的值;
for(k=0;k<n-1;k++){
最小值所在下标=k;
for(i=k+1;i<n;i++)
如果a[i]<a[index],最小值所在下标=i;
最小元素与下标为k的元素交换
}
冒泡法:
定义整型变量i,j,n为整数个数,定义数组a[10]
输入n;
for(i=0;i<n-3;i++)
for(j=0;j<n-2;j++)
如果a[j]>a[j+1]
交换a[j]和a[j+1]元素
直接插入法排序:
定义数组a[n],i,j,k,temp
for(i=1;i<n;i++)
for(j=0;j<=i-1;j++)
如果a[i]<a[j],跳出循环
如果j不等于i-1
temp=a[i];
for(k=j;k<=i-1;k++)
a[k+1]=a[k];
a[k+1]=temp;
1.5 介绍什么是二分查找法?它和顺序查找法区别?
二分查找法:前提(数据是从小到大或从大到小排序)
①先找数组中间的数,判断是否为要寻找的数。
②如果不是,判断它与要寻找的数的关系。
③如果大于寻找的数,则返回中间数的下标,在其左边继续循环步骤①②。
④如果小于寻找的数,则返回中间数的下标,在其右边继续循环步骤①②。
区别:
①二分查找法适用于排序过的数组,速度快。
②顺序查找法对数组本身没有要求,但数组大时效率低。
1.6 二维数组如何定义、初始化?
- 定义
二维数组定义的形式:类型名 数组名[行长度][列长度]
- 初始化
①分行赋初值
一般形式:类型名 数组名[行长度][列长度]={{初值表0},…,{初值表k},…};
②顺序赋初值
一般形式:类型名 数组名[行长度][列长度]={初值表};
例:
①int a[3][3]={1,2,3,4,5,6,7,8,9};等价于int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
②static int b[4][3]={1,2,3,0,0,0,4,5};等价于**static int b[4][3]={{1,2,3},{},{4,5}};
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
矩阵转置:数组的行下标与数组的列下标互换,即交换a [ i ] [ j ] 和a [ j ] [ i ];
上三角:i < = j;
下三角:i > = j;
对称矩阵:a [ i ] [ j ] ==a [ j ] [ i ];
1.8 二维数组一般应用在哪里?
主要用于表示二维表和矩阵。
2.本周的内容,你还不会什么?
①对数组的输出不是很理解。
例:printf("%d",a);表示输出地址;
②数组及函数一起用时,在函数声明时数组定义时下标应为何值不清楚,在课堂互动时老师讲解后懂了点,但不熟悉。
③刚开始学数组,对什么情况下用数组比较简单还不熟悉,比如本次pta作业发红包一题完全可以用数组做,比较简单,但做的时候没有想到可以使用数组。
④本次C语言考试意识到手写代码对我来说有一定的难度。