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

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

2017-11-26 22:59 288 查看

一.PTA实验作业

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

1. 本题PTA提交列表



2.设计思路

定义变量N,i,g=1表示位数,a表示各位数字相加的和,b=0,j,N1,c,d用于储存N
do{
for(i=0;i<N1;i++){
算出N的位数g
}
for(j=g;j>0;j--){
各位数字相加求和a
}
N1=3*a+1;
按格式输出printf("%d:%d",b,N1);其中b由1开始增加
直到N1等于N结束循环

3.代码截图



4.本题调试过程中碰到的问题以及解决方案



题目2: 7-4 打印菱形图案

1. 本题PTA提交列表



2.设计思路

int n,a,i,l,j,k,g,h,count=0,count1=0;
输入n
if((n-1)%2==0)则继续
由规律可以看出,
上半部分(大三角型)有 (n+1)/2行
for(i=(n+1)/2;i>0;i--){
行数count加1
输入*的数量=2*count-1
for(j=2*count-1;j>0;j--)
在输入完每一行的*后输出换行

for(k=(n-1)/2;k>0;k--){
下半部分有 (n-1)/2行
思路同上

3.代码截图



4.本题调试过程中碰到的问题以及解决方案

1.思路错误:漏掉了空格的步骤



.解决方案:如上代码。根据空格数与行数的规律输出空格

2.部分正确:if((n-1)%2==0)在判断奇数时,求余写成除法

.


解决方案:改为求余的%

题目3:7-8 判断合法标识符

1. 本题PTA提交列表



2.设计思路

定义一个数组 line[80],整型n(表示做n次下列运算 )
输入n
令j=1,k=0
给数组赋值直到line[k]='\n',期间k++
判断第一个字符是否为下标号和字母,如果是则进行下面,不是则输出NO
k=1
从line[1]开始判断每个字符是否是下标号或字母或数字
k++;
continue;跳过后面语句
直到line[k]!='\0'
若有不是的
printf(NO,换行)
break;
若每个都是,即line[k]==0
printf(合格,换行)

j++,再次赋值数组
直到j=n

3.代码截图



4.本题调试过程中碰到的问题以及解决方案

1.对数组赋值后进行判断时line[k]=0



2.错误:进行判断的下标符输入错误

解决方案:从题目复制



3.错误:判断错误后没有结束循环导致输出两个结果

解决方案:加break;



二.截图本周题目集的PTA提交列表及最后排名





三、本周学习总结(3分)

1.你学会了什么?

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

类型名 数组名 [数组长度];
如:int a[10];

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



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

数组名指定数组内每个元素的类型

1.3 为什么用数组?

使用数组可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分

表达简洁,可读性好,便于使用循环结构

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

1.选择法

考虑n个数的数组A:首先找出A中的最小元素并将其与A[0]中的元素进行交换,然后找出A中次最小元素并将其与A[1]中的元素进行交换,对A中的前n-1个元素进行该操作。

定义数组a[具体数n]={数组赋值}
定义i,j,temp;
int b=n;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<b;j++)
{
如果a[i]>a[j]{
把两个记录的相反次序进行交换
}
}
}
for(i=0;i<n;i++){
printf("%d",a[i]);
}

2.冒泡法

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

定义i=0,j,t;
for(i=0;i<len;i++)
{
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
将a[j]和a[j+1]交换
}
}
}
按顺序输出数组
}

3.直接插入排序

指每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程

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

二分查找法就是先寻找数组中间位置的数,判断其是否为要寻找的数,不是的话,大于要找的数,则往左继续二分,小于要找的数,则往右二分。

二分查找法适用于排序过的数组,速度快,顺序查找法要遍历数组,在数组很大时效率低,但对数组本身没有要求,适用于短数组

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

二维数组定义格式为 类型名 数组名 [行长度][列长度]

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

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

#include<stdio.h>
int main(void) {
int n1,m1,n2,m2,i,j;
printf("输入一个矩阵的行和列:");
scanf("%d%d",&n1,&m1);
m2=n1;  n2=m1;            /*将行和列交换定义*/
int a1[n1][m1],a2[n2][m2];
printf("输入%d*%d的矩阵\n",n1,m1);
for(i=0;i<n1;i++)
for(j=0;j<m1;j++)
scanf("%d",&a1[i][j]);
for(i=0;i<n1;i++)
for(j=0;j<m1;j++)
a2[j][i]=a1[i][j];
for(i=0;i<n2;i++)
{
for(j=0;j<m2;j++)
printf("%d  ",a2[i][j]);
printf("\n");
}
return 0;
}

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

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

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

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

(1)对直接插入排序不是很理解

(2)其他的还没有遇到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: