实验1 C语言输入输出和简单程序编写
一、实验目的
1. 会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调
试C程序
2. 知道C程序结构和编码规范,能正确使用
3. 能正确、熟练使用C语言输入输出函数:scanf(), printf(), getchar(), putchar()
4. 能灵活、组合使用基本数据类型、运算符和输入输出语句编程解决简单计算/应用问题
二、实验准备
实验前,请围绕以下内容复习教材第1-3章以下相关内容:
1. 一个完整的c程序结构和书写规范
2. C程序的编写、编译、运行、调试方法
3. C语言中标识符命名规则、常量、变量;运算符、表达式及其混合计算规则
4. C输入输出函数用法
三、实验内容
1. 实验任务 1
在c开发环境下,编写、编译、运行一个简单程序,实现在屏幕上打印一个字符小人。
task1.c
// 打印一个字符小人
#include <stdio.h>
int main()
{
printf(" O \n");
printf("<H>\n");
printf("I I\n");
return 0 ;
}
运行后,观察打印出的字符小人。
尝试编写程序task1_1.c,使得可以在垂直方向上打印出两个字符小人。
#include <stdio.h>
int main(){
printf(" O \n");
printf("<H>\n");
printf("I I\n");
printf(" O \n");
printf("<H>\n");
printf("I I\n");
return 0 ;
}
尝试编写程序task1_2.c,使得可以在水平方向上打印出两个字符小人。
#include <stdio.h>
int main(){
printf(" O \t O\n");
printf("<H>\t<H>\n");
printf("I I\tI I\n");
return 0 ;
}
2. 实验任务 2
将程序task2.c补充完整,使得程序能够实现如下功能:从键盘上输入三角形三边,判断它能否构成三角
形。
task2.c
#include <stdio.h>
int main()
{
float a, b, c;
// 输入三边边长
scanf("%f%f%f", &a, &b, &c);
// 判断能否构成三角形
// 补足括号里的逻辑表达式
if(a>0&b>0&c>0&a+b>c&b+c>a&a+c>b)
printf("能构成三角形\n");
else
printf("不能构成三角形\n");
return 0 ;
}
结果:
3. 实验任务 3
将程序task3.c补充完整。使得程序实现如下功能:
只有当用户两次回答都是小写y或大写Y时,才会打印输出:罗马不是一天建成的, 继续保持哦:)
否则,会打印输出:罗马不是一天毁灭的, 我们来建设吧
task3.c
#include <stdio.h>
int main()
{
char ans1, ans2; // 用于保存用户输入的答案
printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有):");
ans1 = getchar(); // 从键盘输入一个字符,赋值给ans
getchar(); // 思考这里为什么要加这一行。试着去掉这一行,看看对运行有没有影响。
printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : ");
ans2 = getchar();
if ((ans1=='y'||ans1=='Y')&(ans2=='y'||ans2=='Y')){
printf("\n罗马不是一天建成的, 继续保持哦:)\n");
} // 待补足,判断用户回答ans1和ans2都是小写y或大写Y
else
printf("\n罗马不是一天毁灭的, 我们来建设吧\n");
return 0 ;
}
程序填写正确后,预期测试结果如下:
4. 实验任务 4
在C开发环境下,输入如下代码。
程序中line9和line15包含语法错误,找出并修改错误后,编译、运行程序,从键盘正确输入数据。
使得:
int型变量a1, a2, a3分别获得整数 1 、 2 、 3
char型变量c1, c2,c3分别获得字符'x' 'y' 'z'
double型变量x, y分别获得小数3.2和4.
task4.c
#include<stdio.h>
int main()
{
double x, y;
char c1, c2, c3;
int a1, a2, a3;
scanf("%d%d%d", &a1, &a2, &a3);
printf("a1 = %d, a2 = %d, a3 = %d\n", a1,a2,a3);
scanf("%c%c%c", &c1, &c2, &c3);
printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
scanf("%lf,%lf", &x, &y);
printf("x = %lf, y = %lf\n",x, y);
return 0;
}
程序正确修改,并且,正确录入数据后,预期各变量输出如下:
![](/i/l/?n=23&i=blog/3291102/202310/3291102-20231007112425731-1399504635.png)
5. 实验任务 5
10 亿秒(\(10^9\)s)约等于多少年?要求结果四舍五入取整。补足程序task5.c,完成计算,并打印输出。
补足代码task5.c
//计算10亿秒约等于多少年,并打印输出
#include <stdio.h>
int main()
{
int year;
// 补足代码
float res;
res=1000000000.0/60.0/60.0/24.0/365.0;
if(res-int(res)>=0.5){
year=int(res)+1;
}
else{
year=int(res);
}
printf("10亿秒约等于%d年\n", year);
return 0;
}
6. 实验任务 6
在c开发环境下,编写、编译、运行一个简单的算术运算程序,实现以下计算。
task6_1.c
#include <stdio.h>
#include <math.h>
int main()
{
double x, ans;
scanf("%lf", &x);
ans = pow(x, 365 );
printf("%.2f的 365 次方: %.2f\n", x, ans);
return 0 ;
}
编译后,运行程序 3 次,分别输入1.0, 1.01, 0.99,观察运行结果。
使用task6_1.c进行运算时,要分别运行程序 3 次。对task6_1.c稍做修改,借助循环,使得程序运行一
次,就可以完成多次计算。
task6_2.c
#include <stdio.h>
#include <math.h>
int main()
{
double x, ans;
while(scanf("%lf", &x) != EOF)
{
ans = pow(x, 365 );
编译、运行程序,分别输入1.0, 1.01, 0.99,观察运行结果。结束计算时,按下Ctrl+Z键。(要同时按
下键盘上的Ctrl键和字母Z键;在visual studio中,需要按下Ctrl+Z键 3 次))。
7. 实验任务 7
编写一个简单的计算程序task7.c,实现摄氏度温度C与华氏度温度F的转换:
要求:
使用多组输入方式,支持运行一次程序能进行多次计算 (参考实验任务 6 的task6_2.c代码写法)
温度保留到小数点后两位
task7.c:
#include <stdio.h>
int main(){
float f,c;
while (scanf("%f",&c)!=EOF)
{
f=9.0/5.0*c+32;
printf("摄氏度c=%.2f时,华氏度f=%.2f\n",c,f);
}
}
程序正确编写后,预期运行测试效果如下:
8. 实验任务 8
编写C程序task8.c,用海伦公式计算三角形面积。
要求:
从键盘输入三角形三边边长,在屏幕上打印输出面积(面积保留到小数点后 3 位)
使用多组输入方式,支持运行一次程序能进行多次计算 (参考实验任务 6 的task6_2.c代码写法)
注*:假定输入的三角形三边边长都满足构成三角形的条件(不考虑输入数据不能构成三角形的情形)
task8.c:
#include <stdio.h>
#include<math.h>
int main(){
int a,b,c;
float t,s;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
s=(a+b+c)/2.0;
t=pow(s*(s-a)*(s-b)*(s-c),0.5);
printf("a=%d,b=%d,c=%d,area=%.4f\n\n",a,b,c,t);
}
}
程序正确编写后,预期测试效果如下:
四、实验结论
1. 实验任务 1
此部分书写内容:
给出在垂直方向上打印两个字符小人的c程序源代码task1_1.c,以及,运行结果截图
#include <stdio.h>
int main(){
printf(" O \n");
printf("<H>\n");
printf("I I\n");
printf(" O \n");
printf("<H>\n");
printf("I I\n");
return 0 ;
}
截图:
给出在水平方向上打印两个字符小人的c程序源代码task1_2.c,以及,运行结果截图
#include <stdio.h>
int main(){
printf(" O \t O\n");
printf("<H>\t<H>\n");
printf("I I\tI I\n");
return 0 ;
}
截图:
2. 实验任务 2
此部分书写内容:
补充完整并能正确运行的c程序源代码task2.c,及,运行测试结果截图
#include <stdio.h>
int main()
{
float a, b, c;
// 输入三边边长
scanf("%f%f%f", &a, &b, &c);
// 判断能否构成三角形
// 补足括号里的逻辑表达式
if(a>0&b>0&c>0&a+b>c&b+c>a&a+c>b)
printf("能构成三角形\n");
else
printf("不能构成三角形\n");
return 0 ;
}
结果:
3. 实验任务 3
task3.c
#include <stdio.h>
int main()
{
char ans1, ans2; // 用于保存用户输入的答案
printf("每次课前认真预习、课后及时复习了没? (输入y或Y表示有,输入n或N表示没有):");
ans1 = getchar(); // 从键盘输入一个字符,赋值给ans
getchar(); // 思考这里为什么要加这一行。试着去掉这一行,看看对运行有没有影响。
printf("\n动手敲代码实践了没? (输入y或Y表示敲了,输入n或N表示木有敲) : ");
ans2 = getchar();
if ((ans1=='y'||ans1=='Y')&(ans2=='y'||ans2=='Y')){
printf("\n罗马不是一天建成的, 继续保持哦:)\n");
} // 待补足,判断用户回答ans1和ans2都是小写y或大写Y
else
printf("\n罗马不是一天毁灭的, 我们来建设吧\n");
return 0 ;
}
程序填写正确后,预期测试结果如下:
回答问题
当把源代码line9去掉后,重新编译运行,结果是什么样的?
输入第一个字符后的回车键会被第二个getchar()接收,如果不加line9会把回车赋值给ans2.
4. 实验任务 4
#include<stdio.h>
int main()
{
double x, y;
char c1, c2, c3;
int a1, a2, a3;
scanf("%d%d%d", &a1, &a2, &a3);
printf("a1 = %d, a2 = %d, a3 = %d\n", a1,a2,a3);
scanf("%c%c%c", &c1, &c2, &c3);
printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
scanf("%lf,%lf", &x, &y);
printf("x = %lf, y = %lf\n",x, y);
return 0;
}
程序正确修改,并且,正确录入数据后,预期各变量输出如下:
![](/i/l/?n=23&i=blog/3291102/202310/3291102-20231007112425731-1399504635.png)
5. 实验任务 5
//计算10亿秒约等于多少年,并打印输出
#include <stdio.h>
int main()
{
int year;
// 补足代码
float res;
res=1000000000.0/60.0/60.0/24.0/365.0;
if(res-int(res)>=0.5){
year=int(res)+1;
}
else{
year=int(res);
}
printf("10亿秒约等于%d年\n", year);
return 0;
}
6. 实验任务 6
task6_2.c
#include <stdio.h>
#include <math.h>
int main()
{
double x, ans;
while(scanf("%lf", &x) != EOF)
{
ans = pow(x, 365 );
printf("%.2f的365次方: %.2f\n", x, ans);
printf("\n");
}
return 0;
}
测试结果:
7. 实验任务 7
task7.c:
#include <stdio.h>
int main(){
float f,c;
while (scanf("%f",&c)!=EOF)
{
f=9.0/5.0*c+32;
printf("摄氏度c=%.2f时,华氏度f=%.2f\n",c,f);
}
}
程序正确编写后,预期运行测试效果如下:
8. 实验任务 8
task8.c:
#include <stdio.h>
#include<math.h>
int main(){
int a,b,c;
float t,s;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
s=(a+b+c)/2.0;
t=pow(s*(s-a)*(s-b)*(s-c),0.5);
printf("a=%d,b=%d,c=%d,area=%.4f\n\n",a,b,c,t);
}
}