实验报告(循环+函数)
#一、PTA实验作业
##循环
###7-3 统计字符(15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。
输入样例:
aZ &
09 Az
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
流程图:
代码:
#include<stdio.h>
int main( )
{
int letter = 0,blank = 0,digit = 0,other = 0,i = 0;
char ch;
while(i<=10)
{
ch = getchar();
if((ch>='a' && ch<='z')||(ch>='A' && ch<='Z'))
letter++;
else if(ch>='0' && ch<='9')
digit++;
else if(ch==' ')
blank++;
else
other++;
i++;
}
printf("letter = %d,blank = %d,", letter,blank);
printf("digit = %d,other = %d\n",digit,other);
}
调试过程:
由于输出的格式错误(没有严格按照题目的要求编写输出,比如少写一个空格之类的),导致编译器运通过但是多次提交显示答案错误。ps:下次要严谨一点啦。
###7-4 统计学生成绩(15 分)
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
-
-
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
-
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
流程图:
代码:
#include<stdio.h>
int main()
{
int i,n,grade,A,B,C,D,E;
A=0,B=0,C=0,D=0,E=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&grade);
if(grade>=90)
A++;
else if(grade>=80)
B++;
else if(grade>=70)
C++;
else if(grade>=60)
D++;
else if(grade<60)
E++;
}
printf("%d %d %d %d %d\n",A,B,C,D,E);
return 0;
}
调试过程:
最初是将所有的数据全部输入再进行统计,但最后发现工程量巨大而且不易统计。
###7-5 找出最小值(20 分)
本题要求编写程序,找出给定一系列整数中的最小值。
输入格式:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
输出格式:
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
输入样例:
4 -2 -123 100 0
输出样例:
min = -123
流程图:
代码:
#include<stdio.h>
int main(void)
{
int n,i,l,min;
scanf("%d",&n);
scanf("%d",&l);
min=l;
for(i=1;i<n;i++){
scanf("%d",&l);
if(min>l)
min=l;
}
printf("min = %d",min);
return 0;
}
调试过程:
最开始的时候是将所有的数字输入之后挨个比对,最后发现运算量太大。于是先假设有一个最小值,并令其后面的数字与之挨个比对。若小于该数,则成为新的最小值并且后面的值重复以上操作。
与同学互评:
互评同学姓名:王丹
互评题目:7—12 约分的最简分式(15分)
分数可以表示为分子/分母
的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。
输入格式:
输入在一行中给出一个分数,分子和分母中间以斜杠/
分隔,如:12/34
表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。
提示:在scanf
的格式字符串中加入/
,让scanf
来处理这个斜杠。
输出格式:
在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用分子/分母
的形式表示分数。如 5/6
表示6分之5。
输入样例:
66/120
输出样例:
11/20
我和同学的代码
我和同学代码不同在哪里?有哪些各自优势?更喜欢哪种代码风格?
1、同学运用了if和else if的一个判断,而我直接运用了while的循环体
2、同学的代码看上去比较容易看懂,我的代码比简洁
3、就本题而言,更喜欢自己的代码
循环最终排名 :
##函数
###7-41 判断数字字符(10 分)
编写函数,判断指定的字符是否是数字字符,如果是函数返回1,否则函数返回0.要求在主调函数中输入该字符,调用函数并输出判断结果。
输入格式:
在一行中给出1个字符。
输出格式:
对于给定输入的字符,输出判断结果yes或no。
输入样例:
6
输出样例:
yes
输入样例:
H
输出样例:
no
流程图:
代码:
#include <stdio.h>
int p(int a);
int main()
{
char a;
scanf ("%c",&a);
if(p(a)==1)
printf("yes");
else
printf("no");
return 0;
}
int p(int a)
{
if(a>='0'&&a<='9')
return 1;
else
return 0;
}
调试过程:
由于自身原因,将return的值多次更改错误,并且多次与题目要求不符导致提交时显示答案错误。检查核对更改后,正确。
##7-4 验证“哥德巴赫猜想”(20 分)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
输入样例:
24
输出样例:
24 = 5 + 19
流程图:
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,n,i,c=1,d=1;
scanf("%d",&n);
for(i=2;i<n;i++)
{
for(a=2;a<=sqrt(i);a++)
{
if(i%a==0)
{
c=0;
break;
}
}
if(c==1)
{
for(b=2;b<=sqrt(n-i);b++)
{
if((n-i)%b==0)
{
d=0;
break;
}
}
if(d==1)
{
printf("%d = %d + %d",n,i,n-i);
break;
}
}
c=1;
d=1;
}
return 0;
}
调试过程:
最开始写“哥德巴赫猜想”的时候完全不知道从何下手,最后发现其实只需要几个循环嵌套在一起就可以了。调试的时候多次遇到可以运行通过但是运行结果与题目给出的不相似的情况。最后更改了一下格式就正确啦!
###7-42 分段函数(15 分)
输入格式:
输入一个实数x的值
输出格式:
输出y的结果值
输入样例:
0
输出样例:
y=-1.000000
流程图:
代码:
#include <stdio.h>
#include <math.h>
int main()
{
double x,y;
scanf("%lf",&x);
if(x <= -2)
y = -exp(2 * x + 1) + 3;
else if(-2 < x && x <= 3)
y = 2 * x - 1;
else if(x > 3)
y = 2 * log10(3 * x + 5) - 11;
printf("y=%lf\n",y);
return 0;
}
调试过程:
最开始写代码的时候未加入#include <math.h>这个头文件,导致编译错误,后来因为有引用此函数加了头文件便通过了运行。
与同学互评:
互评同学姓名:王丹
互评题目:7-41 判断数字字符(10 分)【题目如上】
我和同学的代码
我和同学代码不同在哪里?有哪些各自优势?更喜欢哪种代码风格?
1、同学运用了循环并且写了注释,而我直接应用函数
2、同学的代码容易看懂,并且注释清楚明白;我的代码比较简洁
3、就本题而言,更喜欢同学的代码
#二、学习总结
##1.你学会了什么?
学会了如何运用循环将比较复杂的代码转化的更加简便并且学会了应用函数使得主代码看上去更加 一目了然
##2.本周的内容,你还不会什么?
循环嵌套中容易绕进去,函数的调用中,函数的返回值易出差错。
##3.循环结构考试总结(全部同学都要写)
###1.哪题做错了,怎么改?
在读他人的代码时,不能够明白他人代码的意思(多读别人的代码)
在写自己的代码时,易将一些细节的问题忽视(写代码前先写伪代码)
填空选择的基础概念没有记得牢固(巩固概念,反复看读教科书)
###2.考试结果满意么,怎么改进?
不满意,会抓住自己薄弱的地方一点点攻破,并且强化自己比较有利的方向。
###3.其他总结。
没有合理利用考试时间,导致一部分的题没有看。并且没有时间去检查已经做过的题。