实验室开放项目实验报告
实验名称:实验二 简单数据处理问题(一)
实验目的:熟练掌握一些简单数据处理的方法
实验内容:
在本地电脑中新建一个文件夹,用于存放C源程序,文件夹的名字要求是“学号姓名”,如 E:\ 1520115555张三。启动C-Free,完成如下各题。
- 问题描述:已知两个正整数a和b,求这两个数的最大公约数GCD(a,b)。
输入:两个正整数a、b。
输出:GCD(a,b)。
输入样例
24 16
输出样例
8
-
- 思考:若求n个整数的最大公约数需要怎样实现呢?
- 问题描述:一个正整数的数根可以这样求得:计算该整数的各位数字之和,如果结果值是单个数字的数,那么这个数就是所求数根;如果结果值是由两位或两位以上的数字组成的数,则继续计算各位数字的和,直到结果值只有一位数字为止。例如:正整数24,2+4=6,则6为24的根。又如:39,3+9=12,由于12不是单个数字组成的数,所以继续计算,1+2=3,所以39的根为3。
输入:输入包括多组测试数据,每组测试数据包括一个正整数,输入数据为0时表示输入结束。
输出:对于每组测试数据,给出对应输出,并且每组输出占一行。
输入样例
24 39 0
输出样例
6
3
- 问题描述:一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物。
输入:第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,每行一个正整数a(a<32768)。
输出:输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格分开。如果没有满足要求的答案,则输出两个0。
输入样例
2
3
20
输出样例
0 0
5 10
- 问题描述:在城市的高层建筑物中只有一部电梯,由N个正整数组成一个请求列表,列表中的数字表示电梯将在哪层停,电梯按列表顺序依次停靠。电梯每上行一层需要花6秒时间,每下行一层需要花4秒时间,电梯每停一次需要用时5秒。对于给定的请求列表,计算完成所有请求需要花费的时间,电梯从第0层开始,完成所有请求后又回到第0层。
输入:输入包括多组测试数据,每组测试数据占一行,其中第一个正整数N,表示该请求列表中有N个数据,接下来是N个整数;如果N=0,则表示输入结束。
输出:对每组测试数据,输出完成列表所有请求的总时间,每个结果占一行。
输入样例
1 2
3 2 3 1
0
输出样例
17
41
- 问题描述:长度为L的路边有一排树,相邻树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2......,L,都种有一棵树。现在马路上有一些区域要用来建地铁,这些区域用它们在数轴上的起始点和终止点表示。已知有M个区域需要修建地铁,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入:输入的第一行有两个整数L(1≤L≤10000)和M(1≤M≤100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行,每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出:输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
输入样例
500 3
150 300
100 200
470 471
输出样例
298
上交作业的方法:
- 将程序代码及注释和运行程序的窗口复制到实验结果下方对应的题号上,并把这次实验上机操作中遇到的问题及解决方法、心得等填好完成实验报告。
- 保存以上所有按要求已调试通过,并形成.c(或.cpp)和.exe文件到以自己的“学号姓名”命名的文件夹中,并将以自己的“学号姓名”命名的文件夹压缩后上交到ftp://10.172.250.252:1161中的“作业上传”文件夹下的“C语言竞赛训练”子文件夹下的“报告上交02”文件夹下的子文件夹“源文件压缩上交”中,同时把以“学号姓名”命名的word文档上交到“报告上交02”文件夹下的另一子文件夹“word文件上交”中。
特别提醒:每次上传的文件名一定要是“学号姓名. doc” (如1520115555张三.doc),而且学号一定要在前面,学号没写或学号写在后面的一律按没上传对待。上传前一定要把本文件退出,否则无法上传。
实验结果与分析(运行界面截图,打开需要截的图,按ALT+PrintScreen后,将光标移到下面,单击右键后选择“粘贴”):
1.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int a,b,r; scanf("%d%d",&a,&b); r=a%b; while(r) { a=b; b=r; r=a%b; } printf("%d\n",b); return 0; } 1-2 #include <stdio.h> int main(int argc, char *argv[]) { int a,b,r,i,n; scanf("%d",&n); scanf("%d",&b); for(i=0;i<n-1;i++) { scanf("%d",&a); r=a%b; while(r) { a=b; b=r; r=a%b; } } printf("%d\n",b); return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
1-2 |
2.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { long s,m; while(1) { scanf("%ld",&m); if(m==0) break; do { s=0; while(m>0) { s+=m%10; m/=10; } m=s; }while(m>=10); printf("%ld\n",s); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
3.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int n,i,nfeet; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&nfeet); if(nfeet%2!=0) printf("0 0\n"); else if(nfeet%4!=0) printf("%d %d\n",nfeet/4+1,nfeet/2); else printf("%d %d\n",nfeet/4,nfeet/2); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
4.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int i,n,tm,from,to; while(1) { scanf("%d",&n); if(n==0) return 0; tm=0; from=0; for(i=0;i<n ;i++ ) { scanf("%d",&to); if(from<to) tm+=(to-from)*6+5; else tm+=(from-to)*4+5; from=to; } printf("%d\n",tm); } return 0; } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
5.
(Ⅰ)程序代码及注释
#include <stdio.h> int main(int argc, char *argv[]) { int L,i,j,n,begin,end,count; int trees[10001]; scanf("%d%d",&L,&n); for(i=0;i<=L;i++) trees[i]=1; for(i=0;i<n;i++) { scanf("%d%d",&begin,&end); for(j=begin;j<=end;j++) trees[j]=0; } for(count=0,i=0;i<=L;i++) if(trees[i]) count++; printf("%d\n",count); } |
(Ⅱ)运行结果窗口截图(窗口适当缩小)和分析
问题及解决方法,心得:(实验中遇到的问题和解决问题的方法)
评定成绩: