您的位置:首页 > 编程语言 > C语言/C++

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

2017-11-24 15:11 447 查看

一、PTA实验作业

题目1:7-2区位码输入法

1.本题PTA提交记录



2.设计思路

1.int dist存放区码,posi存放位码,n为一个整数

2.输入四位整数n

3.dist=n/100 提取前两位数作为区码

4.posi=n%(n/100) 提取后两位作为位码

5.区码和位码加上160输出结果

3.代码截图



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

遇到的问题:输入的整数为区码,并非区码和代码




解决方法:将输入的整数分为前后两部分,各两位数即可




题目2:7-6掉入陷阱的数字

1.本题PTA提交记录





2.设计思路

1.定义整型变量flag和sum1存放N的值,循环变量i和k,N存放输入的整数,sum存放每位数累加之和,num1存放m的值,num2存放每一位数,count存放输入整数的位数

2.i=0,i<=10,i++

3.如果i=0,m=M,当i=2时,m的值为上一次累加后的值,flag=sum1=m

4.计算N的位数 do{num1=m/10 m=m/10 count++}while(m!=0)

5.k=1,k<=count,k++

6.取出N的每一位数进行累加 num2=sum1%10 sum1/=10 sum+=num2

7.计算累加后n的值

8.如果flag=n,则输出后停止程序,否则输出后另初始化count和sum的值后继续循环

3.代码截图



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

遇到的问题:忽略了0的运算




解决方法:将i的初值改为0,判断条件改成i=0,同时输出结果的i改成i+1即可


3.7-10简单计算器

1.本题PTA提交列表



2.设计思路

1.char op存放运算字符,int a存放第一位输入的数字,b存放第一位之后输入的数字,flag存放判断是否输入ERROR

2.输入a

3.while(op!=‘=’)输入op

4.如果op='=',a=a+b;如果op=’+‘,a=a+b;如果op=’-‘,a=a-b;如果op=‘/’且a=0,flag=1;如果a!=0,a=a/b;如果op为非法字符,flag=1

5.判断flag的值,flag=1,输出ERROR;否则输出a的值

3.代码截图



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

遇到的问题:1.忽略了除数为0的情况 2.输出ERROR没有换行导致格式错误




解决方法:1.将a==0改为b==0 2.输出ERROR后换行即可


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



三、本周学习总结

1.你学会了什么?

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

定义:类型名 数组名 [数组长度];数组长度是一个常量
初始化:类型名 数组名 [数组长度]={初值表},例如inta a[10]={1,2,3,4,5,6,7,8,9,10}

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


数组名是一个地址常量,存放数组内存空间的首地址

1.3 为什么用数组?

在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来互相区分,他的优点是表达简洁,可读性好,便于使用循环结构

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

一、冒泡法

例如输入五个数进行排列 5 2 1 3 4

1.int 循环变量i和j,temp存放相邻两个数中较小的数

2.int a[5]={5,2,1,3,4}

3.for(i=0;i<4;i++)共进行N-1次排序

4.for(j=0;j<i-1;j++)已经排好的数不参与比较

5.如果前一项大于后一项 temp=a
a[j]=a[j+1] a[j+1]=temp

6.排序完成后,for(i=0;i<5;i++)输出排序好的数字

二、选择法排序

例题如上

1.int a[5]={5,2,1,3,4} 循环变量i,j,k temp存放参与比较的两个数的较小值

2.for(i=0;i<4;i++)共进行四趟排列

3.k=i 当进行第i趟时,比较数的下标为i

4.for(j=i+1;j<4;j++)后面的每一位被比较数都跟最前面的数比较

5.如果a[j]<a[k] k=j 如果比最前面的数还小,记录其下标

6.temp=a[k] a[k]=a[i] a[i]=temp 将最小值排到最前面

7.for(i=0;i<5;i++)输出排列好的数字

三、直接插入排序法

例题如上

1.int a[5]={5,2,1,3,4}循环变量i,j index存放下标 temp存放较小值

2.for(i=0;i<4;i++)index=i 进行四趟排序,假设最小值的下标为i

3.for(j=i+1;j<=4)查找最小值所在的下标

4.如果a[j]<a[index] index=j 记录最小值的下标

5.如果a[index]不等于a[i] temp=a[i] a[i]=a[index] a[index]=temp

6.for(i=0;i<5;i++) 输出排列好的数字

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

二分查找(Binary Search)
二分查找又称折半查找,它是一种效率较高的查找方法。
二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。

顺序查找的基本思想:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。

二分查找法和顺序查找法的区别:当查找数列是有序的话,使用二分查找法可以极大的减少搜索时间,提高效率;而顺序查找法需要耗费大量的时间和内存逐个搜索关键词。

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

定义:二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2]其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:

inta[3][4];说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:


初始化:二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。例如对数组a[5][3]:
按行分段赋值可写为:
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
按行连续赋值可写为:
int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};这两种赋初值的结果是完全相同的

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

矩阵转置:以主对角线为对称轴,将所有元素互换位置
下三角:i>=j
上三角:i<=j
对称矩阵:i==j

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

二维数组一般应用在二维表和矩阵中

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

输入一串字符、判断字符个数这类题目还不是很熟练,思路比较不灵活,做一题需要挺久的时间,PTA数据类型和数组有这类型的题目要多多练习

素数判断的条件偶尔会写错,还需要在加强巩固一下

位运算符不怎么理解其原理,经常判断错误

利用函数调用二维数组数组时,实参定义错误,如int sum(int a[10][10],int n)写成int sum(int a

,int n

PTA题目虽然能做完,但是消耗的时间太多了,效率太低了,上机考试每次都做不完

期中考试成绩很不理想,书上的知识点很多都没理解透彻,而且读代码能力也不好,导致笔试的时候做题速度大大降低,我决定要更加的努力才能弥补我之前浪费的时间落下的知识点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: