C语言博客作业--一二维数组
一、PTA实验作业
题目1:7-5 数组循环左移
1. 本题PTA提交列表
2. 设计思路
定义整型变量n,m,输入n,m的值
定义数组a[n+m],输入这n个数
for i=0 到i<n,依次将这n个数存放到数组中
for j=i 到j<m+n,从输入n个数的第一位数继续存储到数组中
for i=m 到i<n+m,输出左移m位后的数字排列
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
刚开始写的代码有用到数值间的交换,对于题目给出的样例能正确的输出,但是当n大于m时,输出的就是错的。
题目2:7-2 求整数序列中出现次数最多的数
1. 本题PTA提交列表
2. 设计思路
定义整型变量 n,j,i,max,number;
输入n的值
定义整型数组a[n],count[1001];
for i=0;到i<1001
count[i]赋初值
for i=0到 i<n
a[i]赋初值
for(i=0;i<n;i++){
for(j=0;j<=1000;j++){
如果j==a[i]
count[j]=count[j]+1
如果max<count[j]
max=count[j]
number=j
输出number,max的值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
呃,这题在pta上并没有通过,图上显示的测试点都没有过,按照题目的样例,输出是一样的,测试了一些其他的也可以,代码还是存在问题的吧,所以才会过不了
题目3:7-9 判断上三角矩阵
1. 本题PTA提交列表
2. 设计思路
定义整型变量t,n,flag=0,输入t,n的值
定义数组a[n][n]
for(i=0;i<n;i++) for(j=0;j<n;j++) 将数值存储到数组中
j<i的时候,判断a[i][j]是否为0,如果不等于0,flag=1
当n=1 并且a[0][0]等于0的时候,flag=0
if flag=1,输出no
else 输出yes
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
最开始在判断是否存在非0元素的时候,是想一旦碰到某个数值为非0元素时,就让它结束循环,但是写出来的代码跟我想的不一样,它只是结束了这一个循环,开始了下一次的循环,flag的值被不断的改变着,无法达到自己预期的效果
二、截图本周题目集的PTA最后排名。
三、同学代码结对互评
1.互评同学名称
周炳辉
2.我的代码、互评同学代码截图
我的代码
#include<stdio.h>
int main()
{
int n,number,x,i,temp,j,temp1;
scanf("%d\n",&n);
int a[n+1];
for(i=0;i<n;i++)
scanf("%d\n",&a[i]);
scanf("%d",&x);
a[i]=x;
for(i=0;i<n;i++)
if(a[n]<a[i])
{
temp=a[i];
a[i]=a[n];
for(j=i+1;j<=n;j++){
temp1=a[i+1];
a[j]=temp;
temp=temp1;
i++;
}
}
for(i=0;i<=n;i++){
printf("%d ",a[i]);}
return 0;
}
同学的代码
#include<stdio.h>
int main(){
int N,i,j,k,number;
scanf("%d",&N);
int a[N+1];
for(i=0;i<N+1;i++)
scanf("%d",&a[i]);//将要插入的数放在数组最后一项
for(j=0;j<N;j++){
if(a[N]<=a[j]){
number=a[N];
for(k=N;k>j;k--){//数组后移一位
a[k]=a[k-1];
}
a[j]=number;//插入
break;
}
}
for(i=0;i<N+1;i++)
printf("%d ",a[i]);
return 0;
}
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
我定义的变量比同学多,用了多个变量和数值间的交换才实现了数据的插入,而同学先是找到了要插入的位置,然后巧妙的利用数组后移一位实现数据的插入,这种方法更加简洁明了,我的显得复杂多了,效率也低。
更喜欢同学的代码风格,简洁明了易懂。
四、本周学习总结
1.你学会了什么?
1.1 C中如何存储字符串?
用一维字符数组来储存
1.2 字符串的结束标志是什么,为什么要结束标志?
'\0'
因为字符串没有明确的给出有效字符的个数,只规定在字符串结束符'\0'之前的字符都是字符串的有效字符,所以要用'\0'来控制循环的结束
1.3 字符串输入有哪几种方法?
函数scanf()和gets()
1.4 数字字符怎么转整数,写个伪代码?
定义变量int number ,char ch
ch=getchar()
number=ch-48
1.5 16进制、二进制字符串如何转10进制?写伪代码?
16进制
定义字符型数组a[80] 定义整型变量i,number=0
gets(a)字符串
for i=0 to a[i]!='\0'
if a[i]为数字字符
number=number*16+a[i]-'0'
else if a[i]为a到f的十六进制数
number=number*16+a[i]-'a'+10
else if a[i]为A到F的十六进制数
number=number*16+a[i]-'A'+10
2进制
定义字符型数组a[80] 定义整型变量i,number=0
gets(a)字符串
for i=0 to a[i]!='\0'
if a[i]为数字字符
number=number*2+a[i]-'0'
2.本周的内容,你还不会什么?
pta阅览室那题挺懵逼的,不知道该如何下手,还有出生年那题的如何判断有几个不同的数字自己也不是很懂
3.期中考试小结
3.1 你认为为什么没考好?
1.基础知识还不够扎实,语法掌握得不够透彻,自己阅读代码的能力实在太差了,平时做题的时候过度依赖于dev c
2.时间把握得不够好,在一些题目上浪费了太多的时间,导致自己做不完
3.自己的态度不够认真,考试前没有将书本翻一遍看看,没有将自己还记不牢的知识再看一遍
3.2 罗列错题。
选择题
a++和++a的用法还是没有记清楚,考试时有点混乱,以为printf语句里的a++要先执行a=a+1,再将这个a的值作为a++的值
填空题
第9空错得很不应该,这个错误平时已经是有犯过的了,这种知识点的题也做过好几次的了,但是考试的时候自己还是忘了1要用1.0
改错题
对于变量是否要赋初值还不够敏感,所以第一个错误没有改出来。
term=-termxx/(n+1)(n+2)后面的(n+1)(n+2)应该要用括号括起来和n++这两个地方自己都没有发现错误,= =不够认真吧
编程题
自己的能力是真的挺差的,猜数字的题书上讲过好几次了,也做过好几次了,考试的时候自己还是不懂,写得乱七八糟的,可见自己平时学的真的不怎么扎实,是时候该好好反思反思自己是怎么学的了。
3.3 下半学期要怎么调整C的学习?
课前预习,将自己看不懂的地方用笔画出来,等老师讲课的时候,遇到要讲自己不懂的地方,仔细的听,必要的时候做做笔记
课后认真的复习,将自己做错的题目翻出来看,加深自己的印象
多找优秀的同学看看他们写的代码,提高自己的编程能力和阅读代码的能力