C语言博客作业--数据类型

一、PTA实验作业

题目1:掉入陷阱的数字

1.本题PTA提交列表

2.设计思路

  • 第一步:定义整形变量N,i判断次数,sum存放数字各位之和,number,count存放循环过后上一次的sum值,a存放初始N值
  • 第二步:初始化i=1,count=1
  • 第三步:输入N,初始化a等于N
  • 第四步:while(count!=sum&&sum!=a)循环第五到第九步
  • 第五步:count=sum,sum=0
  • 第六步:只要N不等于0就循环第七步计算各位数字之和
  • 第七步:number=N%10; sum=sum+number; N=N/10;
  • 第八步:sum=sum*3+1,输出i和sum
  • 第九步:i++即次数加1,N=sum

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

  • (1)通过调试微盘发现第一次进入就是调入陷阱的数字时,会进入两次循环,输出两次相同的数然后停止,但是题目要求是如果第一次就是数字陷阱的数,则只输出一次,我通过定义一个变量a,让它等于第一次的N,然后第一次循环完,判断他们是否相同,相同就退出

题目2:区位码输入法

1. 本题PTA提交列表

2.设计思路

  • 第一步:定义字符型变量ch1,ch2,ch3,ch4,ch_height,ch_lower
  • 第二步:输入ch1,ch2,ch3,ch4
  • 第三步:高字节为区码加上160,ch_height=(ch1-'0')*10+ch2-'0'+160
  • 第四步:低字节为位码加上160,ch_lower=(ch3-'0')*10+ch4-'0'+160;
  • 第五步:输出ch_height ch_lower

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明

  • (1)一开始在计算时,是这样计算的

    算出来是时错误的答案,因为我输入的是字符型变量,直接和整形数计算导致错误,解决方法:将字符型变量变为整形变量再计算

题目3:简单计算器

1. 本题PTA提交列表

2.设计思路

  • 第一步:定义一个全局变量result
  • 第二步:定义整形加法函数,减法函数,乘法函数,除法函数,形参都为double型变量number
  • 第三步:定义字符型变量ch,定义整形变量number,count,初始化count为0
  • 第四步:输入number和ch
  • 第六步:result=number
  • 第七步:当ch不为等号时,进入循环,循环第
  • 第八步:ch是什么符号就进入什么函数,即十二步
  • 第九步:否则count++,并退出循环
  • 第十步:输入ch
  • 第十一步:如果count不为0,输出EOORO,不然输出result的值
  • 第十二步:result=result(对应函数的符号,加法函数即为+)number

3.代码截图


4.本题调试过程碰到问题及PTA提交列表情况说明

  • (1)一开始不知道判断ch为除号,number为0时或者输入了其他符号,让它最后输出为ERROR。解决方法:定义一个count作为判断标志,当有错误输入时,就让count++,最后判断count的值选择输出

二、截图本周题目集的PTA最后排名

三、本周学习总结

1.你学会了什么?

1.1 一维数组如何定义、初始化?

定义格式为 类型名 数组名 [数组长度]; 初始化格式为类型名 数组名 [数组长度] = {初值表}; 当初始化把数组中的每一个数都初始化时,可以省略数组长度

1.2 一维数组在内存中结构?可画图说明。数组名表示什么?

一维数组再内存中结构是连续的,线性的

数组名是一个指针,表示数组的首元素的地址

1.3 为什么用数组?

可以连续存放一大段数,不用用一个一个变量来存放一个一个数据,减少代码量,用数组名和下标可以唯一的确定数组元素,用了数组之后,可以判断数组中某个位置前后数的情况,来完成一些不用数组无法实现或实现很麻烦的功能

1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.

冒泡法
冒泡排序法:即两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
设计思路

  • 第一步:定义变量int a[10],i,j,k
  • 第二步:for(i=0;i<10;i++) 依次输入数据存入数组
  • 第三步:for(i=0;i<9;i++) 循环第四步
  • 第四步:for(j=0;j<10-i;j++)循环
  • 第五步:if(a[j]>a[j+1]) 则交换这两个数即k=a[j];a[j]=a[j+1];a[j+1]=k;
  • 第六步:for(i=0;i<10;i++) 依次输出a[10]中每个数

插入排序:
设计思路

  • 第一步 : 从第一个元素开始,该元素可以认为已经被排序
  • 第二步:for( j=i-1 ; j>=0 && t>a[j] ; j-- ) 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 第三步:a[j+1]=a[j];即如果该元素(已排序)大于新元素,将该元素移到下一位置
  • 第四步:重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • 第五步:将新元素插入到下一位置中a[j+1]=a[j];
  • 第六步:重复步骤2~5

选择插入:
设计思路

  • 第一步:先给数组赋值,n为数组长度
  • 第二步:for(k=0;k<n-1;k++) index=k;最小值下标为k循环第三步
  • 第三步:for(i=k++;i<n;i++)循环第四步
  • 第四步:如果a[i]小于最小值,则最小值与下标为k的值交换
  • 第五步:输出数组

4.5 介绍什么是二分查找法?它和顺序查找法区别?

二分查找法就是先寻找数组中间位置的数,判断其是否为要寻找的数,不是的话,大于要找的数,则往左继续二分,小于要找的数,则往右二分。
二分查找法适用于排序过的数组,速度快,顺序查找法要遍历数组,在数组很大时效率低,但对数组本身没有要求,适用于短数组

1.6 二维数组如何定义、初始化?

二维数组定义格式为 类型名 数组名 [行长度][列长度]
初始化格式为类型名 数组名 [行长度][列长度] = { {初值表0}, ... ,{初值表k}, ...} 如果初始化了全部行,则可以忽略行长度

1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。

转置矩阵可由一下代码实现

	int i,n,j;
	scanf("%d",&n);
	int a[n][n]; 
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
	for(i=0;i<n;i++){
		for(j=0;j<n;j++)
		printf("%2d",a[j][i]);
		printf("\n");
	}
	return 0;

下三角qi>=j 上三角i<=j 对称矩阵 a[i][j]=a[j][i]

1.8 二维数组一般应用在哪里?

当数组中的数表示的不止一种含义时,比如我们要表示不同的人不同科目的成绩时,这里有两个变量,不同的人和不同科目,所以要用二维矩阵,在或者是矩阵时,就要用到二维数组

2.本周的内容,你还不会什么?

对于数组排列的三种排列还不是特别理解,然后对于二维数组的具体应用,做了pta发现真的很难,对于不同符号的优先级了解也不够,考完试发现对很多基础只是了解也不够。对于手写代码,还是不习惯,并且很容易错。

posted @ 2017-11-25 14:11  你们走啊  阅读(439)  评论(8编辑  收藏  举报