C语言博客作业--数据类型
一、PTA实验作业
题目1:7-2 区位码输入法
1. 本题PTA提交列表
2. 设计思路
{
定义字符型变量 ch1,ch2,ch3,ch4;
定义整数型变量 a,b;
ch1=getchar(); //输入值
ch2=getchar();
ch3=getchar();
ch4=getchar();
a=10(ch1-48)+ch2-48+160; //运算结果
b=10(ch3-48)+ch4-48+160;
putchar(a);
putchar(b);
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
问题1:刚开始只是用两个ch,有结果但是结果与答案不一样
解决方法:在ch1,ch2后面加上printf,发现输出结果为‘1’,‘6’,就明白了没有‘大于10的字符’。
题目2:7-8 判断合法标识符
1. 本题PTA提交列表
2. 设计思路
定义变量repeat(输入几位数字),count,count1(用于判断结果),n(判断结果),i(用于循环),ch
输入repeat
for(i=1;i<=repeat;i++){ //循环
n等于0;
count1等于0;
count等于0;
如果((ch=getchar())!='\n'){ //输入字符
count1++; //输入字符的数量
如果((n==0)&&(((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))||(ch>='0'&&ch<='9'))) //判断字符是否满足开头的要求
count++;
如果(n==1&&(((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))||(ch=='_'||(ch>='0'&&ch<='9')))) //判断字符是否满足后面的要求
count++;
n=1;
}
end
如果(总量count=等于count1) //输出结果
输出("Yes\n");
else
输出("No\n");
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
问题一:写出代码,感觉没错,在dev上无结果
解决方法:在代码一个个切割开来,判断哪个地方与结果不服,结果是ch=getchar()!='\n'中ch=getchar()还要加括号
题目3:7-10 简单计算器
1. 本题PTA提交列表
2. 设计思路
定义变量n,m,sum,count=0, op;
输入n;
sum=n;
for(;;){
输入op)
如果是等号,结束循环
输入m
如果是+,运行下列式子,依次如下
sum=sum+m;
如果是-
sum=sum-m;
如果是*
sum=sum*m;
如果是-
if(m!=0) //限制分母是0
sum=sum/m;
else
count++;
}
else
count++;//一些不符合要求的加1
}
如果(count>0)
输出ERROR
else
输出sum;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题没有问题
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
一维数组定义要有类型名,数组名[数组长度]
初始化可以用static
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
在内存中分配了一段连续的存储单元,并对这些单元进行编号 ,详细请见C语言课本150页右上角
数组名字是数组首地址
1.3 为什么用数组?
在特定的题目下需要重复使用一些先前的数据,所以用数组,还有一些题目用数组可以大大提高编程效率
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
选择法
定义 a[10],i,j,k,t,n=10;
for(i=0;i<10;i++)
输入 a[i]
for(i=0;i<n-1;i++) //外循环控制,n个数选n-1次{
k=i; /假设当前的第一个数为最值,记在k中 /
for(j=i+1;j<n;j++) /从下一个数到最后一个数之间找最值/
如果(a[k]<a[j]) /*如果满足条件
k=j; /*则将其下标记在k中*/
在转换数值大小
for(i=0;i<10;i++)
输出a[i])
冒泡法
定义 a[10],i,j,t;
for(i=0;i<10;i++)//输入10个值
输出a[i]
for(j=0;j<9;j++) /外循环控制排序次数,n个数排n-1次/
for(i=0;i<9-j;i++) //内循环用于第j次比较n-j次
if(a[i]>a[i+1]) /满足条件逆序则交换*
{ t=a[i];
a[i]=a[i+1]; //转换数值
a[i+1]=t;
}
for(i=0;i<10;i++) //依次输出结果
printf("%d ",a[i]);
直接插入排序
定义 a[10],i,j,t;
for(i=0;i<10;i++)
输入a[i])
for(i=1;i<10;i++) /外循环控制次数,n个数从第2个数开始到最后共进行n-1次插入/
{
t=a[i]; /将待插入数存储于变量t中/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /在有序序列(下标0 ~ i-1)中寻找插入位置/
a[j+1]等于a[j]; /如果没有找到插入位置,则将元素后移一个位置/
a[j+1]等于t; /找到插入位置,插入/
}
for(i=0;i<10;i++)
输出a[i])
1.5 介绍什么是二分查找法?它和顺序查找法区别?
就是取中间大小的数字与要找的数字进行比较,如果待查数字大于中间数字,把中间数字与大数字的中间数字
在进行比较依次直到找到或者找不到为止。
区别是2分查找法的效率高,顺序查找法效率低
1.6 二维数组如何定义、初始化?
类型名 数组名[行长度][列长度]
用static初始化比较简单,只要加上{0}
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
定义一个2维矩阵inta[3]3
123
456
789
for(i=0;i<3;i++)
for(j=0;j<3;j++)
如果i大于等于j
a[i][j]等于a[j][i] //交换数组大小
j=i=j^=i //行列交换
输出结果
147
258
369
1.8 二维数组一般应用在哪里?
矩阵和一些用2维数组可以大大增加代码效率的编程
2.本周的内容,你还不会什么?
1.对于这种题目还是没有思路,遇到复杂的代码,基本看不出它在做什么
2.个人感觉数组的定义不是很难,难的是巧妙的应用它,对于冒泡法感觉不是很熟悉,对于行列互换掌握的不是很好
3.对于字符的优先级没有搞清楚。