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

实验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;
}

程序正确修改,并且,正确录入数据后,预期各变量输出如下:


![](https://img2023.cnblogs.com/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;
}

程序正确修改,并且,正确录入数据后,预期各变量输出如下:


![](https://img2023.cnblogs.com/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);
    }


}

程序正确编写后,预期测试效果如下:

posted @ 2023-10-07 14:13  PetroniusMo  阅读(120)  评论(0编辑  收藏  举报