实验二

Posted gebilaowangfangruidong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二相关的知识,希望对你有一定的参考价值。

#实验结论
Part1: 格式化输出函数printf()和格式化输入函数scanf()

ex2-1.cpp

 #include <stdio.h>
 int main() {
     int x=1234;
     float f=123.456;
     double m=123.456;
     char ch=a;
     char a[]="Hello, world!";
     int y=3, z=4; 
     printf("%d %d
", y, z);
     printf("y=%d, z=%d
", y,z);
     printf("%8d,%2d
", x,x);
     printf("%f, %8f, %8.1f, %0.2f, %.2e
",f,f,f,f,f);
     printf("%lf
",m);
     printf("%3c
", ch);
     printf("%s
%15s
%10.5s
%2.5s
%.3s
",a,a,a,a,a);
     return 0;
}

 

 技术图片

 

 第三行:输出格式为“%8d”即数据宽度为8,进行右对齐。

               输出格式为“%2d”,因为数据进行右对齐,从右边进行输出,因此输出原型。

第四行:输出格式为“%f”float以二进制形式储存,因此在转变数据输出时输出的时123.456的近似数。

               输出格式为“%8f”因为输出数据占8个单位,其中整数整体占一个单位,“.”占一个单位,小数位一个数据占一个单位(001原因见上一行)。

               输出格式“%8.1f”其中.1代表小数点后只有一个数据宽度,通过四舍五入将4进一位为5。同时数据宽度为8个单位,因此整数前右对齐,留出空格。

              输出格式“%0.2f”输出时四舍五入保留两位小数。

              输出格式“%.2e”%e指以指数形式输出实数,.2指输出的小数部分的位数,其中又进行了四舍五入。

第五行:输出格式“%lf”,因为m的输入形式是double型,因此以十进制形式输出,lf表示双精度浮点数,所占单位也比f大,因此在小数后面取0占位。

第六行:输出格式“%3c",表明数据宽度为3个单位,因此右对齐,在a的左边留出三个空格。

第八行:输出格式“%15s”,表明输出字符串占15个单位,右对齐,因此在左边空格占位。

第九行:输出格式“%10.5s”,10代表字符串占据10个单元,.5表示输出5个字符。右对齐,所以在左边空格占位。

第十行:输出格式“%2.5s”,2表示占2个单位,.5表示输出5个字符,右对齐。

第十一行:输出格式“%.3s”,表示输出3个字符。

 

ex2-2.cpp

错误源代码:

#include <stdio.h>
int main() {
 double x,y;
 char c1,c2,c3;
 int a1,a2,a3;
 scanf("%d%d%d",a1,a2,a3);                              -在a1,a2,a3前面均加上&
 printf("%d,%d,%d ",a1,a2,a3);
 scanf("%c%c%c",&c1,&c2,&c3);
 printf("%c%c%c ",c1,c2,c3);
 scanf("%f,%lf",&x,&y);                                       -在%f前加上l
 printf("%f,%lf ",x,y);
 return 0;
}

修改源代码:

 

 #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
",a1,a2,a3);
     scanf("%c%c%c",&c1,&c2,&c3);
     printf("%c%c%c
",c1,c2,c3);
     scanf("%lf,%lf",&x,&y);
     printf("%f,%lf
",x,y);
     return 0;
 } 

 

运行结果:

 

技术图片

 

 

总结1.

%d:%md-整型输出单位为m个单位,%m.nd-整型输出占m个单位,并且如果输出数据不满n个,即在左边用0占位。

%f:%lf-双精度浮点数,对应double。%m.nf-数据占m个单位,小数点后保留n个小数(进行四舍五入),%.nf-整数部分不变,小数部分保留n个小数(四舍五入)

%c:%mc-表示字符占m个单位,右对齐(空格补位)。

%s:%ms-字符串占m个单位,右对齐(空格补位)。%m.ns-字符串占m个单位,且字符串显示n个字符。

%lf:是double类型,如果用%f输入,会导致输入错误。

%ld:是长整型数,在整数是长整型时,如果用%d输出,就会只取整型前几个数,导致输出错误。

 

 Part2: 验证性内容

ex2-3.cpp

初始源代码:

 

  #include <stdio.h>
  int main() {
      double a,b,c;
      scanf("%lf %lf %lf", &a, &b, &c);
      
      if(a<0 || b<0 || c<0)
          printf("不能构成三角形
");
      else if(a+b>c && a+c>b && b+c>a) {
          if(a==b && a==c)   
              printf("构成等边三角形
");
          else if(a==b || a==c || b==c)   
              printf("构成等腰三角形
");    
          else
              printf("构成一般三角形
");
      }
      else
          printf("不能构成三角形
");    
      return 0;
 } 

 

运行结果:

技术图片

 

 

 

技术图片

 

 技术图片

 

 

 技术图片

 

 

技术图片

 

也可替换成:

  #include <stdio.h>
  int main() {
      double a,b,c;
      scanf("%lf %lf %lf", &a, &b, &c);
      
     if(a<0 || b<0 || c<0)
          printf("不能构成三角形
");
      else if(a+b>c && a+c>b && b+c>a) {
          if(a==b || a==c||b==c)
          {if(a==b&&a==c)
          printf("构成等边三角形");
          else
          printf("构成等腰三角形"); 
         }else
          printf("构成一般三角形"); 
     }
      else
          printf("不能构成三角形
");  
      return 0;
 } 

输出结果不变。

 

ex2-4.cpp

初始源代码:

 #include <stdio.h>
 #include <stdlib.h>
 int main() {
     char choice;
     
     // 显示菜单 
     printf("输入0~9以内的数字,选择屏幕背景色前景色方案: 
");
     printf("1-	黑底绿色
");
     printf("2-	白底黑色
");
     printf("3-	蓝底白色
");
     printf("其它-	黑底白色(默认)
");
     printf("
请输入, 选择你想使用的屏幕配色方案:    ");
     
     // 要求用户从键盘输入0~9的数字,选择屏幕配色方案 
     choice = getchar();
     
     // 根据用户输入,设置屏幕配色方案 
     if (choice == 1) {
         system("color 02");
         printf("《黑客帝国》一类的影视剧常见这种屏幕色:)
"); 
     } 
        
     else if(choice == 2) {
         system("color f0");
         printf("大部分编辑器默认是这种配色:)
");    
     }
         
     else if(choice == 3) {
         system("color 1f");
         printf("这是机器蓝屏故障时的不讨喜色:)
");
     }
         
     else {
system("color 0f"); printf("控制台程序默认小黑窗:) "); } printf("programming is fun, just try@_@ "); return 0; }

运行结果:

技术图片

 

 技术图片

 

 技术图片

输入4~9:

 

 技术图片

 

 技术图片

 

 

  如果变量choice由char类型改成int类型:

应将源代码改为:

#include <stdio.h>
#include <stdlib.h>
int main() {
    int choice;
    
    // 显示菜单 
    printf("输入0~9以内的数字,选择屏幕背景色前景色方案: 
");
    printf("1-	黑底绿色
");
    printf("2-	白底黑色
");
    printf("3-	蓝底白色
");
    printf("其它-	黑底白色(默认)
");
    printf("
请输入, 选择你想使用的屏幕配色方案:    ");
    
    // 要求用户从键盘输入0~9的数字,选择屏幕配色方案 
    scanf("%d",&choice);
    
    // 根据用户输入,设置屏幕配色方案 
    if (choice == 1) {
        system("color 02");
        printf("《黑客帝国》一类的影视剧常见这种屏幕色:)
"); 
    } 
        
    else if(choice == 2) {
        system("color f0");
        printf("大部分编辑器默认是这种配色:)
");    
    }
        
    else if(choice == 3) {
        system("color 1f");
        printf("这是机器蓝屏故障时的不讨喜色:)
");
    }
        
    else {
        system("color 0f");
        printf("控制台程序默认小黑窗:)
");        
    }
        
        
    printf("programming is fun, just try@_@
");
    
    
    return 0;
} 

 

输出结果不变。

part3: 编程练习

1、从键盘上输入一个三位数以内的十进制整数,判断其是否满足正序、逆序相同。

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d",&a);    
    b=a/10+(a%10)*10;
    c=a/100+(a/10-(a/100)*10)*10+((a%100)%10)*100;

    if(a>=0&&a<10)
    printf("%d正序和逆序相同",a);
    else if(a==b||a==c)
    printf("%d正序和逆序相同",a);
    else
    printf("%d正序和逆序不相同",a);
    return 0;
}

结果:

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

2、 从键盘上输入年份和月份,计算该月有多少天

源代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int y,m,d,r;
    scanf("%d%d",&y,&m);
    if(y<=0||m<1||m>12)
    {
        printf("输入的数据错误!
");
        exit(0);
    }
    r=y%400==0||y%4==0&&y%100!=0;
    if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
    d=31;
    else if(m==4||m==6||m==9||m==11)
    d=30;
    else
    {d=28+r;}
    printf("%d年%d月的天数为:%d
",y,m,d);
    return 0;
}

输出结果:

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 3、从键盘输入一个百分制成绩(整型量),要求输出成绩等级:优秀、良好、中等、及格、不及格

源代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int x;
    scanf("%d",&x);
    if(x<0||x>100)
    {
        printf("分数不在有效区间内
");
        exit(0);
    }
    x=x/10;
    switch(x)
    {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:printf("不及格
");break;
        case 6:printf("及格
");break; 
        case 7:printf("中等
");break;
        case 8:printf("良好
");break;
        case 9:
        case 10:printf("优秀
");break; 
            
    }
    return 0;
}

运行结果:

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

技术图片

 

 #实验总结与体会

1、if()出错

2、switch用法时,忘加break;做截止。

3、#include<stdlib.h>

      ······

     if(x<0||x>100)
 {
  printf("分数不在有效区间内 ");
  exit(0);
 }

     ······

上面一段我在switch语句中想用default代替,结果发现不好代。

以上是关于实验二的主要内容,如果未能解决你的问题,请参考以下文章

JSP 设计教师与学生不同登陆界面(带验证码)

OpenGL基础学习之二代码基本结构

实验九:根据材料编程

为什么二代测序的原始数据中会出现Read重复现象?

二代身份证号码编码规则

使用 React 实验性中继片段:缺少属性 '"$fragmentRefs"'