菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
303
0

实验2

原创
05/13 14:22
阅读数 14271

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 }

效果是这样,第一行和第二行没有像例图那样对齐,而是插空了。

 

实验总结:

本次实验不仅让我熟悉了基本语句的语法,更让我关注到很多平时不常注意的代码细节,比如格式控制与输出排版。

但其实最大的收获是学会了无限循环怎么写(为了截图偷懒...)。

果然语言这种东西是越用越熟练的。

 

发表评论

0/200
303 点赞
0 评论
收藏