格式化输入输出和分支语句

Part 1

一、格式化输出函数printf()

/*《C语言程序设计教程学习指导》p118 实验内容(1)
这是一个常用格式控制符使用示例
运行程序,结合运行结果,对照每一行printf()中的格式控制符,理解其功能和用法*/
#include <stdio.h>
int main() {
    int x = 1234;
    float f = 123.456;
    double m = 123.456;
    char ch = 'a';
    char a[] = "Hello, world!";// 定义一个数组a,数组中连续存放了字符串常量hello,world!
    int y = 3, z = 4;
    printf("%d %d\n", y, z);
    printf("y=%d, z=%d\n", y, z);
    printf("%8d,%2d\n", x, x);
    printf("%f, %8f, %8.1f, %0.2f, %.2e\n", f, f, f, f, f);
    printf("%lf\n", m);
    printf("%3c\n", ch);
    printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n", a, a, a, a, a);
    return 0;
}

简单分析:

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

②修饰符

二、格式化输入函数scanf() 

/*C语言程序设计教程学习指导》p119 实验内容(2)
这是一个格式化输入输出函数及格式符使用练习
找出两处错误,修改并运行程序
为a1,a2,a3,c1,c2,c3,x,y输入数据,使得:
a1=1,a2=2,a3=3,c1='a',c2='b',c3='c', x=1.5, y=2.5*/
#include <stdio.h>
int main() {
    double x, y;
    char c1, c2, c3;
    int a1, a2, a3;
    scanf_s("%d%d%d", &a1, &a2, &a3);
    printf("%d,%d,%d\n", a1, a2, a3);
    scanf_s("%c%c%c", &c1, &c2, &c3);
    printf("%c%c%c\n", c1, c2, c3);
    scanf_s("%lf,%lf", &x, &y);
    printf("%f,%lf\n", x, y);
    return 0;
}

简单分析:本程序中加了下划线并加粗的便是修改的的地方,涉及到了scanf()中的利用&读取地址 和 精度问题。

其中&有点牵扯到了以后要学的 指针 问题,但就目前所学来说,记住以下两点即可:

  1. 如果用scanf()读取基本变量类型的值,在变量名前加上一个&

         2. 如果用scanf()把字符串读入字符数组中,不要使用&

!  !  !  !  !  !  !  !

对于printf(),%f通杀单精度和双精度

对于scanf(),%f和%lf才有区别:

scanf,它接受指针,通过指针向float存储和向double存储大不一样

double对应%lf
float对应%f

Part 2

三、单个字符输出函数putchar()

/*putchar()可以用于在屏幕上输出单个字符
括号中要给出想要输出的字符参数,参数可以是字符型常量/变量/表达式 
如果使用这个函数,需要在程序前面加上#include <stdio.h> */
#include <stdio.h>
int main() {
    char ch;
    ch = 'A';
    putchar(ch);      // 参数ch是字符型变量 
    putchar(ch+32); // 参数ch+32是字符型表达式 
    putchar('\x41'); // 参数是字符型常量,是用十六进制表示的转义字符 
    putchar('\n'); // 参数\n是字符型常量,是转义字符,表示换行 
    return 0;
}

简单分析:前三个putchar()即是通过运行程序来输出三个字符,并且我们可以看到输出A,a的不同表示形式。

四、单个字符输入函数getchar()  

/*getchar()可以用于从键盘上输入单个字符
括号中不需要参数
如果输入成功,函数会返回用户从键盘输入的字符
如果使用这个函数,需要在程序前面加上#include <stdio.h> */
#include <stdio.h>
int main() {
    char ch;
    ch = getchar();        // 用户从键盘输入字符,如果输入成功,输入的字符被赋值给ch 
    putchar(ch);        // 使用putchar()输出字符变量ch中存放的字符 
    printf("%c", ch);    // 使用printf()和格式符%c输出单个字符 
    return 0;
}

简单分析:本程序利用两种方式来输出字符,这是一种比较,我们可以从中体会到一种算法优越性。

即——由于getchar()和putchar()只处理字符,所以他们比更通用的scanf()和printf()函数更快,更简洁!

注意getchar()和putchar()不需要转化说明,因为他们只处理字符。且这两个函数通常定义在stdio.h头文件中。

Part 3

五、if语句

①单分支if语句

/* 单分支if语句使用示例
从键盘上输入两个整数分别给a和b
如果a>b,就交换,使得a里面存放小的数,b里面存放大的数 */
#include <stdio.h>
int main() {
    int a, b;
    int t;   // 用于交换a和b时,作为中间变量 
    printf("输入两个整数给a和b:\n");
    scanf_s("%d%d", &a, &b);
    if (a > b) {
        t = a;
        a = b;
        b = t;
    }
    printf("a=%d, b=%d\n", a, b);
    return 0;
}

②双分支if语句

/*二分支if语句使用示例
从键盘上输入一个整数给n,判断n是奇数还是偶数*/
#include <stdio.h>
int main() {
    int n;
    printf("输入一个整数给n:\n");
    scanf_s("%d", &n);
    if (n % 2)
        printf("n是奇数.\n");
    else
        printf("n是偶数.\n");
    return 0;
}

③多分支if语句

/*多分支if语句示例
输入1,2,3...的不同整数,显示不同提示信息*/
#include <stdio.h>
int main() {
    int level;
    printf("输入现在状态等级(1-5):  ");
    scanf_s("%d", &level);
    if (level == 1)
        printf("high翻了:)\n");
    else if (level == 2)
        printf("low爆了:(\n");
    else
        printf("一言难尽,无法概括。。。\n");
    return 0;
}

Part 4

六、switch语句

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

PS:以上是正常程序,下面分别是对break语句作用进行摸索:

①只去掉第一个break语句

②只去掉第二个break语句

③同时去掉两个break语句

Part 5

七、简单编程小练习

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

①利用if语句

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

②利用switch语句

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

Part 6

八、实验总结与体会

①对于printf()和scanf(),最重要的是要记清楚他们的转换说明和修饰符!!!具体的详见Part 1

②对于if语句:

 使用测试条件控制程序是否执行条件后面的一条简单语句或复合句。如果测试表达式的值是非零值,则执行语句;若值是零,则不执行语句。

③对于switch语句:

可以在一系列以整数作为标签的语句中进行选择。如果紧跟在switch关键字后的测试条件的整数值与某标签匹配,程序就转至执行匹配的标签语句,然后在遇到break之前,继续执行标签语句后的语句。

④一处疑惑:

这里是直接利用老师给的源代码运行的,机房可以正常运行,但是在VS2017发现有错误,经过网上查阅,大多数建议定义入口点为WinMainCRTStartup,但实际操作无效果

之后发现新建文件时,没有给出扩展文件名.cpp。之后重命名,竟然成功运行??!!

望各位大佬帮忙分析分析_|~|○   

orz→小膜拜   OTZ→大膜拜   囧rz→ 囧膜拜   STO→反膜拜

以上便是我的本次作业,感谢阅读~

猜你喜欢

转载自www.cnblogs.com/gundongtiao/p/10632158.html