一、PTA实验作业

题目1.

1.实验代码

    int N,i;//定义N为查询的用户数,i为循环变量
    float height,height1;//定义height为输入身高,height1为其情侣身高
    char sex;//定义sex表示性别
    scanf("%d",&N);
    for(i=1;i<=N;i++){ //循环执行N次
        scanf(" %c%f",&sex,&height);
        switch(sex){
        case 'F':height1 = 1.09*height;//F表示女性
            break;
        case 'M':height1 = height/1.09;//M表示男性
            break;
        }
        printf("%.2f\n",height1);//输出其情侣身高并保留两位小数 
    }

2.设计思路

  • (1)定义变量N为查询的用户数,i为循环变量,height为输入身高,height1为其情侣身高,sex为性别
  • (2)输入数据N
  • (3)i=1
  • (4)输入数据sex,height
  • (5)如果sex=‘F’,执行height1 = 1.09*height
  • (6)如果sex=‘M’,执行height1 = height/1.09
  • (7)i=i+1
  • (8)重复步骤4,5,6,7,直到i>N
  • (9)输出其情侣身高并保留两位小数

3.本题调试过程碰到问题及解决办法

  • (1)问题:
    ①i赋值错误
    ②输入中未考虑上输入符号前还有一个回车




  • (2)解决方法:
    ①经过调试监视变量,发现i不应该赋值为0,应该使i=1;
    ②参考同学的代码,发现输入时应在%c之前加一个空格,存放回车

4.本题PTA提交列表

题目2.

1.实验代码

	int a,n,s,i,item;//定义整型变量a存放正整数,n存放a的个数,s存放累加和,item存放第i项的值 
	s=0;
	item=0;
	scanf("%d%d",&a,&n);//输入a,n 
	for(i=1;i<=n;i++){
		item=a+item*10;//计算第i项的值 
		s=s+item;//累加每一项 
	}
	printf("s = %d",s);	

2.设计思路

  • (1)定义整型变量a存放正整数,n存放a的个数,s存放累加和,item存放第i项的值
  • (2)赋初值s=0,item=0
  • (3)输入a,n
  • (4)i=1
  • (5)item=a+item*10;
    s=s+item;
  • (6)重复步骤5,直到i>n
  • (7)输出s 的值

3.本题调试过程碰到问题及解决办法

  • (1)问题: 本题未遇见问题(以下展示利用调试工具监视变量的截图过程)

4.本题PTA提交列表

题目3

1.实验代码

	int i,n,number,min;//定义变量n为整数个数,number为输入值,min为最小值 
	scanf("%d",&n);
	scanf("%d",&number);
	min=number;//假设第一个成绩为最小值 
	
	for(i=1;i<=n-1;i++){
		scanf("%d",&number); 
		
		if(min>number)//如果输入的整数比最小值小 
		min=number;//再假设该成绩为最小值 
	}
	printf("min = %d",min);//输出最小值 

2.设计思路

  • (1)定义变量n为整数个数,number为输入值,min为最小值
  • (2)输入数据n,number
  • (3)假设第一个成绩为最小值 ,即min=number
  • (4)i=i+1
  • (5)再次输入成绩number
  • (6)如果min>number,则再假设该成绩为最小值,即赋值min=number
  • (7)重复步骤5,6,直到i>n-1
  • (8)按照“min = 最小值”的格式输出n个整数中的最小值。

3.本题调试过程碰到问题及解决办法

  • (1)问题:
    ①第一次,假设第一个成绩为最小值 ,却没有输入第一个成绩的值,导致错误
    ②第一次输入代码显示“n=1时,最小值为正”这一项错误,于是添加了一个if语句,发现依旧是错的
    ③未考虑到先输入过一个值,因此循环中的i应该是满足i<=n-1


  • (2)解决方法:
    ①经过检测变量,第一次赋值min=33是错的,因此发现是因为没有先输入一个number赋值给min,于是在赋值前加了输入number语句,且把i条件改为i<=n-1

4.本题PTA提交列表

题目4

1.实验代码

	int mynumber,yournumber,count,N,i;//定义变量mynumber存放随机数,yournumber存放猜测的数,count存放猜测数次,N存放猜测的最大次数 
	count=0;//给count赋初值为0 
	scanf("%d%d",&mynumber,&N);//输入随机数和猜测的最大次数 
	for(i=1;i<=N;i++){
		scanf("%d",&yournumber);//输入猜测的数 
		count++; //累加猜测次数 
		if(yournumber<0){//如果猜测的数小于0 
			printf("Game Over\n");
			return 0;
		}
		else {//如果猜测的数大等于0时 
		if(yournumber==mynumber){
		    if(count==1)//如果猜测次数为1次 
	            printf("Bingo!");
	        if(count>1&&count<=3)//如果猜测次数小于3 
	            printf("Lucky You!");
	        if(count>3&&count<=N)//如果猜测次数大于3小等于N 
	            printf("Good Guess!");break;
	        
		    }
		if(yournumber>mynumber){ 
			printf("Too big\n");
		}
		if(yournumber<mynumber){
			printf("Too small\n");
		}
		} 
	} 
	if(yournumber!=mynumber) 
        printf("Game Over");

2.设计思路

  • (1)定义变量mynumber存放随机数,yournumber存放猜测的数,count存放猜测数次,N存放猜测的最大次数
  • (2)给count赋初值为0
  • (3)输入mynumber,N
  • (4)i=1
  • (5)重复步骤6~16,直到i>N
  • (6)输入yournumber
  • (7)count++累加猜测次数
  • (8)如果yournumber<0,直接退出,输出Game Over
  • (9)如果yournumber>mynumber,输出Too big
  • (10)如果yournumber<mynumber,输出Too small
  • (11)如果yournumber==mynumber时
  • (12)如果count==1,输出Bingo!
  • (13)如果count>1&&count<=3,输出Lucky You!
  • (14)如果count>3&&count<=N,输出Good Guess!
  • (15)如果yournumber!=mynumber&&count>N,输出Game Over
  • (16)i=i+1

3.本题调试过程碰到问题及解决办法

  • (1)问题:
    ①判断count时写成count=1,最后输出结果为Bingo!
    ②题目未看清,count为4时也应该输出Good Guess!
    ③测评时系统提示“直接退出”一项错误,调式时发现输出两组Game Over。



  • (2)解决方法:
    ①count=1改成count==1
    ②重新审题,把count>1&&count<3改为count>1&&count<=3
    ③经同学提示,for循环语句中使用break只能做到退出该循环,不能满足题意,应该把break改成return 0才能满足题意直接退出程序。

4.本题PTA提交列表

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

PTA提交列表


PTA排名

三、本周学习总结

1.你学会了什么?

  • 三种循环语句(for,while,do-while)
    ①循环次数已知时,使用for语句
    ②循环条件未知,且循环条件在进入循环时明确,使用while语句
    ③循环条件未知,且循环条件需要在循环体中明确,使用do-while语句(直到型循环)
  • while语句和do-while语句中,如果循环条件一开始就满足,两者结果一样;如果一开始不一样,do-while先执行一次
  • for循环中一旦执行break语句,循环提前结束,不再执行循环体中位于其后的其他语句
  • break结束循环,continue跳过后面语句继续循环,continue只能用于循环
  • 求阶乘的函数为fact( ),例如:i的阶乘调用fact(i)
  • 在做PTA作业时每一题都用到调试工具,多次使用对如何调试找出错误更熟悉

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

  • 对新的知识点了解不够透彻,用起来磕磕碰碰。对于while语句和do-while语句用法不熟,PTA中用到的都是for循环,且for循环也用的不到位,导致本次PTA作业做起来很吃力。
  • 循环结构的算法不太会写
  • 对于较复杂的题目会不确定哪些为需要循环的部分,导致程序写不下去
  • 嵌套循环不会使用

3.分支结构上机考试总结。

(1)哪些地方错了,为什么?

  • 分段函数:绝对值调用的函数记错,耽误时间
  • 12-24小时制:题目较复杂,没有先写算法,每次都会漏掉一两个条件没有考虑
  • 计算油费:在用到字符型变量时,纠结要不要用到getchar()和putchar()

(2)后续要怎么找程序错误?

  • 使用调试工具监测变量找错误
  • 在编程过程中加上注释,使程序更直观,容易找出错误点

(3)对自己成绩满意么?不满意的话要怎么改进?

  • 不满意。把做过的题目抽时间再复习一遍重新打一遍代码,每周翻看前几周的博客,寻找以前犯过的错误,以防再次犯错,并再次复习巩固博客中的小结与问题。做题目时使用调试工具监测变量寻找错误点,减少耽误在找问题上的时间。
posted on 2017-11-02 18:40  呜啦  阅读(214)  评论(5编辑  收藏  举报