实验二

Part 1

       各种修饰符的使用,自己输过之后印象会比较深。

       格式化输入输出函数及格式符使用练习,改正后的源代码如下:

 1 #include <stdio.h>
 2 int main() {
 3 float 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,%1f",&x,&y);
11 printf("%f,%1f\n",x,y);
12 return 0;
13 }

 运行结果:

        第一个错误是第6行没有加&,从键盘输入的数据找不到该去的地方了。第二个是第十行,要得到长整形的数据输入时就要按长整形输入。

Part 2

       putchar和getchar函数,只能用于单个字符,格式分别为putchar()和getchar(),括号里是要输出或输入的字符或者是表示字符的常量,括号里也可以用转义字符,要直接输出单个字符是要给字符加单引号。

Part 3

        if和else语句,if()或者else()括号里是判断表达式,表达式真就执行后面的语句,假就进入另一个分支。if和else是一个完整的语句,所以if表达式后面是没有‘;’的,否则编译时会提示else前没有匹配的if。if可以单独出现,但是else不可以。

Part 4

switch语句的使用练习,源代码如下:

 1   /*
 2   switch语句使用示例
 3   输入1,2,3...的不同整数,显示不同提示信息
 4   */
 5   #include <stdio.h>
 6   int main() {
 7      int level;
 8      printf("输入现在状态等级(1-5): ");
 9      scanf("%d",&level);
10     switch(level) 
11           {
12            case 1: printf("high翻了:)\n"); break;
13            case 2: printf("low爆了:(\n"); break;
14            default: printf("一言难尽,无法概括。。。\n");
15              }
16  return 0;
17  }

       这段代码能正常运行,得到预期的结果。感觉这个效果和条件语句一样,都是判断条件然后选择性地执行,得到不同条件对应的结果。但是表达上有些不一样,case后面只能是常量表达式,情况多的时候就很麻烦,在if里可以用一个表达式表示范围,但是用switch就要一个一个写出来。感觉也就情况少的时候能用一下。

去掉break后的运行结果:

       输入的level从第一个case开始判断,判断为符合条件时执行后面的语句,遇到break结束,若没有遇到break则继续执行下一个case,直到遇到break结束这个switch语句。有时遇到好几个case使用同一个语句时就不用每条都加break了,在最后一个case后面加就行。

Part 5

源代码:(分别用if和switch语句编写)

 1 //要求用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输
 2 //出提示信息"Binggo, you are right~",否则,输出提示信息"try again~"
 3 #include <stdio.h>
 4 int main(){
 5     char answer;
 6     printf("请输入你的答案(A,B,C or D):");
 7     scanf("%c",&answer);
 8       if(answer=='A')
 9     printf("Binggo, you are right~\n");
10       else
11           printf("try again~\n");
12       return 0;
13 }
 1 //要求用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输
 2 //出提示信息"Binggo, you are right~",否则,输出提示信息"try again~"
 3 #include <stdio.h>
 4 int main(){
 5     char answer;
 6     printf("请输入你的答案(A,B,C or D):");
 7     scanf("%c",&answer);
 8      switch(answer){
 9          case 'A':printf("Binggo, you are right~\n");break;
10          default :printf("try again~\n");break;
11      }

 运行结果:

注意:字符要加‘’

part 6

       从一本书上看到了一个输出星号,使之排列成三角形团的变成题目,刚好上课讲循环的时候讲了一个差不多的例子,于是想试着用循环语句写一下。脑阔疼就这么开始了(可能因为我比较菜吧)······

先看源代码(题目包含在注释中):

 1 /*编写程序输出下列字符
 2 *******
 3  *****
 4   ***
 5    *                    
 6 */
 7 
 8 #include <stdio.h>
 9 int main(){
10    char x;
11    int b,length,c,d;
12      x='*'; 
13     c=1;d=c;
14     b=7;length=b;
15      while (b>=1&&d<=4)
16     {
17           while(b>=1)               //行内循环输出b个星号 
18         {
19           printf("%c",x);
20           b=--b;
21          }
22          length=length-2;          //执行完第17行的while后b的值为1,把length重新赋值给b 
23          b=length;
24     
25     printf("\n");                  //输完一行换行 
26      
27      while(c>=1)                  
28         {
29          printf(" ");
30          c=--c;
31          }
32      d=d+1;
33      c=d; 
34     }
35     return 0;
36 } 

 运行结果:

       其实呢,我原本的想法是,每一行的星号个数都是有规律的,那么就让电脑计算一串星号的长度(我记得有个sizeof函数),然后每行递减两个,这样只要写出第一行星号就行了,而且不管第一行有几个星号(奇数个的)都可以一直输出到最后只剩下一个星号位为止。但是······设想太丰满了。我只能想到这么一个大概的想法,但是完全不知道该怎么实现······

       感觉就不是很熟练吧。于是我从一个星号开始,写到一行星号,然后让每行的星号数量都不一样,再考虑行前的空格。分成三个部分,先画出行内循环的流程图,空格的循环是一样的,然后再把它们用一个大的循环连接起来。b的值时固定的,,但每行循环的次数不一样,要继续下一行循环,就要给b重新赋值,所以又定义了一个length。空格的循环同理。中间困扰的问题是循环条件的推算和通过中间变量重新赋值,还有循环的顺序问题吧,写着写着就解决了。

       感受:流程图要好好画,这样能节省很多时间,不然感觉没有思路不知道怎么办。还有变量的命名最好能看出来代表什么,这样看着就比较直观,因为感觉自己写的变量一多看着就比较乱。最后,最重要的感悟就是一定要确认文件的保存!昨天打开电脑想写作业的时候发现找不到最后修改的那个代码了,然后流程图也淹没在草稿里了,所以又修改了一遍······

       虽说技术含量不是很高,成功运行那一瞬间还是超有满足感的:)这个程序缺点是只能输出如图的星号,要想按这个规律再多出一行,要改动的数据会比较多。好像还是一开始的想法比较简洁???写完现在这个之后现在好像又有点思路了,这周再尝试一下吧。

事后看起来真是风轻云淡呢:)一闪一闪亮晶晶,满天都是小星星***

 

posted @ 2019-04-01 19:32  ningchenyang  阅读(127)  评论(3)    收藏  举报