part1:%d表示输入输出格式为整型,在需要以十进制整数输入或者输出数据时使用,常与int连用。例:scanf("%d",&a),指的是输入一个整数赋值给变量a;printf("%d\n",y)指的是按十进制整数输出y;

         %f表示输入输出格式为浮点数形式,在需要以浮点数形式输入或者输出数据时使用,常与float,double连用。例子与上面的%d相似,不再赘述;

          %c表示输入输出的形式为字符,在需要输入或者输出字符时使用,常与char连用。例子与上述相似,不再赘述;

         %e表示输出的形式为指数形式,在需要输出的数据以指数形式出现时使用,常与float,double连用。例子与上述相似,不再赘述。

         %s表示输出的形式为字符串,在需要输出字符串时使用,常与char连用。例子一般char定义一个数组a,数组a中连续存放字符串常量,printf中只需对a输出即可。

         %5d表示以十进制整数形式输入输出某个数据,并给予其五个宽度。①,当原数据不足5个宽度时,输入输出数据右对齐,左侧补零;②,当原数据超过5个宽度时,按原数据输入或者输出。

         %lf表示double的格式字符,用于格式化输入输出。当数据类型为double(双精度浮点类型)时,必须使用%lf。

         %.3f表示小数点后保留三位有效数字(四舍五入),小数后不足三位补0。

         %6.2f表示小数点后保留两位(四舍五入),并给予该数据六个宽度(小数点占一个宽度)。①,当取值后数据大于6个宽度时,按取值后原样输出;②,当取值后数据不足六个宽度,则数据右对齐,左边补空格。

part1:改错

#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;
} 

改错后的代码(第一个scanf处对a1,a2,a3缺少地址运算符&;最后一个scanf处,由于x为double类型,故应改为%lf)

part4:

#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:

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

part5:

#include<stdio.h>
int main(){
    char anwser;
    printf("请输入你的答案(A,B,C or D):");
    anwser=getchar();
    if(anwser==65) printf("binggo, you are right~");
    else printf("try again");
    return 0;
}

实验总结与体会:part1部分,这里一开始是看不懂的,什么%4d,%.4f之类的,后来上网查了一下,并且验证之后才得出上面的结果。补充一点的是%s,%5.3s表示去字符串的前三位字符,给与五个宽度。①,数据不足3位时,原样输出,给五个宽度,右对齐,补空格;②,若小数点前面的数小于小数点后面的数,则按小数点后的数取数据后原样输出。

part3部分,按照例子运行,没发现什么异常。

part4部分跟part3部分一样没有什么异常。如果没有break,那么从符合这个事件的语句的输出语句开始一直到结束的输出语句会全部输出。

坑:在写part5的时候,最初我是用switch语句写的,仿照书本P68页,例3.23,int anwser,并采用char函数(因为要输入字符),列出了事件case 65(因为是字符就想用ASCII码,因为直接case A,会出现报错,说A第一次被提出,即使前面int A都没用,也运行不了),改成这样后,运行倒是成了,但不论输入什么,结果都是try again,后来才想起来有个可以定义输入字符的函数getchar,然后仿照书本P57,例3.16(因为我觉得应该是anwser出了问题,这个例子也蛮符合这个程序要求的)写出了如上的代码,判断A,B,C,D也是采用ASCII码,直接输入A无法运行,报错跟之前一样,最后运行成功了。

附上错误截图:

,运行结果

第一份的错误就在A,要么用'A',要么用65,附上用65修改后的结果:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int anwser;
    printf("请输入你的答案(A,B,C or D):");
    scanf("%c",&anwser);
    if(anwser<65||anwser>68){
        printf("输入数据错误\n");
        exit(0);
    }
    switch(anwser){
        case 65:printf("binggo, you are right~");break;
        default:printf("try again`");break;
    }
    return 0;
    
} 

下午发的时候还运行不起来来着,晚上重试了下,反而又能运行了,

第二份,第三份,我发现是缺少格式化输入函数scanf导致直接蹦出结果的,(还有,将case后面改成'A'也能运行),附上修改后的结果:

#include<stdio.h>
int main(){
    char anwser;
        printf("请输入你的答案(A,B,C or D):");
    scanf("%c",&anwser);
    switch(anwser) {
        case 65:printf("binggo,you are right~");break;
        default:printf("try again");break;
    }
    return 0;
} 

运行结果没问题。

最后,我看了下实验2.pdf上那条switch的例子,照着写一下,也能正常运行:

#include<stdio.h>
int main(){
    int anwser;
        printf("请输入你的答案(A,B,C or D):");
    scanf("%c",&anwser);
    switch(anwser){
        case 65:printf ("binggo, you are right~");break;
        default:printf("try again");break;    
    }
    return 0;
}

 上面几个代码大同小异,总结:①在这个例题里面int anwser与char anwser可以互换,运行结果都正确;②switch函数与if函数可以互换,结果也没说什么区别;③scanf("%c",anwser)与anwser=getchar()可以互换,结果也一样;④最大的收获可能就是在需要表示A时,要么用'A',要么用SCAII数值65,两者都可以。

可能是下午做的有点急躁,导致没能注意到字符的输出问题,现在想想感觉之前怎么也不该遇到那么多问题啊,这么多种组合都能正常运行。

附上评阅的三份博客页面地址:

https://www.cnblogs.com/plutocharon/p/10623854.html;

https://www.cnblogs.com/ssyxs/p/10601509.html;

https://www.cnblogs.com/QYAS/p/10617792.html。

posted on 2019-04-01 17:55  新世纪福音战士  阅读(308)  评论(1编辑  收藏  举报