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

一,实验目的

1. 会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调 试C程序

2. 知道C程序结构和编码规范,能正确使用

3. 能正确、熟练使用C语言输入输出函数: scanf() , printf() , getchar() , putchar()

4. 能灵活、组合使用基本数据类型、运算符和输入输出语句编程解决简单计算/应用问题 

二,实验准备

1. 一个完整的c程序结构和书写规范

2. C程序的编写、编译、运行、调试方法

3. C语言中标识符命名规则、常量、变量;运算符、表达式及其混合计算规则

4. C输入输出函数用法 

三,实验内容

任务一:

 

源代码(垂直方向上打印两个字符小人的c程序)

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

 

运行结果

 

源代码(水平方向上打印两个字符小人的c程序)

 

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     for(int i=0;i<2;i++){
 5         printf(" 0\t");
 6     }
 7     printf("\n");
 8     for(int i=0;i<2;i++){
 9         printf("<H>\t");
10     }
11     printf("\n");
12     for(int i=0;i<2;i++){
13         printf("I I\t");
14     }
15     printf("\n");
16     return 0;
17  } 

 

运行结果

 

 

 

 

 

任务二:

源代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4     double a,b,c;
 5     while (scanf("%lf%lf%lf",&a,&b,&c)!=EOF)
 6     
 7     if ((a + b > c) && (a + c > b) && (b + c > a))
 8     
 9     
10     printf("能构成三角形\n");
11     else
12     
13     printf("不能构成三角形\n");
14     return 0;
15  } 

运行代码

 

 

任务三:

 

源代码

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     char ans1,ans2;
 5     char jixu;
 6 do{
 7     
 8     printf("每次课前认真预习、课后及时复习了没?" 
 9     "(输入y或Y表示有,输入n或N表示没有):");
10     ans1=getchar();
11     getchar();
12     
13     
14     printf("\n动手敲代码实践了没?(输入y或Y表示敲"
15     "了,输入n或N表示木有敲):");
16     ans2=getchar();
17     getchar();
18     
19     
20     if ((ans1==ans2)||(ans1=='y'&&ans2=='Y')||(ans1=='Y'&&ans2=='y'))
21     {printf("\n罗马不是一天建成的,继续保持哦:)\n");}
22     else
23     {printf("\n罗马不是一天建成的,我们来建设吧\n\n");}
24     
25     
26     printf("按任意键退出,按N继续:");
27     jixu=getchar();
28     getchar();
29 }   while(jixu =='N' || jixu =='n');
30     return 0;
31  } 

 

运行代码

 问题思考:

getchar()是用来清空输入缓冲区或者处理我们输入的规范性,如果去掉getchar()可能会导致程序反复运行过程中错误读取

到我们输入的回车或者空格。导致输入不规范而导致报错。

 

任务四:

 

源代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4  double x, y;
 5  char c1, c2, c3;
 6  int a1, a2, a3;
 7 
 8  scanf("%d,%d,%d", &a1, &a2, &a3);
 9  printf("a1 = %d, a2 = %d, a3 = %d\n", a1,a2,a3);
10  
11  scanf("%c%c%c",&c1,&c2, &c3);
12  printf("c1 = %c, c2 = %c, c3 = %c\n", c1, c2, c3);
13  
14  scanf("%lf,%lf", &x, &y);
15  printf("x = %lf, y = %lf\n",x, y);
16  return 0;
17 }

 

 

运行代码

 

 

 

任务五:

 

源代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4  int year;
 5  long long miao;
 6  long long yu;
 7  printf("请输入秒数:"); 
 8  scanf("%lld",&miao);
 9  year=miao/(365*24*60*60);
10  yu=miao%(365*24*60*60);
11 if (yu>=5 * 24 * 60 * 60){year++;}    
12 printf("%lld秒约等于%d年\n",miao,year);
13 return 0;
14 }

 

 

运行代码

 

 

任务六:

 

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

 

 

代码运行

 

 

任务七:

 源代码

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

 

 

代码运行

 

 

任务八:

 

源代码

 

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

 

代码运行

 四,实验结论

1,实验任务1

最简单的打印就是一个一个输入,但是注意输入后的换行符"\n"它是从左上到右下的斜线。

当涉及到打印水平方向两个小人的时候,我采用了for 函数,得到了水平打印的效果,但是有很多细节,比方説printf输出时的空格要几个才能对齐,我一次一次试才得到了最终想要的结果。

2,实验任务2

关于构成三形,涉及到边长是小数的可能,就定义为了double 类型,所以用scanf输入的时候用的是%lf .用了while (scanf("%lf%lf%lf",&a,&b,&c)!=EOF)来达到了多次运行输入的效果。还有逻辑运算符&&(与)以及在使用if while for 这些函数的时候没有分号。还有多次运行输入的时候,输出的语句后的\n的换行效果使数据直观。

3,实验任务3

在写这个代码时我用了另一种多次运行输入的方式 do  while  这里有定义char类型,所以为了避免输入时空格等输入使输入数据不规范,我用了getchar()跟在了ans*=getchar()后来清空输入缓冲区。还有就是字符类型用的是单引号’c’

4,实验任务4

这个实验用了double int char 三个类型。注意输入输出double 类型时用的是%lf,(不说明,double类型默认输出保留小数点后6位)然后就是字符匹配的时候&符号可以用来获取变量地址,这样的话输入数据并按下 Enter 键后,scanf 会根据格式字符串读取输入,并将读取的数据存储到提供的地址中。还有就是不要忘记printf后面的分号,并且是英文的分号

5,实验任务5

这里的秒数是很大的整数,所以用了long long数据类型来存储miao 和yu;相应的输出用的是%lld取的首字母。还有就是%除了是格式化输出的标志,也用来取模。表示求余数。

6,实验任务6

这里的头文件多了一个math 库,这样在使用一乘方,幂方以及开根号,三角函数等就方便了且不用再定义。pow(a,b)求的是a的b次方,其中pow函数接受double 类型的参数,返回值也是double.使用这类函数一定要包含<math,h>头文件

7,实验任务7

这是温度的转换,主要用来套用之前的重复输入测试值的while函数的方法。

8,实验任务8

这道题很综合,用了<math,h>头文件,重复输入测试值的while函数的方法,还有格式化输出保留小数点后几位,以及输出时,用空格,逗号等字符来控制输出格式。

五,实验总结

 

知识点:

1,double类型的输入输出用%lf

2.数据很大的整数用long long 来定义,同时输入输出用&llf

3,来多组数据多次测试时,用while ,do while ,都可以。以及用while和scanf 和!=EOF的方法

4,printf控制输出可以用空格和逗号以及其它字符来格式化输出

5,有时候写的时候用英文半角输入,有时候会因为输入了中文,而出现中文的;来表示英文的;不一样的

6,多动手,少纸上谈兵。

posted @ 2024-09-30 23:43  安东尼23  阅读(42)  评论(0编辑  收藏  举报