一、PTA实验作业

题目1,简单计算器:

1. 本题PTA提交列表

2. 设计思路

定义操作数num1,num2,结果result=0.运算符ch。
输入num1
while (ch=getchar())!='='
输入num2
switch(ch)
+ 运算 result=num1+num2 break
- 运算 result=num1-num2 break
* 运算 result=num1*num2 break
/ if num2==0,输出错误 break
else 运算 result=num1/num2 break
default 输出错误 break
num1=result 再下一次循环
输出num1

3.代码截图

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

1. 部分正确 :讨论ch等于'/'及非法符号时答案错误

错误代码:

case '/':                                  //当运算符为'/'时分出数位0的特殊情况
if(num2==0){
printf("ERROR\n");//若分母为0,输出错误 ,并跳出循环
break;
}
else{
result=num1/num2;break; //否则正常运算
default: printf("ERROR\n"); break; //除以上情况全部输出错误
  • 调试过程:

    • 测试除数为0:

我发现:当switch判断到是'/'号并且除数为0时,尽管已经输出错误信息“ERROR,但break只能结束上面的while循环,循环外面的输出num1的语句还是会执行,导致答案错误。

- 测试非法符号:

我发现:和上面那个是一样的,当输出错误信息“ERROR后,程序还在继续执行,并没有要停止导致答案错误。

  • 解决办法:意识到需要在输出错误信息后结束程序,我去百度怎样提前结束程序,将两个break都改成return 0就解决了这两个错误。而且我发现在switch语句中再加if语句时DEV它会自动在if语句内加上break.

2. 部分正确 :最小表达式错误,即只有一个操作数并无运算的情况。

错误代码:

    	num1=result;//把每一次的结果放入num1中进行下一次的运算
}
printf("%d",result); //输出结果
return 0;
  • 调试过程:



    即当没有运算符时,程序不会进入进入while循环,导致输出result时结果为result的初始值0.

  • 解决办法:本来想在循环再加一句将num1的值赋给result的语句,后来想到既然num1里每次都存放着result来进入每一次的运算,那么结束时直接输出num1也是一样的效果。

3. 本题小结 :

return语句作用:

return 0放在main函数里头的中间,程序就提前结束不执行往后的代码了;

return语句在函数中的功能就是退出当前函数并提供一个返回值,函数被终止了,后面的语句就不会被执行了;

如果主函数的类型是 int main(){},那么就需要 return 0;

如果主函数的类型是 void main(){},那么就不需要返回值 ;

上面的情况同样也适用于自定义的函数,但是自定义函数是返回一个具体变量或值。

-- 引用自百度知道

同时也搞清楚break的作用范围:

break语句的调用,起到跳出循环或者分支语句作用。

也就是说,break只有两种使用环境:

1 用于循环体内,包括for, while和do-while循环,作用为跳出break所在循环体。注意,如果是循环嵌套,而break出现在内层,那么只能跳出内层循环,无法跳出外层循环。

2 用于开关语句,即switch - case语句,起到跳出开关语句作用。用于switch嵌套时,与上述循环嵌套效果相同,只可以跳出所在开关语句。

-- 引用自百度知道

题目2:判断合法标识符

1. 本题PTA提交列表

2. 设计思路

主函数:
定义数组a[80].i循环变量,repeat次数。
输入repeat
for i=1 to i<=repeat
共repeat次
gets()读入一行字符串。
调用all(a) if 返回值为1 输出YES
else 输出NO int all(char a[ ])自定义判断函数:
定义m循环变量
if (a[0] !(下划线,字母)) 返回0
else
for i=1 to a[i]!='\000'
if (a[i] !(下划线,字母,数字) 返回0
i++
直到a[i]='\000' 返回1

3.代码截图:

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

1. 运行超时:刚开始没用数组,感觉是因为这个导致没在规定时间内运行结束,所以后面使用了数组。

2. 答案错误:其实这题兜兜转转用了好多种方法,最后我使用了数组与函数结合的方法解决,这里面最复杂的问题是讨论遇到空格时的情况。

  • 调试过程:

错误原因:当我输入有空格的字符时,它进入函数直到读到空格时返回0,输出了No,但是它下一次读入的是空格后的字符。

解决办法:当得知是%s的问题以后,我去百度查资料怎样解决%s遇空格结束的问题,所以我将字符串的读取改为gets(),解决了这个问题。

用scanf只能录入连续的字符串,遇到空格就结束,如果你要把空格也吞了,推荐用gets()就可把接收带空格的字符串,它遇回车才结束的。

题目3:打印菱形图案

1. 本题PTA提交列表

2. 设计思路

定义n,i放循环变量,space放空格,xing放*
for i=1 to n/2+1
上半部分
for space=1 to space<=n/2+1-i
输出空格。space++,end
for xing=1 to xing<=2i-1
输出*空格。xing++,end
换行i++,end for i=1 to i<=n/2
下半部分
for space=1 to space<=i
输出空格。space++,end
for xing=1 to xing<=n-2i
输出*空格。xing++,end
换行i++,end

3.代码截图:

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

1. 部分正确 :图形不对称,只关注到星号后面要有空格,忽略了前面的空格并不是以一个为单位输出的

  • 调试过程:

解决办法:将每次输出的空格改成两个空格。

二、截图本周题目集的PTA最后排名。

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

1.你学会了什么?

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

  • 定义:确定数组变量名,数组元素的类型,数组大小。
类型名  数组名  [数组长度];

  • 初始化:
类型名  数组名[数组长度] = {初值表};

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

  • 数组名是一个地址常量,存放数组内存空间的首地址。

1.3 为什么用数组?

  • 数组是一组相同类型数据的有序集合,并且元素在其内存中连续存放。它的表达简洁,可读性好,便于使用循环结构。

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

  • 选择排序法:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾(目前已被排序的序列)。以此类推,直到所有元素均排序完毕.
1.定义循环变量i,j和总个数n,以及中间量k,temp.数组a[n]
2.进入for(i = 0; i < n-1; i++)控制循环次数,n个数需要n-1次循环。
3.k赋值为i,在进入内循环for (j=i+1; j < n; j++) ,循环内判断a[j] < a[k],若是则赋值k等于j.
4.重复第3步,直到j=n.
5.若k != i,temp赋值为a[k],a[k]赋值为a[i],a[i]赋值为temp,来交换a[k],a[i]的值。
6.重复第2步,直到i=n-1,结束循环。
  • 冒泡排序法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
1.定义循环变量i,j,总个数n和数组a[n].中间量temp
2.进入for(i=0;i<10-1;i++)控制循环次数,n个数需要n-1次循环。
3.在进入内循环for(j=0;j<9-i;j++)每次比较n-i次,if判断a[j]>a[j+1],若为真,temp赋值为a[j],a[j]赋值为a[j+1],a[j+1]赋值为temp,来交换a[j],a[j+1]的值。
4.重复第3步,直到j=9-i.结束内循环。
5.重复第2步,直到i=10-i.结束循环输出数组内的数
  • 直接插入排序:从序列中第二个数开始,插入前面已经排好的序列中,形成一个新的排序好的序列,以此类推到最后一个元素。
1.从第一个元素开始,temp=a[i],i为循环变量表示不断往后取数,并赋值给temp
2.取出下一个元素,在已经排序的元素序列中从后向前判断,并利用j==1标记它的初始位置
3.找到新元素小于已排序的元素,即temp<a[j-1],就将已排序的该元素移到下一位置 ,将新元素插进去,j--
4.重复步骤3,直到找到新元素大于或者等于已排序的元素的位置,即temp>=a[j-1]
5.将新元素插入到该位置中,将a[j-1]的值赋给a[j],将temp的值赋给a[j]
6.重复步骤2,直至将所有数据取完

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

  • 二分查找法:取中间元素与查找元素进行比较,如果查找元素比中间元素大,则在中间元素右边查找,如果查找元素比中间元素小,则在中间元素的左边查找。
  • 顺序查找法:从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。
  • 二分法的优点是比较次数少,查找速度快,平均性能好。缺点是要求查表为顺序表,插入、删除困难。

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

  • 定义:
类型名  数组名  [行长度]  [列长度];
  • 初始化:

    • 分行赋初值:
类型名  数组名  [行长度]  [列长度] = {  {初值表0},······,{初值表k},······};
  • 顺序赋初值
类型名  数组名  [行长度]  [列长度] = {初值表};

1.7 矩阵转置怎么实现?

int main()
{
int i, j, b[3][3];
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("矩阵原型:\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
b[j][i] = a[i][j];
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("\n");
printf("矩阵转置后:\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
getchar();
return 0;
}

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

与矩阵有关的运算

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

详细罗列不明白地方,包括课堂派错题、PTA错题。

  • 课堂派:



D选项错误:初始化列表的元素数目超过数组长度

B选项中\x是输出16进制的标识

  • 期中考:

1.static有什么作用

一、定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:

(1)在全局数据区内分配内存

(2) 如果没有初始化,其默认值为0

(3)该变量在本文件内从定义开始到文件结束可见

二、定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:

(1)该变量在全局数据区分配内存

(2) 如果不显示初始化,那么将被隐式初始化为0

(3) 它始终驻留在全局数据区,直到程序运行结束

(4)其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

C语言第六次作业--数据类型的更多相关文章

  1. C语言第五次作业--数据类型

    7-2 区位码输入法: 1. 本题PTA提交列表: 2.设计思路: 1.simple定义输入数,character1和character2分别定义低字节和高字节区位码,digit存储取余后的数,sum ...

  2. C语言--第六周作业评分和总结(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1250 一.评分要求 要求1 完成PTA第六周所有题,若存在抄袭现象,倒扣此题 ...

  3. c语言第六次作业---结构体&文件

    1.本章学习总结 1.1思维导图 1.2学习体会 这次应该是本学期最后一次博客了,总结一下这个学期的学习,一开始就基础薄弱还一直畏难一直懒惰,不想去解决问题导致后面问题越来越多就觉得学习越来越难,后面 ...

  4. C语言--第六周作业

    一.高速公路超速罚款 1.代码 #include<stdio.h> int main() { int a,b; float c; scanf("%d %d",& ...

  5. C语言——第六周作业

    题目 题目一:高速公路超速处罚 1.实验代码 #include <stdio.h> int main() { int speed,maxspeed; double x; scanf(&qu ...

  6. c语言第六次作业v

    (一)改错题 序列求和:输入一个正实数eps,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... ,精确到最后一项的绝对值小于eps(保留6位小数). 输入输出样例: Input e ...

  7. C语言第六次作业

    #include <stdio.h> int main() { ; printf("输入几个数:"); scanf("%d",&n); ;i ...

  8. C语言程序设计第六次作业——循环结构(2)

    C语言程序设计第六次作业--循环结构(2) 之前的博客园图片没处理好,对大家说一声抱歉.希望大家能够多多指出我的错误,我来认真修改 ^ - ^ !. (1)改错题 序列求和:输入一个正实数eps,计算 ...

  9. C语言1博客作业06

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://www.cnblogs.com/sanying/p/11771502.html 我在这个课程的目标是 端正态度,认真对待 ...

随机推荐

  1. centos下利用qemu搭建arm模拟器

    有点繁琐,整理一下,系统环境centos6.6,虚拟机以及实际系统中测试通过. 一.交叉编译器的下载与安装1.下载地址:http://blog.csdn.net/dldw8816/article/de ...

  2. PHP 常量dirname(__file__)

    PHP 常量dirname(__FILE__)取得当前文件的绝对路径. define('ROOT_PATH', str_replace('includes/2.php', '', str_replac ...

  3. Linux 系统裁剪笔记 4 (内核配置选项及删改)

     CDROM filesystem support(CONFIG_ISO9660_FS)[Y/m/n/?]有标准光驱的系统应该选Y.Minix fs support(CONFIG_MINIX_FS)[ ...

  4. R语言︱ROC曲线——分类器的性能表现评价

    笔者寄语:分类器算法最后都会有一个预测精度,而预测精度都会写一个混淆矩阵,所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即True Positive+True Nagetiv ...

  5. ios学习笔记(一)Windows7上使用VMWare搭建iPhone开发环境

    我们都知道开发iPhone等ios平台的移动应用时需要使用Mac本,但是Mac本都比较昂贵,所以我们可以采用Windows7上利用VMWare安装Mac操作系统的方法来模拟ios开发环境,达到降低成本 ...

  6. Java Web项目部署Tomcat运行出错

    1.在部署Java Web项目的过程中,启动Tomcat出现报错提示 具体报错如下: Could not load the Tomcat server configuration at \Server ...

  7. table行随鼠标变色

    table行随鼠标变色 1.设计表格 <body class="html_body"> <div class="body_div"> & ...

  8. 草料Chrome浏览器插件,让二维码更好用

    安装插件草料chrome插件,是专为chrome核心的浏览器开发的一个二维码应用增强工具插件. 自动将地址栏链接生成二维码 以谷歌原生的chrome浏览器为例,插件安装成功后会在浏览器地址栏旁边出现一 ...

  9. 关于游览器网页标题logo的设置

    <link rel="shortcut icon"type="image/x-icon" href="images/favicon.ico&qu ...

  10. Mac 常用快捷键

    可以按下组合键来实现通常需要鼠标.触控板或其他输入设备才能完成的操作. 要使用键盘快捷键,需按住一个或多个修饰键,同时按快捷键的最后一个键.例如,要使用快捷键 Command-C(拷贝),请按住 Co ...