第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

posted @ 2009-03-25 11:47  .NET快速开发框架  阅读(324)  评论(0编辑  收藏  举报