【实验二】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 }
运行结果:
(实验原题目有错误,答案已经被我修复
~实验结论~
实验任务一
(已书写在实验任务中
实验任务二
(已书写在实验任务中
实验任务三
(已书写在实验任务中
实验任务四
(已书写在实验任务中
实验任务五
(已书写在实验任务中
~实验总结~
- 语法是严格要求的,逻辑是十分残酷的。算法是程序的骨架,数据是程序的肌肉和表皮。
本次实验主要是学习应用实践输出格式字符、逻辑规则、数学计算。以实用为主。 - 本次实验我花了点时间,通过书本及互联网,例题的启示,自己总结、摸索出语言的规则和一般广泛使用标准。日后自己在做类似的题型时出现BUG也能即时发现并且顺利修复。
目前我还很生疏,是个freshman,但总是要花时间熟练的,罗马不是一天建成的。 - 希望能和同学们一起探讨更多的程序逻辑、算法,一起解决BUG。
Thanks for reading