c语言:知识点、易错题

发布时间:2024年01月11日
  1. c程序的特点;
  1. 简洁紧凑、灵活方便
  2. 运算符丰富
  3. 数据结构丰富
  4. C语言是结构式语言
  5. 语法限制不太严格、程序设计自由度大
  6. 允许直接访问物理地址、直接对硬件操作
  7. 生成代码质量高、程序执行效率高
  8. 使用范围大、可移植性好
  9. 介于高级语言与低级语言之间
  10. 自检机制比较弱
  11. 缺乏代码重用机制

  1. 标识符的特点,关键字有哪些及作用

标识符特点:

  1. 必须以字母或下划线开头。
    2、只能包含字母数字和下划线。
    3、不能使用关键字作为标识符。
    4、大小写敏感。

关键字(一共32个):

auto double int struct break else long switch
case enum register typedef char extern return union
const float short unsigned continue for signed void
default goto sizeof volatile do if while static

A 基本数据类型(5个)
void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果
char :字符型类型数据,属于整型数据的一种
int :整型数据,通常为编译器指定的机器字长
float :单精度浮点型数据,属于浮点数据的一种
double :双精度浮点型数据,属于浮点数据的一种
B 类型修饰关键字(4个)
short :修饰int,短整型数据,可省略被修饰的int。
long :修饰int,长整形数据,可省略被修饰的int。
signed :修饰整型数据,有符号数据类型
unsigned :修饰整型数据,无符号数据类型
C 复杂类型关键字(5个)
struct :结构体声明
union :共用体声明
enum :枚举声明
typedef :声明类型别名
sizeof :得到特定类型或特定类型变量的大小
D 存储级别关键字(6个)
auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配
static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部
register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数
extern :指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的韵蟮囊桓觥耙�谩?
const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变)
volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
2 流程控制关键字
A 跳转结构(4个)
return :用在函数体中,返回特定值(或者是void值,即不返回值)
continue :结束当前循环,开始下一轮循环
break :跳出当前循环或switch结构
goto :无条件跳转语句
B 分支结构(5个)
if :条件语句
else :条件语句否定分支(与if连用)
switch :开关语句(多重分支语句)
case :开关语句中的分支标记
default :开关语句中的“其他”分治,可选。
C 循环结构(3个)
for :for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件
do :do循环结构,do 1 while(2); 的执行顺序是 1->2->1...循环,2为循环条件
while :while循环结构,while(1) 2; 的执行顺序是1->2->1...循环,1为循环条件
以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。

????????

  1. 标准库函数;C程序的执行过程及产生的相关文件

???标准库函数:

C标准函数库(C Standard library)是所有符合标准的头文件(head file)的集合,以及常用的函数库实现程序,例如I/O 输入输出和字符串控制。不像 COBOL、Fortran 和 PL/I等编程语言,在 C 语言的工作任务里不会包含嵌入的关键字,所以几乎所有的 C 语言程序都是由标准函数库的函数来创建的。

C程序的执行过程及产生的相关文件

  1. 编辑输入源程序并保存c文件)
  2. 编译将源程序翻译成目标文件obj文件)
  3. 连接将目标文件转换可执行文件exe文件)
  4. 运行执行exe文件得到运行结果

  1. C语言规定的数据类型有哪些?特点是什么?

?????????数据类型:

  1. 基本数据类型(常量和变量)

???整型常量(整常数:8进制16进制10进制)

??????

  1. 构造数据类型

??数组类型

结构类型

联合类型

  1. 指针类型

另一种:整型常量、整型变量(基本型int占2字节,短整型short int,长整型long int占4字节,无符号型unsigned(int \~ed\short\long))、浮点常量、字符常量、字符变量、枚举常量、枚举变量

5. 常量与宏定义P14(#define)

6. 不同整型变量及其他类型的表示方法

1.基本型:int(内存中占4字节)

2.短整型:short int(int)

3.长整型:long int (long)

4.无符号型: unsigned

其他:

(1) char :声明字符型变量或函数?

(2) double :声明双精度变量或函数?

(3) enum :声明枚举类型?

(4) float:声明浮点型变量或函数?

(5) int: 声明整型变量或函数?

(6) long :声明长整型变量或函数?

(7) short :声明短整型变量或函数?

(8) signed:声明有符号类型变量或函数?

(9) struct:声明结构体变量或函数?

(10) union:声明共用体(联合)数据类型?

(11) unsigned:声明无符号类型变量或函数?

(12) void :声明函数无返回值或无参数,声明无类型指针(1) char :声明字符型变量或函数?

(2) double :声明双精度变量或函数?

(3) enum :声明枚举类型?

(4) float:声明浮点型变量或函数?

(5) int: 声明整型变量或函数?

(6) long :声明长整型变量或函数?

(7) short :声明短整型变量或函数?

(8) signed:声明有符号类型变量或函数?

(9) struct:声明结构体变量或函数?

(10) union:声明共用体(联合)数据类型?

(11) unsigned:声明无符号类型变量或函数?

(12) void :声明函数无返回值或无参数,声明无类型指针

7. 实型常量的书写格式

???1.小数形式

???2.科学计数形式(1.23e-4表示0.000123,1.23e5表示12300)

???3.后缀形式(float/f,double/d,long double/L,3.14d表示double类型的实型常量,3.14L表示long double类型的实型常量)

???4.十六进制形式

8. 字符型数据及其表示的数据值;转义字符及其功能

???????字符数据类型:

????????\n换行

????????\t横向跳格

????????\v竖向跳格

????????\b退格

????????\r回车

????????\f走纸换行

???????转义字符:

???????所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思

?????????

  1. 算术运算及其优先级/结合性

1.结合方向只有三个是从右往左,其余都是从左往右。

2.所有双目运算符中只有赋值运算符的结合方向是从右往左。

3.另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算符。

10. 自增自减的常规用法

11. 其他运算,用法及特点

????

运算类型

运算符

四则运算

+,-,*,/,%

关系运算

<,>,<=,>=,==,!=

逻辑运算

&&,||,!

位运算

&,|,^,>>,<<,~

12. 输出函数用法 ; 输入函数用法。

13.格式符及附加格式符用法特别是二进制,八进制及十六进制的定义方法。

????

14.关系运算符,逻辑运算符,条件运算

15. if语句用法,switch语句用法

16.?while循环用法; for循环用法

17. break与continue使用场合

18.数组定义和初始化方式

19.排序应用冒泡、插入、选择、快速、归并、堆、计数、桶、奇数、摇摆、希尔

20. 二维数组的定义,二维数组元素的访问方式

21.常规指针用法,指针与函数。give up

示例:

1、以下选项中实型常量不正确的是( D?)

A. 10E3???????B.0.14E4??????????C.-1.0e4?????????D.12E4.0

解:e/E之前必须要有数字,e/E之后必须为整数。

2、若有定义:int a; float b; double c;?,程序运行时输入:1,2,3<回车>,能把1输入给变量a、2输入给变量b、3输入给变量c的输入语句是( ??A??)

A.scanf("%d,%f,%lf", &a,&b,&c);????B.scanf("%d,%lf,%lf", &a,&b,&c);???????

C.scanf("%d%f%f", &a,&b,&c);??????D.scanf("%d,%f,%f", &a,&b,&c);

3、有以下程序

#include <stdio.h>

int f(int s,int t){

if (s < t) s=t;

return s;}

void main( ){

int i=3, j=5, *p=&i, *q=&j, r;

r = f(*p,*q);

printf("%d,%d,%d,%d,%d ", i, j, *p, *q, r);

}

程序运行后的输出结果是( ??D?)

A.3,5,5,5,5???????B.5,3,3,3,5???????C.5,5,5,5,5?????????D.3,5,3,5,5

解:注意值传递不会改变原文件的值

4、有以下程序

#include <stdio.h>

char *a = "you";

char *b = "Welcome you to Beijing!";

int?main( )

{ char *p;

p = b;

while (*p != *a) p++;

printf("%s ", p);}

程序运行后的输出结果是( ??C??)

A.Beijing!??????????????????????????????B.to Beijing!

C.you to Beijing!????????????????????????D.Welcome you to Beijing!

解:注意指针会往后移动,然后重新读取数据

5、若有以下说明int a[10]={1,2,3,4,5,6,7,8,9,10};*p=a;则数值为6的表达式是(?C???)。?

A.?*p+6??????B. *(p+6)???????C.*p+=5??????????D.?p+5

6、?有定义如下:

int a=10;?float b=3.14; char c=’A’; double d=6.62607004

下列选项中会丢失精度的是( D?)?

  1. a=c;????????????B.b=c;?????????C.d=c; ?????????D.a=b;

解:实型给整型赋值会丢失精度

7、?sizeof(int)是( ?B??)

A.一个双精度表达式????????????????????B.一个整型表达式????????

C.不合法表达形式??????????????????????D.一个函数调用

8?若有说明语句:char c=';',则变量c中存放的是 ( ?D???)??

A.2个字符???????B.3个字符????C.说明语句不合法????D.1个字符

9、?逻辑运算符中,优先级按从高到低依次为( D????)?

A.&&、!、||??????B.||、&&、!???C.&&、||、!????????D.、&&、||

10、?下列函数返回值类型是( ??A??)

func(float x)

{ ??float y; y=3*x-1; return y;}

  1. int??????????B.void?????????C.float?????????D.不确定

解:未定义类型的函数默认为int型

11、?关于数组的定义和初始化,下列哪一项是错误的( D???)??????

A.int arr[5]={1,2,3,4,5};???????????????B.int arr[]={1,2,3,4,5};?????

C.int arr[5]={1,2,3};??????????????????D.int arr[5]={1,2,3,4,5,6};

12、有如下程序:

char *s=“\ta\018bc”;

for(;*s!=‘\0’;s++)

printf(“*”);

输出*的个数是( C?)???

  1. 9????????????B. 5???????????C.?6?????????????D.7

13、有以下程序段,其中的变量已定义为int类型
sum = pad = 5;

pAd = sum++, pAd++, ++pAd;?

printf( "%d ", pad );
程序运行时,输出结果是(D????)。

A. 4 ???????????B. 7 ???????????C.6 ????????????????D.5

14、?若int a[2][3]={{1,2,3},{4,5,6}},则a[1][2]的值为( C??)

A.?3 ???????????B.4 ???????????C.?5 ????????????????D.?6

15、?下列选项没有构成死循环的是( ?C?)。?

A.int i=100;while(1){i=1%100+1;if(i>100);break;}????????????B.for(; ;)?

C.int i=100;do{i=i+1;}while(i>=1000);??????D.int i=100;while(1);s=s+1;

16、?下列选项中,哪一个是构造数据类型( C?) ????

A.整型????????B.浮点型?????????C.数组????????????D.字符型

17、?下列程序的运行结果是( ?B???)

int main()

{

int a=1,b=3,c=5;

int *p1=&a,*p2=&b,*p3=&c;

*p3=*p1*(*p2);

printf(“%d”,c);
}

  1. 1???????????B.?3 ???????????C.?5???????????????D.?4

解:可以用指针改变某个地址所指向内存地址的值

18、?有以下程序

int a=1,b=7;

do{

???b=b/2;?a=a+b;}?

while(b>1);??程序运行后a的值是( B???)

A.3??????????B.4???????????C.5????????????D.6

定义如下:int a=10,b=2,c=0;则表达式a&&c?a+b||c:!b的结果为__0____。

在程序中,如果使用printf()函数,应该包含stdio.h头文件。

在C语言中,用于结束函数并返回函数值的是return关键字。

请复习3.4节的所有课后习题,及实验报告1做过的题

请编写程序,求1-3+5-7+9+………-99的值。

int main() {

int i,j=0,k=1;

for(i=1;i<100;i+=2)

{ j=j+i*k;

??k=-k;}

printf("sum=%d",j);

return 0;

}

#include "stdio.h"

int main(){

int s,i;

for(s=0,i=1;i<100;i+=2)

s += (i+1)%6 ? i : -i;

printf("s = %d\n",s);

return 0;?

}

从键盘输入一个3位的整数num,将其个,十,百位倒序生成一个数字输出,如输入123,则输出321,请编写程序实现该功能。

C 语言编写的源智序,其文件扩展名为.c

自标程序是经编译程序翻译生成的程序,文件扩展名为.obj

可执行程序是经连接程序处理过的程序,文件扩展名为.exe

文章来源:https://blog.csdn.net/ting_liang/article/details/135528607
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。