实验2 C语言表达式编程应用及输入输出函数
任务1
// ex1.cpp #include<stdio.h> int main(){ int a=5,b=7,c=100,d,e,f; d=a/b*c; e=a*c/b; f=c/b*a; printf("d=%d,e=%d,f=%d\n",d,e,f); return 0; }
r对应的数学计算式
d=[a/b]*c=[5/7]*100
e=[a*c/b]=[5*100/7]
F=[c/b]*a=[100/7]*5
结果不同的原因
除号取整以及运算的先后顺序造成计算结果不同
任务2
// ex2.cpp #include<stdio.h> int main(){ int x=1234; float f=123.456; double m=123.456; char ch='a'; char a[]="hello,world!"; //定义一个数组a,数组中存放字符串常量 hello,world! int y=3,z=4; printf("%d %d\n",y,z); printf("y=%d,z=%d\n",y,z); printf("%8d,%2d\n",x,x); printf("%f,%8f,%8.1f,%0.2f,%.2e\n",f,f,f,f,f); printf("%lf\n",m); printf("%3c\n",ch); printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); return 0; }
这个程序中用到的格式符的用法
%d %f %s 输出对应的整型/浮点型数字/字符串
%8d 以八位输出对应的整型数字,不足的位在前面补空格,
%2d 以二位输出对应的整型数字,超过的部分正常输出
%8f 以八位输出对应的浮点型数字,超过的部分正常输出
%8.1f 以八位输出对应的浮点型数字,保留小数点后一位,不足的位在前面补空格
%0.2f 输出对应的浮点型数字,保留小数点后两位
%.2e 以指数形式输出对应的浮点型数字,保留小数点后两位
%lf 以double输入/输出对应的浮点型数字
%3c 以三位输出对应的字符,不足的位在前面补空格
%15s 以十五位输出对应的字符串,不足的位在前面补空格
%10.5s 以十位输出对应的字符串的前五个字符,不足的位在前面补空格
%2.5s 以两位输出对应的字符串的前五个字符,超过的部分正常输出
%.3s 输出对应的字符串的前三个字符
任务3
// ex3.cpp #include<stdio.h> int main(){ double x,y; char c1,c2,c3; int a1,a2,a3; scanf("%d%d%d",&a1,&a2,&a3); printf("%d,%d,%d\n",a1,a2,a3); scanf(" %c %c %c",&c1,&c2,&c3); printf("%c%c%c\n",c1,c2,c3); scanf("%lf,%lf",&x,&y); printf("%f,%lf\n",x,y); return 0; }
任务4
// ex4.cpp // 判断字符类型 #include<stdio.h> int main(){ char x; x=getchar(); if(x>='0'&&x<='9') //待补足①,判断x是数字字符表达式 printf("%c是数字字符\n",x); else if(x>='a'&&x<='z'||x>='A'&&x<='Z') //待补足②,判断x是大写或小写英文字母的表达式 printf("%c是英文字母\n",x); else printf("%c是其他字符\n",x); return 0; }
任务5
// ex5.cpp #include<stdio.h> int main(){ char ans1, ans2; printf("复习了没?(输入y或Y表示复习了,输入n或N表示没复习): "); ans1 = getchar(); //从键盘输入一个字符,赋值给ans1 getchar(); //思考这里为什么要加这一行,试着去掉这一行,看看对运行有没有影响。 printf("\n动手敲代码了没?(输入y或Y表示敲了,输入n或N表示木有敲): "); ans2 = getchar(); if( (ans1=='y' || ans1=='Y') && (ans2=='y' || ans2=='Y') ) //待补足,判断用户回答ans1和ans2都是小写y或大写Y printf("\n罗马不是一天建成的:)\n"); else printf("\n罗马不是一天毁灭的。。。\n"); return 0; }
任务6
// ex6.cpp #include<stdio.h> int main(){ int n,i,x,sum; scanf("%d",&n); i=1; sum=1; x=n-1; while(x>0){ i=i*2; sum += i; x--; } printf("n = %d 时, sum = %d \n",n,sum); return 0; }
任务7
// ex7.cpp #include<stdio.h> int main(){ char s1[]=" O ",s2[]="<H>",s3[]="I I",s[]=" "; int i,x,n; i=8; while(i>0){ n=(8-i)/2; while(n>0){ printf("%9s",s); n--; } printf("%s",s1); x=i; while(x>1){ printf("%9s",s1); x--; } printf("%9s\n",s1); n=(8-i)/2; while(n>0){ printf("%9s",s); n--; } printf("%s",s2); x=i; while(x>1){ printf("%9s",s2); x--; } printf("%9s\n",s2); n=(8-i)/2; while(n>0){ printf("%9s",s); n--; } printf("%s",s3); x=i; while(x>1){ printf("%9s",s3); x--; } printf("%9s\n",s3); i--,i--; } n=(8-i)/2; while(n>0){ printf("%9s",s); n--; } printf("%s\n",s1); n=(8-i)/2; while(n>0){ printf("%9s",s); n--; } printf("%s\n",s2); n=(8-i)/2; while(n>0){ printf("%9s",s); n--; } printf("%s\n",s3); return 0; }
实验总结
本次实验涉及的知识点主要是输入输出函数以及相应函数中格式符的使用,%d,%c,%f,%s等最基础常用的格式符的使用方法。
存在的问题
在任务3当中,实验要求是修改两行代码,而再修改的过程中我修改了三行代码,可能是因为我对与语法格式还不够熟练
在任务5当中,同样的一个逻辑语句,同样的一个编译软件,在不同的地点运行,结果不同,具体原因未知,猜测由于网络原因造成
在任务7当中,有一个在下一个第九位输出的格式符需要运用,但由于我忘记了,只能用%9d代替,虽然实现了相同的效果,但还是希望下次可以牢记所用到的格式符