C语言博客作业--数组
一、PTA实验作业
题目1:7-2 求整数序列中出现次数最多的数
1. 本题PTA提交列表
2. 设计思路
定义number数组存放数字,count数组存放出现次数
定义i控制第一层循环,j控制第二层循环,N表示有N个数字,max为比较出现次数时候使用的最大值
for i=0 to <1000 {
清零count[i]=0
}
while(输入N){
for i=0 to <N {//按顺序取数
输入number[i]
for j=0 to <N {//和所有数比较
如果出现了相同的数则给次数加上一次
}
}
for i=0 to <N {
比较出count数组中最大的值 并将其赋值给max
}
输出出现次数最多的数和它出现的次数
}
return 0;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 在统计数字出现次数的代码中不知道以什么作为结束的标志 解决办法:上网看了别人的代码,学习了 while(scanf("%d",&N)!=EOF)的写法 在条件中输入值 并且这个程序只执行一次
题目2:7-4 简化的插入排序
1. 本题PTA提交列表
2. 设计思路
定义n表示输入的原数组数据个数,x表示要插入的数,i控制循环,count 在输出插入x的数据时起作用
定义数组a
输入n
for i = 0 to n{
输入a[i]
}
输入x
如果要插入的数大于a[n-1]的话在输出a数组后 输出x
如果要插入的数小于a[0]的话在输出x后 输出a数组
如果x在比a[0]大比a[n-1]小的情况下
for i = 0 to n
{
输出插入x前的数字
count递增1,与i同步 但不记录插入x的那一次
当a[i]>x时插入x
}
for i = count to n
输出插入x后的数字
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 刚刚开始的时候没有把比第一个小和比最后一个大的情况考虑进去 解决办法:通过添加两个分支判断解决了
- 在用count计数时,把插入的那一次也记录进去,导致最后输出的数组缺少了比x大的那个数 解决办法:把count++写在if(a[i]<x)里
题目3:7-10 杨辉三角
1. 本题PTA提交列表
2. 设计思路
定义a数组保存要输出的那一组数组,b数组则存上一组数组的数据 完成杨辉三角的计算
输入n行
a先赋值a[0]=1 b[0]=1;b[1]=1
for i=1 to n{
a[0]后的数组清零
}
for i=2 to n{
b[1]后的数组清零
}
for i=0 to n{
第一行输出一个1
第二行输出两个1
else {//之后行
a[i]=1;//这是第i+1行的第i+1个数字
for int j=1 to i{
实现杨辉三角的本质 第i行第i个数字等于第i-1行的第i-1个数字与第i个数字的和
}
for int j=0 to i {
把这一行的数字交给b数组,方便下一行的计算
}
for int j=0 to i{
输出a数组
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 想了很久如何实现杨辉三角的本质 解决办法:在草稿纸上列出一部分杨辉三角,发现它的实质就是第i行第i个数字等于第i-1行的第i-1个数字与第i个数字的和,而要需要两行之间的变换,则需要两个数组
- 三角成功打印,但是数据不对 解决办法:数据比正确的大得多,而且很怪,最后发现在开始没给两个数组清零,在开头用两个循环实现清零
二、截图本周题目集的PTA最后排名。
三、同学代码结对互评
1.互评同学名称
梁志湖
2.我的代码、互评同学代码截图
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 志湖同学运用了一个二维数组,而我运用了两个一维数组
- 在定义数组方面,我用了两个循环来初始化,志湖同学仅用了一条 int a[10][10]={0},就做到了,比较简洁。
- 总体上来说此类有规律得表格打印问题,用二维数组来实现会比较直观,所以我认为志湖同学这题得做法比我好,就是如果再加上一些注释就更好了。
四、本周学习总结
1.你学会了什么?
1.1 C中如何存储字符串?
字符串是以ASCII字符NUL结尾的字符序列。ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中。不过,并非所有的字符数组都是字符串,字符数组可能没有NUL字符。字符数组也用来表示布尔值等小的整数单元,以节省内存空间。
1.2 字符串的结束标志是什么,为什么要结束标志?
'\0' 没有结束标志可能会使字符串发生越界
1.3 字符串输入有哪几种方法?
scanf("%s",ch1);
或
gets(str1);
不同:scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
相同:字符串接受结束后自动加'\0'
1.4 数字字符怎么转整数,写个伪代码?
定义字符型 op
输入数字字符
输出("%d",ch-'0');
1.5 16进制、二进制字符串如何转10进制?写伪代码?
定义a[];
输入数据
定义变量result=0
定义字符型数据char ch
当ch=getchar()!=\0时
result=result*10+ch-'0'
输出result
2.本周的内容,你还不会什么?
-
经常忘记的点,我打上来再复习一遍吧
a=++n 表示n=n+1 a=n
a=n++ 表示a=n n=n+1
a=--n 表示n=n-1 a=n
a=n-- 表示a=n n=n-1
单独的n++先表示n后加一 单独的++n先加一后带入运算 -
pta方面,此次数组不会做的题太多了,很多题都不知道如何运用之前学的知识来解决,很多都是在编译器里就输出不对的,更不要说复制到pta上通过测试了,很多编译器上对的,拿到pta也只是部分正确,说明自己考虑问题不全面。
3.期中考试小结
3.1 你认为为什么没考好?
- 时间分配:都是顺着题目做,导致到编程题时候已经没有时间,有之前编过的题也只能是因为没有时间交了白卷
- 基础理论:一些导论课的基础,还有一些c的理论基础,都不太清楚,很模糊,比如进制间的转换
- 熟练程度:熟练度低,导致读题目程序慢,进而做题速度也慢,正确率也低。
3.2 罗列错题。
-
选择题:5.以下均为合法标识符的是
A.do xyz _printf B.3aa _tt IF C.void ff s_v D._pi IF big_tree
错选B 正确D 分析:对基础的知识不了解,标识符不能以数字开头 -
程序分析输出结果题:大部分是没有分析过程扣分
-
阅读程序填空:第七空没有掌握正确的字符型数据输入getchar() ==> ch=getchar()
-
程序设计题:第三题
#include<stdio.h>
double fact( int x);
int main(){
int result;
int n,m;
scanf("%d%d",&m,&n);
result=fact(n)/(fact(m)*fact(n-m));
printf("result = %d",result);
}
double fact( int x){
double number=1;
int i;
for(i=1;i<=x;i++){
number=number*i;
}
return number;
}
此次的程序设计由于没有时间几乎白卷,写了的题也思路混乱。
3.3 下半学期要怎么调整C的学习?
- 扎实基础,能解决一个问题是一个问题,尽量做到把一个方面或一个问题的东西吃透,不然考到明明有印象又做不出来。
- 和其他学科的时间分配调整好,因为c是比较基础的语言,之后其他语言的学习也都是在c的基础上,所以学好c比较重要,在不影响其他学科的基础上多花时间在c上吧。
- 多花时间完成预习作业,预习作业比较重要,要是某一个单元的预习作业水了,那么接下来的听课就受影响,这个单元的学习也受比较大的影响。