实验1

实验结论

任务1

源代码

  • task1.c
点击查看代码
#include <stdio.h>
int main()
{
 	printf(" 0 \n");
 	printf("<H>\n");
 	printf("I I\n");
	
	return 0;
}

  • 垂直方向
    源代码task1_1.c
点击查看代码
#include <stdio.h>
int main()
{
	printf(" 0 \n");
	printf("<H>\n");
	printf("I I\n");
	printf(" 0 \n");
	printf("<H>\n");
	printf("I I\n");
	
	return 0;
}

  • 水平方向
    源代码task1_2.c
点击查看代码
#include <stdio.h>
int main()
{
	printf(" 0      0 \n");
	printf("<H>    <H>\n");
	printf("I I    I I\n");
	
	return 0;
}

运行截图

  • task1.c

task1

task1_1.c
task1_1

task1_2.c
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 && a + c > b && b + c >a)
	  printf("能构成三角形\n");
	else
	  printf("不能构成三角形\n");
	
	return 0;
}

运行截图

  • task2.c
    image
    image
    image

任务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.c

屏幕截图 2026-10-16 201052

屏幕截图 2026-10-16 201137

屏幕截图 2026-10-16 201333

屏幕截图 2026-10-16 201351

问题

第9行去掉后会影响程序结果,会直接跳过第二个问题直接输出结果,且无论输入y、Y还是n、N,输出结果都是“罗马不是一天毁灭的,我们来建设吧”。经查找得知:getchar() 的作用是读取一个字符,原理是基于行缓冲机制从输入流中依次取字符,因此常用于清理缓冲区中残留的回车符。而这行代码的作用是吃掉第一次输入后遗留的回车符,防止它被第二个 getchar() 误读,导致程序“跳过第二次输入”。输入 y 再按回车,缓冲区里实际是 'y' 和 '\n' 两个字符。去掉第9行后,第一次输入残留的回车符会被第二个getchar()直接读走当作ans2,导致跳过第二次输入且判断恒为假,最终无论输入什么都会输出“罗马不是一天毁灭的,我们来建设吧”。

任务4

源代码

  • task4.c
点击查看代码
#include <stdio.h>
#include <math.h>

int main()
{
	int year;
	
	year = (int)round(1000000000.0 / (3600*24*365));
	
	printf("10亿秒约等于%d年\n", year);
	return 0;
}

运行截图

  • task4.c

屏幕截图 2026-10-16 205409

任务5

源代码

  • task5.c
点击查看代码
#include <stdio.h>

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

运行截图

  • task5.c

屏幕截图 2026-10-16 220035

屏幕截图 2026-10-16 210322

屏幕截图 2026-10-16 210337

屏幕截图 2026-10-16 210400

任务6

源代码

  • task6.c
点击查看代码
#include <stdio.h>
#include <math.h>
int main()
{
	int a, b, c;
	double s, x, area;
	printf("请输入三角形三边长 :"); 
	scanf("%d%d%d", &a, &b, &c);
	if (a + b > c && a + c > b && b + c >a)
	{ 
	  s = (a+b+c) * 1.0 / 2;
	  x = s*(s-a)*(s-b)*(s-c);
	  area = sqrt(x);
	  printf("a = %d,b = %d,c = %d,area = %.3f\n", a, b, c, area);
    }
	else
	{
	  printf("不能构成三角形\n");
	}
	
	return 0;
}

运行截图

  • task6.c

屏幕截图 2026-10-16 220203

屏幕截图 2026-10-16 213421

屏幕截图 2026-10-16 213441

屏幕截图 2026-10-16 213511

屏幕截图 2026-10-16 220246

实验总结

通过这次试验了解到了函数round()和getchar()的作用和原理,巩固了算术运算符、关系运算符和逻辑运算符的使用方法,当然也锻炼了我写代码的能力。

posted on 2026-10-16 22:13  sunshine-c  阅读(7)  评论(1)    收藏  举报

导航