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的学习?

课前预习,将自己看不懂的地方用笔画出来,等老师讲课的时候,遇到要讲自己不懂的地方,仔细的听,必要的时候做做笔记
课后认真的复习,将自己做错的题目翻出来看,加深自己的印象
多找优秀的同学看看他们写的代码,提高自己的编程能力和阅读代码的能力

posted @ 2017-12-03 22:31  hoppp  阅读(558)  评论(4编辑  收藏  举报