编写程序,首先要理解题意,即要求实现什么功能,然后对其进行分析,最后再根据分析进行编程。
具体来说,编写程序的步骤:
1、理解题意。不要看到题目就开始编程,要仔细读题,确保理解了题目要求,即题目要求做什么,要实现什么功能。如果把题目理解错了,编写出来的程序肯定也是错的。
2、问题分析。理解了题目要求之后,也不要着急编程,还要对如何实现题目要求的功能进行分析,即解决这个问题需要几步,每一步做什么。分析与编程无关,就是把解决问题的步骤列出来。
3、编写程序。根据分析的结果,也就是解决问题的步骤,把每一步用C程序写出来。要确保编写的程序语句没有语法错误,这就用到了我们学到的基础知识了,比如定义变量、给变量赋值、运算符的使用、表达式的写法、输入数据、输出数据等。
下面以字母大小写转换的题目为例,了解一下编程的步骤。
题目:通过键盘输入一个大写字母,输出其小写字母。
01
—
理解题意
题目要求输入一个大写字母,输出其对应的小写字母。比如输入A,输出a。
有的同学可能会问,这个题目很好理解啊,干吗还要专门强调理解题意呢。的确,这个题目很好理解,没有需要深入思考的地方。但是,这只是因为这个题目要求比较简单,以后会遇到一些复杂的题目,需要认真思考题目的要求,理解题意就很重要了。即使是这样简单的题目,我们也不要大意,不要想当然,一不小心就可能犯错,拿出一点时间好好看看题目,确保真正理解了题意,这是很有必要的。
02
—
问题分析
题意我们已经搞清楚了,即输入一个大写字母,输出其对应的小写字母。那么如何实现这个功能呢?我们要对这个问题分析一下,看看解决这个问题需要几个步骤。
第1步:变量分析,也就是分析一下这个程序需要几个变量。基本上所有的程序都有数据,比如本题中输入的大写字母和输出的小写字母都是数据。而程序就是对数据进行处理的,比如本题中要通过大写字母计算小写字母,这就是数据处理。所以,程序是离不开数据的。数据又包括常量和变量。常量相对来说比较简单,大部分常量都是直接常量,可以直接使用。我们主要关注程序中有哪些变量,比如本题中就有两个变量,分别表示输入的大写字母和输出的小写字母,它们之所以是变量,是因为它们是可变的,比如输入的大写字母可以是‘A’,也可以是B,当然对应的小写字母也是变化的。这样就确定了本题需要两个变量,给这两个变量起个名字吧,也就是变量名,ch1表示输入的大写字母,ch2表示对应的小写字母,当然变量名不一定非叫ch1和ch2,也可以起其它的名字,只要是合法标识符就行。变量分析是问题分析的第一步,因为在程序中一般也是先定义变量,再进行进一步处理。
第2步:输入数据。输入一个大写字母,放到变量ch1中。输入变量时,最好给出提示信息,比如提示“请输入一个大写字母:”,这样更友好一些。
第3步:任务计算。根据ch1中的大写字母,计算出其对应的小写字母,怎么计算呢?根据ASCII的规律,小写字母的ASCII码比其对应的大写字母ASCII大32,。所以要计算小写字母的ASCII,只需要ch1表示的大写字母ASCII码加32,即ch1+32,然后放到变量ch2中。如果是小写字母转换为大写字母,就是减去32。
第4步:输出数据。根据题目要求,输出小写字母,即输出ch2。
03
—
编写程序
分析完成之后,既可以根据分析的步骤编写程序了,将分析的每一步用C程序写出来,但要保证程序语法正确。
第1步:定义两个变量ch1、ch2,分别表示输入的大写字母和对应的小写字母。这两个变量要存放的是字符,所以数据类型是字符型char。这条语句应写为:
char ch1,ch2;
注意char后面有空格,两个变量ch1和ch2之间有逗号,语句最后有分号,这几个符号都是英文的半角符号。
第2步:先显示提示信息,再输入数据。显示信息一般用printf函数,比如要显示“请输入一个大写字母:”的提示,该语句应写为:
printf(“请输入一个大写字母:”);
注意:因为要使用printf函数,所以需要添加头文件,在程序最前面写上:
#include <stdio.h>
另外,我们希望直接在提示信息的后面输入数据,所以不用换行,不需要在printf中加\n。
然后输入一个字符,输入字符使用函数getchar,将其放到ch1中,也就是将其赋值给ch1,语句如下:
ch1=getchar();
注意:getchar函数后面的括号中没有内容(即没有参数),但是括号不能省略,必须要写。
另外,getchar函数也是在头文件stdio.h中定义的,所以要添加头文件stdio.h,不过前面已经添加过了,不用重复添加。
第3步:计算小写字母,并放到变量ch2中。根据分析,我们知道小写字母就是对应的大写字母加32,所以语句如下:
ch2=ch1+32;
第4步:输出小写字母,即输出ch2。输出一个字符,可以使用函数putchar,语句如下:
putchar(ch2);
注意:putchar函数括号里面的ch2(参数)是要输出的字符,输出ch2变量的值,也就是输出对应的小写字母。
整个程序如下图所示:
说明:第9行使用putchar函数输出了一个换行符,功能就是换行,这条语句并不是必需的。
这样,这个程序就编写出来了,实现了题目要求。
04
—
其它方法
通过上面的题目分析和编程,问题已经解决了。不过我们还可以再思考一下,还有没有其它方法实现这个功能呢?答案是肯定的。一般来说,解决一个问题不止一个方法,当然对应的程序也不止一种。我们看看这个题目还有什么方法实现,还可以编写什么样的程序实现这个功能。
方法1:大家可以看看上面那个程序,我们可以对它修改一下。上面这个程序中用到了两个变量ch1和ch2,分别表示输入的大写字母和对应的小写字母。我们想一想,能不能用一个变量同时表示大写字母和对应的小写字母呢?是可以的。根据这个思路,我们修改一下上面的程序,修改后的程序如下图所示:
就是将原来的ch1和ch2都改成了ch,用一个变量ch1表示两个数据。其中,第7行也可以写为:
ch+=32;
也可以把第6行和第7行合并为一条语句:
ch=getchar()+32;
方法2:方法1中我们使用一个变量同时表示大写字母和对应的小写字母。我们再想一想,能不能一个变量都不要?也是可以的。因为输入了一个大写字母,加了32之后就马上输出了,没有其它的处理,也及时其它地方没用到这两个变量,所以我们可以简化,不用变量,直接把数据写到putchar函数的参数中。根据这个思路,我们再修改一下上面的程序,修改后的程序如下图所示:
第5行中,putchar函数的参数是getchar()+32,getchar()得到输入的大写字母,加32后变为小写字母,然后再使用putchar输出。
方法3:前面的方法都是使用getchar函数输入大写字母,使用putchar函数输出小写字母。其实也可以使用scanf函数输入大写字母,用printf函数输出小写字母。getchar函数和putchar函数是专门对字符进行输入输出的,而scanf函数和printf函数可以对任意类型的数据进行输入输出,包括字符类型。根据这个思路,我们再修改一下上面的程序,修改后的程序如下图所示:
第6行使用scanf函数输入一个字符(%c表示输入的是字符),然后放到变量ch1的地址(所以ch1前面有&,表示ch1的地址),其实就是通过键盘输入一个字符,然后赋值给ch1。
第7行是通过大写字母就是小写字母,跟前面程序的语句是一样的。
第8行使用printf函数输出小写字母,双引号里面的%c表示输出一个字符,即后面的ch2变量的值。
说明:这个程序里面有两个变量ch1和ch2,也可以修改为只有一个变量,你可以试着修改一下,我就不再写了。再思考一下,这个程序能不能一个变量都不要呢?不能,因为我们使用scanf函数输入字符的时候,需要一个变量存放这个字符。
可见,解决一个问题的方法有很多,我们至少要找到一种方法,有可能的话再想想还有没有更好的方法,然后编写相应的程序。
05
—
遗留问题
我们想了很多方法来解决这个问题,好像这个问题完美地解决了。那上面的程序还有没有问题呢?有!什么问题?问题就是:你在输入字符的时候,如果输入的不是大写字母怎么办?如果输入的不是大写字母,它加32之后当然就不是小写字母了。那这个问题怎么解决呢?需要判断输入的字符是不是大写字母,也就是说它在A~Z之间,如果是的话,加32就可以得到小写字母,如果不是就不可以。这要用到if语句来进行判断。这个问题我们留待后面的文章解决。