一、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. JDBC各种数据库连接方式

    1)连接Oracle 8/8i/9i/10g/11g(thin模式) Class.forName("oracle.JDBC.driver.OracleDriver").newIns ...

  2. 304和浏览器http缓存

    浏览器虽然发现了本地有该资源的缓存,但是不确定是否是最新的,于是想服务器询问,若服务器认为浏览器的缓存版本还可用,那么便会返回304. 浏览器缓存分为强缓存和协商缓存. 1.浏览器请求某资源,通过he ...

  3. 学习笔记︱深度学习以及R中并行算法的应用(GPU)

    笔记源于一次微课堂,由数据人网主办,英伟达高级工程师ParallerR原创.大牛的博客链接:http://www.parallelr.com/training/ 由于本人白痴,不能全部听懂,所以只能把 ...

  4. HTML5之contenteditable属性

    HTML5之contenteditable属性 1.功能说明 (1)功能:允许用户编辑元素中的内容 (2)说明:是一个布尔值,false是不能编辑,true为可编辑 2.分析实例 (1)content ...

  5. JSP中的include有哪些?有什么区别?

    JSP中的include有哪些?有什么区别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include ...

  6. ASP.NET 页面双向静态化

    而我们预期的结果应该如下图,实际只请求两次. 用301重定向可以解决该循环请求产生的问题. OK, let's begin. 本文的Demo和Source是基于上一篇的,如果下面的一些文件或文件夹没有 ...

  7. ONCOCNV软件思路分析之control处理

    进行数据初步处理(perl) 统计amplicon的RC(read counts),并且相互overlap大于75%的amplicon合并起来 统计每个amplicon的GC含量,均值, 性别识别并校 ...

  8. Windows Server 2012 R2 官方原版镜像

    微软操作系统 Windows Server 2012 R2 官方原版镜像 Windows Server 2012 R2 是由微软公司(Microsoft)设计开发的新一代的服务器专属操作系统,其核心版 ...

  9. PortableApps使用入门

    PortableApps使用入门 Software 介绍 添加软件 绿软下载站推荐 介绍 官网:http://portableapps.com/ PortableApps作为一款卓越的绿软管理软件,它 ...

  10. php 数组排序得方法

    $sort1 = array_column($list_bloc[1], 'value');//按照$list_bloc[1]里面的value做降序排序 array_multisort($sort1, ...