第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部分:开头、正文和结尾,和信比较如下图 :
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("* * *");
}
计算机执行此程序后屏幕显示如下:
为什么会这样呢?解释这个问题必须先说明一些关于屏幕的基础知识。。。。。
早期计算机的屏幕整个区域被分成25行80列,如下所示:总共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 请问有更经典的解法吗? 学习了循环和数组以后,再。。。。。。。。。
本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321436,如需转载请自行联系原作者