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");
}