实验二

Part 1: 格式化输出函数printf()和格式化输入函数scanf():

  • 观察运行结果

转换说明及其打印的输出效果:

%d 按有符号十进制整数输出
%f 按十进制浮点数输出
%c 按字符型输出
%e 按浮点型指数形式输出
%s 按字符串输出
%o 按无符号八进制整数输出
%x 按无符号十六进制整数输出

关于数字:

%5d 输出数据长度为5,若输出的数据长度大于5,则按实际输出。

%lf 在d,o,x,u前,指定输出精度为long型;在e,f,g前,制定输出精度为double。

%.3f 对实数,指定小数点后3位数,四舍五入。对字符串,指定实际的输出位数。

%6.2f 输出数据长度为6,指定小数点后两位。

在输入数据为double类型是,要使用格式控制符%lf输出;输入数据为float类型时,要使用格式控制符%f输出。

  • 查找错误

修改结果:

#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("%lf,%lf\n",x,y);
    return 0;
} 

运行结果:

Part 4: switch语句体验练习:

源代码:

#include <stdio.h>
int main() {
    int level;
    printf("输入现在的状态等级(1-5):  ");
    scanf("%d",&level);
    switch(level) {
        case 1: printf("high翻了:)\n"); break;
        case 2: printf("low爆了:(\n"); break;
        default: printf("一言难尽,无法概括。。。\n");
    }
    return 0;
} 

 

去除break;后:

Part 5: 简单编程练习:

要求:用户从键盘输入一个答案选项(A,B,C,D之一),如果用户答案是'A',则输出提示信息"Binggo, you are right~",否则输出提示信息"try again~"。

ps:对于上述的要求,我个人认为是不太完善的。在日常应用中,很多时候用户在作答题目时并不一定会打开大写锁定,导致其作答的答案即使就是‘A',程序也会显示回答错误。所以我在这里擅自添加了一个“invalid answer,try again~"的提示选项,当用户的答案不是“A,B,C or D”时,程序便会提醒用户答案无效。

源代码:

#include <stdio.h>
int main(){
    int answer;
    printf("请输入你的答案(A,B,C or D):"); 
    scanf("%c",&answer);
    if(answer!='A'&&answer!='B'&&answer!='C'&&answer!='D'){
        printf("invalid answer,try again~\n");
    }
    else
    switch(answer){
        case 'A':printf("Binggo, you are right~\n");break;
        default :printf("try again~\n");break;
    }
    return 0;
}

运行结果:

Part 6: 拓展练习:

  • 要求:取一个无符号的十进制整数中的所有奇数数字,按原来的顺序组成一个新的数。

源代码:

#include <stdio.h>
int main(){
    int a,b=0,c,number,result=0;
    printf("Please input a number:");
    scanf("%d",&number);
    while(number!=0){
        a=number%10;
        number=number/10;
        switch(a%2){
            case 1:b=b*10+a;break;
            default:break;
        }
    }
    while(b!=0){
        c=b%10;
        b=b/10;
        result=result*10+c;
    }
    printf("%d",result);
    return 0;
}

运行结果:

  • 要求:输入一个正整数,求它的所有素数因子。

源代码:

#include<stdio.h>
#include<math.h>
int main(){
    int a=1,b,number;
    printf("Please input a number:");
    scanf("%d",&number);
    do{
        switch(number%a){
            case 0:for(b=2;b<=sqrt(a);b++)
                if(a%b==0)break;
                if(b>sqrt(a)&&a>1){
                    printf("%d ",a);
                }break;
            default:break;
        }
        a++;
    }while(a<=number);
    return 0;
}

运行结果:

实验总结与体会:

  • part 1部分,我们详细了解了不同的转换说明及其输出效果。知识点多且杂,在记忆背诵的同时更要在实践中加深对其的理解;后面的找错纠正中,两个错误更是我们平时练习的常见问题,须牢记在心。

          再次强调:对于printf(),%f可表示单精度和双精度的任意一种;

                             对于scanf(),%f表示双精度,%fl表示单精度(通过指针的存储方向不同);

  • part 2-5部分,主要是对几种函数和语句的熟悉和理解。其中值得我们注意的是:

           1、对于putchar()和getchar()而言,它们只处理字符(单个),而printf()和scanf()为标准输入\输出函数,功能更加齐全;

           2、对于switch语句,如果一个进入其中一个case而没有break,则程序会自动进入下一个case运行,直到出现break或运行完所有case;

  • part 6部分来自于书后练习3,几乎使用了这次课所学的全部知识。

          p.s.由于全部是我独立编写的,与书上的答案思路有所不同。若有问题,敬请指正,感激不尽!

评论地址:

https://www.cnblogs.com/NyaNyaGoose/p/10640071.html

https://www.cnblogs.com/zhaoyingshan/p/10621191.html

https://www.cnblogs.com/linmuqiao/p/10596479.html

posted on 2019-04-01 17:10  纪源  阅读(197)  评论(3编辑  收藏  举报

导航