C语言I博客作业08

这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/9978
我在这个课程的目标是 学会如何用do-while语句和while语句进行正确的编程
这个作业在那个具体方面帮助我实现目标 通过习题的练习,对do-while语句和while语句有一定的了解,培养了逻辑思维能力
参考文献 百度,《PTA系统常见问题及解答》,C Prime Plus,《C语言程序设计》

1PTA实验截图


1.1求整数的位数及各位数字之和

1.2数据处理

数据表达:

     1.根据题目用N定义输入的数,sum表示数字之和,count++表示有几位数的含义;
     2.sum=0;count=0;来定义其初始值;
     3.N%10表示取余, N=N/10表示取整。

数据处理:

伪代码:

      sum←0
      count←0
      do
      sum←sum+N%10
      N←N/10
      do count←count+1
      until N=0

1.3实验代码截图

1.4造测试数据

输入数据 输出数据 说明
321 3 6 加以验证
666 3 18 增加实验结果的可靠性
8085 4 21 增加实验结果的可靠性

1.5PTA提交列表及说明

Q1:多定义了一些没有用到的变量如i,b

A1:删除没用的变量

Q2:未理解题意,使用了pow函数而且没用# include<math.h>进行说明

A2:除掉这些没用的语句,直接使用do-while语句进行编程

说明:没有用的变量不能随便加,含++前的变量要定义初始值,区分N%10与N=N/10之间的差别

2.1 爬动的蠕虫

2.2数据处理

数据表达:

      1.根据题目用N定义井的高度,U定义蠕虫每1分钟爬行的距离,D表示下滑了的距离,t表示时间,h表示爬行的总高度
      2.写了h与U,N,D之间的关系表达式

数据处理:

伪代码:

     t←0
     h←0
     while h>=N
     h←h+u
     do t←t+1
     if h<N
     break
     h←h-D
     t←t+1

2.3实验代码截图

2.3造测试数据

输入数据 输出数据 说明
12 3 1 11 验证是否正确
36 5 2 17 增加实验结果的可靠性
48 6 2 23 增加实验结果的可靠性

2.4PTA提交列表及说明

Q1:显示部分正确

A1:在我的编程里没有使用变量D及其有关语句,加上h=h-D;和t++;

Q2:显示答案错误

A2:h=h-D;和t++;加在了break语句前,造成错误,将语句放到break语句后;

说明: h=h+U;t++;此语句是用来说明未达一分钟就到顶,h=h-D;t++;此语句说明时间超过一分钟后所用的时间,故要放到break语句后。

2.代码互评

同学代码:

我的代码:

互评结果:

  • 他用的是for语句,我用的是do-while语句,故他比我多定义了变量i;
  • 它的编程没有使用return 0;语句也是对的;
  • 总体上来说,思路都差不多

同学代码:

我的代码:

互评结果:

  • 我比他多使用了if(h>=N) break;来说明当爬行的高度大于井的高度是,直接停止,让人更容易读懂
  • 总体上来说,思路都差不多

3.学习总结

3.1学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较疑惑的问题
第一周 2小时 30行 如何空格,控制字符 编译的格式
第二周 2.5小时 40行 求华氏温度 printf的使用方法
第三周 4.5小时 80行 分段函数的编写 if-else不能灵活使用
第四周 2天 90行 循环语句for的使用 不会正确的变形,理不清题意
第五周 2天 200行 水仙花数的表示方法;个位数字平方和的表示方法 对陌生的概念不太了解,难以正确编程
第六周 2天 260行 if与else语句与for语句的综合使用,逻辑运算符,字符型char 题意与如何构思能力还有待提高
第七周 2天 220行 switch语句的使用,以及一些常见的格式 不能正确的编程,如何解决问题的能力还有待提高
第八周 2天 230行 如何用do-while语句和while语句,并区分与for语句的不同地方 题意还是不能完全读懂,难以正确的编程

3.2累计代码行和博客字数

3.3学习内容总结与感悟

思维导图:

内容总结:

  • 明白一些常见的错误类型,如答案错误表示与题意输出的内容不符或输出的结果不同,编译错误常见的问题是标点符号不打或打错,运行超时的常见问题是输入了不要输入的内容,多种错误常见的问题是多定义了一些没有用到的变量,且再编程上还出现了语法错误;
  • 学会如何用do-while语句和while语句,并区分与for语句的不同地方,for语句是已知道了循环次数,while语句是有明确的终止条件;
  • 学会了如何在Dev-C++如何调试

感悟:

  • C语言是一门语言,要想学好学会就要多加练习,要从本质上分析问题并解决问题
  • 学习过程中会遇到一些难题,这时就离不开老师与同学的帮助,多问还是有必要的
  • 做题过程中会遇到许多未学过的知识,这就需要我们多看课外书并预习课本上还没教的知识

3.4学习体会

  • C语言中如何正确使用do-while语句和while语句,对于初学的我只能不断搜集资料;
  • 有时我甚至连题意都没有弄懂,在同学的帮助下我还是明白了许多;
  • 在这门功课上,我们需花大量的时间来练习并巩固已学知识;
  • 同时我也希望老师在上课的时候多讲几个习题助于我们理解;
  • 当然我也会去图书馆去阅读一些相关资料来提升自己。
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
int people=0,space=50;
struct Addresslist
{
	int number;
	char name[10];
	char phone[20];
}stu[50],temp;
void Menu();
void sort();
void Add();
void cancel();
void amend();
void find();
void error();
int main()
{
	int choose;
	while(1)
	{
		int i;
		system("cls");
		printf("======通讯录=====\n");
		printf("\n");
		printf("\n");
		printf("======界面======\n");
		space=50-people;
		printf("人数:%d人    |剩余空间:%d人\n",people,space);
		for(i=0;i<people;i++)
		{
			printf("编号:%10d|  姓名:%10s|  电话:%20s\n",stu[i].number,stu[i].name,stu[i].phone);
		}
		printf("\n");
		printf("\n");
		Menu();
		scanf("%d",&choose);
		printf("\n");
		switch(choose)
		{
			case 1:sort();break;
			case 2:Add();break;
			case 3:cancel();break;
			case 4:amend();break;
			case 5:find();break;
			case 6:return 0;
			default:error();
		}
	}
}
void Menu()
{
	printf("操作列表:\n");
	printf("1)排序   2)添加   3)删除\n");
	printf("4)修改   5)查找   6)退出程序\n");
	printf("请输入操作\n");
}
void sort()
{
	int i,j,n;
	printf("1)编号排序  2)名字排序\n");
	printf("请选择要排序的方式:\n");
	scanf("%d",&n);
	switch(n)
	{
		case 1:
			if(people>=2)
			{
				for(i=0;i<people-1;i++)
				{
					for(j=i;j<people;j++)
					{
						if(stu[i].number>stu[j].number)
						{
							temp=stu[i];
							stu[i]=stu[j];
							stu[j]=temp;
						}
					}
				}
			}
			break;
		case 2:
			if(people>=2)
			{
				for(i=0;i<people-1;i++)
				{
					for(j=i;j<people;j++)
					{
						if(strcmp(stu[i].name,stu[j].name)>0)
						{
							temp=stu[i];
						    stu[i]=stu[j];
						    stu[j]=temp;
						}
					}
				}
			}
			break;
			default:error();break;
	}
}
void Add()
{
	int i,flag=0;
	if(space==0)
	{
		printf("通讯录已满\n");
		system("pause");
	}
	else
	{
		printf("添加操作:\n");
		printf("请输入添加的位置:");
		scanf("%d",&stu[people].number);
		if(stu[people].number>50||stu[people].number<=0)
		{
			printf("处理编号超过阈值\n");
			system("pause");
		}
		else
		{
			for(i=0;i<people;i++)
			{
				if(stu[people].number==stu[i].number)
				{
					printf("此处已有数据\n");
					system("pause");
					flag=1;
				}
			}
			if(flag==0)
			{
				printf("请输入联系人的姓名:");
				scanf("%s",stu[people].name);
				printf("请输入联系人的电话号码:");
				scanf("%s",stu[people].phone);
				people++;
			}
		}
	}
}
void cancel()
{
	int i,n,flag=0;
	printf("删除操作:\n");
	printf("请输入删除位置:");
	scanf("%d",&n);
	if(n>50||n<=0)
	{
		printf("处理编号超过阈值\n");
		system("pause");
	}
	else
	{
		for(i=0;i<people;i++)
		{
			if(n==stu[i].number)
			{
				stu[i]=temp;
				people--;
				space++;
				flag=1;
			}
		}
		if(flag==0)
		{
			printf("此处无标题\n");
			system("pause");
		}
	}
}
void amend()
{
	int n,i,flag=0;
	printf("请输入修改的位置:");
	scanf("%d",&n);
	if(n>50||n<=0)
	{
		printf("处理编号超过阈值\n");
		system("pause");
	}
	else
	{
		for(i=0;i<people;i++)
		{
			if(n==stu[i].number)
			{
				printf("已删除原有信息,请重新输入\n");
				printf("\n");
				printf("请输入联系人姓名:");
				scanf("%s",stu[i].name);
				printf("请输入联系人电话号码:");
				scanf("%s",stu[i].phone);
				flag=1;
			}
		}
		if(flag==0)
		{
			printf("此处无数据\n");
			system("pause");
		}
	}
}
void find()
{
	int i,flag=0;
	char n[20];
	printf("请输入你要查找的对象的名字或者电话号码:");
	scanf("%s",n);
	for(i=0;i<people;i++)
	{
		if(strcmp(stu[i].name,n)==0||strcmp(stu[i].phone,n)==0)
		{
			printf("编号: %10d|  姓名: %10s|  电话: %20s\n",stu[i].number,stu[i].name,stu[i].phone);
			flag=1;
		}
	}
	if(flag==0)
	{
		printf("查无此人\n");
	}
	system("pause");
}
void error()
{
	printf("error!!!\n错误操作指令,请重新输入\n");
	system("pause");
}
posted @ 2019-11-15 09:34  小研说技术  阅读(303)  评论(4编辑  收藏  举报