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())!='
'){    //输入字符
		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 ");
else
输出("No ");

3.代码截图

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

问题一:写出代码,感觉没错,在dev上无结果
解决方法:在代码一个个切割开来,判断哪个地方与结果不服,结果是ch=getchar()!=' '中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.对于字符的优先级没有搞清楚。

原文地址:https://www.cnblogs.com/guobaoqing/p/7892573.html