C语言 第二章 输入输出

一、计算机的交互与信息显示

(一)计算机的交互

f03758e2fee54847afc34c3ef33b4081.jpeg

1.程序结构:程序结构一般可分为输入、处理和输出三个部分,简称为IPO。

6b07114b7cd749c1b570c079869af0ff.jpeg

2.输入输出的多样性

·程序的输入输出方式多样性

如:鼠标点击、文字输入。

如:信息显示、声音的传播。

·新技术的发展,不断拓展着程序的交互方式

如:传感器的使用

·C语言中提供了丰富的输入输出函数去实现交互

(二)信息的显示-输出

·程序中的输出是将程序的处理信息传输到外部设备,比如显示器、打印机等。信息的显示是程序常用的输出方式

·信息显示的实现——标准输出函数printf函数

-将变量和信息显示在显示器上

-可输出文本、数值、符号等信息

-按照要求的格式,对数据信息进行特殊格式的显示

·头文件——stdio.h

#include<stdio.h>

输出固定的内容

·printf(字符串)

转义字符

657f4996f96849f7a4ab8a43bd04292b.jpeg

例1:

(源代码)

#include<stdio.h>
int main(void)
{
    printf("\t\t***************************************\n");
    printf("\t\t\2\2 \t请问您来自哪里?    \2\2\n");
    printf("\t\t\2\2 \t我来自遥远的中国。   \2\2\n");
    printf("\t\t\2\2 \t一个富强民主的国家。   \2\2\n");
    printf("\t\t***************************************\n");
    return 0;
}

(运行结果截图)

c181254b8ce944f7aa4546119e9b056a.png

二、程序输入输出

(一)基本概念

数据类型:决定数据以一定的方式存储到计算机中。

存储的地址:确定数据的区域所在的位置。

变量:代表了一个存储单元,其中的值是可变的,故称为变量。

变量名:变量的名称。

基本数据类型:字符型、整型和实型

其定义的关键字:char、int、float、double

变量名                  变量地址

number;              &number;

id;                        &id;

score;                  &score;

(二)程序的输入

·程序的输入即从外界传输信息和数值给程序,并存入内存。

·输入设备来源有很多,如标准设备键盘、传感器设备。

·输入方式也有很多,如手动键盘输入,从文件中获取。

·程序输入的实现:

-标准输入函数——scanf函数

标准输入函数——scanf函数

·功能:从标准输入设备键盘向程序输入一个或若干个程序。

·语法格式:scanf("控制字符串",变量地址列表);

-控制字符串:需要由""括起来。由普通字符(文本字符和空格)、格式字符和附加说明字符组成。

-逗号分隔的若干接收数据的变量地址。

有符号的十进制整型数的输入

1.(源代码)

#include<stdio.h>
int main(void)
{
    int number;
    scanf("%d",&number);//格式占位符%可以和字母配合使用,用来表示某些特定数据类型的输入;
    printf("%d",number);
    return 0;
}

(运行结果截图)

6752979e76a74a9384fb1642fc2533b6.png

2.(源代码)

#include<stdio.h>
int main(void)
{
    int number;
    scanf("number=%d",&number);//控制串字符中普通字符原样输入。
    printf("%d",number);
    return 0;
}

(运行结果截图)

df68d4dd912b40b68cf8020f53f13be4.png

实型数输入

(源代码)

#include<stdio.h>
int main(void)
{
    float number;
    scanf("%f",&number);//随着数据类型的变化,格式字符也应随之变化
    printf("%f",number);
    return 0;
}

(运行结果截图)

11f5e39f122d436f992ba856aa533171.png

单个字符输入

(源代码)

#include<stdio.h>
int main(void)
{
    char number;
    scanf("%c",&number);//随着数据类型的变化,格式字符也应随之变化
    printf("%c",number);
    return 0;
}

(运行结果截图)

daadc62177f0412eb607fa0db371d7b2.png

单个字符输入函数-getchar()

(源代码)

#include<stdio.h>
int main(void)
{
    char number;
    number=getchar();//字符输入函数
    printf("%c",number);
    return 0;
}

(运行结果截图)

fb94c96d52de41fc8cdebb3fdc5ad0c0.png

·用于从键盘读取输入数据,一次读一个字符。

·字符输入getchar()函数;

·使用方法:ch=getchar();

·函数括号内没有参数;

·获取输入内存缓冲区中的第一个字符。

其他格式字符表

bce538affadc493aa5c3800108c43ca4.jpeg

多个数据连续输入

(源代码)

#include<stdio.h>
int main(void)
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    return 0;
}

(运行结果截图)

3a62a4243dd743128de7d05561547109.png

注:输入数据时,在两个数据之间默认的分隔符是空格、Enter键、Tab键。

·要将字符a,b,c赋值给变量c1,c2,c3:scanf("%c%c%c,&c1,&c2,&c3");

运行时输入:

-abc 回车  对

-a空格b空格c空格 回车   错

b06f680d7ee547b7a35f8961a168c568.png

注:字符输入时注意回车、空格等作为有效字符。

·对于scanf("%d%c%f",&a,&b,&c);

若输入:1234a123o.26 回车

723a09224695445a936e4dfb2f36c2a4.png

输入中的问题

·如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符

·在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入

·在输入数据时,遇以下情况时该数据认为结束:

-遇空格,或按“回车”或“跳格”(tab)键

-按指定的宽度结束,如“%3d”,只取3列

-遇非法输入

(三)程序的输出

·将输出项,以某种格式显示在标准输出设备控制台

·语法格式:printf("控制字符串(control string)",输出项参数列表(argument list));

-控制字符串(control string):需要由“”括起来。由普通字符(文本字符和空格)、格式命令和非打印字符组成。

-输出项参数列表(argument list):格式命令的符号应与输出项参数列表在数量、类型和顺序上匹配。

字符串输出

1.字符串常量

printf("中国");

printf("%s",中国);

2.宏定义

#define Name"中国"

        printf("%s",Name);

整型输出

printf("%d",i);  //%:引导符  d:格式说明   i:输出项

单个字符输出

·C语言中输出函数的输出项可以为常量、变量、表达式、函数调用。

printf("%c",'\2');

printf("%c",ch);

printf("%c",ch+2);

putchar(ch)

putchar('\n')

多个信息在同一个printf中输出

printf("格式控制串",输出项1,输出项2);

91a4153a5e5041c78793be1a67363513.png

常见错误

int i=33;char ch=b;

例如:printf("i=%d,c=%c\n",i);  //输出项个数应该与格式控制字符个数保持一致

printf("i=%f,c=%c\n",i,ch);  //输出项数据类型应该与格式控制字符保持一致

三.格式化输入输出

(一)程序的格式化输入输出

·格式化输出:通过设置输出格式串,达到不同格式内容的显示。比如:信息对齐、显示宽度设置、精度的控制。

·格式化输入:通过设置输入格式串,达到更复杂的输入要求。比如:数据的有效控制。

·格式控制附加符

(二)格式化输出

c792ada3eb5042768ae825b113be1ea7.jpeg

注:printf中默认的输出对齐方式时右对齐

案例

1.(源代码)

#include<stdio.h>
int main(void)
{
    printf("%d,%c,%f\n",12,'a',123.45);
    printf("%d,%c,%f\n",1234,'a',1234.5);
    printf("%d,%c,%f\n",12345,'a',12345.67);
    return 0;
}

(运行结果截图)

d3fe4961a6254b6fb08d25cf5b8608c9.png

2.(源代码)

#include<stdio.h>
int main(void)
{
    printf("%-8d|%-8c|%-8.2f\n",12,'a',123.45);
    printf("%-8d|%-8c|%-8.2f\n",1234,'a',1234.5);
    printf("%-8d|%-8c|%-8.2f\n",12345,'a',12345.67);
    return 0;
}

(运行结果截图)

093cb9dedd8c46dfa5a0cff724f93bd3.png

(三)格式化输入

f441afbf2aa8447a9da25ccdb3b0807e.jpeg

a577b9c5b42e46ea9527447c4a9abe0e.jpeg

案例-实现数据输入有效位的截取

(源代码)

#include<stdio.h>
int main()
{
    int b;
    scanf("%2d",&b);//读取输入的前两位,赋值给变量b
    printf("%d\n",b);
    return 0;
}

(运行结果截图)

0ed2de58b0bf4edfaba5e5eab4df6c3a.png

案例-输入数据的跳过

(源代码)

#include<stdio.h>
int main()
{
    int a,b;
    scanf("%2d%*3d%2d",&a,&b);//第二个格式控制串当中对应的输入项,在读入后不赋值给相应的变量
    printf("a=%d,b=%d\n",a,b);
    return 0;
}

(运行结果截图)

141baaffeaca4dd8889e66eea16ddddf.png

四.输入输出多样化(文件)

输入输出设计

-设计输入的来源,即输入介质

-设计输出的去向,即输出介质

-确定输入内容及格式

-确定输出内容及格式

(一)C文件概述

所谓“文件”是一组相关数据的有序集合。每一个文件都有唯一的文件名。

文件的分类:在C语言中,文件被看成是由一个一个的字符或字节组成的。根据数据的组织形式,文件可分为文本文件和二进制文件两种。

说明:1.文本文件又被称为ASCII文件,文本文件在磁盘中存放时每个字符对应一个字节,用于存放其对应的ASCII码。文本文件可在屏幕上按字符显示。

2.二进制文件是将数据转换成二进制形式后存储起来的文件。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。

例1:如int型数10000

内部存储形式:0010011100010000

ASCII形式:0011000100110000001100000011000000110000

(文本文件特点:存储量大、速度慢、便于对字符操作)

二进制形式:0010011100010000

(二进制文件特点:存储量小、速度快、便于存放中间结果)

操作文件的一般步骤:

打开文件——>读写文件——>关闭文件

C语言的输入输出函数库中提供了大量的函数,用于完成对数据文件的建立、数据的读写、数据的追加等操作。

在程序中调用这些函数时,必须先用include命令包含stdio.h文件。

(二)文件指针

对文件进行操作,需要使用文件指针。

文件指针是一种结构体类型变量,C编译系统已将结构体定义好,并命名FILE。

FILE存放了文件名、文件状态标志及缓冲区大小等信息。

FILE是一个类型名,它已经在头文件stdio.h中声明。

文件指针是用来指向该文件的指针。

定义说明文件指针的一般形式为:FILE *指针变量标识符;

例如:FILE *fp;

(三)文件的打开

·打开函数fopen(),其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);

-“文件指针名”必须是被说明为FILE类型的指针变量。

 “文件名”是被打开文件的文件名。

-“文件名”是字符串常量或字符数组。

-“使用文件方式”是指文件的类型和操作要求。

例如:FILE *fp;

fp=fopen("c:\\tc\\source.txt",'r');//打开C盘下面的tc文件夹下面的source.txt的文件,并且以读的形式打开

文件的打开方式

6f5ffcd6752243b58ad5dd7c88fb91e0.jpeg

说明:

(1)用'r'方式打开的文件,只能用于输入。'r'方式只能打开一个已经存在的文件。

(2)用'w'的方式打开的文件,只能用于输出。如果指定的文件不存在,则新建一个文件。如果文件存在,则把原来的文件删除,再重新建立一个空白的文件。

(3)用'a'方式打开的文件,也只能用于输出。但它只能打开存在的文件,并保留该文件原有的数据,可以在原文件的末尾添加新的数据。

(4)打开方式带上'b'表示是对二进制文件进行操作。带上'+'表示既可以读,又可以写,而对待文件存在与否的不同处理则按照'r'、'w'、'a'各自的规定。

72b23f3563d24f0e8a91e844bc01ab85.jpeg

(四)文件关闭

·作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针

·函数原型:int fclose(FILE *fp)

·功能:关闭fp指向的文件

·返回值:正常关闭为0;出错时,非0

(五)文件的读写

·在C语言中提供了多种文件读写的函数

·字符读写函数:fgetc和fputc

·字符串读写函数:fgets和fputs

·数据块读写函数:freed和fwrite

·格式化读写函数:fscanf和fprintf

·使用以上函数都要求包含头文件stdio.h

字符写函数fputc()

·函数原型:int fputc(int ch,FILE *fp)

·功能:把一字节代码ch写入fp指向的文件中

 ·返回值:正常执行,返回ch;出错为EOF(EOF常量所表述的都是文件的结束标志,其值=-1)

字符读函数fgetc()

·一般形式为:字符变量=fgetc(FILE *fp);

·功能:是从指定的文件中读一个字符

·说明:在fgetc函数调用中,读取的文件必须是以读或读写方式打开的,读取成功后返回文件当前位置的一个字符;读错误时返回EOF

案例:

283fd7600a71415cb7264b10bb8e84ce.jpeg

格式化输入函数fscanf()

·一般形式为:fscanf(文件指针,格式控制符,输入项表)

·功能:按照“格式控制串”所指定的输入格式,从指定文件中读出数据,然后再按照输入项地址表列的顺序,存入到相应的存储单元中。

例如:fscanf(fp,"%d",&num);

格式化输出函数fprintf()

·一般形式为:fprintf(文件指针,格式控制符,输出项表)

·功能:把输出项表中的项,按照“格式控制串”的格式写入到指定的文件中去。

例如:fprintf(fp,"%d%c",num,c);

fscanffprintf函数与scanfprintf函数的区别:读写对象不同

fscanf和fprintf函数:读写对象为磁盘文件

scanf和printf函数:读写对象为键盘和显示器,也称之为标准的输入输出设备文件

标准输入设备文件的文件名:stdin

标准输出设备文件的文件名:stdout

案例:学生成绩文件的操作

要求从myfile.txt文件中读取每个学生的三门课成绩,并输出显示。

92b34303d54a49d0b4ac0b6b17b3ea9d.jpeg

(源代码)

#include<stdio.h>
#include<stdlib.h>
int main()
{
    FILE *fp;
    int eng,china,math;
    if(fp=fopen("myfile.txt",'r')==NULL)
    {
        printf("Cannot open file the file exit!");
        exit(0); //退出程序
    }    
    while(!feof(fp))
    {
        fscanf(fp,"%d%d%d\n",&eng,&china,&math);
        printf("%4d%4d%4d\n",eng,china,math);
    }
    return 0;
}

(运行结果截图)

72c940ade94e47629efb1f73dd48a1f9.jpeg

该文章属于个人课后学习笔记,内容来源于知到智慧树共享课-C语言程序设计(上海电力大学)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值