C语言程序设计

一、填空题(每空1分,共10分) 1. C语言的数据类型中,构造类型包括:数组、 和 。 2. 在C程序中,指针变量能够赋 值或 值。 3. C目标程序经 后生成扩展名为exe的可执行程序文件。 4. 设有定义语句 static char s[5」; 则s[4]的值是 。 5. 设x为int型变量。与逻辑表达式!x等价的关系表达式是 。 6. 若一全局变量只允许本程序文件中的函数使用,则该变量需要使用的存储类别是 。 7. 磁盘文件按文件读写方式分类可以为顺序存取文件和 。 8. 设有下列结构体变量xx的定义,则表达式sizeof(xx)的值是_________。 struct { long num; char name[20]; union{float y; short z;} yz; }xx; 二、单项选择题(每小题1.5分,共30分)

1. 设有定义int x=8, y, z; 则执行y=z=x++, x=y= =z; 语句后,变量x值是( ) A、0 B、1 C、8 D、9 2. 有以下程序 main( ) { int i=1,j=1,k=2; if((j++‖k++)&&i++) printf(\”%d,%d,%d\\n\”,i,j,k);} 执行后输出结果是( ) A、 1,1,2 B、2,2,1 C、 2,2,2 D、2,2,3 3. 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( ) A、 scanf( “%2d%2d%2d”,&i,&j,&k); B、 scanf( “%d %d %d”,&i,&j,&k); C、 scanf( “%d,%d,%d”,&i,&j,&k); D、 scanf( “i=%d,j=%d,k=%d”,&i,&j,&k); 4. 有以下程序 main() { int a=5,b=4,c=3,d=2; if(a>b>c) printf(\”%d\\n\”,d); else if((c-1>=d)= =1) printf(\”%d\\n\”,d+1); else printf(\”%d\\n\”,d+2); } 执行后输出结果是 ( ) A、2 B、3 C、 4 D、 编译时有错,无结果 5. 以下程序段 ( ) x=1; do { x=x*x;} while (!x); A、 是死循环 B、 循环执行二次 C、 循环执行一次 D、 有语法错误 6. 以下不能正确定义二维数组的选项是( ) A、 int a[2][2]={{1},{2}}; B、 int a[][2]={1,2,3,4}; C、 int a[2][2]={{1},2,3}; D、 int a[2][]={{1,2},{3,4}}; 7. 有以下程序 main() { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0; for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\\n”,s); } 程序运行后的输出结果是 ( ) A、11 B、19 C、 13 D、20 8. 以下程序的输出结果是 ( ) main() { char ch[3][5]={\”AAAA\”,\”BBB\”,\”CC\”}; printf(\”\\\”%s\\\”\\n\”,ch[1]); } A、\”AAAA\” B、\”BBB\” C、\”BBBCC\” D、\”CC\” 9. 有以下程序 #define f(x) x*x main( ) { int i; i=f(4+4)/f(2+2); printf(“%d\\n”,i); } 执行后输出结果是( ) A、28 B、22 C、16 D、4 10. 决定C语言中函数返回值类型的是( )。 A、return语句中的表达式类型 B、调用该函数的主调函数类型 C、调用函数时临时指定的类型 D、定义函数时在函数首部中所指定的类型(若缺省,则隐含为int型)。 11. 系统对预处理命令(如宏替换、文件包含、条件编译)的处理时机是( )。 A、编译源程序 B、编译源程序之前 C、连接目标文件时 D、运行程序时 12. 在位运算中,操作数每左移一位,其结果相当于( )

A、操作数乘以2 C、操作数除以2 B、操作数除以4 D、操作数乘以4

13. 下述描述中不正确的是( )。 A、字符型数组中可以存放字符串 B、可以对字符型数组进行整体输入、输出 C、可以对整型数组进行整体进行输入、输出 D、不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 14. 若有以下定义 int a[2][3],则对a数组第i行第j列元素的正确引用是( ) A、 *(*(a+i)+j) B、 (a+i)[j] C、 *(a+i+j) D、 *(a+i)+j 15. 有以下程序 void fun(char *a, char *b) { a=b; (*a)++; } main() { char c1=\’A\’,c2=\’a\’,*p1,*p2; p1=&c1 p2=&c2 fun(p1,p2); printf(\”%c%c\\n\”,c1,c2); } 程序运行后的输出结果是( )

A、 Ab B、 aa C、 Aa D、 Bb

16. 已定义以下函数 Fun (char *p2, char * p1) { while((*p2=*p1)!=\’ \\0\’){ p1++;p2++; }}  函数Fun的功能是( ) A、将p1所指字符串复制到p2所指内存空间 B、将p1所指字符串的地址赋给指针p2 C、对p1和p2两个指针所指字符串进行比较 D、检查p1和p2两个指针所指字符串中是否有\’\\0\’ 17. 设有以下结构体类型: struct st { char name[8]; int num; float s[4]; }student[50]; 并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下不正确的形式是( ) A、 fwrite(student,sizeof(struct st),50,fp); B、 fwrite(student,50*sizeof(struct st),1,fp); C、 fwrite(student,25*sizeof(struct st),25,fp); D、 for(i =0;i<50;i++) fwrite(student+i, sizeof(struct st),1,fp);

18. 若有说明语句

char a[ ]= \”It is mine\”;

char *p=\” It is mine\”;

则以下不正确的叙述是( )

A、 a+1表示的是字符t的地址

B、 p指向另外的字符串时,字符串的长度不受限制

C、 p变量中存放的地址值可以改变

D、 a中只能存放10个字符

19. 当调用函数时,实参是一个数组名,则向函数传送的是 ( )

A、 数组的长度

B、 数组的首地址

C、 数组每一个元素的地址

D、 数组每一个元素中的值

20. 设有变量说明 int a=3,b=6; char c; 若执行赋值语句 c=(a^b)<<2;

则c的二进制值是( )。

A、00011100 B、00000111 C、00000001 D、00010100

三、阅读程序,将运行结果写到各题右侧的空白处(每小题4分,共20分)

1.#include <stdio.h>

main()

{ char str[]=\”1234567\”;

int i;

for(i=0; i<7; i+=3)

printf(\”%s\\n\”, str+i);

}

2.#include <stdio.h>

main()

{ int i;

 for(i=0;i<3;i++)

 switch(i)

 { case 0: printf(\”%d\”,i);

 case 2: printf(\”%d\”,i);

 default: printf(\”%d\”,i);

}

}

3.#include <stdio.h>

main()

{

int i;

for (i=1;i<6;i++)

{

if (i%2){

printf(\”#\”);

continue; }

printf(\”*\”);

}

printf(\”\\n\”);

}

4.#include <stdio.h>

int b=1;

func (int p)

{

static int d=5;

d+=p;

printf (\”%d,\”,d);

return (d );

}

main ()

{

int a=3;

printf(\”%d\\n\”,func(a+func(b)));

}

5.#include <stdio.h>

struct stu

{ int num; char name[10]; int age;};

void py(struct stu *p)

{printf(\”%s\\n\”, (*p).name);}

main()

{

struct stu student[3]={{1001,\”Sun\”,25},{1002,\”Ling\”,23},{1003,\”Shen\”,22}};

py(student+2);

}

四、阅读程序或程序段,填空(每小题4分,共20分)

1.下面程序的功能是调用fun函数以删除字符串中指定的字符,请填空。

void fun(char s[],int c)

{ int i,j;

for(i=0,j=0;s[i]!=\’\\0\’;i++)

if ( )

s[j]=\’\\0\’;

}

main()

{ char str[]=\”abcdefgAbcd\”, ch;

scanf(\”%c\”,&ch);

fun(str,ch);

printf(\”%s\\n\”,str);

}

2.下面程序是按学生姓名查询其排名和平均成绩,查询可连续进行直到键入0时结束,请填空。

#include<string.h>

#define NUM 4

struct student

{ int rank;

char *name;

float score;};

stu[]={3,”Tom”,89.3,4,”Mary”,78.2,1, ”Jack”,95.1,2, ”Jim”,90.6};

main()

{ char str[10]; int i;

do

{ printf(\”Enter a name: \”);

scanf(\”%s\”,str);

for(i=0;i<NUM;i++)

if ( )

{ printf(\”%s,%d,%f\\n\”,stu[i].name, stu[i].rank,stu[i].score); break;}

if(i>=NUM) printf(\”Not found\\n\”);

}while(strcmp(str,”0”)!=0);

}

3.下面程序是用“顺序查找法”查找数组中的元素,请填空。

main()

{ int a[8]={25,57,48,37,12,92,86,33};

int i, x;

scanf(\”%d\”, &x);

for(i=0;i<8;i++)

if ( )

{printf(\”Found!The index is :%d\\n\”, i);break;}

if( )

printf(“Can’t found! \”);

}

4.下面程序由键盘输入一些字符,逐个把它们送到磁盘文件中,直到输入一个“!”为止,请填空。

#include<stdio.h>

main( )

{ FILE *fp;

char ch,fname[10];

printf(\”Input name of file: \\n\”); gets(fname);

if((fp=fopen(fname, \”w\”))= =NULL)

{printf(\”cannot open \\n\”);exit(0);}

printf(\”Enter data:\\n\”);

while ( ) fputc ( );

fclose(fp);

5.下面函数 fun 的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中, 例如:当s中的字符串为:\”ABCDEF\” 时,则t中的字符串应为:\”BBDDFF\”。

#include<string.h>

void fun (char *s, char *t)

{ int i,j;

for(i=0;i<=strlen(s);i++)

{ ;

;

}

}

main()

{ char s[100],t[100];

scanf(\”%s\”,s);

fun(s,t);

printf(\”The result is: %s\\n\”, t);

}

五、编程题(每小题10分,共20分)

1.编一个程序,将输入的一个字符串按反序存放,要求在主函数中输入字符串并输出反序后的字符串,在被调用函数中完成反序存放。例如:输入字符串“abcdefg”,输出“gfedcba”。

2.有一个班5位学生,各学4门课程,查找出有一门以上课程不及格的学生,打印出其全部课程的成绩。

运行C程序的步骤和方法

计算机不能直接识别和执行用高级语言写的指令,必须用编译程序把C源程序翻译成二进制形式的目标程序,然后再将该目标程序与系统的函数库以及其他目标程序连接起来,形成可执行的目标程序。

在编好一个C源程序后,怎样上机进行编译和运行呢?一般要经过以下几个步骤:

(1)上机输入和编辑源程序。通过键盘向计算机输入程序,如发现有错误,要及时改正。最后将此源程序以文件形式存放在自己指定的文件夹内,文件用.c作为后缀,生成源程序文件,如f.c

(2)对源程序进行编译,先用C编译系统提供的“预处理器”对程序中的预处理指令进行编译预处理。例如,对于#include<stdio.h>指令来说,就是将stdio.h头文件的内容读进来,取代#include<stdio.h>行。由预处理得到的信息和程序其他部分一起,组成一个完整的,可以用来进行正式编译的源程序,然后由编译系统对该源程序进行编译。

编译的作用首先是对源程序进行检查,判断它有无语法方面的错误,如有,则发出“出错信息”,告诉编程人员认真检查改正。修正程序后重新进行编译,如有错,再发出“出错信息”。如此反复进行,直到没有语法错误为止。这时,编译程序自动把源程序转换为二进制形式的目标程序,如果不特别指定,此目标程序一般也存放在用户当前目录下,此时源文件没有消失。

在用编译系统对源程序进行编译时,自动包括了预编译和正式编译两个阶段,一气呵成。用户不必分别发出二次指令。

(3)进行连接处理。经过编译所得到的二进制目标文件(后缀为.obj)还不能供计算机直接执行。前面也说明:一个程序可能包含若干个源程序文件,而编译是以源程序文件为对象的,一次编译只能得到与一个源程序文件相对于的目标文件,它只是整个程序的一部分,必须把所有的编译后得到的目标模块连接装配起来,再与函数库相连接成一个整体,生成一个可供计算机执行的目标程序,称为可执行程序,在Visual C++中其后缀为.exe,如f.exe。

即使一个程序只包含一个源程序文件,编译后得到的目标程序也不能直接运行,也要经过连接阶段,因为要与函数库进行连接,才能生成可执行程序。

以上连接的工作是由一个称为“连接编辑程序”的软件来实现的。

(4)运行可执行程序,得到运行结果。

以上过程如图所示,其中实线表示操作流程,虚线表示文件的输入输出。例如编辑后得到一个源程序文件f.c,然后在进行编译时再将源程序文件f.c输入,经过编译得到目标程序文件f.obj,再将所有目标模板输入计算机,与系统提供的库函数等进行连接,得到可执行的目标程序f.exe,最后把f.exe输入计算机,并使之运行得到结果。

一个程序从编写到运行成功,并不是一次成功的,往往要经过多次反复。编写好的程序并不一定能保证正确无误,除了用人工方式检查外,还须借助编译系统来检查有无语法错误。从图中可以看到:如果在编译过程中发现错误,应当重新检查源程序,找出问题,修改源程序,并重新编译,直到无错为止。有时编译过程未发现错误,能生成可执行程序,但是运行的结果不正确。一般情况下,这不是语法方面的错误,而可能是程序逻辑方面的错误,例如计算公式不正确、赋值不正确等,应当返回检查源程序,并改正错误。

为了编译、连接和运行C程序,必须要有相应的编译系统。目前使用的很多C编译系统都是集成环境(IDE)的,把程序的编辑、编译、连接和运行等操作全部集中在一个界面上进行,功能丰富,使用方便,直观易用。

写出源程序后可以用任何一种编译系统对程序进行编译和连接工作,只要用户感到方便、有效即可。20世纪90年代,Turbo C 2.0用得比较多,但Turbo C 2.0是用于DOS环境的,在进入Turbo C集成环境后,不能用鼠标进行操作,主要通过键盘选择菜单,不大方便。有的人改用Turbo C++ 3.0,它具有方便、直观和易用的界面,虽然它也是DOS环境下的集成环境,但可以用鼠标操作菜单,因此在Windows环境下使用也很方便。近年来,不少人用Visual C++对C程序进行编译。Visual C++ 6.0既可以对C++程序进行编译,也可以对C程序进行编译。

不应当只会使用一种编译系统,无论用哪一种编译系统,都应当能举一反三,在需要时会用其他编译系统进行工作。

公众号《吧啦一会儿》,手把手带你撸代码

C语言从入门到精通:C程序的组成

一个C程序可以由若干个源程序文件组成,每一个源文件可以由若干个函数和预处理命令以及全局变量声明部分组成,每一个函数由函数首部和函数体组成。c程序的结构如图所示。

作为一名程序开发人员,不可能每次编写都从最底层开发。比如在上例中,要输入一串字符到输出设备上,我们需要做的仅是调用printf()函数,至于\”Hello C! \”是怎样显示的,我们并不关心。我们认识printf()函数,在编写程序时调用它,更需要让程序认识它,这样才能使用printf()函数提供的功能,这就需要使用#include <stdio.h>,包含标准输入输出头文件,这样程序就能够认识printf()函数,并执行其功能。

C提供有丰富的函数集,我们称之为标准函数库。标准函数库包括15个头文件,借助这些函数可以完成不同的功能。

例如, 【范例2-1】中有#include<math.h>时,就可以使用该数学函数库头文件提供的如开平方函数sqrt(),求出半径radius为2时的开平方值1.414;又如,当程序包含头文件\”malloc.h\”时,就可以完成对内存申请和释放等功能。

2.2.2函数声明

标准C语言引入了新的更好的函数声明方法,即用函数原型指定函数更多的信息,通过函数原型可以将函数的名字和函数类型以及形式参数的个数、类型、顺序通知编译系统,以便在调用函数时,系统可以对照检查。

函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这3个元素被称为函数原型,函数原型描述了函数的接口。定义函数的程序员提供函数原型,使用函数的程序员就只需要对函数原型编辑即可。

函数声明的一般形式为:

函数返回类型函数名(参数类型1,参数类型2,……);

函数声明包括函数的返回类型和函数名,来看下面这个例子。

其中, int, void和float都是函数返回类型,也属于数据类型。fun, display和fn是所调用的函数名。也就是说, fun()函数返回的数据类型为整型int; display()函数返回的类型为void型,指函数无返回值; fn()返回的数据类型为浮点型float。

fun (int a, int b)数内部的a和b为形参,其参数类型都为int型。fn (float x )函数内部参数x的类型为float型。函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!

进一步对函数做解释,需要注意的有以下几点。

(1)函数名称后面必须有小括号,不能省略,这是函数的特征。

(2)函数结束必须有分号,不能省略。

(3)字符串结尾有这样的内容\”\\n\” ,它叫做转义符,表示的合义是把光标移动到下一行的行首,也就是回车换行,因为我们无法直接通过键盘输入换行的指令,所以需要使用转义符;又比如输出内容后希望返回该行的行首,重新输出内容,键盘上也没有对应的功能键,我们就可以使用回车符转义符\”\\r\”来代替。当然,转义还包含其他内容,后续拿节中会详细讲达。

2.2.3变量声明

在大多数语言中,在使用一个变量之前,都要对这个变量进行声明, C语言同样如此。那么,什么是变量的声明呢?有什么作用呢?变量的声明其实就是在程序运行前,告诉编译器程序使用的变量以及与这些变量相关的属性,包括变量的名称、类型和长度等。这样,在程序运行前,编译器就可以知道怎样给变量分配内存空间,可以优化程序。

变量的声明语句的形式如下:

变量类型名变量名

变量的声明包括变量类型名和变量名两个部分。来看下面的例子:

其中, int、double和char是变量类型名, num、area和ppt是变量名。其实,变量类型名也是数据类型的一种,就是说变量num是int类型, area是double类型, ppt是char类型。

变量类型名是C语言自带的数据类型和用户自定义的数据类型。C语言自带的数据类型包括整型、字符型、浮点型、枚举型和指针类型等。

变量名其实就是一个标识符,当然,标识符的命名规则在此处同样适用。除此之外,变量命名的时候还需要注意以下几点。

(1) 变量名区分大小写,变量Num和num是两个不同的变量。

(2) 变量的命名最好与实际应用有关联,例如: num一般表示数量, area表示面积等。

(3)变量的命名必须在变量使用之前。

提示

如果变量没有经过声明而直接使用,则会出现编译器报错的现象。

下面用一个例子来验证声明必须在变量使用的前面。

【范例2-2】验证未声明的标识符不可用。

(1) 在Visual C++ 6.0中,新建名为\”undeclaredvar.c\”的【Text File】文件。

(2)在编辑窗口中输入以下代码(代码2-2.txt) 。

【运行结果】

编译后显示出错,信息如下:

【范例分析】在此例子中,没有对标识符num进行声明就直接引用,编译器不知道num是什么,所以调试时编译器就会报错。

【拓展训练】

在第3句和第4句之间插入语句:

或者:

检验一下程序能否运行,是否还报错。

2.3主函数

每个C程序必须有而且只有一个主函数,也就是main()函数,它是程序的入口。main()函数有时也作为-种驱动,按次序控制调用其他函数, C程序是由函数构成的,这使得程序容易实现模块化; main()函数后面的\”()\”不可省略,表示函数的参数列表; \”{\”和\”}\”是函数开始和结束的标志,不可省略。

下图是对主函数调用其他函数的说明。

主函数main()在程序中可以放在任何位置,但是编译器都会首先找到它,并从它开始运行。它就像汽车的引擎,控制程序中各部分的执行次序。下图是对主函数各部分名称的说明。

在前面的两个范例中,主函数main()的部首都是int类型, int是整数integer单词的缩写,表示返回给系统的数据类型是整型数据,返回值是0,在return句中体现了出来。

2.4函数定义区

C语言编译系统是由上往下编译的。一般被调函数放在主调函数后面时,前面就该有声明,不然C语言由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。

函数定义:

返回类型函数名(参数类型1参数名1,…,参数类型n参数名n)

在程序中,如果main()函数在前,必须在mian()中写函数声明;如果函数在main()前面,可以不在main()中写函数声明!

下面看一个有关函数声明和函数定义的综合例子,比较一下它们有何不同。

2.5注程

读者可能已经注意到,很多语句后面都跟有\”/*\”和\”*/\”符号,它们表示什么含义呢?

在前文已经说过,我们在编辑代码的过程中,希望加上一些说明的文字,来表示代码的含义,这是很有必要的。

费了很大精力,绞尽脑汁编写的代码,如果没有写注释或者注释得不够清楚,一年后又要使用这段代码时,当年的思路全部记不得了,无奈之中,只得重分析、重理解。试问,因为当初一时的懒散造成了今日的结局,值得吗?又比如,一个小组共同开发程序,别人需要在该小组写的代码上进行二次开发,如果代码很复杂、没有注释,恐怕只能用4个字形容组员此时的心情:欲哭无泪。所以,编写代码时最好书写注释,这样做有百利而无一弊。

注释的要求如下。

(1)使用\”/*\”和\”*/\”表示注释的起止,注释内容写在这两个符号之间,注释表示对某语句的说明,不属于程序代码的范畴,比如【范例1-1】和【范例2-1】代码中\”/*\”和\”*/\”之间的内容。

(2) \”/\”和\”*\”之间没有空格。

(3)注释可以注释单行,也可以注释多行,而且注释不允许嵌套,嵌套会产生错误,比如:

/*这样的注释/*特别*/有用*/

这段注释放在程序中不但起不到说明的作用,反而会使程序产生错觉,原因是“这样”前面

的\”/*\”与“特别”后面的\”*/\”匹配,注释结束,而“有用*/\”就被编译器认为是违反语法规则的代码。

2.6代码的规矩

从书写代码清晰,便于阅读、理解、维护的角度出发,在书写程序时应遵循以下规则。

(1)一个说明或一个语句占一行。我们把空格符、制表符、换行符等统称为空白符。除了字符串、函数名和关键字, C忽略所有的空白符,在其他地方出现时,只起间隔作用,编译程序对它们忽略不计。因此在程序中使用空白符与否,对程序的编译不产生影响,但在程序中适当的地方使用空白符,可以增加程序的清晰性和可读性。

例如下面的代码:

(2)用“{\”和\”}\”括起来的部分,通常表示程序某一层次的结构。\”{\”和“}\”一般与该结构语句的第1个字母对齐,并单独占一行。

例如下面的代码:

(3)低一层次的语句通常比高一层次的语句留有一个缩进后再书写。一般来说,缩进指的是存在两个空格或者一个制表符的空白位置。

例如下面的代码:

(3) 在程序中书写注释,用于说明程序做了什么,同样可以增加程序的清晰性和可读性。

(4) 以上介绍的4点规则,大家在编程时应力求遵循,以养成良好的编程习惯。

2.7高手点拨

文件中声明函数,就像变量可以在头文件中声明,而在源文件中定义一样,函数也可以在头文件中声明,在源文件中定义。把函数声明直接放在每个使用该函数的源文件中是大多数新手习惯并喜爱的方式,这是合法的。但是这种方式古板且易出错。解决方法就是把函数的声明放在头文件中,这样可以确保指定函数的所有声明保持一致。如果函数接口发生变化,则只需修改其唯一的声明即可。

将提供函数声明的头文件包含在定义该函数的源文件中,可使编译器能检查该函数的定义和声明是否一致。特别地,如果函数定义和函数声明的形参列表一致,但返回类型不一致,编译器会发出警告或出错信息来指出差异。

那么学过了函数声明与函数定义,它们到底有什么不同呢?我们知道函数的定义是一个完整的函数单元,它包含函数类型、函数名、形参及形参类型、函数体等,并且在程序中,函数的定义只能有一次,函数首部与花括号间也不加分号。而函数声明只是对定义函数的返回值类型进行说明,以通知系统在本函数中所调用的函数是什么类型。它不包含函数体,并且调用几次该函数就应在各个主调函数中作相应声明,函数声明是一个说明话句,必须以分号结束!

学习了这一堂的内容,读者是不是对C语言有更好的理解呢?下面了解一下我们在使用函数时,需要注意的一些问题。

1、函数声明可以省略形参名,但是函数定义的首部必须写出所有形参名并给出其对应的数据类型。

2、函数原型的主要目的是为了声明函数返回值类型以及函数期望接受的参数的个数、参数类型和参数顺序。

3、如果程序中没有某个函数的函数原型(没有说明) ,编译系统就会用第一次出现的这个函数(函数定义或函数调用)构造函数原型。

4、在默认下,编译系统默认函数返回值为int。

在编写函数时的常见错误:当调用的函数与函数原型不相匹配时,程序会提示语法错误,并且当函数原型和函数定义不一致时,也会产生错误。

本文节选自《C语言从入门到精通(第2版)》

本书面向C语言的零基础读者,介绍基础入门知识和实际操作技巧。全书紧贴软件开发的实际需求,首先向读者展示语言的背景知识和应用范围,之后通过实例和自测,系统讲解相关知识点,同时兼顾实际开发项目经验。为了增强实用性,光盘中还特别赠送了精选的考试认证、求职面试等题库,供读者研究学习。最后,为帮助初入职场的从业者顺利进入角色,还在光盘中赠送了职业规划建议及相关开发文档。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。