当前位置: 首页 > news >正文

C语言知识点与题库

一、main主函数

知识点:

main函数是程序的开关,不管main函数在什么位置,程序总是从main开始执行的

练习题:

以下哪一项是正确的

C语言程序总是从第一个定义的函数开始执行

C语言中main不一定只放在开头,但程序一定是从main开始运行的

C语言程序中的main函数必须放在程序的开始部分

一个C语言程序中,main函数必须放在最后

二、注释与标识符

知识点:

单行注释:\

多行注释:\ * * \

C语言中,变量标识符的命名规则有以下两个 1.由字母,数字,下划线组成 2.不能以数字为开头

练习题:

判断对错:

C语言中,注释语句可以出现在程序中的任意位置。

判断以下那些是合法标识符

2ab

abc_3

3_abc

int

a_3

a*b

三、冯诺依曼模型

知识点:

练习题:

CPU主要由运算器和___两部分组成。

四、数据类型

知识点:

C语言中常见的基础数据类型有:

整型短整型short2字节
基本整形int4字节
长整型long4字节
双长整型long long8字节
浮点型/实型单精度浮点型float4字节
双精度浮点型double8字节
字符型单引号括起来的单个符号char1字节
布尔型true或者false,在C语言中用0或者1表示bool1字节

字符型char 有两种表现形式 1.单引号引起来的单个字符,如:‘A’,‘~’ 2.字符对应的ASCLL编码,一般是一个整数 3.大家注意输出语句中,%d表示以整数形式输出,%c表示以字符形式输出

练习题:

以下程序的输出结果是( )。

#include <stdio.h>

void main() {

char c = 'A';

printf("%d", c);

}

A.A B.65

C.编译错误 D.运行错误

判断对错

C语言中,变量必须先定义后使用。( )

实型常量在计算机中存储时可能存在精度误差( )

字符串是一个字符序列,例如,字符串s,从右侧向左访问第 3 个字符用s[:-3]索引。( )

五、运算符与表达式

知识点:

算术运算符:+ - * / % ++ --

关系运算符:> < >= <= != ==

逻辑运算符:&& || !

逻辑运算符:与&& 或|| 非!

1.可与关系表达式结合,表示一个范围
如:a>60 && a<80
也就是 a比60大 并且 a比80小 才满足条件
即:a的范围是60~80

如:a>100 || a<30
也就是 a比100大 或者 a比30小 都满足条件
即:a的范围是小于30 或者 大于100都可以

​​

逻辑表达式:逻辑运算符可以拼接true和false来判断整体的布尔值

如果用&&拼接,视为并且
只有&&两边都是true,结果才是true
其他情况都是false

如果用||拼接,视为或者
只有||两边都是false,结果才是false
其他情况都是true

赋值运算符:+= -= *= /= %=

逗号运算:取最右边的结果 如:a=(1,5,8,7,3); 取最右边的结果:a为3

练习题:

判断对错

赋值运算符=的功能是将右边的值赋给左边的变量。( )

a = b = c = 5 是一个合法的赋值表达式。( )

逻辑运算相关练习

设 int x=10, y=11则表达式 x<5 && y>5 的值是( )。

A.0 B.1 C.2 D.语法错误

设 int a=4, b=5则表达式 a==4 || b==4 的值是( )。

A.0 B.1 C.2 D.语法错误

设 int a=5, b=6, c=7;,则表达式 a<b && b>c || c>a 的值是( )。

A.0 B.1 C.2 D.语法错误

a = (4,5,6,7,8,9,3),a的值为___

a = ((4,5),(5,4),(3,1)),a的值为___

设有 int a=3, b=4;,则执行 printf("%d,%d", (a,b), (b,a)); 后的输出是( )( )。

A.3,4 B.4,3

C.4,4 D.3,3

六、输入输出语句

在输入输出时,不同数据类型对应不同的占位符号

整型——%d

浮点型——%f

字符型——%c

字符串——%s

#####

关于 scanf 函数,以下描述错误的是( )。

A.可以用于输入整数

B.可以用于输入实数

C.可以用于输入字符串

D.格式控制字符串中不能包含普通字符

七、if分支与switch分支

#####

练习题:

阅读下列程序,若输入 -5,则输出结果为( )。

#include <stdio.h> void main() { int x; scanf("%d", &x); if(x++ < 0) printf("%d", x); else printf("%d", x++); }

A.-5 B.-4 C.4 D.5

switch 语句中,每个 case 后面都必须跟一个 break。( )

八、while循环

知识点:

while循环练习:
while循环语法为:

while(条件){ //重复执行的代码块 }

当条件满足时,重复执行的代码块会被执行

break与continue

break表示跳出循环

continue表示跳过本次循环,直接进行下一次循环

练习题:

以下代码的输出结果是?

#include <stdio.h> int main() { int i = 1; while(i <= 3) { printf("%d ", i); i++; } return 0; }

A. 1 2 3 B. 1 2 3 4 C. 2 3 4 D. 无输出

以下代码的输出结果是?

#include <stdio.h> int main() { int i = 1, sum = 0; while(i <= 5) { sum = sum + i; i++; } printf("%d", sum); return 0; }

A. 10 B. 15 C. 20 D. 25

以下代码的循环体总共执行多少次?

int i = 0; while(i < 4) { // 循环体 i++; }

A. 3次 B. 4次 C. 5次 D. 无限次

以下代码的输出结果是?

#include <stdio.h> int main() { int i = 2; while(i <= 5) { printf("%d ", i); i = i + 2; } return 0; }

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

以下代码的输出结果是?

#include <stdio.h> int main() { int i = 5; while(i > 0) { printf("*"); i--; } return 0; }

A. * * * * * B. * * * * C. 无输出 D. 无限循环

下列程序段执行后,循环体执行的次数是( )。

int i = 10; while(i++ < 20) { // 循环体 }

A.9次 B.10次 C.11次 D.无限次

九、for循环

知识点:

###

for循环的语法为 ```c for(初始化语句; 条件语句; 控制语句){ //代码块 }

//创建从0到4的5次循环 for(int i = 0; i < 5; i++){ //代码块 } 初始化语句——int i = 0 :循环的次数需要通过某个数字控制,定义出整型变量,初始值为0 条件语句——i < 5 :满足i小于5时,代码块会被重复运行 控制语句——i++ :每循环一次,i加1 总结:初始i为0,每执行一次代码块,i加1,直到i不小于5,就不再执行代码块(跳出循环),也就是从0到4的5次循环

有一种特殊的循环,叫无限循环,也叫死循环
在for循环中,有两种无限循环的表示方式
方式一:小括号里只有两个分号时for(;;){}
方式二:for当中的条件语句一直满足时,如for(i=1; i>0; i++){}

练习题:

for 循环的三个表达式都可以省略,但对应的分号不能省略。( )

for(;;) 语句表示一个无限循环。( )

所有的循环都可以用 for 语句实现。( )

下列程序段中,循环体执行次数为无限次的是( )。

A.for(i=1; i<10; i--);

B.for(i=1; i<=10; i++);

C.i=1; while(i<=10) i++;

D.i=1; do{i++;}while(i<=10);

十、数组

知识点:

###

数组是数据的集合(集成组合)或序列(有序排列)

也可以理解为多条数据排成队,用一个变量表示整个队伍,如:

name——>{"千喜", "王军开", "王元", "蔡旭昆", "马家琦", "虎哥"}

name变量指定到数组(序列),每个数据在数组中都有其编号,我们也叫索引,通过索引在数组中找到或修改某条数据

注意:索引从0开始

数组的定义:

1.int arr[] = {'a', 'b', 'c', 'd'};通过内容定义

2.int arr[5];只定义出长度,不设置内容,默认填充为0

3.int arr[5] = {'a', 'b'};未设置内容的部分,默认为0

访问(获取)数组元素,通过索引访问,语法为:数组名 [ 索引 ]

如: int arr[5] = {'a', 'b'}中

arr[0] 为 'a'

arr[1] 为 'b'

arr[2] 为 0

arr[3] 为 0

arr[4] 为 0

如果一个数组的长度为5如arr[5],索引是从0到4,当我们访问不存在的索引时arr[9],报出索引越界异常

练习题:

若 int a[3],则数组元素 a[3] 是合法的。( )

所有的一维数组在定义时必须指定数组长度。( )

若有 int a[5] = {1, 2, 3, 4, 5};,则 a[5] 表示( )。

A.数组的最后一个元素,值为5 B.数组的第一个元素,值为1

C.数组的第六个元素,属于数组越界 D.语法错误

若有 int a[10];,则对数组元素引用正确的是( )。

A.a[10] B.a[0] C.a(5) D.a{1}

若有 int a[5]={1,2,3};,则数组元素 a[3] 的值是( )。

A.3 B.0 C.随机值 D.4

十一、二维数组

知识点:

二维数组就是使用数组存储数组

name [ 2 ] [ 3 ]——>{ {"关羽", "刘备", "张飞"}, {"悟空", "吴京", "悟能"} }

name变量指定到二维度数组(序列),此二维数组类似于excel表格,2行3列

访问二维数组元素:

练习题:

以下程序的输出结果是( )。

#include <stdio.h> void main() { int a[3] [3] = {{1,2},{3,4},{5,6}}; printf("%d", a[1] [1]); }

A.2 B.3 C.4 D.5

十二、函数

知识点:
什么是函数

函数,又叫方法,也叫功能,需要先定义,再调用,调用之后才能使用

返回值类型 方法名(参数列表){ 方法体 }

如:

void 吃饭(){ printf("我要吃饭"); }

方法创建出来以后,不会直接运行,需要调用才会运行

调用要放在main当中,语法为 方法名(参数列表) ,即 吃饭()

//创建方法 void 吃饭(){ printf("我要吃饭"); } ​ int main(int argc, char *argv[]) { //调用方法,在此处才会执行方法体 吃饭(); return 0; }
形参和实参

形式参数:形参

//创建方法 void 吃饭(char[] 食物){ printf("我要吃" + 食物); }

小括号中的char[] 食物,其中变量食物叫形式参数,也就是不确定具体的值的变量

就拿此方法为例,方法体是printf("我要吃" + 食物);,变量食物表示的具体是什么吃的并不确定,需要在调用方法时才确定

//创建方法 void 吃饭(char[] 食物){ printf("我要吃" + 食物); } ​ int main(int argc, char *argv[]) { char[] 食物 = "蒸羊羔"; //调用方法 吃饭(食物);//这里的食物表示的是”蒸羊羔“,是有具体内容的,叫实际参数,实参 return 0; }

形参和实参要一一对应,但是两个参数的值是独立互不影响的

函数的可以通过参数传递动态数据 定义时的参数是形式参数,调用时的参数是实际参数 函数可以一次定义,多次调用 参数可以是任意类型(数字,字符,字符串等) 参数可以是多个 定义和调用时,小括号中的参数要一一对应 一个程序中可以调用多个函数 函数可以多层嵌套

局部变量和全局变量

局部变量:

  • 定义位置:在函数(或代码块,如 C 的{...})内部声明。

  • 作用域:仅限于所在的函数或代码块。

  • 生命周期:在函数执行时创建,函数返回时销毁(静态局部变量除外)。

  • 特点:外部无法访问;不同函数的同名局部变量互不干扰。

全局变量:

  • 定义位置:在所有函数之外声明。

  • 作用域:从定义位置开始,到整个文件结束。

  • 生命周期:程序运行时创建,程序结束时销毁。

  • 特点:所有函数都可以直接访问。

返回值

返回值表示方法/函数运行完以后所得到的结果

返回值可有可无

void表示无返回值,方法中不写return

int表示方法执行后会得到一个整数,必须写return

return后边写什么,调用完以后就会返回什么结果 return后的类型必须和定义时声明的数据类型一致 return会直接结束,return后的代码不执行 void表示无返回值,可以不写return

关于函数的返回值,以下说法错误的是( C )。

A.函数可以没有返回值

B.返回值通过return语句实现

C.一个函数只能有一个return语句

D.返回值类型必须与函数类型一致

函数的定义可以嵌套,但函数的调用不能嵌套。(错误)

十三:填空专项练习

1.一个C语言程序的执行总是从___函数开始的。

2.在C语言中,字符型数据的关键字是___

3.设 int a=12, b=5;,则表达式 a%b 的值是___

4.在循环结构中,break语句的作用是___

5.若使用printf函数输出一个双精度浮点数变量d,要求保留两位小数,则对应的格式控制符应为__

6.在C语言中,表示逻辑“真”的值用__(填整数)表示。

7.在循环结构中,循环次数确定的循环通常使用__语句实现较为方便。

8.CPU主要由运算器和__两部分组成。

9.若函数定义时未指定返回值类型,则默认的返回值类型是__型。

10.while循环和do-while循环的主要区别是__循环至少执行一次循环体。

十四:综合专项练习

1.以下关键字分别并表示什么类型的数据

short

int

long

float

double

char

2.以下符号分别表示什么运算

/

%

++,--

==

!=

&&

||

!

3.以下运算结果分别是什么

7 % 3

7 / 3

7 += 3

7 == 3

4.在C语言中,关系运算符(比较运算符)的运算结果是真假值,其中__表示真,_ _表示假(填0或1)

5.自增自减运算符练习

int a = 6; a++ + ++a
int a = 5; int b = 4; ++a - --b;
int x = 10; int y = 11; x - -- y;
int a = 4; int b = 2; a+++++a-b+++++b;

6.关系运算和逻辑运算符练习

以下代码的真假值是什么

5>3; 10>10; 10<=10; ​ int a = 9; int b = 8; a >= b; ​ int x = 100; double y = 100.00; x == y;

以下代码运行以后,x所表示的取值范围是什么

x > 10 && x < 100; ​ x < 10 || x > 60; ​ x >= 60 && x <= 70;

判断以下代码的真假值

5 > 9 && 10 < 11; ​ 5 > 9 || 10 < 11; ​ int x = 8;int y = 6; x < 10 && y > 3; ​ x > 100 || y >100;

7.if语句练习,分析以下代码分别输出什么

int a = 9; int b = 8; if(a > b){ printf("a大"); }else{ printf("a大"); }
int x = 10, y = 20; if(x > y){ printf("a"); }else if(x == y){ printf("b"); }else{ printf("c"); }
int a = 0, b = 1; if (a == 0) if (b == 0) printf("A"); else printf("B");
int a = 1, b = 2, c = 3; if (a > 0 || b = 0) c = 5; printf("%d %d %d", a, b, c);
int x = 1, y = 2, z = 3; if (x == 1 && y == 2 || z == 3) printf("Yes"); else printf("No");

8.一维数组

根据以下创建的数组,在内存表格上为其填写数据

int arr[] = {69, 18, 37, 21, 90}

索引01234
内容

int arr[] = {1, 8, 9, 16, 21}

索引01234
内容

int arr[5] = {}

索引01234
内容

int arr[5] = {69, 18}

索引01234
内容

填空

定义int arr[] = {1, 2, 3, 4, 5};,则arr[3]的值是___

定义char *arr[] = {"刘备", "关羽", "张飞", "赵云"};,则arr[0]的值是___

定义int arr[5] = {1, 2};,则arr[2]的值是___

定义int arr[5] = {60, 70};,则arr[1]的值是___

9.合法标识符判断

一个合法的标识符,命名时,必须有( ), ( )和( ),这三部分组成

合法标识符不能以( )为开头

在给变量(标识符)命名时,像int,double,printf这些关键字,可以作为名称吗?

以下那些为合法标识符

&ab$ a*b a b a_b _ab ___ (三条下划线) 5ab

10.输出语句

输出int类型的变量时,应该用( )控制符占位

输出float类型的变量时,应该用( )控制符占位

输出char类型的变量时,应该用( )控制符占位

输出字符串类型的变量时,应该用( )控制符占位

11.while循环练习

以下代码分别循环几次

int a = 0; while(a<3){ a++; }
int a = 5; while(a<9){ a++; }

以下代码的输出结果是?

int i = 5; while(i > 0) { printf("*"); i--; }

A. * * * * * B. * * * * C. 无输出 D. 无限循环

在while循环中,continue的作用是( )本次循环

在while循环中,break的作用是( )循环

while和do......while的区别是 do......while( )

12.switch语句练习

以下代码输出什么

int day = 3; // 整型变量 ​ switch (day) { case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: printf("Wednesday\n"); break; case 4: printf("Thursday\n"); break; case 5: printf("Friday\n"); break; default: printf("Weekend\n"); break; }
char grade = 'B'; // 字符型变量 ​ switch (grade) { case 'A': printf("Excellent!\n"); break; case 'B': printf("Good!\n"); break; case 'C': printf("Fair!\n"); break; case 'D': printf("Poor!\n"); break; default: printf("Invalid grade\n"); break; }

13.手写代码

手写出if语句的语法

手写出以下代码

定义两个整型变量x和y

用if判断两个变量的大小

如果x大,输出“X”

如果y大,输出“Y”

手写出以下代码

创建0~100之间的循环

判断并输出 0~100之间所有能被3整除,不能被5整除的数

手写出以下代码

定义出四个整型变量 a,b,c,num

创建一个循环,包含所有三位数,用num作为循环条件,表示每个三位数

在循环中,分别取出每个三位数的个位,十位,百位 把个位赋值给变量a,十位赋值给变量b,百位赋值给变量C

计算出个位,十位,百位的三次方之和是否为num本身,如果是,打印出这个num

14.流程图练习

画流程图时,以下代码流程用什么图形表示

开始结束

定义变量或处理运算

输入输出

判断

画出以下代码的流程图

int num = 7; ​ if (num % 2 == 0) { printf("%d 是偶数。\n", num); } else { printf("%d 是奇数。\n", num); }
int score = 85; if (score >= 60) { if (score >= 80) { printf("成绩优秀!\n"); } else { printf("成绩合格。\n"); } } else { printf("不及格。\n"); }
http://www.cnnetsun.cn/news/2488652.html

相关文章:

  • 从零到一:手把手教你用ESP32和Arduino IDE配置BLE的GAP广播与GATT服务
  • 【为风光储一体化系统注入精准“心跳”的隐形力量】
  • InfluxDB Studio终极指南:免费图形化管理InfluxDB的完整解决方案
  • 告别调参玄学:在ISPRS Vaihingen数据集上复现Swin-UNet分割模型的完整流程与避坑指南
  • 新手避坑指南:在Windows上从零配置Xray被动扫描环境(含证书安装与浏览器代理设置)
  • 龙芯2K0500核心板开发实战:从硬件设计到Linux系统构建
  • 快速上手ncmdumpGUI:3步解锁网易云音乐NCM文件,免费畅享高品质音乐
  • 在RK3588开发板上折腾Qt 5.15.0带OpenGL ES2:一次本地编译的完整踩坑与配置实录
  • 从按键消抖到I2C通信:手把手拆解STM32 HAL库GPIO的8个核心函数实战
  • 用STM32C8T6做个智能衣柜,除了温湿度还能语音和蓝牙控制(附完整代码和PCB)
  • 企业大模型时代的网络架构五层演进:从连接到智能的范式重构
  • React 后台管理系统 Ant Design 前端
  • 企业级Websocket即时通讯系统
  • 被AI冲击的App,反成了Agent的命门
  • 3分钟快速上手:Hanime1Plugin安卓插件打造纯净动画观影体验终极指南
  • logitech-pubg项目完整指南:罗技鼠标宏绝地求生压枪终极方案
  • 技术分享 | 彻底解决图片“躺平”问题:Java 后端强制校准图片方向
  • 安卓APP通过JNI调用ATSHA204A加密芯片实战指南
  • 销售易NeoAgent 2.0深度解析:从“业务语义本体“到“智能体矩阵“的技术架构
  • 别再让音频信号忽大忽小:手把手教你用运放和模拟乘法器设计一个更现代的AGC模块
  • 为什么很多商城系统,最后都会失控在“规则爆炸”?——真正复杂的,从来不是功能,而是“越来越难控制的业务规则”
  • 深入解析ERC-20:代币标准的基石、演进与未来布局
  • 剪映自动化终极指南:三步告别手动剪辑,拥抱高效创作新时代
  • tars 环境安装及开发部署
  • Seraphine:如何通过智能战绩查询和BP辅助提升英雄联盟竞技体验
  • Claude Code 实战心得:从零构建企业级 Agent 平台的 30 天
  • 从点检到全生命周期:设备管理体系能解决哪些场景痛点?一套设备管理体系的实战应用
  • M10050 模组 陶瓷天线一体
  • Per-Title编码:从固定码率到内容自适应的视频压缩革命
  • 基于SpringBoot+Map的户外徒步路线分享平台毕业设计源码