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语言中常见的基础数据类型有:
| 整型 | 短整型 | short | 2字节 |
| 基本整形 | int | 4字节 | |
| 长整型 | long | 4字节 | |
| 双长整型 | long long | 8字节 | |
| 浮点型/实型 | 单精度浮点型 | float | 4字节 |
| 双精度浮点型 | double | 8字节 | |
| 字符型 | 单引号括起来的单个符号 | char | 1字节 |
| 布尔型 | true或者false,在C语言中用0或者1表示 | bool | 1字节 |
字符型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}
| 索引 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 内容 |
int arr[] = {1, 8, 9, 16, 21}
| 索引 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 内容 |
int arr[5] = {}
| 索引 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 内容 |
int arr[5] = {69, 18}
| 索引 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 内容 |
填空
定义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"); }