-
C语言博客作业--数据类型
一、PTA实验作业
题目1:7-4 打印菱形图案
1. 本题PTA提交列表
2. 设计思路
- 定义变量n,s,i,j,n表示菱形长度
- 输入n;s=n/2+1;
- 上半部分菱形for(i=1;i<=s;i++) //从1到s行;
for(j=0;j<s-i;j++) //第i行,输入的空格数与s和i的关系,注意每次输出两个空格;
printf(" ");
for(j=0;j<i2-1;j++) //输入星号与i的关系,格式为星号+空格
printf(" ");
- 每次循环结束后换行;
- 下半部分菱形for(i=1;i<=n/2;i++) //余下n/2行另外算
for(j=0;j<i;j++)
printf(" ");
for(j=0;j<(n/2-i)2+1;j++)
printf(" ");
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
- 提交列表显示格式错误和部分正确,在Dev c上运行,输出的菱形不对称;
- 用#号代替空格观察菱形的格式,发现输出*号之前输出的空格数不对,在第s行开头应该没有空格输出,将j<=s-i和j<=i改为j<s-i和j<i
- 发现输出*号前输出的空格数还是不对,少了一倍,所以将每次输出一个空格改为每次输出两个空格,得到正确结果
题目2:7-7 发红包
1. 本题PTA提交列表
2. 设计思路
- 定义数组a[7]={100,50,20,10,5,2,1}表示面值,数组b[7]={0}表示各面值的张数,定义变量money表示面值,定义i;
- 输入money
- for(i=0; i<7;i++) 此循环用于计算各面值的张数
{
b[i]=money/a[i]; 计算面值a[i]的张数,并记录在b[i]
money-=a[i]*b[i]; 减去已取的金额,money为下一次循环的金额
printf("%3d元:%3d张
", a[i], b[i]);
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
- 一开始没有用数组进行编程,而是用了七个for语句,提交结果显示运行超时,Dev c上也运行不了;
- 改用数组做,提交显示格式错误,编译器上运行结果排版错误,题目要求严格按个位对齐;
- 将输出语句该为%3d,每个数值占三位,得到正确结果
题目3:7-10 简单计算器
1. 本题PTA提交列表
2. 设计思路
- 定义变量char ch='0' ,int i,sum,flag=0,flag用于判断被除数为零和非法字符
- 输入初始数值sum
- 进入循环while(ch!='='){ 输入ch
如果ch'=',循环结束;
输入数值i;
如果ch'+',sum=sum+i
如果ch'-',sum=sum-i
如果ch'',sum=sumi
如果ch=='/',当i!=0时,sum=sum/i,否则flag=1
否则flag=1
- 如果flag=1,输出ERROR;否则输出sum
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
- 提交多次部分正确,提示错误为非法字符的处理不正确,在Dev c上运行结果也不对;
- 发现自己用的都是if语句,忽略了非法字符的判断,最后改用if , else if的结构,在判断完加减乘除的后面,用else判断非法字符,若为非法字符,flag=1
得到正确答案;
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
- 定义数组:一般形式为 类型名 数组名 [数组长度]
- 数组的初始化:类型名 数组名 [数组长度]={初值表},从下标为0开始逐一对应,静态数组没有初始化,所有元素均为0
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
- 一维数组:
- 数组名是一个地址常量,存放数组内存空间的首地址
1.3 为什么用数组?
- 数组是最基本的构造类型,它是一组相同类型数据的有序集合。在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标加以区分,它的有点是表达简洁,可读性好,便于使用循环结构
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
- 选择排序法:1)输入n,数组a[n]
2)for(k=0;k<n-1;k++){
index=k; //index用于存放最小值所在下标
for(i=k+1;i<n;i++) //寻找最小值所在下标
if(a[i]<a[index]) index=i
temp=a[index];a[index]=a[k];a[k]=temp; } //最小元素与下标为k的元素交换
3)依次输出n个数组元素的值
- 冒泡排序法:1)输入n,数组a[n]
2)for (k=0; k< n-1; k++) {
for (i=0; i<n-k-1; i++) { //比较相邻元素
if a[i]>a[i+1]) { //如果前面大于后面,下标不变,交换元素的值
temp = a[i]; a[i] = a[i + 1]; a[i + 1] = temp;}}
3)依次输出n个数组元素的值
- 直接插入排序法:1)输入n,数组a[n]
2)for (k=1; k< n; k++) {
temp=a[k]; //用来临时保存将要进行插入操作的元素temp
for (i=k-1; i>=0&&a[i]>temp; j--) { //寻找插入位置并移动元素
a[i+1]=a[i];}
a[i+1]=temp; } 将tmp插入到寻找到的位置i+1
3)依次输出n个数组元素的值
1.5 介绍什么是二分查找法?它和顺序查找法区别?
- 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
- 区别:顺序查找的特点就是从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败;而二分查找法是从中间开始查找,逐步缩小范围,对于大数据的处理比较适用,减少了循环次数,效率更高;
1.6 二维数组如何定义、初始化?
- 二维数组的定义:类型名 数组名 [行长度] [列长度]
- 初始化:分行赋初值:类型名 数组名 [行长度] [列长度]={ {初值表0},..... ,{初值表k},...... },把初值表k中的数值依次赋给第k行;
顺序赋值法:类型名 数组名 [行长度] [列长度]={初值表},依次赋值;
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?
- 矩阵转置:for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i<=j){
temp=a[i][j];a[i][j]=a[j][i];a[j][i];}
- 下三角:i>=j 上三角:i<=j 对称:ij 或 i+jN-1
1.8 二维数组一般应用在哪里?
- 有一系列元素时用一维数组,如果这些元素有一定的位置逻辑,如矩阵,就用二维数组
2.本周的内容,你还不会什么?
- pta题目中第九题切分表达式——写个tokenizer吧还不会做,我的做法是首先用循环输入一个合法表达式,直到输入=,接着再用循环拆分表达式并输出,但是,在输出完数字之后怎么换行不会,所以每次输出完之后还会再输出一个字符,再换行,问题还没有解决;以下我的代码,望大佬帮忙
- 还有这次期中测试,发现很多计算机基本理论和一些逻辑运算还不懂,尤其是位运算,与、或、异或等等;
- 对二位数组的应用还不太了解,与循环结合常用于解决那些问题?
-
相关阅读:
Python3.7 练习题(-) 如何使用Python生成200个优惠卷(激活码)
Could not find a version that satisfies the requirement PIL
python中如何对待易过期的cookies
python代码在linux服务器一般的开头
mysql innodb引擎 一次线上死锁分析排查步骤
centos 6.5 gogs迁移外部仓库报错
mysql 存儲emjoy表情是報錯Incorrect string value:
python开发技巧---列表、字典、集合值的过滤
zabbix学习-如何部署一个agent客户端
zabbix学习-zabbix安装
-
原文地址:https://www.cnblogs.com/mayifang/p/7891869.html
Copyright © 2020-2023
润新知