【实验二】C语言表达式编程应用及输入输出函数

实验任务一

 

 1 // ex1.cpp 
 2 #include <stdio.h>
 3  int main() {
 4     int a=5, b=7, c=100, d, e, f;
 5         
 6     d = a/b*c;
 7     e = a*c/b;
 8     f = c/b*a;
 9     printf("d=%d, e=%d, f=%d\n",d,e,f);
10         return 0;
11  }

 

分析结果:d=0,e=71,f=70

运行结果:

程序剖析: 第6行:d=a÷b×c

      第7行:e=a×c÷b

      第8行:f=c÷b×a

与数学运算结果不同的原因是:程序计算时所带入和输出的数据都是整型int,是不精确的(无浮点型精确),在计算过程中会产生精度损耗以造成结果误差。

实验任务二

 1 // ex2.cpp
 2 
 3 #include <stdio.h>
 4 int main() {
 5     int x=1234;
 6     float f=123.456;
 7     double m=123.456;
 8     char ch='a';
 9     char a[]="Hello, world!"; // 定义一个数组a,数组中存放字符串常量hello,world!
10     int y=3, z=4; 
11     
12     printf("%d %d\n", y, z);
13     printf("y=%d, z=%d\n", y,z);
14     printf("%8d,%2d\n", x,x);
15     printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f);
16     printf("%lf\n",m);
17     printf("%3c\n", ch);
18     printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a);
19     
20     return 0;
21 }

第12~18行中所用格式符:

%d:十进制整型

%8d:占8个宽度的十进制整型

%f:十进制浮点型

%8f:占8个宽度的十进制浮点型

%8.1f:占8个宽度其中小数点后占1个宽度的十进制浮点型

%0.2f:小数点后占2个宽度的十进制浮点型

%.2e:小数点后占2个宽度的科学计数法浮点型

%lf:十进制长浮点型

%3c:占3个宽度的字符

%s:字符串

%15s:占15个宽度的字符串

%10.5s:占10个宽度且只取右结合性下5位宽度的原字符串

%2.5s:“同理”

%.3s:“同理”

 实验任务三

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

改正:原代码中第6行缺少&符号、原代码中第10、11行缺少l表示的long。

运行结果:

 实验任务四

 1 // ex4.cpp
 2 // 判断字符类型 
 3 #include <stdio.h>
 4 int main() {
 5     char x;
 6     
 7     x = getchar();
 8     
 9     if(x>=48&&x<=57) // 判断x是数字字符表达式 
10         printf("%c是数字字符\n", x);
11     else if(x>=65&&x<=122) // 判断x是大写或小写英文字母的表达式 
12         printf("%c是英文字母\n", x);
13     else
14         printf("%c是其它字符\n", x);
15     
16     
17     return 0;
18 } 

判断条件如代码第9、11行所示添加。

运行结果:

 

实验任务五

 1 // ex5.cpp
 2 #include <stdio.h>
 3 int main() {
 4     char ans1, ans2;
 5     
 6     printf("复习了没? (输入y或Y表示复习了,输入n或N表示没复习) :  ");
 7     ans1 = getchar();  // 从键盘输入一个字符,赋值给ans1
 8     
 9     getchar(); // 思考这里为什么要加这一行 
10     
11     printf("\n动手敲代码了没? (输入y或Y表示敲了,输入n或N表示木有敲) :  ");
12     ans2 = getchar();
13     
14     if((ans1=='y'||ans1=='Y')&&(ans2=='y'||ans2=='Y'))
15         printf("\n罗马不是一天建成的:)\n");    
16     else
17         printf("\n罗马不是一天毁灭的。。。\n");
18 
19     return 0;
20 } 

(插入了第14行的if条件

运行结果:

其中,第9行的目的我认为是收集回车键的输入,以进行下一个输入的收集,若删去则无法输入。

 

实验任务六

 1 #include<stdio.h>
 2 #include<math.h>
 3 int main(){
 4     int n,a,sum,q;
 5     scanf("%d",&n);
 6     a = 2;
 7     q = 2;
 8     sum = a*(pow(q,n)-1)/(q-1)+1;
 9     printf("n = %d时,sum = %d",n,sum);
10     return 0; 
11 }

运行结果:

(实验原题目有错误,答案已经被我修复

 

 

 


~实验结论~

 

实验任务一

(已书写在实验任务中

实验任务二

(已书写在实验任务中

实验任务三

(已书写在实验任务中

实验任务四

(已书写在实验任务中

实验任务五

(已书写在实验任务中


~实验总结~

 

  1. 语法是严格要求的,逻辑是十分残酷的。算法是程序的骨架,数据是程序的肌肉和表皮。
    本次实验主要是学习应用实践输出格式字符、逻辑规则、数学计算。以实用为主。
  2. 本次实验我花了点时间,通过书本及互联网,例题的启示,自己总结、摸索出语言的规则和一般广泛使用标准。日后自己在做类似的题型时出现BUG也能即时发现并且顺利修复。
    目前我还很生疏,是个freshman,但总是要花时间熟练的,罗马不是一天建成的。
  3. 希望能和同学们一起探讨更多的程序逻辑、算法,一起解决BUG。

 

 

Thanks for reading

 

 


 

posted @ 2020-10-30 14:04  katachip  阅读(189)  评论(4编辑  收藏  举报