C语言教学指导 1-结构化程序设计

  • 内容
  • 评论
  • 相关

第一章实战经验

  1. 赋值问题,例如:在生活中一般我们将x,y和的值赋给a时是这样写的x+y=a;但是在C语言这门语言中赋值时是把最终的结果a放在最前面,即a=x+y。

解释:在日常生活中=是表示等于的意思,而c语言中的=是指赋值。

  1. 经典问题“鸡兔同笼”,对于这个问题很多学生都没有准确的思路,但是C语言和我们普通的数学计算的思路是相同的,我们都知道鸡是两只脚一个头,兔子是四只脚一个头。

所以说以数学的想法我们是这样想的:假设鸡有x只,兔有y只那么头一共有:x+y个;那么脚一共有2*x+4*y个;那么在C语言中我们是怎么样实现这个步骤的呢?以书本上的例题为例:设头为a,脚为b。x+y=a;2*x+4*y=b;以数学的思路我们求出x的代数式为4*a-b)/2=x;(b-2*a)/2=y;然而在C语言中我们是这样写的x=(4*a-b)/2;y=(b-2*a)/2;此时在输入a,b的值即可求出鸡与兔的个数。

提示:如何将生活中的数学问题转化为c语言的代码是编程的一个重要步骤。

  1. 输入输出符号问题

例如:输入打成scan(scanf),输出打成print(scanf)均少写一个f。

提示:对c语言常用单词要熟记于心。

  1. 简单的输入问题

例如:输入时有可能会打成这样scanf(“%d”,n);其中的’&’地址符会忘记。或者”%d”后边的逗号忘记,或者括号后边的分号忘记等。

正确的应该是:scanf(“%d”,&n);.。

  1. 简单的输出问题

例如:输出时printf(“%d\n”,&n);会多加一个’&’地址符。

注意:’\n’换行符根据题目的要求加入或者不加。

正确的应该是::scanf(“%d\n”,n);。

  1. 关于”Hello,word!”的输入输出问题。在输出时printf(”Hello,word!\n”);

注意:其中不需要用%d来进行输出。

  1. 对于指定信息输出,可以按照题目要求原样输出

例如:printf(“         \n”);空格处可以填写一些固定的值或字符来输出。

关于头文件后面的.h不能忘记。

正确的应该是::<stdio.h>

  1. 注意编写程序是不要将字母打错。

第一章 实战练习

  1. 简单的输出

没有任何输入,只需要在程序中输出”Hello,word!”即可。

  1. A+B问题

给定两个整数A,B的值,求出A和B的和,并将和sum输出。

从键盘输入两个整数A,B,求出A和B的和,并将和sum输出。

  1. 比大小

从键盘输入两个整数A,B,输出两个整数中较大的一个。

第二章 实战经验

  1. C语言是字符大小写敏感的语言,即变量GOOD、good、Good、GooD等是完全不同的4个变量。

例如:int GOOD;good=10;就是错误的因为你定义的是GOOD但是调用的是good;。

正确的应该是::int GOOD; GOOD=1。

  1. 符号常量和常量不同于变量,他们的值再不允许被改变,也不能再被赋值。

例如#define PI 3.14

PI=5;

是错误的,因为PI已经定义为符号常量,不能更改。

  1. 凡是未被定义的变量名在程序段中不可以进行操作,否则会被报错。
    例如:

#include<stdio.h>

int main()

{

int a;

b=10;

return 0;

}//是错误的.

正确的应该是:

#include<stdio.h>

int main()

{

int a;

a=10;

return 0;

}

  1. 给字符形赋值只能用单引号括起来,不能用双引号或其他括号。字符常量只能是单字符,不能是字符串。

例如:char s; s=”tk”;是错误的,将赋值的字符用双引号括起来了,同时还让字符常量等于字符串了。

正确的应该是::s=’t’;。

  1. 字符串可以是字符集中任意字符。但数字被定义为字符后就不能参与数值运算。

例如’10’和10是不同的。因为’10’已经是字符了,不能参与运算。

  1. 用string函数中的strlen(char*)计算字符串长度时,统计数字结果不包括字符串结束标志”\0’。
  2. 复合赋值符

例如:

a+=b等价于a=a+b;

a-=b等价于a=a-b;

a*=b等价于a=a*b;

a/=b等价于a=a/b

;a%=b等价于a=a%b。

复合赋值符右边的表达式是一个运算整体,不能把它们分开。

例如:a*=b+1等价于a=a*(b+1)。

  1. 自增、自减运算

例如:

++i(先加1,再运算),i++(先运算,后加1),i--(先运算,后减1),--i(先减1,再运算)。只能对变量进行这种运算,不可以对常量进行此类操作。

例如:7++;是错误的,因为这句话相当于7=7+1;是错误的。

正确的应该是::a=7;a++;。

  1. 要判断两个量是否相等时,要确保使用”==”运算符,而不是”=”。”=”用于赋值。

例如:if(a=1);是错误的。

正确的应该是::if(a==1);。

  1. 计算表达式a!=b==c-2,先算”-“,后做”!=”,最后做”==”。

计算表达式a=b==c-1,先算”-“,后做”==”,最后”=”。

  1. 条件运算符一般形式为条件?达式1:达式2 如果条件等于true 结果就是表达式1的值,如果条件等于false结果就是表达式2的值。

例如:a=1,b=2;

c=a>b?a:b;

相当于 if(a>b)  c=a;

elsec=b;

  1. if ,while,else后面不需要加”;”一般每写完都要加”;”,表示这一行写完了。

例如:while(a!=0);

{

a--;

}

是错误的因为在while()后加了;

正确的应该是:

while(a!=0)

{

a--;

}

 

  1. scanf( )中各变量要加地址操作符,也就是变量名前加的那个”&”。如果输入字符串,无需加&

例如:char a,b[100]; scanf(“%d”,a);scanf(“%s”,&b);是非法的。

正确的应该是::char a,b[100];scanf(“%d”,&a);scanf(“%s”,b);。

  1. 当心中文的字符和英文的字符,用中文的字符会报错。

第二章 实战练习

  1. 奇数偶数

输入一个整数,判断该数是奇数还是偶数。

如果该数是奇数就输出“odd”,偶数就输出“even”(输出不含双引号)。

  1. 美元和人民币

美元越来越贬值了,手上留有太多的美元似乎不是件好事。赶紧算算你的那些美元还值多少人民币吧。假设美元与人民币的汇率是1美元兑换6.5573元人民币,编写程序输入美元的金额,输出能兑换的人民币金额,输出保留2位小数。

  1. 求圆的周长和面积

输入圆的半径,求圆的周长和面积。

要求定义圆周率为如下宏常量#define PI 3.14159 输入半径r的值,为一实数。输出一行,包括周长和面积。数据之间用一个空格隔开,数据保留小数后面两位。

  1. 圆柱体表面积

输入圆柱体的底面半径r和高h,计算圆柱体的表面积并输出到屏幕上。要求定义圆周率为如下宏常量#define PI 3.14159 输入两个实数,为圆柱体的底面半径r和高h输出一个实数,即圆柱体的表面积,保留2位小数。

  1. 求最大值

编写一个程序,输入a、b、c三个值,输出其中最大值。

  1. 大小写转换

输入一个字母,若是小写字母,则变为大写输出,否则,原样输出。

  1. 字符类型判断

从键盘输入一个字符,判断该字符是否大写字母、小写字母、数字字符或其他字符。分别输出对应的提示信息

如果该字符是大写字母,则输出“upper”;若是小写字母,则输出“lower”;若是数字字符,则输出“digit”;若是其他字符,则输出“other”。(输出不含双引号)。

  1. 两整数排序

从键盘输入两个整数x,y,按从小到大的顺序输出它们,数据之间以空格间隔。

  1. 三整数排序

从键盘输入三个整数x,y和z,按从大到小的顺序输出它们的值。

  1. 求等差数列的和

给出三个整数,分别表示等差数列的第一项、最后一项和公差,求该数列的和。

第三章 实战经验

  1. 常量在程序运行过程中,其值不能被改变的量。

如下例中的a和3

例如:

#include<stdio.h>

int main()

{

int a=2,b;

b=a+3;

printf(“%d”,b);

return 0;

}

  • 字符常量:包括普通字符常量和转义字符常量。
  • 普通字符:用一个单撇号括起来的一个字符,例如:’ab’,’12’是非法的。

正确的应该是:’a’,’A’,’3’。

  • 符号常量:用#define指令,指定用一个符号名称代替一个常量,且语句后面没有分号。

例如:”#define PI 3.141;”是非法的。

正确的应该是:”#define PI 3.141”。

  1. 字符串常量要用双引号。

例如:’boy’,’123’是非法的。

正确的应该是:”boy”,”123”。

  1. 变量必须“先定义,后使用”。

例如:a=3是非法的。

正确的应该是:inta;a=3。

  1. 常变量在程序运行过程中其值不能改变的变量。

例如:const float pi=3.1415926是正确定义。

  1. 标识符用来对变量、符号常量、函数、数组、类型等命名的有效有效字符序列。C语言规定:标识符只能由字母、数字和下划线三种字符组成,而且第一个字符必须是字母或下划线。

例如:”12a”是非法的。

正确的应该是:”a12”。

  1. 整型数据的分类
    • 基本整型(int型),占2或4个字节(由C编译系统自行分配)。
    • 短整型(short int),如果编译系统给int数据分配4个字节,短整型就是2个字节。
    • 长整型(long int),在Visual C++6.0中分配给long数据4个字节。
    • 双长整型(long longint),一般分配8个字节(C99新增的类型)。
  2. 实数是以指数形式存放在存储单元中的。一个实数只有一个规范化的指数形式。

例如:0.314159*101就是3.14159的规范化的指数形式。

  1. 在各种字符集(包括ASCII字符集)包括127个字符。
  2. 浮点型数据包括:float型(单精度浮点型)占4个字节、double型(双精度浮点型)占8个字节和long double型(长双精度型)不同的编译系统分配它不同的字节16或8(Visual C++6.0)。
  3. 两个实数相除的结果是双精度实;两个整数相除的结果为整数,取整后向零靠拢(例如.5/3=1,-5/3=-1);%运算符要求参加运算的运算对象(即操作数)为整数(如8%3=2);除%以外的运算符的操作数可以是任何算数类型。
  4. 自增、自减运算符:作用是使变量的值加1或减1,

例如:

++i,--i;(在使用i之前,先使i的值加(减)1)

i++,i--;(在使用i之后,先使i的值加(减)1)

注意:自增和自减运算符只能用于变量,而不能用于常量或表达式。

例如:5++是非法的,(a+b)++都是不合法的。

正确的应该是:i++;。

  1. 不同类型数据间的混合运算
  • +、-、*、/运算的两个数中有一个数为float或double型,结果是double型,因为系统将所有float型数据都先转化成double型,然后再进行运算。
  • 如果int型与float或double型数据进行运算,先把int型和float型转换成double型,然后再进行运算,结果是double型。
  • 字符型数据(char)与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。例如:12+’a’=12+97=109。
  1. 强制类型转换运算符

可以利用强制类型转换运算符将一个表达式转换成所需类型。

例如:

(double)a (将a转换成double类型)

(int)(x+y)将x+y的值转换成int型)

(float)(5%3)(将5%3的值转换成float型)

其一般形式为:

(类型名)(表达式)

注意:表达式要用括号括起来。如果写成(int)x+y;

则是将x转换成int型再与y相加。

  1. 每个语句的后面分号不能漏写。

例如:a=34是非法的。

正确的应该是:a=34;。

  1. 注意”=”是赋值运算符;”==”是关系运算符。”=”的左边不能做运算。

例如:b+c=a;是不合法的,a=b+c;是合法的。如果想表达a等于b时要使用”==”,而不能使用”=”。

例如:if(a=b)是非法的

正确的应该是::if(a==b)。

  1. 凡在程序中要用到数学函数库中的函数,都应当“包含”h 头文件。
  2. 用printf函数输出数据printf函数的一般格式为:

printf(格式控制,输出列表);其中是没有地址符号的。

例如:printf(”%&d,%&c\n”,a,b);是非法的。

正确的是:printf(”%d,%c\n”,a,b);。

  1. 格式控制

d格式符。用来输出一个有符号的十进制整数。

c格式符,用来输出一个字符;s格式符,用来输出一个字符串。

f格式符,用来输出实数(包括单、双精度、长双精度),以小  数输出有几种方法:

  • 基本型,%f;
  • 指定数据宽度和小数位数,用%m.nf(m,指定了输出的数据占m 列其中小数占n列);
  • 输出的数据左对齐,用%-m,nf。
  1. 如果对几个变量赋予同意初值,不应该连写等号。

例如:int a=b=c=3;是非法的

正确的是:int a=3,b=3,c=3;。

  1. 用scanf函数输入数据要注意

scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。

例如:scanf(”%d”,a);是不合法的。

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

例如:

scanf(“%d,%d,%d”,&a,&b,&c);

在输入数据a,b,c的值时,应输入1,2,3;而不是:1 2 3。

  1. 注意:使用scanf函数输入数据时,在两个数据之间要插入一个空格(或其他分隔符),以使系统能区分两个数值。
  2. putchar()函数的参数是字符类型的,它的作用是输出字符,它不能接受整数参数。

例如int a; getchar(a);是错误的。

正确的应该是:char a;getchar(a);。

  1. getchar函数没有参数,作用是从计算机终端(键盘)输入一个字符,并且只能接收一个字符,想输入多个字符要用多个getchar()。
  2. C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的。printf和scanf这两个名字不是C语言的关键字,而只是库函数的名字,如果不定义包含库函数的头文件,则不能使用这些函数。
  3. C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。

其中有:putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输出字符串)和gets(输入       字符串)。

  1. 应养成这样的习惯:

只要在本程序文件中使用标准输入输出库函数时,一律加上#include<stdio.h>指令。stdio是standard input&output(标准输入和输出)的缩写。文件后缀中“h”是header的缩写。

  1. 用字符数组做字符串输入时,不能加&符号,因为数组名代表数组地址。

例如char ch[100];scanf(“%s”,&ch);这样是错误的。

正确的是scanf(“%s”,ch);。

  1. 用字符做比较的时候忘记加单引号’

例如比较字符a是否是’?’,strcmp(a,?);这是错误的。

正确的应该是:strcmp(a,’?’)。

  1. 调用pow()、sqrt()等数学函数库函数时,不要忘记头文件”math.h”。
  2. 输入的类型和输出的类型不一致导致运行错误。

例如:canf(“%d”,&a);printf(“%lf”,a);这是错误的。

正确的应该是:scanf(“%d”,&a);printf(“%d”,a);。

第三章 实战练习

  1. 素数判定

输入一个正整数n,判断n是否是素数,若n是素数,输出”Yes”,      否则输出”No”。

2 . 构成三角形

给出三个数,看能不能构成三角形,       输入数据第一行包含一个数M,接下有M行,包含三个数A,B,C。如果三个数A,B,C能组成三角形的话,输出YES,否则NO。

其中A,B,C <1000;

简单吧,那么来AC吧!

 

3.输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:

90~100为A;

80~89为B;

70~79为C;

60~69为D;

0~59为E;

输入整数N,表示测试数据的组数(N<10),每组测试数据占一行,由一个整数M组成(0<=M<=100)。对于每组输入数据,输出一行。

 

  1. 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。
  2. 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。
  3. 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为

F(n)=1 ...........(n=1或n=2)

F(n)=F(n-1)+F(n-2).....(n>2)

现要你来求第n个斐波纳奇数。(第1个、第二个都为1)

6.水仙花数

请判断一个数是不是水仙花数。

其中水仙花数定义各个位数立方和等于它本身的三位数。如果是水仙花数输出”yes”

否则输出”no”。

7.现在要写一个程序,输入三个整数,输出从小到大的结果。

8.已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出”No answer”。

9.输入一行字符,以回车符作为输入结束的标志。统计其中数字字符的个数。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注