实验1

四、实验结论

实验任务1

  • 源代码task1_1.c
//打印垂直两个字符小人 

#include <stdio.h>
int main()
{
	int i;
	
	for(i=0;i<2;i++)
	{
		printf(" O \n");
		printf("<H>\n");
		printf("I I\n");
	}
	
	return 0;
}
  • 运行测试截图

task1_1

  • 源代码task1_2.c
//打印水平两个字符小人 

#include <stdio.h>
int main()
{
	
	printf(" O      O \n");
	printf("<H>    <H>\n");
	printf("I I    I I\n");
	
	return 0;
}
  • 运行测试截图

task1_2

实验任务2

  • 源代码task2.c
//判断三角形 

#include <stdio.h>

int main()
{
	double a,b,c;
	
	scanf("%lf%lf%lf",&a,&b,&c);
	
	if( a<(b+c) && b<(a+c) && c<(a+b) )
		printf("能构成三角形\n");
	else
		printf("不能构成三角形\n");
	
	return 0;
}
  • 运行测试截图

task2__1

task2__2

task2__3

实验任务3

  • 源代码task3.c
#include <stdio.h>
int main()
{
	char ans1,ans2;
	
	printf("每次课即使预习/复习了没?(是-输入y或Y,否-输入n或N) :  ");	
	ans1 = getchar();
	
	getchar();
	
	printf("\n动手敲代码实践了没?(是-输入y或Y,否-输入n或N) :  ");
	ans2 = getchar();
	
	if( ( ans1 == 'y' || ans1 == 'Y' ) && ( ans2 == 'y' || ans2 == 'Y' ) )
		printf("\n罗马不是一天建成的,继续保持哦:)\n");
	else
		printf("\n罗马不是一天毁灭的,我们来建设吧\n"); 
	
	return 0;
}
  • 运行测试截图

task3__1

task3__2

task3__3

task3__4

  • 问题回答
运行结果:

teak3__0

运行测试截图:

task3_test__1

task3_test__2

task3_test__3

分析:

1.由函数名称getchar()可推测,该函数作用是读取输入的字符;,由于测试源代码line14未出现赋值运算符,推测line14对ans1、ans2的值无影响。
2.由测试图1-2,可知测试源代码line14对line9的读取没有影响,在line18执行前对ans2的值也无影响,认为是line18读取了错误的ans2的值,即输入Y后存在某个值占位。
3.由测试图2-3,可知测试时输入连续的Y(即YY)会导致line18也读取到Y,可知占位的值是Enter。同时证明getchar()读取的是单个字符而非字符串。

结论:

line14的getchar()目的是读取Enter,防止其占位导致line18错误读取。

实验任务4

  • 源代码task4.c
//计算10亿秒等于多少年 
#include <stdio.h>
#include <math.h>
int main()
{
	int year ;
	
	year = round( 1000000000.0/( 60*60*24*365 ) );
	
	printf("10亿秒约等于%d年\n",year);
	
	return 0;
}
  • 运行测试截图

task4

实验任务5

  • 源代码task5.c
//摄氏温度转换成华氏温度 

#include <stdio.h>

int main()
{
	double c, f;
	
	scanf("%lf",&c);
	
	f = c*9/5 + 32;
	
	printf("摄氏度c = %.2f时,华氏温度f = %.2f\n\n", c, f);

	return 0;
}
  • 运行测试截图

task5__4

实验任务6

  • 源代码task6.c
//海伦公式计算三角形面积 

#include <stdio.h>
#include <math.h>

int main()
{
	int a, b, c;
	double s, area; 
	
	scanf("%d%d%d", &a, &b, &c);
	
	s = (a+b+c)/2.0;
	area = sqrt(s*(s-a)*(s-b)*(s-c));
	
	printf("a = %d,b = %d,c = %d,area = %.3f\n", a, b, c,area);
}
  • 运行测试截图

task6__4

五、实验总结

在旧版C语言标准(C89/C90)中不允许for循环中声明变量int

如图,初次运行task1__1时出现了这一神奇的报错,与记忆中for中可以直接定义int相悖。一开始以为是头文件,搜索后发现是因为文件后缀为.c导致规则与C++有差距,后缀换为cpp后果然不再报错。

77635ae319002cc186f5d9facf2891f9

task1_1_cpp

在作业要提交源代码的情况下,最好将要做测试的文件另存

关于task3的测试,一开始直接在原文件中做了简单的测试,然后为了提交作业时的简便删去了测试语句。隔了几个小时后想进一步测试,结果被迫重新输入测试语句。这个故事告诉我们:“在作业要提交源代码的情况下,最好将要做测试的文件另存”。

对未知问题做分析,尤其是要写出分析过程和几轮时,不要在分析结束前和室友乱讨论

在对task3做测试时,刚刚做完黑盒测试,下意识和室友提了一句,结果室友直接说出了AI给予的结论。导致我对task3的测试几乎完全是顺着结论推原因。这个故事告诉我们:“对未知问题做分析,尤其是要写出分析过程和几轮时,不要在分析结束前和室友乱讨论”。

posted @ 2026-10-16 21:23  Exosister233  阅读(5)  评论(0)    收藏  举报