1.格式化输入输出
源代码如下:
1 #include <stdio.h> 2 int main() { 3 int num; 4 scanf("%d", &num); 5 printf("2049%04d\n", num); 6 scanf("%d", &num); 7 printf("2049%04d\n", num); 8 scanf("%d", &num); 9 printf("2049%04d\n", num); 10 return 0; 11 }
输出结果:
%04d的作用是控制2049后输出的整型字符占四位,不足位在数字之前用0补足。
用循环句改写后代码如下:
1 #include <stdio.h> 2 int main() { 3 int num,i; 4 for(i=1;i<=3;i++) { 5 scanf("%d", &num); 6 printf("2049%04d\n", num); 7 } 8 9 return 0;
结果如下:
2.输入输出格式控制
源代码如下:
1 #include <stdio.h> 2 int main() { 3 int x=1234; 4 float f=123.456; 5 double m=123.456; 6 char ch='a'; 7 char a[]="Hello, world!"; // 定义一个字符型数组a,数组中存放字符串常量 hello,world! 8 int y=3, z=4; 9 printf("%d %d\n", y, z); 10 printf("y=%d, z=%d\n", y,z); 11 printf("%8d,%2d\n", x,x); 12 printf("%f, %8f, %8.1f, %0.2f, %.2e\n",f,f,f,f,f); 13 printf("%lf\n",m); 14 printf("%3c\n", ch); 15 printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); 16 return 0; 17 }
运行结果如下:
%d输出整型数,%ld输出长整型数。
%md表示输出时此数字占m位,不足位数处空格补齐,若数字位数大于输出位数则按数字原样输出。
%f输出单精度浮点数,%lf输出双精度浮点数。
%.nlf表示输出时保留小数点后n位,%m.nlf表示输出时数字占位m位且保留小数点后n位,不足处数字前空格补齐。
%c输出单个字符,%s输出字符串。
%ms表示输出时字符串占位m位,不足处在字符串前以空格补齐,%.ns表示输出时从左往右保留n位字符。
3.代码改错
修改后代码如下:
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("%f,%lf\n",x,y); 12 return 0; 13 }
结果如下:
4.代码补全
补全后代码如下:
1 #include <stdio.h> 2 int main() { 3 char ans1, ans2; 4 printf("复习了没? (输入y或Y表示复习了,输入n或N表示没复习) : "); 5 ans1 = getchar(); // 从键盘输入一个字符,赋值给ans1 6 getchar(); // 接收输入字符后的换行符,防止换行符被赋值給ans2 7 printf("\n动手敲代码了没? (输入y或Y表示敲了,输入n或N表示木有敲) : "); 8 ans2 = getchar(); 9 if((ans1=='y'||ans1=='Y')&&(ans2=='y'||ans2=='Y')) // 判断用户回答ans1和ans2都是小写y或大写Y 10 printf("\n罗马不是一天建成的:)\n"); 11 else 12 printf("\n罗马不是一天毁灭的。。。\n"); 13 return 0; 14 }
运行结果如下:
5.字符判断
补全后代码如下:
1 #include <stdio.h> 2 int main() { 3 char x; 4 x = getchar(); 5 if( x>='0'&&x<='9') // 判断x是数字字符表达式 6 printf("%c is a number\n", x); 7 else if( x>='A'&&x<='Z'||x>='a'&&x<='z') // 判断x是大写或小写英文字母的表达式 8 printf("%c is a letter\n", x); 9 else 10 printf("%c is other character\n", x); 11 return 0; 12 }
运行结果如下:
为了截图方便,在运行时临时给代码加了一个无限循环(上面展示的代码中已经删掉了)
6.等比数列求和
代码如下:
1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { double n,q=2.0,a1=1.0,sum; 5 scanf("%lf", &n); 6 sum = a1 * (1 - pow(q, n + 1)) / (1 - q); 7 printf("when n=%.0lf,sum=%.0lf", n, sum); 8 return 0; 9 }
结果如下:
为了截图方便,在运行时临时给代码加了一个无限循环(上面展示的代码中已经删掉了)
7*.升级版小人
这个我大概只能完成到99%,输出效果没有完全与图一致(自动对齐的代码忘了咋写...),代码先放:
1 #include <stdio.h> 2 int main() 3 { int j,n; 4 for(n=1;n<=5;n++) 5 { 6 printf("%*s",5*(n-1)-1," ");//输出字符串,长为5(n-1) 7 for (j=1;j<=11-2*n;j++) 8 printf(" O "); 9 printf("\n%*s",5*(n-1)-1," "); 10 for (j=1;j<=11-2*n;j++) 11 printf(" <H> "); 12 printf("\n%*s",5*(n-1)-1," "); 13 for (j=1;j<=11-2*n;j++) 14 printf(" I I "); 15 printf("\n"); 16 } 17 return 0; 18 }
效果是这样,第一行和第二行没有像例图那样对齐,而是插空了。
实验总结:
本次实验不仅让我熟悉了基本语句的语法,更让我关注到很多平时不常注意的代码细节,比如格式控制与输出排版。
但其实最大的收获是学会了无限循环怎么写(为了截图偷懒...)。
果然语言这种东西是越用越熟练的。
© 著作权归作者所有
相关热门文章
发表评论