考前段段清—C语言知识总结
突然提前的考期
是否让你手足无措?
不要慌张,
快来跟随我们的脚步,
一起复习下面的知识点吧!
为进一步加强我院学风建设,营造浓厚的学习氛围,帮助同学们开展高效的考前复习,缓解考前压力,电子工程学院学生会特此推出段段清系列知识总结。
本片推送是针对C语言的知识点总结,快来学习一下吧!
一、题型分布
1、程序填空
2、阅读程序
3、程序设计
二、知识点总结
第三章 最简单的C程序设计——顺序程序设计
1、常量:
(1)定义:在程序运行过程中,其值不变。
(2)分类:整型、实型、字符、字符串、符号常量。
2、变量:
(1)定义:变量的值可以改变。
(2)先定义,后使用注意区分变量名和变量值
例:a=3,a 是变量名,3是变量的值。
3、常变量:变量前加一个关键词 const
例:
const int a = 3 定义a为整形变量,定指为3,在变量存在期间不能改变。
4、区分常量和常变量:
常变量具有变量的基本性质:有类型, 占存储单元,只是不允许改变其值。常变量是有名字的不变量,常量是没有名字的不变量。
5、标识符:
(1)定义:用来对变量、符号常量名、数组、类型等命名的有效字符序列统称为标识符。
(2)命名规则:只能由字母、下划线和数字三种字符组成,且 第一个字符必须为字母或下划线。(注意:翻译系统认为大写字母和小写字母是两个不同的字符。因此,SUM和sum是两个不同的变量名。(一般变量名用小写字母表示。)
6、自增( )、自减(–)运算符
i,–i(在使用i之前,先使i的值加(减)1)
i ,i–(在使用i之后,再使i的值加(减)1)
例:
i=3;
printf(“%d”, i);
输出4。
i=3;
printf(“%d”,i );
输出3。
7、数据的输入输出
(1)用printf函数输出数据
一般格式 printf(格式控制,输出表列)
格式控制:是用双撇号括起来的一个字符串,称为格式控 制字符串,简称格式字符串。它包括格式声明(由“%”和格式字符组成,如%d等。)和普通字符(需要在输出时原样输出的字符)。
输出表列:程序需要输出的一些数据,可以是常量、变或表达式。
(2)用scanf函数输入数据
例:scanf(“%f%f%f”,a,b,c);是错误的,
scanf(“%f%f%f”,&a,&b,&c);是正确的。
(3)格式字符:
①d格式符。用来输出(输入)一个有符号的十进制整数。
②c格式符。用来输出(输入)一个字符。
③s格式符。用来输出(输入)一个字符串。
④f格式符。用来输出(输入)实数(包括单、双精度、长双精度),以小数形式输出(输入)。
用法:基本型,用%f。(输出时:整数部分全部输出,小数部分输出6位。)
指定数据宽度和小数位数,用%m.nf。(m(域宽):所占列数,n:小数位数。向右对齐)%-m.nf(向左对齐)
例:
#include<stdio.h>
Int main()
{ double a=1.0;
printf(“%8.3f,%-8.3f”,a,a);
return 0;
}
输出结果: 1.000,1.000 (后有三个空格)
⑤e格式符。用于以指数形式输出(输入)实数。(小数位数为六位,指数部分占五列)
例:printf(“%s”,123.456)
输出结果:1.234560e 002
(4)字符输入输出函数
①用putchar函数输出一个字符
一般形式putchar(a)
②用getchar函数输入一个字符
一般形式getchar()
例:a=getchar(); = putchar(getchar());
putchar(a);
第四章 选择结构程序设计
1、if语句 (用来实现两个分支的选择结构)
一般形式:
(1)if(表达式) 语句1例:if(a>b){t=a;a=b;b=t;}
“表达式”可以是关系表达式、逻辑表达式、数值表达式。
(2)if(表达式)
语句1
else
语句2
例:if(a>b)
printf(“max=%d”,a);
else printf(“max=%d”,b);
(3)if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
… …
例:if (number>500) cost=0.15;
else if(number>300) cost=0.10;
else if(number>100) cost=0.075;
else if(number>50) cost=0.05;
else cost=0;
2、switch语句 (用来实现多分支的选择结构)
一般形式:
switch(表达式)
{
case 常量1 :语句1
case 常量2 :语句2
… … …
case 常量n :语句n
default :语句n 1
}
例:switch(grade)
{
case ‘A’:printf(“85~100\n”);break;
case ‘B’:printf(“70~84\n”);break;
case ‘C’:printf(“60~69\n”);break;
case ‘D’:printf(“<60\n”);break;
default:printf(“enter data error!\n”);
}
第五章 循环结构程序设计
1、while语句
一般形式:
while(表达式) 语句
先判断,后循环:只有当前循环条件为真(即给定的条件成立),就执行循环语句。
例:
#include<stdio.h>
int main()
{
int i=1,sum=0;
while(i<=100)
{
sum=sum i;
i ;
}
printf (“sum=%d\n”,sum);
return 0;
}
2、用do…while语句实现循环
一般形式:
do
语句
while(表达式);
先执行,后判断:先执行循环体,然后再检查条件是否成立, 若成立,再执行循环体。(循环体至少被执行一次。)
例:
#include<stdio.h>
Int main()
{
Int i=1,sum=0;
do
{
sum=sum i;
i ;
}while(i<=100);
printf(“sum=%d\n”,sum);
return 0;
}
3、用for语句实现循环
一般形式:
for(表达式1;表达式2;表达式3)
语句
表达式1:设置初始条件,只执行一次。
表达式2:是循环条件表达式,用来判断是否继续循环。
表达式3:循环调整。
最常用的for语句形式:
for(循环变量赋初值;循环条件;循环变量增值)
语句
例:
for(i=1;i<=100;i )
sum=sum i;
区分:(1)用break语句提前终止循环
break语句可以从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
例:
for(i=1;i<=100;i ) //第一出口(当i>100时,循环结束)
{
sum=sum i;
if(sum==66) break; //第二出口(当sum=66时,循环结束)
}
(2)用continue语句提前结束本次循环
continue语句只结束本次循环。
例:
for(=100;n<=200;n )
{if(n%3==0) //当n可被3整除时,结束本次循环
continue;
printf(“%d”,n); //输出100-200间不可以被3整除的整数
}
(3)总结:
continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环,不再判断循环条件是否成立。
第六章 利用数组处理批量数据
1、字符数组的输入输出
(1)逐个字符输入输出。用格式符%c输入或输出一个字符,例:
a=‘A’;
printf(“%c”,a);
(2)将整个字符串一次输入或输出。用%s格式符,对字符串 进行输入输出。
例:
char c[]={“China”};
printf(“%s”,c);
char str1[5],str2[5],str3[];
②用scanf函数整体输入字符数组(%s)时,系统会把空格当作字符串的结束标志’\0’。)
2、字符串处理函数
(1)puts函数——输出字符串的函数
一般形式:puts(字符数组)
(2)gets函数——输入字符串的函数
一般形式:gets(字符数组)
(区分:gets函数不会将空格当作’\0’,scanf(“%s”)会将空格当作’\0’)
注意:puts和gets函数只能输出或输入一个字符串。
(3)strcat函数——字符串连接函数
一般形式:strcat(字符数组1,字符数组2)(将1和2连接起来组成新的字符串,1足够大)
(4)strcpy和strncpy函数——字符串复制函数
一般形式:strcpy(字符数组1,字符串2)(将2复制到1中,1 足够大)可以用strncpy函数将字符串2中的前n个字符复制到字符数组1 中。
例:
strncpy(str1,str2,2); 将字符串2前两个字符复制到字符数组1中。
(5)strcmp函数——字符串比较函数
一般形式:strcmp(字符串1,字符串2)
比较规则:
①如果全部字符相同,则认为两个字符串相等。
②若出现不相同的字符,则以第一对不相同的字符比较结果为准。
③在英文字典中位置在后面的为“大”。
函数值带回:
①字符串1与字符串2相同,函数值为0。
②字符串1>字符串2,函数值为任意一个正整数。
③字符串1<字符串2,函数值为任意一个负整数。
(6)strlen函数——测字符串长度的函数
一般形式:strlen(字符数组)
(函数的值为字符串中的实际长度(不包括’\0’在内))
*(7)strlwr函数——转换为小写的函数
一般形式:strlwr(字符串)
(字符串中字母大写变小写)
*(8)strupr函数——转换为大写的函数
一般形式:strupr(字符串)
(字符串中字母小写变大写)
第七章 用函数实现模块化程序设计
1、函数
(1)从用户使用角度看:
①库函数,它是由系统提供的,可以直接使用。
②用户自己定义的函数。
(2)从函数的形式看:
①无参函数:在调用无参函数时,主调函数不向被调用函数传递数据。无参函数一般用来执行指定的一组操作。(无参函数可以带回或不带回函数值,大多不带回。)
②有参函数:在调用有参函数时,主调函数通过参数向被调函数传递数据,一般情况下,执行被调函数时会得到一个函数值,供主调函数使用。
2、函数的调用过程
(1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时,被调函数的形参才被临时分配内存单元。
(2)将实参的值传递给相应的形参。
(3)在执行被调函数期间,由于形参已经有值,就可以进行有关的运算。
(4)通过return语句将函数值带回主调函数。
(5)调用结束,形参单元被释放。
3、函数的返回值
(1)函数的返回值是通过函数中的return语句获得的。
(2)函数值的类型。在定义函数时指定函数值的类型,限制函数返回值的类型。
(3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。(不一致时,以函数类型为准。)
(4)对于不带回值的函数,应当用定义函数为“void类型”(或称“空类型”)。此时在函数体中不得出现return语句。
4、数组作为函数参数
(1)数组元素作函数实参:数组元素可以作为函数实参,但不能作形参。
(2)一维数组名作函数参数:数组名既可以作实参又可以作形参。
(3)区别:
②数值元素(或变量)作实参,向形参是单向传递,形参 改变不影响数组元素(或变量)。数组名作实参,与形参数组之间是双向传递,形参数组改变,实参数组元素也随之改变。分
三、例题分析
1、计算总分和平均分。
某生本学期共有5门课程,分别是高数、英语、大物、思修和体育。5科的期中考试成绩分别是86分、74分、92分、77分、82分,期末考试成绩分别是81分、87分、90分、62分、88分。已知期中和期末考试成绩分别占总成绩的30%和70%。定义相应的变量存放各科成绩,并计算出该生5门课程的总分和平均分。
??要求平均分(average)输出两种形式:
(1)带2位小数的浮点数形式和(2)不带小数的整数形式。
??要求总分(total)输出带2位小数的浮点数形式。
程序中浮点数的数据类型均为float类型。
提示:输出不带小数的平均分的整数形式可以使用强制类型转换。
以下为输出示例:
total=408.90
average=81.78
average=81
程序代码:
#include<stdio.h>
int main()
{
float average; //定义平均数
int i;//循环变量
int a[10];//定义一个整型数组
for(i=0;i<10;i )
scanf(“%d”,&a[i]);//运用循环给数组赋值
float total=((a[0] a[1] a[2] a[3] a[4])*0.3 (a[5] a[6] a[7] a[8] a[9])*0.7);
printf(“total=%.2f\n”,total);//输出总分total,保留两位小数
printf(“average=%.2f\n”,total/5);//输出平均数average,保留两位小数
printf(“average=%d\n”,(int)total/5);//强制取整后输出平均数average
return 0;
}
输出结果:
2、请用户输入一个4位数的正整数n,编写程序将其拆分为两个2位数的正整数a和b,计算并输出拆分后的两个数的加、减、乘、除和求余的结果。
例如:n=4321,设拆分后的两个整数a,b为a=43,b=21。除法运算结果要求精确到小数点后2位, 数据类型为float。
以下为程序的运行结果示例:
请输入一个4位的正整数n:4321↙
数位拆分结果为:a=43, b=21
拆分数计算结果为:
a b=64
a-b=22
a*b=903
a/b=2.05
a%b=1
程序代码:
#include<stdio.h>
int main()
{
int a,b,n; //定义三个整型变量
printf(“请输入一个4位的正整数n:”); //提示行
scanf(“%d”,&n); //输入一个4位正整数
a=n/100; //n除100得前两位整数
b=n0; //n对100取余得后两位整数
printf(“数位拆分结果为:”);
printf(“a=%d,b=%d\n”,a,b); //输出a,b
printf(“拆分数计算结果为:\n”);
printf(“a b=%d\na-b=%d\na*b=%d\na/b=%.2f\na%%b=%d”,a b,a-b,a*b,(float)a/b,a%b); //输出a与b加、减、乘、除和取余的值
return 0;
}
输出结果:
3、从键盘输入你的出生年和今年的年份,编程判断并输出从你的出生年到今年之间中有多少个闰年。
程序的运行结果示例1
Input your birth year:2000↙
Input this year:2020↙
2000
2004
2008
2012
2016
2020
count=6
程序代码:
#include<stdio.h>
int main()
{
int n,m,i=0;//定义3个整型变量
printf(“Input your birth year:”);
scanf(“%d”,&n);//输入你的出生年
printf(“Input this year:”);
scanf(“%d”,&m);//输入今年的年份
for(;n<=m;n )
{if((n%4==0&&n0!=0)||(n@0==0))//判断是否为闰年
{printf(“%d\n”,n);//输出闰年
i ;//闰年个数加一
}
}
printf(“count=%d”,i);//输出闰年个数
return 0;
}
输出结果:
4、马克思手稿中的趣味数学题
题目内容:
编程求解马克思手稿中的趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,请编程计算男人、女人和小孩各有几人?
程序代码:
#include<stdio.h>
int main()
{
int x, y, z;//定义男人x个,女人y个,小孩z个
for (x = 1; x < 30; x )
{
for (y = 1; y < 30; y )
{
for (z = 1; z < 30; z )
{
if ( x y z== 30 && 3 * x 2 * y z * 1== 50)//利用循环和判断求解x,y,z
printf(“%d,%d,%d\n”,x,y,z); //输出x,y,z
}
}
}
return 0;
}
输出结果:
知识点整理丨学生会学习部干事 王要领
文字丨学生会学习部部长 李 珅
排版丨学生会宣传部干事 李玲玉
审核丨学生会宣传部部长 谷骁宣
监制丨学院团委副书记 肖萌老师