C语言博客作业--数据类型
一、PTA实验作业
题目1:7-2 区位码输入法
1.实验代码
2 .设计思路
int a;
输入a
取出a的前两位数a/100;
取a的后两位数a%100
putchar(a/100+160);putchar(a%100+160);
然后输出
3.本题调试过程碰到问题及解决办法
问题:不理解题意,不明白如何让字符输出
本题没有调试过程,只要把a的前两位和后两位分别输出,并加上160,即可输出答案
4.本题PTA提交列表
题目2:7-4 打印菱形图案
1.实验代码
uploading-image-860196.png
2 .设计思路
高度n,i,j控制循环;
i=1;空格=6,输出* 转行
i=2;空格=4;输出* * * 转行
i=3;空格=2;输出* * * * * 转行
i=4;空格=0;输出* * * * * * * 转行
i=5;空格=2;输出* * * * * 转行
i=6;空格=4;输出* * * 转行
i=7;空格=6;输出* 转行
int i,j,n
输出n
上半部分for(i=1;i<=(n-1)/2;i++)
找出空格规律为n-2i+1
输出 //后面跟一个空格
中间行数为for(i=1;i<=n;i++)
输出 转行
下半部分for(i=(n-1)/2;i>0;i--)
其余和上半部分一样
3.本题调试过程碰到问题及解决办法
问题:提交到PTA时提示格式错误,但运行结果是对的uploading-image-495198.png
通过把上半部分空格改成#号输出
通过上图发现自己上半部分每一行都多输出一个#号,于是把j的初始值增加1,结果正确。
4.本题PTA提交列表
题目3:7-10 简单计算器
1.实验代码
2 .设计思路
定义整型变量n,x=0和字符型变量op,输入n,并在定义sum=n,再输入字符型变量op。while((op=getchar())!='='){ //读取字符存放在op直到读取到‘=’
输出n
if(op'+'){sum=sum+n;}
else if(op'-'){sum=sum-n;}
else if(op''){sum=sumn;}
else if(op'/'),在这之中如果n0,x=1,跳出循环,否则sum=sum/n;
除此之外否则x=1;跳出循环;
再输入 一个整型变量op,并进入下一次循环,直至循环结束。
如果x1,输出ERROR;否则输出sum
3.本题调试过程碰到问题及解决办法
问题:pta提醒分母为0浮点错误
解决办法:在/上加一个判断0的if语句。
4.本题PTA提交列表
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
1.你学会了什么?
1.1 一维数组如何定义、初始化?
首先声明数组的类型,然后声明数组元素的个数
定义:首先要明确数组变量名,数组元素的类型和数组的大小,其一般形式为类型名 数组名 [数组长度]。数组长度是一个常量。
初始化:其一般形式为类型名 数组名 [数组长度]={初值表};虽然c语言规定只有静态储存的数组才能初始化,但一般的c编程系统都允许对动态储存的数组赋值。如果静态储存的数组如果没有初始化,那系统自动赋值为0.数组初始化也可是部分元素
1.2 一维数组在内存中结构?
1.3 为什么用数组?
数组是一组相同数据类型数据的集合。数组赋过值,可以随意取当中的任意值,例如可以判断赋的第一个值和赋的最后一个值的大小。比单独用数组简单,还可以让其赋的值进行任意排序。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
(1)选择法排序
1.定义整型变量i=0,min,k,n,temp;定义数组a[10];
2.输入整数n;
3.for(i=0;i<n;i++),输入a[i]的值,直到循环结束;
4.for(i=0;i<n;i++),a[min]=a[i],for(k=i+1;k<n;k++)如果a[k]<a[min],temp=a[min],a[min]=a[k],a[k]=temp。,内循环结束后,a[i]=a[min].输出a[i]值,在执行下一次循环,最终实现排
(2)直接插入排序
//首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。
//定义两个循环变量i,j,定义一个temp为插入元素
for(i=1;i<n;i++) {
temp=a[i ]; /temp为要插入的元素/
j=i-1;
while(j>=0&&temp<a[j]) { /从a[i -1]开始找比a[i ]小的数,同时把数组元素向后移/
a[j+1]=a[j ];
j--;
}
a[j+1]=temp; /插入/,
(3)冒泡排序
冒泡排序把序列分成无序(前)和有序 (后)两个序列,其实质是把无序序列中相邻两个元素依次比较,大者下沉 (后移),移动到最后的元素即为有序序列的第一个元素,多次冒泡以后直至序列有序。如果序列中的元素为n,则需要进行n-1次冒泡,每次冒泡需要做若干次比较。②C程序实现过程。
int a[N],i,j,t;//i,j分别用来做冒泡和比较的循环计数变量,
//此外,i还用来表示无序序列中倒数第二个数
//从键盘中输入数给数组a[N]中的每个元素
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=N-2;i>=0;i--)
for(j=0;j<=i;j++)
if(a[j]>a[j+1])//无序序列中的相邻两个元素两两相互比较
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
1.5 介绍什么是二分查找法?它和顺序查找法区别?
首先其元素是按一定顺序排列,将表中间位置的元素与所要得出的元素比较,如果两者相等,则查找成功;否则如果中间位置的元素大于所求元素,则进一步查找前面的子数组,否则进一步查找后面子数组。以此类推,直到找到满足条件的元素为止,否则无此元素。
它比顺序查找法简便,不用一个一个的代入,验证是否相同。二分法是用中位数来判断。
1.6 二维数组如何定义、初始化?
定义首先要明确数组变量名,数组元素的类型和数组的大小,一般形式为:类型名 数组名 [行长度][列长度]
初始化:有两种赋值方法。分行赋初值和顺序赋初值。
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
对角线上元素不变,其余元素两个下标互换。
上三角:i<=j时;下三角:i>=j时;对称矩阵:a[i][j]==a[j][i]
1.8 二维数组一般应用在哪里?
1.主要运用于矩阵的计算,eg矩阵的乘法
2.生活中实际问题的应用,eg比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)
3.二维数组与函数
2.本周的内容你还不会什么?
还是老问题,知识点都能听得懂,但是不会运用。就像这次期中考试,选择题考各种知识点,很多知识点都能背住,所以能写对,但是如果是运用数组写代码,就不会,老师说过要坚持独立写代码,找错误,错多了,再调正确了。就慢慢会编了。但是很多时候真的很难坚持。首先,很多题目没有思路,第二,有思路但是无法把思路转化为c语言的语法表示出来,第三,遇见错误不知道如何处理。第四,一切一切都怪自己无法坚持,我也意识到自己打代码和独立思考的时间太少了,缺少这种提升自己的过程,自然而然就会被同学拉大差距。我也把自己的困扰告诉一个学长,他提醒我,每个人打代码都会没动力,因为不知道持续打代码有什么用,方向在哪。但是我们可以利用代码解决一些实际问题或者制造一些小程序。利用代码改变电脑程序的后台服务,这些都是代码的作用,通过这些运用,代码不仅有用还有趣!