zoukankan      html  css  js  c++  java
  • 第1章 C语言概述

    声明:文中观点仅代表个人,其中文字、图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式:80368704@qq.com QQ:80368704


    第1章 C语言概述

    1.1和1.2自己看吧........
    1.3 简单的C语言程序介绍

    例1.1

    #include<stdio.h>
    void main() {

    printf("This is a C program!/n");

    }

    1。关于#include<stdio.h>
           void main(){.........}

        让我们从向黑板上书写文字开始吧.......
         我们写信有一定的格式, 大致分为3部分:开头、正文和结尾。
         信是我们写来给别人看得,大家都使用诸如上面的格式, 无论什么人拿到信,均能很快知道, 是谁写的信,写给谁的,主要说的什么。 由此可见,人和人之间沟通的书面文字是有一定书写规范的。
         那么同样的道理,作为人类和计算机之间沟通的书面文字(实质是就是 人向机器发出的命令的集合体——程序), 也要遵循一定的格式,而且 简单的C程序也大致分为3部分:开头、正文和结尾,和信比较如下图 :

    XXX,你好:        -----------开头-----------    #include<stdio.h>
                                                         void main(){

    。。。              -----------正文------------    。 。 。

         此致
    敬礼                  -----------结尾------------   }
         XXX
         XX年XX月XX日

    反过来说就是:
    (1) 开头: #include<stdio.h>
              void main(){                                相当于    XXX,你好:

    (2)正文: 你要让机器执行的命令写在开头和结尾之间      相当于    信的正文内容部分

    (3)结尾: }                                        相当于    此致 敬礼 XXX XX年XX月XX日

    举例 : 我想让人和计算机完成写星号的任务,命令的对比如下:

         现在要在黑板上写个星号*          现在要让在屏幕上写个星号*

         对方:人 , 表达形式:信                对方:计算机 , 表达形式:c语言

         xxx 你好:                                     #include<stdio.h>
                                                            void main(){

         在黑板上写一个*号                    printf("*");



            此致                                          }
         敬礼
            xxx
              XX年XX月XX日

    说明:
         就像人类信的开头和结尾部分一般都是固定的一样,c语言程序的开始和结束部分一般也是固定的,简单程序更是如此,
          开头照抄 #include void main(){    , 结尾照抄一个大括号 } .


          比如 现在我要让在屏幕上写个#的程序如下 用c语言

          #include<stdio.h>      ------------开头两句照抄
          void main(){
           printf("#"); ------------屏幕书写#的命令
          }             -----------结尾用个右大括号

         再比如 现在我要让在屏幕上写两个井号#的程序如下 用c语言

          #include<stdio.h> ------------开头两句照抄
          void main(){

          printf("##");     ------------屏幕书写#的命令
          }         ----------- 结尾用个右大括号

         我们看到程序是如此的相似, 开头和结尾完全相同,

    2.关于printf

         屏幕书写命令是printf("XXXX");其中XXXX就是向屏幕上书写的内容
         比如 在屏幕上写两个星 ** 的程序如下 ,c语言

         #include<stdio.h> ------------开头两句照抄
         void main(){
         printf("**");     ------------屏幕书写**的命令
         }                 ----------- 结尾用个右大括号


        我们让计算机向屏幕上书写的术语叫 "输出",而且可以向屏幕输出的内容 可以是字母,数字以及#!@$%&^&*)(*_等等好多东西.
        现在我们让计算机向屏幕上输出一串英文文字"This is a C program !" , C程序显然如下:

        #include<stdio.h> ------------------开头两句照抄
         void main(){
         printf("This is a C program !");---屏幕输出命令
         }                       -----------结尾用个右大括号

    3. 关于'/n'

    现在让我们将如下图案输出到屏幕上:

          *
        * *
      * * *

    很容易想到的程序是:

    #include<stdio.h>
    void main(){
    printf("*");
    printf("* *");
    printf("* * *");
    }

    计算机执行此程序后屏幕显示如下:

            为什么会这样呢?解释这个问题必须先说明一些关于屏幕的基础知识。。。。。

            早期计算机的屏幕整个区域被分成2580列,如下所示:总共80x25个位置,每个位置可以放一个字符。

            设列为x轴,行为y轴,原点是屏幕左上角,

            用(x,y)表示屏幕上第x列第y行的输出位置,比如第3列,第5行表示为(3,5),注意:(列,行)

            假设系统最初将当前输出位置设定在(1,1),printf将在以(1,1),(2,1),(3,1)(4,1).....的顺序从左到右放置输出内容,直到第一行最右端的(80,1),再从第2行最左端的(1,2)开始显示,(2,2),(3,2),.......,当第2行放满,再放第3行,......如此直到25行全部写满后,上卷屏。

           

    现在明白上面的程序输出的结果是为什么了吧。

    如何能输出那个图案呢?

    让我们来分析一下,画一个显示了预想图案的屏幕:

    用"_"表示空格(键盘上有空格的欧),改写程序如下

    #include<stdio.h>
    void main( ){

    printf("_ _ * _ _ _ _ _ _ _ _ _ ......_ _ _ _ _ _ _");
    /*星号后面有80-3个空格*/

    printf("_ * _ * _ _ _ _ _ _ _ _ ......_ _ _ _ _ _ _");
    /*第2个星号后面有80-4个空格*/

    printf("* _ * _ * _ _ _ _ _ _ _ ......_ _ _ _ _ _ _");
    /*第3个星号后面有80-5个空格*/

    }

    空格太多了,能省吗?

    当然,printf支持从某行的某位置直接将输出位置变到下一行的行首,称为换行控制。

    在需要换行的位置,加'/n',比如:我们刚才的程序用'/n'改变如下:

    #include<stdio.h>
    void main(){

    printf("_ _ * /n");
    /*在从(1,1)开始先输出_ _ *,然后'/n'将当前输出位置移动到第2行的行首(1,2)*/

    printf("_ *_ * /n");
    /*在从(1,2)开始先输出 * _ *_ *,然后'/n'将当前输出位置移动到第3行的行首(1,3)*/

    printf("* _ *_ * /n");
    /*在从(1,3)开始先输出 * _ * _ *,然后'/n'将当前输出位置移动到第3行的行首(1,4)*/

    }

    那么,有没有能让我们指定输出位置到任意的行列呢?比如:现在指定在(5,5)输出一个星号。

    有!!!!,gotoxy(5,5);可以定位输出位置到(5,5);

    #include<stdio.h>
    void main(){

    gotoxy(5,5);
    printf("*");

    }

    当gotoxy(5,5);将输出位置定在(5,5)后,printf输出一个星号到该位置上。

    至于用gotoxy()函数实现我们上面的星号组成的3角形,留给读者思考了。

    总结:例1.1的知识点3个:

    1。关于简单C程序的基本结构的介绍
           #include<stdio.h>
           void main(){.........}

    2。关于屏幕输出的基础知识和printf

    3. 关于 '/n'的应用

    例1.2
    #include<stdio.h>
    void main(){
    int a,b,sum;
    a=123;
    b=456;
    sum=a+b;
    printf("sum=%d/n",sum);
    }

    一、数据存储和使用变量

    在开始讲解以前,先按我的要求完成一个数学题的求解:

    1.设有3个变量a,b,sum,(a,b,sum均∈整数)  
    2.已知 a=123,b=456, 有 sum=a+b
    3.求 sum
    4.答案不要告诉我,而是把结果写在黑板上,
    写时用“sum=?”的格式,?用具体的结果值代替

    你能按要求完成本题目吗?我想你应该能写下:sum=579

    好,以上我是让“人”计算并写出结果,

    下面如果让机器完成上述问题的解答,我该如何把问题描述给机器呢?我们一句一句对比着来:

                                    对方:人                                                              对方:计算机

        设有3个变量a,b,sum,(a,b,sum均∈整数)        int a,b,sum;/*int 表示后面写的3个是整数变量*/

        已知 a=123,b=456,sum=a+b 求 sum                  a=123,b=456;sum=a+b;

        答案不要告诉我,而是把结果写在黑板上           printf("sum=%d",sum);

        写时用"sum=?"的格式, ?用sum具体值代替                   /*printf表示向屏幕写,

                                                                                            写时用"sum=%d"的格式,

                                                                                            %d用sum具体值代替,%d就是?*/

    二、scanf("......",.......);

    将上面对人的描述的第2步做更改如下:

    2.任意给定 a和 b, 有sum=a+b
    任意给定
    的意思是给出题目时不指定。那么什么时候给出具体值呢?

    举例:有甲和乙两个人,甲把上面的题目让乙做,那么乙解题的详细步骤如下:

    1. 第1句,
        乙了解到将有3个变量,这3个变量将用于整数计算。  

    2. 第2句,
         乙了解到此时需要让甲给出a和b的具体整数值,因此乙将一直等待,当甲给出a和b的具体的整数值后,乙继续进行解题,即进入第3步。

    3. 第3句,
         乙将a和b相加求出sum的值

    4. 第4句,
        
    乙将sum的值用指定的格式写在黑板上:sum=?

    现在,我是甲方,计算机是乙方,道理相同,对机器描述的第2步做更改如下:

    a=123;b=456;          改成          scanf("%d%d",&a,&b);

    就可以让计算机在按步骤解题时,到达第2步停下来等待,直到我给出a、b的具体值,才再继续。

    完整的程序如下:

    #include<stdio.h>
    void main(){
    int a,b,sum;
    scanf("%d%d",&a,&b);
    sum=a+b;
    printf("sum=%d/n",sum);
    }

    程序运行如下:

    123 456 ↓      /*↓表示按Enter键,即按回车键*/

    sum=579

    例1.3
    #include<stdio.h >
    void main(){
    int max(int x,int y);
    int a,b,c;
    scanf("%d,%d",&a,&b);
    c=max(a,b);
    printf("max=%d/n",c);
    }

    int max(int x, int y)
    {
    int z;
    if(x>y)z=x;
    else z=y;
    return z;
    }

    让甲、乙、丙 3 个人合作完成求 2 个数中较大者的任务:

    甲:提供 2 个整数给乙

    乙:等待,直到甲给出 2 个整数 a,b

    呼叫丙,并且将 a,b 两数告诉丙

    等待,直到丙回复一个整数,

    将该整数用 ”max=?” 的格式写在黑板上。

    丙:将呼叫者给出的两个整数分别给变量 x 和 y

    找出 x,y 中较大的数,将其回复给呼叫者。

    将甲改称 ren

    乙改称 main

    丙改称 max 更具体且严格的描述如下:

    习题1.5<;/font>

    请参考如下图案输出到屏幕上的讲解:

    <;p>      *
        * *
      * * *

    习题1.5参考答案

    #include<stdio.h>
    void main(){

    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /n");

    printf("                        Very good!/n");

    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /n");

    }

    习题1.6
    1.给你一个标准c的较经典并且好理解的解答:
    int max(int x,int y)
    {
    int z;
    if(x>y)z=x;
    else z=y;
    return z;
    }
    main()
    {
    int a,b,c,max_abc;
    scanf("%d%d%d",&a,&b,&c);
    max_abc=max(a,b);
    max_abc=max(max_abc,c);
    printf("max=%d",max_abc);
    }
    参考文献:《C语言程序设计》 谭浩强 第一章例1.3

    2.求最大值,用函数的较精简的写法
    int max(int x,int y)
    {
    int z;
    if(x>y)z=x;
    else z=y;
    return z;
    }

    main()
    {
    int a,b,c,maxium;
    printf("please input 3 number/n");
    scanf("%d%d%d",&a,&b,&c);
    maxium=max(max(a,b),c); /*a和b大的那个数和c比较大小*/
       printf("%d",maxium);/*输出a,b,c三个当中最大的那个数*/
    getch();
    }

    3 要说写法较简单的,给你一个
    main()
    {
    int a,b,c,max;
    scanf("%d%d%d",&a,&b,&c);
    printf(" max=%d",((max=(a>b)?a:b))>c?max:c);
    getch();
    }

    4 实质相同的好理解的,给你一个
    main()
    {
    int a,b,c,max;
    printf("please input 3 number/n");
    scanf("%d,%d,%d",&a,&b,&c);

    if(a<b) max=b;
    else    max=a;

    if(max<c)
         max=c;

    printf("max=%d/n",max);
    }

    5 要输出最大值和最小值怎么写?

    给你一个标准c的较经典并且好理解的解答:
    #include<stdio.h>
    int max(int x,int y)
    {
    int z;
    if(x>y)z=x;
    else z=y;
    return z;
    }
    int min(int x,int y)
    {
    int z;
    if(x<y)z=x;
    else z=y;
    return z;
    }
    main()
    {
    int a,b,c,max_abc,min_abc;
    scanf("%d%d%d",&a,&b,&c);
    max_abc=max(a,b);
    max_abc=max(max_abc,c);
    printf("max=%d ",max_abc);
    min_abc=min(a,b);
    min_abc=min(min_abc,c);
    printf(" min=%d/n",min_abc);
    getch();
    }
    参考文献:《C语言程序设计》 谭浩强 第一章例1.3

    6 要输出a,b,c,d,e,f,g中的最大值和最小值怎么写?
    int max(int x,int y)
    {
    int z;
    if(x>y)z=x;
    else z=y;
    return z;
    }
    int min(int x,int y)
    {
    int z;
    if(x<y)z=x;
    else z=y;
    return z;
    }
    main()
    {
    int a,b,c,d,e,f,g,max_abc,min_abc;
    scanf("%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g);
    max_abc=max(a,b);
    max_abc=max(max_abc,c);
    max_abc=max(max_abc,d);
    max_abc=max(max_abc,e);
    max_abc=max(max_abc,f);
    max_abc=max(max_abc,g);
    printf("max=%d ",max_abc);
    min_abc=min(a,b);
    min_abc=min(min_abc,c);
    min_abc=min(min_abc,d);
    min_abc=min(min_abc,e);
    min_abc=min(min_abc,f);
    min_abc=min(min_abc,g);
    printf(" min=%d/n",min_abc);
    }
    参考文献:5

    7.输入a,b,c,输出最大值MAX,中间值MID,最小值MIN
    #include <stdio.h>
    main()
    {
    int a,b,c;
    int t;
    printf("/nintput a :");
    scanf("%d",&a);
    printf("/nintput b :");
    scanf("%d",&b);
    printf("/nintput c :");
    scanf("%d",&c);
    /*将a,b,c的值按由大到小重新排列*/
    if(a<b){t=a;a=b;b=t;}
    if(a<c){t=a;a=c;c=t;}
    if(b<c){t=b;b=c;c=t;}
    printf("max: %d mid: %d min: %d /n",a,b,c);
    getch();
    }

    8 请问有更经典的解法吗? 学习了循环和数组以后,再。。。。。。。。。

    OVER

  • 相关阅读:
    MYSQL数据库实验(存储过程与触发器)
    Markdown
    EXT文件系统
    Arch在VirtualBox虚拟机中挂载U盘
    U盘启动没有引导项
    安装ArchLinux的两篇博文
    Arch Linux上安装Win10
    Gentoo系统安装痕迹化记录
    物联网操作系统安全研究综述
    2013.06_多线程_多核多线程技术综述_眭俊华
  • 原文地址:https://www.cnblogs.com/huyong/p/2685756.html
Copyright © 2011-2022 走看看