实验1 C语言输入输出和简单程序编写

一、实验目的

  1. 会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调 试C程序;
  2. 知道C程序结构和编码规范,能正确使用;
  3. 能正确、熟练使用C语言输入输出函数: scanf() , printf() , getchar() , putchar() ;
  4. 能灵活、组合使用基本数据类型、运算符和输入输出语句编程解决简单计算/应用问题

二、实验准备

  1.  一个完整的c程序结构和书写规范
  2. C程序的编写、编译、运行、调试方法
  3. C语言中标识符命名规则、常量、变量;运算符、表达式及其混合计算规则
  4. C输入输出函数用法

三、实验内容

1. 实验任务1

task1:

在c开发环境下,编写、编译、运行一个简单程序,实现在屏幕上打印一个字符小人。

1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 int main()
4 {
5     printf(" O \n");
6     printf("<H>\n");
7     printf("I I\n");
8     return 0;
9 }

task1_1:

在垂直方向上打印出两个字符小人。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int main()
 4 {
 5     printf(" O \n");
 6     printf("<H>\n");
 7     printf("I I\n");
 8     printf(" O \n");
 9     printf("<H>\n");
10     printf("I I\n");
11     return 0;
12 }

task1_2:

在水平方向上打印出两个字符小人。

1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 int main()
4 {
5     printf(" O     O\n");
6     printf("<H>    <H>\n");
7     printf("I I    I I\n");
8     return 0;
9 }

2. 实验任务2

task2:

将程序task2.c补充完整,使得程序能够实现如下功能:从键盘上输入三角形三边,判断它能否构成三角形。

 1 // 从键盘上输入三个数据作为三角形边长,判断其能否构成三角形
 2 // 构成三角形的条件: 任意两边之和大于第三边
 3 #define _CRT_SECURE_NO_WARNINGS
 4 #include <stdio.h>
 5 int main()
 6 {
 7     float a, b, c;
 8     // 输入三边边长
 9     scanf("%f%f%f", &a, &b, &c);
10     // 判断能否构成三角形
11     // 补足括号里的逻辑表达式
12     if (a + b > c && a + c > b && b + c > a)
13         printf("能构成三角形\n");
14     else
15         printf("不能构成三角形\n");
16     return 0;
17 }

3. 实验任务3

task3:

将程序task3.c补充完整。使得程序实现如下功能:

  • 只有当用户两次回答都是小写y或大写Y时,才会打印输出:罗马不是一天建成的, 继续保持哦:)
  • 否则,会打印输出:罗马不是一天毁灭的, 我们来建设吧
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int main()
 4 {
 5     char ans1, ans2; // 用于保存用户输入的答案
 6     printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有) :");
 7     ans1 = getchar(); // 从键盘输入一个字符,赋值给ans1
 8     getchar(); // 思考这里为什么要加这一行。试着去掉这一行,看看对运行有没有影响。
 9     printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : ");
10     ans2 = getchar();
11     if ((ans2 == 'y' && ans1 == 'y') || 
12         (ans1 == 'Y' && ans2 == 'Y') ||
13         (ans1 == 'Y' && ans2 == 'y') ||
14         (ans1 == 'y' && ans2 == 'Y')) // 待补足,判断用户回答ans1和ans2都是小写y或大写Y
15         printf("\n罗马不是一天建成的, 继续保持哦:)\n");
16     else
17         printf("\n罗马不是一天毁灭的, 我们来建设吧\n");
18     return 0;
19 }

4. 实验任务4

task4:

在C开发环境下,输入如下代码。 程序中line9和line15包含语法错误,找出并修改错误后,编译、运行程序,从键盘正确输入数据。

使得:

  • int型变量a1, a2, a3分别获得整数 1、2、3
  • char型变量c1, c2,c3分别获得字符'x' 'y' 'z'
  • double型变量x, y分别获得小数3.2和4.6
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 int main()
 4 {
 5     double x, y;
 6     char c1, c2, c3;
 7     int a1, a2, a3;
 8 
 9     scanf("%d %d %d", &a1, &a2, &a3);//变量前少取址符
10     printf("a1 = %d, a2 = %d, a3 = %d\n", a1, a2, a3);
11 
12     scanf("%c%c%c", &c1, &c2, &c3);
13     printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
14 
15     scanf("%lf,%lf", &x, &y);//%f用来输入float类型,%lf输入double
16     printf("x = %lf, y = %lf\n", x, y);
17 
18     return 0;
19 }

5. 实验任务5

task5:

10亿秒(109s)约等于多少年?要求结果四舍五入取整。补足程序task5.c,完成计算,并打印输出。

 1 // 计算10亿秒约等于多少年,并打印输出
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include <stdio.h>
 4 int main()
 5 {
 6     int year;
 7 
 8     const double second = 1e9;
 9     double temp = ((second / 3600) / 24) / 365;
10     if (temp - (int)temp < 0.5) {
11         year = (int)temp;
12     }
13     else {
14         year = (int)temp + 1;
15     }
16 
17     printf("10亿秒约等于%d年\n", year);
18     return 0;
19 }

6. 实验任务6

task6_1:

在c开发环境下,编写、编译、运行一个简单的算术运算程序,实现以下计算。

y = x365

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <math.h>
 4 int main()
 5 {
 6     double x, ans;
 7     scanf("%lf", &x);
 8     ans = pow(x, 365);
 9     printf("%.2f的365次方: %.2f\n", x, ans);
10 
11     return 0;
12 }

task6_2:

使用task6_1.c进行运算时,要分别运行程序3次。对task6_1.c稍做修改,借助循环,使得程序运行一 次,就可以完成多次计算。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <math.h>
 4 int main()
 5 {
 6     double x, ans;
 7     while (scanf("%lf", &x) != EOF) {
 8         ans = pow(x, 365);
 9         printf("%.2f的365次方: %.2f\n", x, ans);
10         printf("\n");
11     }
12 
13     return 0;
14 }

7. 实验任务7

task7:

编写一个简单的计算程序task7.c,实现摄氏度温度C与华氏度温度F的转换:

F = 9/5*C+32

要求:

  • 使用多组输入方式,支持运行一次程序能进行多次计算 (参考实验任务6的task6_2.c代码写法)
  • 温度保留到小数点后两位
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     double f;
 7     double c;
 8 
 9     while (scanf("%lf", &c) != EOF) {
10         f = 9.0 / 5.0 * c + 32.0;
11         printf("摄氏度c = %.2lf时, 华氏度f = %.2lf\n", c, f);
12         printf("\n");
13     }
14 
15     return 0;
16 }

8. 实验任务8

task8:

编写C程序task8.c,用海伦公式计算三角形面积。

海伦公式计算三角形面积计算式如下:

其中:

 要求:

  • 从键盘输入三角形三边边长,在屏幕上打印输出面积(面积保留到小数点后3位)
  • 使用多组输入方式,支持运行一次程序能进行多次计算 (参考实验任务6的task6_2.c代码写法)
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <math.h>
 4 
 5 int main()
 6 {
 7     double a, b, c;
 8     double s;
 9     double area;
10 
11     while (scanf("%lf %lf %lf", &a, &b, &c) != EOF) {
12         s = (a + b + c) / 2;
13         area = sqrt(s * (s - a) * (s - b) * (s - c));
14         printf("a = %d, b = %d, c = %d, area = %.3lf\n", (int)a, (int)b, (int)c, area);
15         printf("\n");
16     }
17 
18     return 0;
19 }

 四、实验结论

1. 实验任务1

实验代码

task1_1:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int main()
 4 {
 5     printf(" O \n");
 6     printf("<H>\n");
 7     printf("I I\n");
 8     printf(" O \n");
 9     printf("<H>\n");
10     printf("I I\n");
11     return 0;
12 }

task1_2:

1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 int main()
4 {
5     printf(" O     O\n");
6     printf("<H>    <H>\n");
7     printf("I I    I I\n");
8     return 0;
9 }

运行截图:

2. 实验任务2

补全代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int main()
 4 {
 5     float a, b, c;
 6     // 输入三边边长
 7     scanf("%f%f%f", &a, &b, &c);
 8     // 判断能否构成三角形
 9     // 补足括号里的逻辑表达式
10     if (a + b > c && a + c > b && b + c > a)
11         printf("能构成三角形\n");
12     else
13         printf("不能构成三角形\n");
14     return 0;
15 }

运行截图: 

 3. 实验任务3

补全代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 int main3()
 4 {
 5     char ans1, ans2; // 用于保存用户输入的答案
 6     printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有) :");
 7     ans1 = getchar(); // 从键盘输入一个字符,赋值给ans1
 8     getchar(); // 思考这里为什么要加这一行。试着去掉这一行,看看对运行有没有影响。
 9     printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : ");
10     ans2 = getchar();
11     if ((ans2 == 'y' && ans1 == 'y') || 
12         (ans1 == 'Y' && ans2 == 'Y') ||
13         (ans1 == 'Y' && ans2 == 'y') ||
14         (ans1 == 'y' && ans2 == 'Y')) // 待补足,判断用户回答ans1和ans2都是小写y或大写Y
15         printf("\n罗马不是一天建成的, 继续保持哦:)\n");
16     else
17         printf("\n罗马不是一天毁灭的, 我们来建设吧\n");
18     return 0;
19 }

运行截图:

问题回答:

getchar()可以获取‘\n’符号,因此在输入一个y,并回车后(如上图所示),'\n'符号直接被下一个getchar()获取到,导致第二个if条件为假。因此需要在中间再加一个getchar()以便下一个if语句中的getchar()获取到正确的数据。

 4. 实验任务4

补全代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 int main4()
 4 {
 5     double x, y;
 6     char c1, c2, c3;
 7     int a1, a2, a3;
 8 
 9     scanf("%d %d %d", &a1, &a2, &a3);//变量前少取址符
10     printf("a1 = %d, a2 = %d, a3 = %d\n", a1, a2, a3);
11 
12     scanf("%c%c%c", &c1, &c2, &c3);
13     printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
14 
15     scanf("%lf,%lf", &x, &y);//%f用来输入float类型,%lf输入double
16     printf("x = %lf, y = %lf\n", x, y);
17 
18     return 0;
19 }

运行截图:

5. 实验任务5

补全代码:

 1 // 计算10亿秒约等于多少年,并打印输出
 2 #define _CRT_SECURE_NO_WARNINGS
 3 #include <stdio.h>
 4 int main()
 5 {
 6     int year;
 7 
 8     const double second = 1e9;
 9     double temp = ((second / 3600) / 24) / 365;
10     if (temp - (int)temp < 0.5) {
11         year = (int)temp;
12     }
13     else {
14         year = (int)temp + 1;
15     }
16 
17     printf("10亿秒约等于%d年\n", year);
18     return 0;
19 }

运行截图:

 6. 实验任务6

实验代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <math.h>
 4 int main()
 5 {
 6     double x, ans;
 7     while (scanf("%lf", &x) != EOF) {
 8         ans = pow(x, 365);
 9         printf("%.2f的365次方: %.2f\n", x, ans);
10         printf("\n");
11     }
12 
13     return 0;
14 }

运行截图:

 7. 实验任务7

实验代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     double f;
 7     double c;
 8 
 9     while (scanf("%lf", &c) != EOF) {
10         f = 9.0 / 5.0 * c + 32.0;
11         printf("摄氏度c = %.2lf时, 华氏度f = %.2lf\n", c, f);
12         printf("\n");
13     }
14 
15     return 0;
16 }

运行截图:

 8. 实验任务8

实验代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <math.h>
 4 
 5 int main()
 6 {
 7     double a, b, c;
 8     double s;
 9     double area;
10 
11     while (scanf("%lf %lf %lf", &a, &b, &c) != EOF) {
12         s = (a + b + c) / 2;
13         area = sqrt(s * (s - a) * (s - b) * (s - c));
14         printf("a = %d, b = %d, c = %d, area = %.3lf\n", (int)a, (int)b, (int)c, area);
15         printf("\n");
16     }
17 
18     return 0;
19 }

运行截图:

 五、实验总结

本次实验中,我了解了c语言简单的输入输出。

posted @ 2023-09-28 11:37  注册好容易啊  阅读(112)  评论(0编辑  收藏  举报