精华内容
下载资源
问答
  • c语言终止符如何输入

    千次阅读 2018-08-01 22:44:54
    > ...这是c程序设计语言一书中统计空格、制表和换行程序,初学遇到EOF输入的问题,不知该如何结束程序,方法如下: windows 系统中 在新的一行输入 Ctrl+z Unix/Linux系统中 输入Ctrl+d
    > #include<stdio.h>
    > main()
    /*统计空格、制表符与换行符个数*/
    {
        int c, n1, n2, n3;
        n1 = 0;
        n2 = 0;
        n3 = 0;
        while ((c=getchar()) != EOF)
        { 
            if (c == ' ')
                ++n1;
            if (c == '\t')
                ++n2;
            if (c == '\n')
                ++n3;
        }
        printf("%d %d %d\n", n1, n2, n3);
    }

    这是c程序设计语言一书中统计空格、制表符和换行符的程序,初学遇到EOF输入的问题,不知该如何结束程序,方法如下:
    windows 系统中 在新的一行输入 Ctrl+z
    Unix/Linux系统中 输入Ctrl+d

    展开全文
  • 文章目录20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises28P330P796P314P338P339P340 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises28 P330 测试...

    20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises28

    P330

    测试文件内容,文件名:Test.txt

    /*      stdlib.h
            Definitions for common types, variables, and functions.
            Copyright (c) Borland International 1987,1988
            All Rights Reserved.
    */
    char   *_Cdecl ltoa     (long vaLue, char *string, int radix);
    int     _Cdecl putenv   (const char *name);
    unsigned _Cdecl _rotl   (unsigned value, int count);
    unsigned _Cdecl _rotr   (unsigned value, int count);
    void    _Cdecl swab     (char *from, char *to, int nbytes);
    char   *_Cdecl ultoa    (unsigned long kvAluE, char *string, int radix);
    

    题目要求:

    在这里插入图片描述

    解答程序:

    /* 
    从键盘输入一个文本文件的文件名(约定:字符数≤127字节,可含路径),再在屏幕上显示该文件的内容。注意,对于文件中的字符*,在屏幕上改为显示字符@。
      单击此处下载程序运行时测试用的文件Test.txt。
    编程可用素材:
    printf("input the file's name: ");
    printf("\nfile open error!");
    printf("------------------------File Begin:----------------------\n");
    printf("\n------------------------ File End. ----------------------\n");
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define N 128
    
    int main(void)
    {
        FILE *fp;
        char myPath[N];
        char ch;
    
        printf("input the file's name: ");
        gets(myPath);
    
        fp = fopen(myPath, "r");
        if (fp == NULL)
        {
            printf("\nfile open error!");
            goto ERROR;
        }
        printf("------------------------File Begin:----------------------\n");
        // read file char by char
        ch = fgetc(fp);
        while(!feof(fp))
        {
            if (ch == '*')
            {
                ch = '@';
            }
            putchar(ch);
            ch = fgetc(fp);
        }
        printf("\n------------------------ File End. ----------------------\n");
        
    
    ERROR:
        if (fp != NULL)
        {
            fclose(fp);
        }
    
        return 0;
    }
    

    P796

    题目要求:

    在这里插入图片描述

    解答程序:

    /* 
    编写一程序P796.C实现以下功能
      在磁盘上新建一个文件Test.txt,将从键盘读入的多个字符存储到该文件中,要求如下:
      (1)若输入的字符中有小写字母,则应先将其转换为大写后再存入。
      (2)输入!表示输入结束且!不存入文件中。
      (3)当文件创建失败或向文件写入字符时出错,应显示指定的出错信息并终止程序的执行。
      (4)程序的返回值(即由main函数return的值和程序使用exit终止运行时返回的值,也称退出代码)规定为:
        ①运行正常返回0 ②文件创建失败返回1 ③向文件写入字符时出错返回2
      编程可用素材:
    printf("\nCreate file error!\n");
    printf("Input chars: ");
    printf("\nWriting file error!\n");
      程序的运行效果应类似地如图1所示,文件Test.txt的内容应类似地如图2所示。图1中的“Input chars: ”后面的内容系从键盘输入。
    
    Input chars: ok?
    It is easy?
    
    6789235*()*&@#you
    hi!
     */
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
        FILE *fp = NULL;    // 首先置空,防止野指针
        char ch;
    
        fp = fopen("Test.txt", "w");
        if (fp == NULL)
        {
            printf("\nCreate file error!\n");
            exit(1);
        }
    
        printf("Input chars: ");
        // while ((ch = getchar()) != '!')
        while (scanf("%c",&ch)!=EOF) // 从控制台读入字符
        {
            if (ch =='!')
            {
                break;
            }        
            if (ch>='a' && ch<='z')
            {
                ch = ch - 32;
            }
            // if (fputc(ch,fp) == EOF)
            if (fprintf(fp,"%c",ch) == EOF) // 在文本文件中输出
            {
                printf("\nWriting file error!\n");
                if (fp!= NULL)
                {
                    fclose(fp); // 防止意外出错时,忘了关闭文件资源
                    fp = NULL;  // 防止关闭时出意外,置空,防止野指针
                }
                exit(2);
            }
        }
        
    
        fclose(fp);
        fp = NULL;      //最后置空,防止野指针
    
        return 0;
    }
    

    运行后的产生test.txt文件内容参考如下:

    OK?
    IT IS EASY?
    
    6789235*()*&@#YOU
    HI
    

    P314

    参考测试文件的内容sp.txt

    xuebi da 6.00 345
    nongfuSQxianchengduo zhongxingA 4.392 57398
    xuebi xiao 2.004 4567
    xuebi da 6.003 456
    

    题目要求:

    在这里插入图片描述

    解答程序:

    /* 
    编写一程序P314.C实现以下功能
      有一存储很多商品数据(每件商品的属性先后包括:品名、规格、单价(有小数位)、数量,数据的最长长度分别为20、10、6、5,在文件中以空格为分隔,
    每个商品的数据占一行)的文本文件,从键盘输入某种商品的品名,要求在文件中查找有无相应品名商品(可能有多条记录或没有),若有则在屏幕上显示出相应
    的商品的品名、规格、数量、单价(显示时,品名、规格、数量、单价之间使用逗号(,)作分隔,单价显示时只显示2位小数),若无则显示没有相应品名的商品。
      单击此处下载程序运行时测试用的商品数据文件sp.txt并保存到程序P314.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("Please input shang pin pin ming:");
    printf("\ncha zhao qing kuang:\n");
    printf("mei you shang pin :%s",inputName);
      程序的运行效果应类似地如图1和图2所示,
    图1中的Please input shang pin pin ming:xuebi中的xuebi和
    图2中的Please input shang pin pin ming:kele中的kele是从键盘输入的内容。
     */
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    
    int main(void)
    {
        // 品名、规格、单价(有小数位 单价显示时只显示2位小数)、数量,数据的最长长度分别为20、10、6、5
        char name[21];
        char inputName[21];
        char size[11];
        float price;
        int count;
        FILE *fp;
        int flag = 0;
    
        if ((fp=fopen("sp.txt","r"))==NULL)
        {
            printf("read file error! \n");
            exit(1);
        }
        printf("Please input shang pin pin ming:");
        gets(inputName);
    
        // 边读文件边查找输出
        printf("\ncha zhao qing kuang:\n");
        // while(!feof(fp))     // 教训:如果用这个判断,则会最后的结束符再读一次,循环会多做一次,就出错了
        while(fscanf(fp, "%s%s%f%d", name,size,&price,&count) != EOF)
        {
            // fscanf(fp, "%s%s%f%d", name,size,&price,&count);
            if (strcmp(name,inputName)==0)
            {
                flag = 1;
                printf("%s,%s,%d,%.2f\n", name, size, count, price);
            }       
        }
        if (flag==0)
        {
            printf("mei you shang pin :%s",inputName);
        }
        
    
        fclose(fp);
        fp = NULL;
    
        return 0;
    }
    

    P338

    测试文件内容xscj.txt

    2007033964 杨志刚毅 男 计算机文化基础 53
    2007021867 唐露希 女 微积分I 63
    2007033964 杨志刚毅 男 微积分I 26
    2007072283 李田 男 C语言程序设计 22
    2007051538 王坤焱 女 微积分I 0
    2007073425 明庆波 男 C语言程序设计 72
    2007021536 何亚东 男 C语言程序设计 93
    2007033964 杨志刚毅 男 C语言程序设计 90
    2007021867 唐露希 女 计算机文化基础 62
    2007052372 段卢兵 男 微积分I 51
    2007021867 唐露希 女 C语言程序设计 89
    2007021536 何亚东 男 微积分I 0
    2007073425 明庆波 男 微积分I 50
    2007021536 何亚东 男 计算机文化基础 61
    
    
    

    题目要求:

    在这里插入图片描述

    解答程序:

    /* 
    编写一程序P338.C实现以下功能
      有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)。
    从键盘输入某门课程的名称,要求在文件中查找有无相应的课程(可能有多条记录或没有),有则计算并输出该课程的选课人数与平均成绩,无则报告没有。
      单击此处下载程序运行时测试用的学生成绩文件xscj.txt并保存到程序P338.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("请输入要计算平均成绩的课程名称:");
    printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
    printf("\n计算结果为:\n");
    printf("文件中没有名称为“…”的课程\n"…);
    printf("课程“…”有 … 人选学,平均成绩为…);
      程序的运行效果应严格地如图1、图2所示,图中的红色部分是从键盘输入的内容。
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
        FILE *fp;
        // 学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)
        char num[11];
        char name[9];
        char sex[3];
        char inputName[15];
        char className[15];
        int score;
    
        int sum = 0;
        int count = 0;
        float aver;
        int flag = 0;
    
        fp = fopen("xscj.txt", "r");
        if (fp==NULL)
        {
            printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
            exit(1);
        }
    
        printf("请输入要计算平均成绩的课程名称:");
        gets(inputName);
    
        printf("\n计算结果为:\n");
    
        /* 
            教训:
                1. 这里使用格式化读文件
                2. 用什么方式读,就用什么方式判断文件结尾
                3. 一般就用读或是写函数的返回值来进行判断
                4. 读写有异常或出错时,也可以捕获后来处理,但一般不会有这样的要求。
            本题:
                一定要使用fscanf的返回值来判断是否读到了文件末尾,如果用feof(fp),会多读一次,就会把最后一条记录多处理一次,结果就不对了
         */
        while (fscanf(fp, "%10s%s%s%s%d", num, name, sex, className, &score) != EOF )
        {
            // fscanf(fp, "%10s%s%s%s%d", num, name, sex, className, &score);
            // printf("%s,%s,%s,%s,%d\n", num, name, sex, className, score);
            if (strcmp(className,inputName) == 0)
            {
                flag = 1;
                count++;
                sum += score;
            }
        }
        if (flag)
        {
            aver = (float)sum / count;
            printf("课程“%s”有 %d 人选学,平均成绩为 %.1f", inputName, count, aver);
        }
        else
        {
            printf("文件中没有名称为“%s”的课程\n",inputName);
        }
    
        fclose(fp);
        fp = NULL;
    
        return 0;
    }
    
    

    P339

    测试文件同上一题

    题目要求:

    在这里插入图片描述

    解答程序:

    /* 
    编写一程序P339.C实现以下功能
      有一存储很多学生成绩的文本文件(学生与课程数不限),每个学生的数据包括学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)。
    从键盘输入某门课程的名称,要求在文件中查找有无相应的课程(可能有多条记录或没有),有则计算并输出该课程的选课人数、及格人数与及格率,无则报告没有。
      单击此处下载程序运行时测试用的学生成绩文件xscj.txt并保存到程序P339.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("请输入要计算及格率的课程名称:");
    printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
    printf("\n计算结果为:\n");
    printf("文件中没有名称为“…”的课程\n"…);
    printf("课程“…”有 … 人选学,其中及格 … 人,及格率为…);
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
        // 学号(10个数字)、姓名(最多4个汉字)、性别、课程名称(最多7个汉字)、成绩(整数)
        char num[11];
        char name[9];
        char sex[3];
        char className[15];
        char inClsName[15];
        int score;
    
        int count = 0;  // 及格人数
        int total = 0;  // 选课人数
        float rate;   // 及格率
    
        int flag = 0;
    
        FILE *fp;
    
        fp = fopen("xscj.txt", "r");
        if (fp == NULL)
        {
            printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
            exit(1);
        }
    
        printf("请输入要计算及格率的课程名称:");
        gets(inClsName);
    
        printf("\n计算结果为:\n");
        
        /* 
            教训:
                1. 这里使用格式化读文件
                2. 用什么方式读,就用什么方式判断文件结尾
                3. 一般就用读或是写函数的返回值来进行判断
                4. 读写有异常或出错时,也可以捕获后来处理,但一般不会有这样的要求。
            本题:
                一定要使用fscanf的返回值来判断是否读到了文件末尾,如果用feof(fp),会多读一次,就会把最后一条记录多处理一次,结果就不对了
        */
        // while (!feof(fp))        // 这样操作,会将最后一次读取的内容,多用一次,就会出错
        while (fscanf(fp, "%10s %s %s %s %d", num, name, sex, className, &score) != EOF)
        {
            // fscanf(fp, "%10s %s %s %s %d", num, name, sex, className, &score);
            // printf("%10s %s %s %s %d\n", num, name, sex, className, score);
            if (strcmp(className,inClsName)==0)
            {
                flag = 1;
                total++;
                if (score>=60)
                {
                    count++;
                }
            }
        }
    
        if (flag)
        {
            rate = (float)count / total;
            printf("课程“%s”有 %d 人选学,其中及格 %d 人,及格率为 %.1f", inClsName, total, count, rate);
        }
        else
        {
            printf("文件中没有名称为“%s”的课程\n", inClsName);
        }
        
    
        fclose(fp);
        fp = NULL;
    
        return 0;
    }
    

    P340

    测试文件jtwz.txt

    川B20525 2015.01.03 超速
    川A63602 2013.12.01 无照驾驶
    渝B31222 2015.01.03 酒驾
    渝B31221 2014.12.31 闯红灯
    川B20525 2013.02.27 超速
    川X81900 2014.05.09 逆向行驶
    川A34221 2014.12.31 闯红灯
    渝B31202 2014.12.08 闯红灯
    川X22701 2014.08.12 逆向行驶
    川T10565 2013.08.17 闯红灯
    川T10565 2013.08.17 超速
    川A63602 2013.12.01 闯红灯
    
    
    

    题目要求:

    在这里插入图片描述

    解答程序:

    /* 
    编写一程序P340.C实现以下功能
      有一存储很多交通违章记录的文本文件,每条记录包括车牌号(1个汉字+6个字符)、发生日期、违章类型(最多4个汉字)。从键盘输入违章类型的名称,
    要求在文件中查找并显示相应的记录(可能有多条记录或没有)。
      单击此处下载程序运行时测试用的违章记录文件jtwz.txt并保存到程序P340.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("请输入要查找的违章类型:");
    printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
    printf("\n查找结果为:\n");
    printf("文件中没有找到“%s”的记录\n",inputType);
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char const *argv[])
    {
        FILE *fp;
        // 牌号(1个汉字+6个字符)、发生日期、违章类型(最多4个汉字)
        char sign[9];
        int year;
        int month;
        int day;
        char type[9];
        char inputType[9];
        int flag = 0;
        int count = 0;
    
        fp = fopen("jtwz.txt", "r");
        if (fp == NULL)
        {
            printf("文件打开失败,请检查文件名及路径是否正确、文件是否存在!");
            exit(1);
        }
        printf("请输入要查找的违章类型:");
        gets(inputType);
        printf("\n查找结果为:\n");
        while (!feof(fp))
        {
            fscanf(fp, "%8s %4d.%2d.%2d %s", sign, &year, &month, &day, type);
            // printf("%8s %d.%02d.%02d %s\n", sign, year, month, day, type);
            if (strcmp(inputType,type)==0)
            {
                flag = 1;
                count++;
                printf("%d %8s, %d.%02d.%02d, %s\n",count,sign, year, month, day, type);
            }
        }
        
        if (flag==0)
        {
            printf("文件中没有找到“%s”的记录\n",inputType);
        }
        
    
        fclose(fp);
        fp = NULL;
        return 0;
    }
    
    
    
    展开全文
  • 五、C语言的标识符和关键字一个完整的PIC单片机C语言程序,通常由包含文件(即头文件1,变量定义、变量说明、函数定义、函数体和注释等六部分等组成。1.C语言的标识符所谓标识符,实际上是一些由程序编写者自定义的...

    五、C语言的标识符和关键字

    一个完整的PIC单片机C语言程序,通常由包含文件(即头文件1,变量定义、变量说明、函数定义、函数体和注释等六部分等组成。

    1.C语言的标识符

    所谓标识符,实际上是一些由程序编写者自定义的名称,类似于PIC单片机汇编语言中给寄存器(RAM)的命名。C语言中所用到的变量名、函数名、数组名、文件名等都是由标识符组成的。

    标识符是由一串字母(常指英语字母)、数字和下线符(或称下划线)组成的字符串。标识符的第一个字符必须是字母或下线符。按照惯例,以下线符开头的标识符是系统程序专用的,程序员最好不用。程序员可将下线符作为分段符使用,如SUM_1。

    同一字母的大小写被视为不同的标识符。即同一字母的大小写是不同的标识符。

    不同的C编译器对标识符的长度有不同的限制。为了避免所编写的源文件能被所有C编译器认可,可将标识符的长度限定在8个字符以内(即1个字节)。

    标识符的命名(即自定义),最好简捷、含意清晰、便于阅读,如用deIay表示延时;用sum表示求和;用loop表示循环等。

    2.C语言的关键字

    关键字,又称保留字,是指那些已由系统作了特殊定义、具有特定含义的标识符。,程序员编写C程序时,可用关键字来对所用函数参数进行说明、定义一些物理量,它们是C语言语句的重要组成部分,有的还直接组成简单语句。因此,用户是不能将此类标识符(关键字)作为自定义标识符使用的。

    C语言的关键字分为三类,即数据类、程序控制类和预处理类,如表1所示。

    表1

    d68608710db598ceaf1d22bb54118326.png

    表1中所列关键字,读者在编写C程序时,将逐步学会其使用。

    六、C语言的数据类型

    在编写C语言程序时,首先要涉及的是数据描述和功能描述。数据是实现功能的过程,功能是数据运算(或处理)的结果,没有数据,C程序就无法实现单片机规定的功能,可见数据在C语言程序中的重要性。

    C语言的数据类型,有基本型、构造型、指针型三类。对此,笔者将在使用时逐一介绍。

    1.标准型

    标准型数据属于基本型数据,是由C语言本身提供的基本数据类型,结构简单、使用频率高。下面以实例对C语言程序中的标准型数据予以说明。

    标准型数据又分为整型数据、实型数据和字符型数据三种,每种数据又有常量和变量之分。笔者将其分类以表格形式列出,既可供初学者编写C语言程序时查找,亦可与本文中实例程序的注释进行对比学习,以加深对标准型数据的理解。

    (1)整型常量。

    1.while语句

    (1)格式:while(条件表达式)

    53759a041355b176c6b9ab713043a93f.png

    (2)功能:程序运行时,先判断条件表达式,当条件表达式的值为非零(即为“真”)时,执行while语句中的内嵌语句,即先判断条件表达式,再执行语句。当条件表达式为零时,退出循环;若表达式一开始就为0,其while语句一次也不执行;若条件表达式恒为1,则程序在while体内一直循环。

    (3)程序实例2

    1)硬件电路和功能硬件电路同《PIC单片机C语言程序设计(1)》一文的图1(见《电子制作》2009年第10期)。图中的RA0口外接的微动开关KO,作为程序的起动开关。KO未按下时。单片机系统处于等待状态,按一次KO,系统依次进行以下工作:RBO口外接的LEDO点亮→延时→LEDO熄灭→RB2外接的LED2点亮→延时→LED2灭→RB4外接LED4点亮→延时→LED4灭→执行间断语句break终止循环→点亮RB6外接的LED6→回到等待状态,直到RA0外接的微动开关KO再次按下,再重复上述过程。[page]

    2)源文件清单。

    本实例2的程序清单如下(源文件名PIC02.C):

    698570217af043e1de00bdcb205f0c6d.png

    82b58a6a42f3326b30b4b805fe733b54.png

    e178c5cd3eb2e9f627dac6dcf621d5a0.png

    c7d45e6da13f48d8dc7a99308698b517.png

    说明:

    ① 上述程序中,关键字break、continue和return等组成的简单语句的使用是略有区别的。具体区别如下:

    间断语句break:程序运行到此就终止循环,跳出while(1)的循环体,执行该循环体紧接在后面的语句:

    · 继续语句continue:如果把该程序中的break语句换成继续语句continue。程序运行到此便立即执行由while(1)开始功能的程序,即程序在该循环体内不断地运行,等效于不用continue;语句;·return语句:当把该程序中的break换成return语句时,程序运行到此就会立即返回主程序运行。[page]

    读者学习C语言时,一定要将实例2源程序中的关键字“break”分别用“coutinue”和“return”代换并运行程序,同时观察使用三种不同的关键字时LED指示灯的不同状态,方能体会出三者的差异。

    ② 关于带形式参数(简称形参)的延时函数。

    实例2所用的延时函数与实例1不同。实例1(见《电子制作》2009年第10期)用的是无参数函数,功能简单,一个函数完成一定的延时。实例2用的是有参数延时函数,一个函数可完成不同的延时(如上述实例2 中的延时1、延时2、延时3、延时4)。这是因为,带形参函数(如实例2中的延时函数v0id delay(K))可以借助参数的传递功能来完成不同时间的设置,这是汇编语言所无法做到的。由此可见,采用C语言可大大简化程序的编写工作。

    鉴于形参对熟悉汇编语言的设计人员来说是一个全新的概念,有关C语言的函数参数传递功能,我们在后续的文章中还将进一步介绍,以加深大家对其的理解。

    整型常量,是指在程序运行过程中数值保持不变的量,在编写C程序时,整型常量用关键字cONST进行定义。表2给出了各种常量的类型、表示方法及示例说明。

    表2

    669946513719cc7d983ab123a4e4e5b4.png

    (2)整型变量。

    整型变量。是指在程序运行过程中数值会改变的量。整型(即整数类型)变量的基本型是lnt。

    Int可以保存一个整数,并允许在_nl前加上基本型、短整型、长整型,以及无符号型等四种整型类型。下面分别加以说明1)基本型:标志是int。

    2)短整型:标志是short int。

    3)长整型:标志是long int。

    4)无符号型:存储单元中,全部二进制位均用来存放整数自身。而不包括符号位。无符号型又分为无符号整型、无符号短整型、无符号长整型三种。

    ①无符号整型:标志是unsigned int:

    ②无符号短整型:标志是unsigned short int;

    ③无符号长整型:标志是unsigned Iong int。

    以上C语言变量的要点,是相关的关键字,以及每个整型变量的取值范围,即长度(二进制位个数)。

    PlC单片机C语言的整型变量、数据名称、取值范围如表3所示。表中的内容,在编写C程序时经常使用,初学者应熟练掌握。

    表3

    4729429dbfd60dce4d3acf010ee3873a.png

    说明:1.表3列出了整型变量的取值范围。例如,从表3中可以看出,无符号长整型变量unsigned long int的最大取值可达10位数,将其用于延时函数,仅用一条循环语句,延时便可达20小时以上(参看下文中的实例2)。2.对于表3中的字符型(char)、浮点型(float)和双精度型doable等整型变量,将在本连载后续文章的程序使用到时进行说明。

    七、C语言的控制循环语句

    在C语言程序中,会用到多种功能语句。控制循环语句(下称循环语句)便是其中之一。

    C语言的循环语句有三种,即while语句、do while语句和for语句。循环语句一般由循环控制条件来控制循环的重复次数。如果控制条件没有完成,要想终止循环,可在循环体中用间断语句break、返回语句retum,或者用继续语句continue来终止当前循环周期中的操作,使控制进入其他程序段。下面逐一进行介绍,并通过程序实例来说明其应用,以利大家加深理解。

    展开全文
  • 文章目录20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises26P320P321P324P325 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises26 本次练习用到的数据...

    20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises26

    本次练习用到的数据文件

    Comp.txt for P320

    123 + 556
    

    Comp.txt for P321

    123 + 556
    300 - 215
    1001 - 18976
    9123 + 5156
    
    

    Comp.txt for P324

    123
    300
    1001
    9123
    9000    
    

    CompA.txt

    +
    -
    -
    +
    
    

    compB.txt

    556
    215
    18976
    5156
    
    

    P320

    在这里插入图片描述

    /* 
        读文件,完成运算
    编写一程序P320.C实现以下功能
      在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中只有一个算式,运算类型只有“加法(+)”或者“减法(-)”且运算符前后至少有一个空格。
    计算该算式的结果并在屏幕上显示。
      单击此处下载程序运行时测试用的算式文件Comp.txt(加法示例,编程时还应考虑算式为减法的情况)并保存到程序P320.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("%d + %d = %d\n");
    printf("%d - %d = %d\n");
      程序的运行效果应类似地如图1和图2所示。
    
    123 + 556 = 679
    图1 程序运行效果示例(测试用算式文件Comp.txt内容为整数加法算式)
    
    123 - 556 = -433    
     */
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        int data1, data2;
        int result;
        char ch;    
        FILE *fp;
    
        // open file
        if ((fp = fopen("Comp.txt", "r")) == NULL)
        {
            printf("Open file failure.\n");
            exit(0);
        }
        // read data
        // 只有一行数据,直接格式化读取,注意,%c前有一个空格
        fscanf(fp, "%d %c %d", &data1, &ch, &data2);
        if ('+'==ch)
        {
            result = data1 + data2;
            printf("%d + %d = %d\n", data1, data2, result);
        }
        else
        {
            result = data1 - data2;
            printf("%d - %d = %d\n", data1, data2, result);
        }
        //close file
        fclose(fp);
    
        return 0;
    }
    

    P321

    在这里插入图片描述

    /* 
    编写一程序P321.C实现以下功能
      在文本文件Comp.txt里有需要计算结果的整数算式,每个算式占一行且文件中有多个(数量不确定)算式,运算类型只有“加法(+)”或者“减法(-)”且运算符前后至少有一个空格。
    计算这些算式的结果并在屏幕上显示。
      单击此处下载程序运行时测试用的算式文件Comp.txt并保存到程序P321.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("Line %03d:  %5d + %-5d = %-6d\n");
    printf("Line %03d:  %5d - %-5d = %-6d\n");
      程序的运行效果应类似地如图1所示。
    
    Line 001:    123 + 556   = 679
    Line 002:    300 - 215   = 85
    Line 003:   1001 - 18976 = -17975
    Line 004:   9123 + 5156  = 14279
    图1 程序运行效果示例(使用系统提供的测试用算式文件Comp.txt)
     */
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
        int data1, data2;
        int result;
        char ch;
        int i = 1;
        FILE *fp;
    
        // open file
        if ((fp = fopen("Comp.txt", "r")) == NULL)
        {
            printf("Open file failure.\n");
            exit(0);
        }
    
        // read data
        while (!feof(fp))
        {
            fscanf(fp, "%d %c %d", &data1, &ch, &data2);
            if (!('+' == ch || '-' == ch)) // 如果读出来的不是运算符号,就终止
            {
                break;
            }
    
            if ('+' == ch)
            {
                result = data1 + data2;
                printf("Line %03d:  %5d + %-5d = %-6d\n", i, data1, data2, result);
            }
            else
            {
                result = data1 - data2;
                printf("Line %03d:  %5d - %-5d = %-6d\n", i, data1, data2, result);
            }
            ch = '\0';  // 每一次用完之后,就将运算符清空
            i++;
        }
    
        // close file
        fclose(fp);
    
        return 0;
    }
    /* 
        另一种思路,就是将fscanf的返回值拿来判断
        程序中用到fscanf、fprintf,为了判断异常,需要知道两个函数的返回值含义
    
        原型:int fscanf(FILE* stream, const char* format, [argument...]);
    
                1.fscanf正常情况下返回从文件中读出的参数个数
                    fscanf返回的是实际读取的数据个数,出错或者到结尾返回EOF。
                2.fprintf正常情况下返回写入文件的字节数
        注意细节:
                1. 在空白符这个意义上来讲,fscanf 对空格、制表符、换行符是一视同仁的,不加区分的;%s会跳过前面的空白符,但是不会跳过后面的空白符;%c不会跳过空白符。
                2. *表示读取一个域,但是不赋值给变量。
                3. []表示只读取中括号内的字符,[]表示不读取中括号内的字符,值得注意的是%[]s将不会跳过前面的空白符。
                4. 如果还没有任何一个域匹配成功或者任何一个匹配失败发生之前,就达到了文件流末尾,就算出错;或者读取文件流出错。这两种情况下,fscanf 返回EOF。
     */
    

    P324

    在这里插入图片描述

    /* 
    编写一程序P324.C实现以下功能
      在文本文件Comp.txt、CompA.txt、CompB.txt里有需要计算结果的整数算式,文件Comp.txt提供参加运算的第一个数,文件CompA.txt提供进行运算的运算符(只有“加法(+)”或者“减法(-)”),文件CompB.txt提供参加运算的第二个数,每个数或运算符均占一行,组合起来成为一个算式,遇到无法组成一个完整算式时即结束运算。这样的算式有多个(数量不确定)。计算这些算式的结果并在屏幕上显示。
      单击下载程序运行时测试用的算式文件Comp.txt、CompA.txt、CompB.txt并保存到程序P324.C所在的文件夹且文件名保持不变。
    编程可用素材:
    printf("Line %03d:  %5d %c %-5d = %-6d\n");
      程序的运行效果应类似地如图1所示。
    
    Line 001:    123 + 556   = 679
    Line 002:    300 - 215   = 85
    Line 003:   1001 - 18976 = -17975
    Line 004:   9123 + 5156  = 14279
    图1 程序运行效果示例
    */
    #include <stdio.h>
    
    int main(void)
    {
        int a1, a2, n = 1;
        char ch;
        FILE *fp1, *fp2, *fp3;
        fp1 = fopen("Comp.txt", "r");
        fp2 = fopen("CompA.txt", "r");
        fp3 = fopen("CompB.txt", "r");
    
        // 赋值后再判断,语句更简单一些
        if (fp1 == NULL || fp2 == NULL || fp3 == NULL)
        {
            printf("error\n");
            return 0;
        }
    
        while (!feof(fp2))  // 运算完成,首先要有运算符
        {
            // 充分利用返回值判断读取是否成功,三个数据要同时都有,才可以完成运算
            if ((fscanf(fp1, "%d", &a1) == 1) && (fscanf(fp2, " %c", &ch) == 1) && (fscanf(fp3, "%d", &a2) == 1))
            {
                if (ch == '+')
                {
                    printf("Line %03d:  %5d %c %-5d = %-6d\n", n, a1, ch, a2, a1 + a2);
                }
                else
                {
                    printf("Line %03d:  %5d %c %-5d = %-6d\n", n, a1, ch, a2, a1 - a2);
                }
                n++;    // 计数器
            }
            else        // 如果读取失败【即两个操作数和一个操作符,只要有一个未读到数据,就不再处理】
            {
                break;
            } 
        }
    
        // 要记得关闭文件
        fclose(fp1);
        fclose(fp2);
        fclose(fp3);
        
        return 0;
    }
    
    

    P325

    在这里插入图片描述

    /* 
    编写一程序P325.C实现以下功能
      在文本文件Comp.txt、CompA.txt、CompB.txt里有需要计算结果的整数算式,
    文件Comp.txt提供参加运算的第一个数,
    文件CompA.txt提供进行运算的运算符(只有“加法(+)”或者“减法(-)”),
    文件CompB.txt提供参加运算的第二个数,每个数或运算符均占一行,组合起来成为一个算式,遇到无法组成一个完整算式时即结束运算。
    这样的算式有多个(数量不确定)。计算这些算式的结果并将结果以文本文件格式保存到程序P325.C所在的文件夹中且文件名命名为CompC.txt。
      单击下载程序运行时测试用的算式文件Comp.txt、CompA.txt、CompB.txt并保存到程序P325.C所在的文件夹且文件名保持不变。
    编程可用素材:
    fprintf(…"Line %03d:  %5d %c %-5d = %-6d\n");
      程序运行后生成的文件CompC.txt的内容应类似地如图1所示。
    
    图1 程序运行效果示例(生成的文件CompC.txt之内容)
     */
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc,char *argv[])
    {
        int data1, data2, result;
        char ch;
        int i = 1;
        int r1, r2, r3; // 文件读取返回值
    
        FILE *fp1, *fp2, *fp3, *fp4;
    
        // 文件正常打开
        if ((fp1 = fopen("Comp.txt", "r"))==NULL)
        {
            printf("open file Comp.txt failure.\n");
            exit(0);
        }
        if ((fp2 = fopen("CompA.txt", "r"))==NULL)
        {
            printf("open file CompA.txt failure.\n");
            exit(0);
        }
        if ((fp3 = fopen("CompB.txt", "r"))==NULL)
        {
            printf("open file CompB.txt failure.\n");
            exit(0);
        }
        // 注意:这个文件是写数据
        if ((fp4 = fopen("CompC.txt", "w"))==NULL)
        {
            printf("open file CompC.txt failure.\n");
            exit(0);
        }
    
        while (!feof(fp2))   // 要有运算符号,才可以运算
        {
            r1 = fscanf(fp2, " %c", &ch);
            r2 = fscanf(fp1, "%d", &data1);
            r3 = fscanf(fp3, "%d", &data2);
            if ((r1 == 1) && (r2 == 1) && (r3 == 1))    //是否都成功读取了数据
            {
                if ('+' == ch)
                {
                    result = data1 + data2;
                    fprintf(fp4, "Line %03d:  %5d %c %-5d = %-6d\n", i, data1, ch, data2, result);
                }
                else
                {
                    result = data1 - data2;
                    fprintf(fp4, "Line %03d:  %5d %c %-5d = %-6d\n", i, data1, ch, data2, result);
                }
                i++;    // 计数器
            }
            else
            {
                break;
            }
        }
    
        // 关闭文件
        fclose(fp1);
        fclose(fp2);
        fclose(fp3);
        fclose(fp4);
    
        return 0;
    }
    
    展开全文
  • 文章目录20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises17P827P828P772P719P726 20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises17 P827 /* 编写...
  • 文章目录20201216-成信大-C语言程序设计-20201学期《C语言程序设计B》平时自主学习-命令行P116P117P118P119P120P121P792 20201216-成信大-C语言程序设计-20201学期《C语言程序设计B》平时自主学习-命令行 P116 编写...
  • C语言程序设计 教学课件 作者 孙鸿飞 刘国成 主编ch01.pptx (11页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.90 积分1.1 程序设计语言及其发展1.2 C语言的历史1.3 ...
  • c语言程序精品课程试题

    千次阅读 2019-08-05 14:15:40
    C语言程序设计》精品课件试题 目录 (按住CTRL键点击超链) 单项选择题………………………第002页 阅读程序题………………………第018页 程序填空题………………………第039页 编写程序题………………………第070...
  • 主讲 刘丽E mail lliulli 单位 ...具备现代程序设计语言的基本元素和特征 如何学这门课 听练思考与总结 教材 参考书与课时安排 教材C程序设计李玲玲主编清华大学出版社参考书C语言程序设计教程谭浩强高等教育出版...
  • C语言程序设计复习资料

    千次阅读 多人点赞 2019-09-09 16:17:01
    第一章 C语言程序设计概述 c程序基本结构特点 函数与主函数 程序由一个或多个函数组成,函数由函数头和函数体构成。程序的基本组成模块是函数。 必须有且只能有一个主函数main() 程序执行从main开始,在...
  • 一个完整的C语言程序,是由一个、且只能有一个main()函数(又称主函数,必须有)和若干个其他函数结合而成(可选)。 main函数是C语言程序的入口,程序是从main函数开始执行。 1.1.2 其他函数 从函数定义的角度看,...
  • C语言程序三种基本结构

    万次阅读 2018-01-03 19:27:19
    文章中介绍C语言程序执行过程中最基本的三种结构,包括有:顺序结构、分支结构、循环结构。理解和学习程序的执行过程,对于以后学习其他的编程语言,或者程序的调试,程序调Bug都有很好的帮助。 程序是什么? ...
  • C语言程序设计案例式教程

    千次阅读 2019-05-30 17:00:09
    @[TOC] C语言程序设计案例式教程 欢迎指出文中错误及不足! 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新...
  • 1.1一个C语言 #include <stdio.h> //stdio是一个库文件 int factorial(int n); int main(void){//所有程序有且只有一个main函数 int n;//变量都有类型 int 整数变量 占一定内存空间 scanf("%d",&n);//%d...
  • C语言程序的结构 程序的构成,main函数和其他函数 main函数 一个完整的C语言程序,是由一个、且只能有一个main()函数(又称主函数,必须有)和若干个其他函数结合而成(可选)。 main函数是C语言程序的入口,程序是从...
  • 全国计算机等级考试二级C语言程序设计考点整理

    千次阅读 多人点赞 2020-02-13 21:19:11
    C语言程序的结构 1、程序的构成,main函数和其他函数 C程序 用C语言编写的程序称为C语言源程序,源程序文件的后缀名为“.c”。源程序经编译后生成后缀名为“.obj”的目标文件,再把目标文件与各种库函数连接起来...
  • C语言程序设计——循环结构

    千次阅读 2018-12-07 17:17:08
    循环控制结构是C语言学习中的基础,也是复杂程序设计的桥梁。它的主要作用是把一些重复执行的操作简化,从而增强程序的可读性和简洁性。 循环结构主要分为两种类型:当型循环结构和直到型循环结构。 当型循环结构...
  • 二级C语言考前学习资料(机试)及C语言程序二十四种大题题型
  • 2)str2:c语言会在字符串常量的结尾添加一个终止符‘\0’,因此,str2数组中包含的字符有:‘a’, ‘p’, ‘p’, ‘l’, ‘e’, ‘\0’,共6个,所以sizeof(str2)=6 1=6字节 字符串长度(strlen求字符串长度时,...
  • C语言程序设计(朱立华 陈可佳)

    千次阅读 2020-01-30 11:57:37
    第一章 初识计算机,程序C语言 计算机擅长接受指令,但不擅长了解你的思想。 Computers are good at following instructions,but not at reading your mind. 学习目标: • 了解现代计算机的冯·诺依曼体系...
  • C语言程序设计 立体化教程 --- 人民邮电出版社

    万次阅读 多人点赞 2019-03-10 10:22:17
    c语言具有结构语言的特点,程序之间很容易实现段的共享。 c语言的主要结构成分是函数。 运算符丰富。 数据类型丰富。 比较接近硬件。 语法限制少和程序设计自由度大。 生成目标代码质量高、程序执行效率高。 ...
  • C语言的输入 所有的输入都是依赖于C语言函数进行的,这个函数是C语言标准库自带的...这是一个获取输入字符串的函数,其定义如下文,作用是从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。 char * g...
  • 浙大版《C语言程序设计(第3版)》第1章引言((练习1.1一个C语言程序) 上机运行以下程序(例1-1),输入整数13,输出结果是错误的,其原因是( )。 #include <stdio.h> /* 编译预处理命令 */ int main(void)...
  • 一、程序的翻译环境 翻译环境:组成程序的每个源文件通过编译器编译成目标文件,所有的目标文件在由连接器捆绑在一起形成一个单一而完整的可执行程序。同时,链接器也会引入标准c函数库中任何被该程序所有到的函数...
  • C语言程序设计---读书笔记汇总(整理中)

    万次阅读 多人点赞 2018-05-11 23:34:01
    四 函数与程序结构 4.1 函数的基本知识 4.2 返回非整型值的函数 4.3 外部变量 4.4 作用域规则 4.5 头文件 4.6 静态变量 4.7 寄存器变量 4.8 程序块结构 4.9 初始化 4.10 递归 4.11 C 预处理器 4.11.1 文件包含 ...
  • C语言程序设计(第2版)》 读书笔记 —Brian W.Kernighan 等著 徐宝文 李志 译 在C语言中,所有的变量必须先声明,后使用。声明通常放在函数起始处,在任何执行语句之前。 stdio.h scanf scanf_s printf 解密 ...
  • C语言程序设计 利用文件保存数据

    千次阅读 2021-03-06 10:17:40
    1 C文件的有关概念 1.1 什么是文件 在进行C运用程序设计中,主要用到两种文件: (1)程序文件。脑壳程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)...(2)文件名主干的命名规则遵循标志的命
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    46.用c语言编写程序,可以编写出任何类型的程序 47.C语言允许有空函数 48.C程序书写格式,允许一行内可以写几个语句 49.C程序的语句无行号 50.C语言的每个语句的最后必须有一个分号 51.C语言本身没有输入...
  • 在解释这两个函数之前,为了方便大家更容易理解,我们先来讲讲下面的这幅图。这个图中的例子其实很简单,我们就是把题目通过输入设备(例如键盘鼠标)传输到计算机中,然后让计算机...为此, C语言便给出了 printf()...
  • /*程序detab,将制表换成适当数目的空格, 空格充满到下一个制表符终止的位置 */ #include #define TABINC 8 // 每隔TABINC个位置就会出现一个制表 int main() { int c,nb,pos; nb=0; //到达下一个制表...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,208
精华内容 13,683
关键字:

c语言程序终止符

c语言 订阅