c语言期末复习总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
针变量。
%c对应字符型变量的地址。
二、printf函数的一般形式: printf(“静态字符和格式控制符”,输出项表列) %f格式即可以输出单精度实型也可以输出双精 度实型的值。 %c和%d在可见字符的范围内可以互换输出对 应项。 %s对应的输出项是字符串的首地址,即字符数 组的名字或是已经指向字符数组的指针变量。
存储类别名称 定义位置 外部变量 外部静 态变量 内部静 态变量
自动变量 寄存器变量
定义语法举例
作用域
整个程序
生存期
程序开始 至结束 程序开始 至结束 程序开始 至结束 函数执 行期间 函数执 行期间
默认值
函数外部
函数外部 函数内部 函数内部 函数内部
int x;
0 0 0
不定 不定
定义点 static int x; 至文件尾 定义所在 static int x; 函数内 定义所在 [auto] int x; 函数内 定义所在 register int x; 函数内
第四章 数据的输入和输出
一、scanf函数的一般形式:
scanf(“ 静态字符和格式控制符”,地址表列)
格式控制字符串中格式说明符的个数和地址表
列的项数相等,顺序为从左到右依次对应。 scanf函数按格式控制字符串的格式输入信息, 输入过程是函数从左到右逐个考察格式控制字符串 的每个字符,如果该字符是普通字符,则必须按照
静态变量和函数外部定义的全局变量,其初始化是在编译 阶段完成的,且只赋初值一次。
例:以下程序的功能是将输入的十进制正整数转换为二进制, 并输出转换结果。 #include "stdio.h" void transfer(int n) { int i, a[20]; for(i=0;n!=0;i++) { a[i]=n%2; n=n/2; } for(i--;i>=0;i--) printf("%d ",a[i]); } main() { int n=5; scanf("%d",&n); transfer(n); }
main() { int choice; do { printf(" ====功能选项====\n"); printf(“ 1—求水仙花数 \n"); printf(“ 2—求素数\n"); printf(“ 3—求Faibonacci数列 \n"); printf(" 0--退 出 \n"); printf("请选择: "); scanf("%d",&choice); switch(choice) { case 1: narcissus(); break; case 2: prime(); break; case 3: fabonacci(); break; case 0: break; } }while(choice!=0); printf("谢谢使用! \n"); }
命令需要单独占一行。
七、一个#include 命令只能包含一个指定的文件,若要包含
多个文件,则需要使用多个#include命令。 采用# include < stdio. h >形式,C编译系统将在系统指定 的路径(即C库函数头文件所在的子目录)下搜索<>中指定文件 ,称为标准方式。 采用# include“stdio. h”形式,系统首先在用户当前工作的 目录中搜索要包含的文件,若找不到,再按系统指定的路径搜索 包含文件。
}
A.9 ,7 B.12 ,7 C13,8 D14,9
5.程序的输出结果是: abc main() {char s[]="abcdef"; s[3]='\0'; printf("%s\n",s);}
第八章 函数
一、关于void的用法
1、 void可在子函数的形参表中出现,表示该子函数没有形 参;形参表中没有任何参数也没有void,也表示该子函数 没有形参。 2、如果void出现在子函数首部的最前面,即在函数类型名的 位置上,则表示该子函数只能以语句的形式被调用,而不 能以表达式的形式被调用。 二、在以下的任一种情形下,可以不在调用函数中对上机用户定 义的被调用函数进行声明 1、被调用函数的位置在调用函数之前。 2、在所有函数之前,在函数的外部对被调用函数进行了声明。 若需要对被调用函数进行声明,最好将声明写成函数原型的形 式。
三、函数的实参和形参的个数要相同,相对位置要对
应,类型要符合赋值兼容的原则。
四、函数体内定义的变量只在定义所在的函数体内有 效,形参也只在函数体内有效。 五、注意return 语句的应用。程序内可有多个return 语句,执行时遇到任意一个return语句,执行流程都返回到 调用函数的调用位置,继续执行调用语句。如果定义函数的 类型为void ,则函数体内可有“return;”语句,但不可以有 “return 表达式;”语句。 六、C提供的预处理功能主要有宏定义、文件包含和条 件编译3种,为了与其他C语句相区别,所有的预处理命令 均以“#”开头,语句结尾不使用分号“;”,每条预处理
定义数组时利用初始化的方法,给数组整体赋初值。
1. 下面正确定义数组的语句是( A )。 A. int x[][2]={2,1,3,2} B. int x[][]={2,1,3,2} C. int x[2][]={2,1,3,2} D. int x[2,2]={2,1,3,2}
2. A. B. C. D.
/*【程序改错】功能:求1到30的阶乘的和。 ------------------------------------------------------*/ #include "stdio.h" main() { int n,j; float s=0.0,t=1.0; for(n=1;n<=30;n++) { /**********error**********/ s=1; /* t=1; */ for(j=1;j<=n;j++) /**********error**********/ t=t*n; /* t=t*j ; */ /**********error**********/ s+t=s; /* s+=t; */ } /**********error**********/ printf("jiecheng=%d\n",s); /* %f */ }
对于嵌套的 if 语句,每个 else 都和它左方或上
方最近的,且缺少 else 的 if 配对。
else 子句不能作为语句单独使用,它必须是 if语 句的一部分,与 if 配对使用。
第六章 循环结构
一、循环初值的选择 求和:工作变量通常初值为0; 求积:工作变量通常初值为1。 二、退出循环的条件 1、条件判断表达式的值为0 ; 2、循环体内执行了break语句; 3、循环体内执行了goto语句,并且与goto语 句配合的语句标号在循环体外。 4、循环体内执行了return语句。 三、循环体是一个内嵌语句 可以是一个单语句,还可以是一个复合语句, 甚至还可以是一个空语句。 四、for循环和while循环先判断后执行循环体;do while 循环先执行一次循环体,然后再判断。
不能把字符串Hello!赋给数组a的语句是( B )。 char a[10]={ 'H', 'e', 'l', 'l', 'o', '! '}; char a[10]; a="Hello!"; char a[10]; strcpy(a, "Hello!"); char a[10]= "Hello!" ;
void fabonacci() /* 求斐波那契数列的前n项*/ { long f1,f2; int k,n; printf(“请输入一个数:"); scanf("%d",&n); f1=f2=1; for(k=1;k<=n;k++) { printf(“%8d%8d”,f1,f2); if(k%20) printf(“\n”); f1=f1+f2; f2=f1+f2; } }
值传递
以下程序的运行结果是:B #include <stdio.h> staic int x=10; main() { int x=3; void f(); f(); x- -; printf(“x=%d”,x); } void f() { x++; } A.10 B.2 C.11 D.3
/* 编写程序完成菜单功能。提供三种选择*/
#include "stdio.h" void narcissus() /* 求水仙花数*/ { int k,a,b,c,d; for(k=100;k<1000;k++) { a=k/100; b=k%100/10; c=k%10; d=a*a*a+b*b*b+c*c*c*c; if(d==k) printf(“%5d\n”,k); } } void prime() /* 求素数 */ { int m, i, k; scanf("%d",&m); k=m-1; for(i=2; i<=k; i++) if(m%i==0) break; if(i>=k+1) printf ("%d is a prime number\n", m); else printf("%d is not a prime number\n", m); }
第七章
数组名取地址。
数组
一、数组名是地址。%s格式输入字符串,不可以再对
二、数组名是地址常量(形参数组名除外),不可以利用
赋值语句给数组名赋值(形参数组名除外) 。但可在 三、下标变量的下标值系统默认从0开始,n-1结束,即 下标值最大为定义数组时的元素个数减 1 。注意执 行过程中数组超界的问题。 四、仅可以使用字符数组存放字符串,而不能用整型数 组存放字符串。一个字符变量只能存放一个字符。
if(x==7) printf(“%d”,x); /*内嵌语句没有得到执行*/
if(x=8) printf(“%d”,x); /*输出结果为8*/
程序段1: if(x>=0) if(x>0) y=1; else y=0; else y= -1;
程序段2: y = -1; if ( x!=0 ) if ( x>0 ) y =1; else y = 0;
第五章 选择结构
if语句的一般形式:
if(表达式) 语句1 [else 语句2 ]
if语句的执行过程是:首先计算表达式的值,
然后判断表达式的值,若表达式的值为真(非0)
,则执行语句1;否则执行语句2。然后退出语句,
接着执行下面的语句。
注意: 由于应用赋值运算符“ =” 产生的错 误
例如程序段: int x=0;
3. 指出程序中的错误 main( ) { char a[10]; scanf(“%s”,&a ); puts(a); }
4. 程序中二个字符串的长度是( A )
#include "string"
main() { char s[]="\\141\141abc\t"; char r[]= "\\\"\abc\"\\"; printf("%d,%d\n",strlen(s), strlen(r));
/* 程序填空题目:本程序的功能是输入一段数字后,将输入的 数字颠倒输出。 请填空。 -------------------------------------------------------*/ #include "stdio.h" main() { int numb,rdigit; scanf("%d",&numb); /*********** Fill***********/ while(____) /* numb!=0 */ { rdigit=numb%10; /***********Fill***********/ printf("%d",____); /* rdigit */ numb/=10; } printf("\n"); }
该字符的内容原封不动地用键盘输入到显示器上;
如果该字符是格式说明符,则按格式说明符指定的
类型和格式输入一个数字或字符。
即类型必须一一对应,例如: %f对应单精度实型变量的地址。 %lf对应双精度实型变量的地址。 %d对应基本(普通)整型变量的地址。 %ld对应长整型变量的地址。
%s对应字Baidu Nhomakorabea数组名或 已指向了字符数组的指
%c对应字符型变量的地址。
二、printf函数的一般形式: printf(“静态字符和格式控制符”,输出项表列) %f格式即可以输出单精度实型也可以输出双精 度实型的值。 %c和%d在可见字符的范围内可以互换输出对 应项。 %s对应的输出项是字符串的首地址,即字符数 组的名字或是已经指向字符数组的指针变量。
存储类别名称 定义位置 外部变量 外部静 态变量 内部静 态变量
自动变量 寄存器变量
定义语法举例
作用域
整个程序
生存期
程序开始 至结束 程序开始 至结束 程序开始 至结束 函数执 行期间 函数执 行期间
默认值
函数外部
函数外部 函数内部 函数内部 函数内部
int x;
0 0 0
不定 不定
定义点 static int x; 至文件尾 定义所在 static int x; 函数内 定义所在 [auto] int x; 函数内 定义所在 register int x; 函数内
第四章 数据的输入和输出
一、scanf函数的一般形式:
scanf(“ 静态字符和格式控制符”,地址表列)
格式控制字符串中格式说明符的个数和地址表
列的项数相等,顺序为从左到右依次对应。 scanf函数按格式控制字符串的格式输入信息, 输入过程是函数从左到右逐个考察格式控制字符串 的每个字符,如果该字符是普通字符,则必须按照
静态变量和函数外部定义的全局变量,其初始化是在编译 阶段完成的,且只赋初值一次。
例:以下程序的功能是将输入的十进制正整数转换为二进制, 并输出转换结果。 #include "stdio.h" void transfer(int n) { int i, a[20]; for(i=0;n!=0;i++) { a[i]=n%2; n=n/2; } for(i--;i>=0;i--) printf("%d ",a[i]); } main() { int n=5; scanf("%d",&n); transfer(n); }
main() { int choice; do { printf(" ====功能选项====\n"); printf(“ 1—求水仙花数 \n"); printf(“ 2—求素数\n"); printf(“ 3—求Faibonacci数列 \n"); printf(" 0--退 出 \n"); printf("请选择: "); scanf("%d",&choice); switch(choice) { case 1: narcissus(); break; case 2: prime(); break; case 3: fabonacci(); break; case 0: break; } }while(choice!=0); printf("谢谢使用! \n"); }
命令需要单独占一行。
七、一个#include 命令只能包含一个指定的文件,若要包含
多个文件,则需要使用多个#include命令。 采用# include < stdio. h >形式,C编译系统将在系统指定 的路径(即C库函数头文件所在的子目录)下搜索<>中指定文件 ,称为标准方式。 采用# include“stdio. h”形式,系统首先在用户当前工作的 目录中搜索要包含的文件,若找不到,再按系统指定的路径搜索 包含文件。
}
A.9 ,7 B.12 ,7 C13,8 D14,9
5.程序的输出结果是: abc main() {char s[]="abcdef"; s[3]='\0'; printf("%s\n",s);}
第八章 函数
一、关于void的用法
1、 void可在子函数的形参表中出现,表示该子函数没有形 参;形参表中没有任何参数也没有void,也表示该子函数 没有形参。 2、如果void出现在子函数首部的最前面,即在函数类型名的 位置上,则表示该子函数只能以语句的形式被调用,而不 能以表达式的形式被调用。 二、在以下的任一种情形下,可以不在调用函数中对上机用户定 义的被调用函数进行声明 1、被调用函数的位置在调用函数之前。 2、在所有函数之前,在函数的外部对被调用函数进行了声明。 若需要对被调用函数进行声明,最好将声明写成函数原型的形 式。
三、函数的实参和形参的个数要相同,相对位置要对
应,类型要符合赋值兼容的原则。
四、函数体内定义的变量只在定义所在的函数体内有 效,形参也只在函数体内有效。 五、注意return 语句的应用。程序内可有多个return 语句,执行时遇到任意一个return语句,执行流程都返回到 调用函数的调用位置,继续执行调用语句。如果定义函数的 类型为void ,则函数体内可有“return;”语句,但不可以有 “return 表达式;”语句。 六、C提供的预处理功能主要有宏定义、文件包含和条 件编译3种,为了与其他C语句相区别,所有的预处理命令 均以“#”开头,语句结尾不使用分号“;”,每条预处理
定义数组时利用初始化的方法,给数组整体赋初值。
1. 下面正确定义数组的语句是( A )。 A. int x[][2]={2,1,3,2} B. int x[][]={2,1,3,2} C. int x[2][]={2,1,3,2} D. int x[2,2]={2,1,3,2}
2. A. B. C. D.
/*【程序改错】功能:求1到30的阶乘的和。 ------------------------------------------------------*/ #include "stdio.h" main() { int n,j; float s=0.0,t=1.0; for(n=1;n<=30;n++) { /**********error**********/ s=1; /* t=1; */ for(j=1;j<=n;j++) /**********error**********/ t=t*n; /* t=t*j ; */ /**********error**********/ s+t=s; /* s+=t; */ } /**********error**********/ printf("jiecheng=%d\n",s); /* %f */ }
对于嵌套的 if 语句,每个 else 都和它左方或上
方最近的,且缺少 else 的 if 配对。
else 子句不能作为语句单独使用,它必须是 if语 句的一部分,与 if 配对使用。
第六章 循环结构
一、循环初值的选择 求和:工作变量通常初值为0; 求积:工作变量通常初值为1。 二、退出循环的条件 1、条件判断表达式的值为0 ; 2、循环体内执行了break语句; 3、循环体内执行了goto语句,并且与goto语 句配合的语句标号在循环体外。 4、循环体内执行了return语句。 三、循环体是一个内嵌语句 可以是一个单语句,还可以是一个复合语句, 甚至还可以是一个空语句。 四、for循环和while循环先判断后执行循环体;do while 循环先执行一次循环体,然后再判断。
不能把字符串Hello!赋给数组a的语句是( B )。 char a[10]={ 'H', 'e', 'l', 'l', 'o', '! '}; char a[10]; a="Hello!"; char a[10]; strcpy(a, "Hello!"); char a[10]= "Hello!" ;
void fabonacci() /* 求斐波那契数列的前n项*/ { long f1,f2; int k,n; printf(“请输入一个数:"); scanf("%d",&n); f1=f2=1; for(k=1;k<=n;k++) { printf(“%8d%8d”,f1,f2); if(k%20) printf(“\n”); f1=f1+f2; f2=f1+f2; } }
值传递
以下程序的运行结果是:B #include <stdio.h> staic int x=10; main() { int x=3; void f(); f(); x- -; printf(“x=%d”,x); } void f() { x++; } A.10 B.2 C.11 D.3
/* 编写程序完成菜单功能。提供三种选择*/
#include "stdio.h" void narcissus() /* 求水仙花数*/ { int k,a,b,c,d; for(k=100;k<1000;k++) { a=k/100; b=k%100/10; c=k%10; d=a*a*a+b*b*b+c*c*c*c; if(d==k) printf(“%5d\n”,k); } } void prime() /* 求素数 */ { int m, i, k; scanf("%d",&m); k=m-1; for(i=2; i<=k; i++) if(m%i==0) break; if(i>=k+1) printf ("%d is a prime number\n", m); else printf("%d is not a prime number\n", m); }
第七章
数组名取地址。
数组
一、数组名是地址。%s格式输入字符串,不可以再对
二、数组名是地址常量(形参数组名除外),不可以利用
赋值语句给数组名赋值(形参数组名除外) 。但可在 三、下标变量的下标值系统默认从0开始,n-1结束,即 下标值最大为定义数组时的元素个数减 1 。注意执 行过程中数组超界的问题。 四、仅可以使用字符数组存放字符串,而不能用整型数 组存放字符串。一个字符变量只能存放一个字符。
if(x==7) printf(“%d”,x); /*内嵌语句没有得到执行*/
if(x=8) printf(“%d”,x); /*输出结果为8*/
程序段1: if(x>=0) if(x>0) y=1; else y=0; else y= -1;
程序段2: y = -1; if ( x!=0 ) if ( x>0 ) y =1; else y = 0;
第五章 选择结构
if语句的一般形式:
if(表达式) 语句1 [else 语句2 ]
if语句的执行过程是:首先计算表达式的值,
然后判断表达式的值,若表达式的值为真(非0)
,则执行语句1;否则执行语句2。然后退出语句,
接着执行下面的语句。
注意: 由于应用赋值运算符“ =” 产生的错 误
例如程序段: int x=0;
3. 指出程序中的错误 main( ) { char a[10]; scanf(“%s”,&a ); puts(a); }
4. 程序中二个字符串的长度是( A )
#include "string"
main() { char s[]="\\141\141abc\t"; char r[]= "\\\"\abc\"\\"; printf("%d,%d\n",strlen(s), strlen(r));
/* 程序填空题目:本程序的功能是输入一段数字后,将输入的 数字颠倒输出。 请填空。 -------------------------------------------------------*/ #include "stdio.h" main() { int numb,rdigit; scanf("%d",&numb); /*********** Fill***********/ while(____) /* numb!=0 */ { rdigit=numb%10; /***********Fill***********/ printf("%d",____); /* rdigit */ numb/=10; } printf("\n"); }
该字符的内容原封不动地用键盘输入到显示器上;
如果该字符是格式说明符,则按格式说明符指定的
类型和格式输入一个数字或字符。
即类型必须一一对应,例如: %f对应单精度实型变量的地址。 %lf对应双精度实型变量的地址。 %d对应基本(普通)整型变量的地址。 %ld对应长整型变量的地址。
%s对应字Baidu Nhomakorabea数组名或 已指向了字符数组的指