一、实验目的
- 会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调 试C程序;
- 知道C程序结构和编码规范,能正确使用;
- 能正确、熟练使用C语言输入输出函数: scanf() , printf() , getchar() , putchar() ;
- 能灵活、组合使用基本数据类型、运算符和输入输出语句编程解决简单计算/应用问题
二、实验准备
- 一个完整的c程序结构和书写规范
- C程序的编写、编译、运行、调试方法
- C语言中标识符命名规则、常量、变量;运算符、表达式及其混合计算规则
- 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语言简单的输入输出。
标签:lf,10,int,double,输入输出,C语言,printf,编写,include From: https://www.cnblogs.com/Cr2O3/p/17734588.html