C语言程序设计基础知识要点_c语言程序设计要点
C语言程序设计基础知识要点由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c语言程序设计要点”。
01.C程序基本结构
一、C语言的特点:
1、C语言源程序的基本组成单位是函数;一个C程序可由若干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行设定。,2、C程序的执行总是由main()函数的第一个可执行语句开始,到main()函数的最后一个可执行的语句结束;而其他函数都是在main()函数开始执行以后,通过其他函数的调用才得以运行。
3、C语言系统提供了丰富的库函数,用户在程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。
二、C程序的书写格式:
1、语句可从分开放在任意多行内;
如:printf(“To C,”);
printf(“ or not to C:”);
与printf(“To C , or not to C:”);是等价的2、一行中可以有若干个语句;
如:a=123;b=345;
3、每个语句和数据定义的最后必须有一个分号;
三、C语言程序的运行:
1、编译(Compile):将C源程序文件翻译成能被计算机识别的二进制形式的“目标”文件;编译时,编译器将检查源程序每一条语句的语法错误。
2、建造(Bulid):
C语言程序示例:显示“Hello”
#include
int main(void)
{
printf(“Hello.n”);
return 0;
}
说明:#include 是必不可少的,它包含了C语言标准输入输出库的相关信息;
printf函数来自”标准输入输出库”,可以产生格式化输出;
n 告诉printf函数执行完信息显示后要进行换行操作;
return 0 表明程序终止时会向操作系统返回值0;
{ }来标出main()函数的起始和结束。
02.数据类型
一、C语言的特点:
1、C语言源程序的基本组成单位是函数;一个C程序可由若干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行设定。
2、C程序的执行总是由main()函数的第一个可执行语句开始,到main()函数的最后一个可执行的语句结束;而其他函数都是在main()函数开始执行以后,通过其他函数的调用才得以运行。
3、C语言系统提供了丰富的库函数,用户在程序中需要调用某个库函数时,必须用#include编译预处理命令将描述该库函数的头文件包含进去。
二、C程序的书写格式:
1、语句可从分开放在任意多行内;
如:printf(“To C,”);
printf(“ or not to C:”);
与printf(“To C , or not to C:”);是等价的2、一行中可以有若干个语句;
如:a=123;b=345;
3、每个语句和数据定义的最后必须有一个分号;
三、C语言程序的运行:
1、编译(Compile):将C源程序文件翻译成能被计算机识别的二进制形式的“目标”文件;编译时,编译器将检查源程序每一条语句的语法错误。
2、建造(Bulid):
C语言程序示例:显示“Hello”
#include
int main(void)
{
printf(“Hello.n”);
return 0;
}
说明:#include 是必不可少的,它包含了C语言标准输入输出库的相关信息;
printf函数来自”标准输入输出库”,可以产生格式化输出;
n 告诉printf函数执行完信息显示后要进行换行操作;
return 0 表明程序终止时会向操作系统返回值0;
{ }来标出main()函数的起始和结束。
03,运算符和表达式
1、算术运算符和表达式
+:加法运算符,如 3+5;
-:减法运算符,如 5-3;
*:乘法运算符,如 5*8;
/:除法运算符,如 3/6;参与运算量均为整型时,结果也为整型,舍去小数;若运算量中有一个是实型,则结果为双精度实型。
%:模运算符,也称“取余运算符”,用于计算两数相除后的余数,如 5%3=2;
2、赋值运算符和赋值表达式
赋值运算符:”=”,其作用是将一个表达式的值赋给一个变量;
其一般形式为:变量=表达式
如:
x=a+b;赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此
a=b=c=5 可理解为
a=(b=(c=5));复合赋值运算符:+=、-=、*=、/=、%=、>>=、
构成复合赋值表达式的一般形式为:变量
双目运算符=表达式
它等价于:变量=变量 运算符 表达式
如:
a+=5
等价于a=a+5
x*=y+7
等价于x=x*(y+7)
r%=p
等价于r=r%p3、类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
1)实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。
2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
3)字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
4、自增、自减运算符:
自增运算符:“++”,功能是将变量的值加1; 自减运算符:“--”,功能是将变量的值减1;
可有以下几种形式:
++i
i自增1后再参与其它运算。
--i
i自减1后再参与其它运算。
i++
i参与运算后,i的值再自增1。
i--
i参与运算后,i的值再自减1。
注:
(1)”++”、”--“的操作对象只能是变量;
(2)”++”、”--“运算优先级相同,且结合方向自右向左;-i++应理解为-(i++),【例】自增、自减运算、#include
main()
{
int i=8;
printf(“%dn”,++i);/* i先加1,再输出i,输出结果为9 */
printf(“%dn”,--i);
/* i先减1,再输出i,结果为8 */
printf(“%dn”,i++);/* 先输出i,输出结果为8,i再加1,*/
printf(“%dn”,i--);/* 先输出i,输出结果为9,i再减1,*/
printf(“%dn”,-i++);/* 先加输出-i,输出结果为-8,i再加1 */
printf(“%dn”,-i--);/* 先输出-i,输出结果为-9,i再减1 */
}
5、求字节运算符
计算表达式的结果所占字节数或某种数据类型的定义字节数。
一般格式:sizeof(数据类型标识符)或
sizeof(表达式)
如: sizeof(float)的值为4,占4个字节;
sizeof(2*3)的值为2,占2个字节;
6、关系运算符和关系表达式
关系运算符:“”(大于)、”>=”(大于等于)、”==”(等于)、“!=”(不等于)关系表达式:若关系表达式成立,其值为“真”,否则为“假”;在C语言中,用0代表“假”,用1代表“真”;
7、逻辑运算符和逻辑表达式: 逻辑运算符: “!”(非)、“&&”(与)、“||”(或);运算优先级:!>&&>|| 逻辑表达式:用逻辑运算符将表达式连接起来的式子;逻辑表达式的结果仍然是逻辑量(“真”或“假”)
8、条件运算符:
一般格式: ?:
先计算表达式1,若表达式1的值为真,则计算表达式2的值,且表达式2的值为整个条件表达式的值;否则,计算表达式3的值,且表达式3的值即为整个条件表达式的值。
9、逗号运算符和逗号表达式
逗号运算符:”,”作为运算符,其功能是将多个表达式组成一个表达式;
一般形式:表达式1,表达式2,…,表达式n
求解过程:先计算表达式1,再计算表达式2,依此计算表达式n,最终,表达式n的值即为整个表达式的值。
04.顺序结构
一、概述:
顺序语句按照语法形式分为:表达式语句、函数调用语句、复合语句、流程控制语句和空语句。
1、表达式语句:
语法格式:表达式;
如:a+4;
其中赋值语句为最典型的表达式语句,如:
a=5;
a=b+3;
特别提示:分号(;)是表达式语句中不可缺少的一部分。
2、函数调用语句:
如:printf(”I am a student!”);
其中:printf()为系统提供的函数,用于显示信息。
3、复合语句:
所谓“复合语句”即由一对“{}”括起来的一组语句,也称“块语句”或“分程序”。
一般形式为:
{
语句1
语句2
...语句n
}
如:
{
i++;
j=a+3;
printf(“%d,j=”,i,j);
}
特别提示:复合语句中的最后一条语句的分号不得缺少;复合语句的“}”之后不得有分号。
4、空语句:
“空语句”即为一个独立的分号。
如:
main()
{
...;
...}
二、数据的输入输出
C语言提供了一些输入输出函数,如printf()和scanf(),在程序中调用这些输入输出函数时,必须将标准输入输出头文件“stdio.h”包含到用户所编写的源程序中。
如:#include
其中:#include命令一般写在程序的开头位置。
1、格式输入输出
1、格式输出函数printf()
(1)一般格式: printf(格式字符串,输出列表)
其中:“格式字符串”包括“输出字符”和“格式控制字符”(由%和格式字符组成,指定输出项的输出格式)。
• d格式符:用于输出十进制整数;
%d:以十进制形式显示输出变量的值;
%5d:以十进制形式显示变量的值,且至少占用5个字符的空间,若不够5位数字,则左侧补空格;
%-5d:以十进制形式显示变量的值,且至少占用5个字符的空间,左对齐;
%5.3d:以十进制形式显示变量的值,且至少占用5个字符的空间并至少有3位数字,若不够3位数字,则左侧补0;
如:#include
main()
{
int i;
i=40;
printf(“%dn”,i);
printf(“%5dn”,i);
printf(“%-5dn”,i);
printf(“%5.3dn”,i);
}
• f格式符:用于以小数形式输出实数;
%10.3f:以定点十进制形式显示变量的值,且总共用10个字符,其中,整数位6位,小数位3位,小数点1位;
如:#include
main()
{
float x;
x=839.21f;
printf(“%10.3fn”,x);
}
• c格式符:用于输出一个字符;
如:
x=”a”,y =”b”, 则 printf(%c %c“,x,y)的输出结果为:a b
若变量的值为整数,则输出该整数值为ASCII码的字符:
如 x=65,y=98,则 printf(“%c, %c”,x,y)的输出结果为: A, b;
同理,一个字符的数据也可以以整数的形式输出;
如 x=’a’,y=’B’,则printf(“%d,%d”,x,y)的输出结果为:97,66
• s格式符:用于输出一个字符串。
如:printf(“%s”,”I am a student!”)
• e,E格式符:用于以指数形式输出实数。
如:printf(“%e”, 123.456),则输出结果为:1.234560e+002;
• g,G格式符:用于输出实数,根据数值的大小自动选择f格式或e格式。
2、格式输入函数scanf()
(1)一般格式:
scanf(格式字符串,变量地址表)
其中:格式字符串使用双引号括起来的字符串,包括“普通字符”(按原样输入)、“格式控制字符”(由%和格式字符组成,用来标定输入数据的格式)。
变量地址表是由若干个变量地址组成的表列,可以是变量的地址,也可以使字符串的首地址。
• d格式:用于输入十进制整数;
如:scanf(“%d,%d”,&x,&y);则输入格式为:123,3456
•u格式:用于输入十进制无符号整数;
•f格式:用于输入以小数形式的实数;
如:scanf(“%f,%f”,&x,&y);则输入格式为:123.23,23.456
•c格式:用于输入一个字符;
如:scanf(“%c,%c”,&x,&y);则输入格式为:a,b
•s格式:用于输入一个字符串;
如:scanf(“%s”,a);假定a为字符数组,则输入格式为:abcdef
注:输入的字符串中间不能包含空格。
特别说明:
• 对于变量,”&”加变量名即为该变量的地址;如:&a、&b等分别表示变量a和变量b的地址;
•对于字符串数组或字符指针型变量,数组名和指针变量名本身即为其地址;
•可以在%和格式字符之间加表示位数的数字;如:scanf(“%5s”,p);表示只能输入5个字符给字符串指针p;
3、字符数据的输入输出:
(1)putchar()函数:是向标准输入输出设备输出一个字符;
其调用格式为:putchar(ch);其中:ch为一个字符变量或常量;
putchar()函数作用等同于 printf(“%c”,ch);
(2)getch()getche()和getchar()函数:
•getch():从键盘上读入一个字符,但不显示在屏幕上;
•getche():从键盘上读入一个字符,显示在屏幕上;
•getchar():从键盘上读入一个字符,并显示在屏幕上,但直到输入回车键时才结束输入,第一个字符为其函数的返回值。
05.选择结构
一、if语句:
一般格式:
if(表达式)语句;
表示:当“表达式”成立时,则执行“语句”;否则跳过“语句”;
如:if(a>b)printf(“a>b!”);
例:若用户输入的数为3的倍数,则显示”OK”
#include
main()
{
int a;
scanf(“%d”,&a);
if(a %3==0)printf(“OK”);
}
二、if-else 语句:
一般格式:
if(表达式)
语句1;
else
语句2;
例:给出用户输入的两个整数的较大者
#include
main()
{
int a,b;
scanf(“%d,%d”,&a,&b);
if(a>b)
printf(“the max=%d”,a);
else
printf(“ the max=%d”,b);
}
三、if语句的嵌套
1、if子句中嵌套:
• if(表达式1)
if(表达式2)语句1;
else 语句2;
else 语句3;
• if(表达式1)
{ if(表达式2)语句1;}
else 语句2;
2、else子句中嵌套
• if(表达式1)语句1;
else
if(表达式2)语句2;
else 语句3;
• if(表达式1)语句1;
else
if(表达式2)语句2;
3、嵌套一般格式:
if(表达式1)语句1;
else if(表达式2)语句2;
else if(表达式3)语句3;
…
else if(表达式n)语句n;
else 语句n+1;
例:将用户输入的成绩按以下规则转换成等级成绩:
分数: 90~100
等级:优
分数: 80~89
等级:良
分数: 70~79
等级:中
分数: 60~69
等级:及格
分数: 60以下
等级:不及格
# include
main()
{
int d;
printf(“输入分数:”);
scanf(“%d”,&d);
if(d>=90)printf(“优”);
else if(d>=80)printf(“ 良”);
else if(d>=70)printf(“ 中”);
else if(d>=60)printf(“ 及格”);
else printf(“ 不及格”);
}
四、条件语句:
表达式1 ? 表达式2 :表达式3
执行的过程:若表达式1的值为非0时,该条件语句的职位表达式2,否则为表达式3;
例:求一个整数的绝对值
#include
main()
{
int i,absi;
scanf(“%d”,&i);
absi=i>0 ? i :-i;
printf(“%d绝对值是%dn”,i,absi);
}
五、switch语句
switch(表达式)
{
case 常量表达式1:
语句1;
break;
case常量表达式2:
语句2;
break;
…
case常量表达式n:
语句n;
break;
default:
语句n+1;
}
例:商店卖货物,每一件3.5元,按购买的数量给与优惠:
购买100件,优惠5%;
购买200件以上,优惠6%;
购买300件以上,优惠8%;
购买400件以上,优惠10%;
购买500件以上,优惠15%;
#include
main()
{
int n;
float p,price;
scanf(”%d“,&n);
switch(n/100)
{
case 1:
p=0.05;
break;
case 2:
p=0.06;
break;
case 3:
p=0.08;
break;
case 4:
p=0.10;
break;
case 5:
p=0.15;
break;
}
price=3.5*n*(1-p);
printf(”%应付款=%7.2fn“,price);
}
06.循环结构
一、for语句:
一般格式: for(表达式1;表达式2;表达式3)语句;
表示:先计算表达式1的值,再计算表达式2的值,若表达式2的值为0,则跳出循环体,转去执行循环体后面的程序命令;若表达式2的值非0,则执行循环体中的语句,接着计算表达式3的值;而后,再从计算表达式2的值开始重复上诉操作,直到表达式2的值为0时结束。
例:计算sum=1+2+3+…+100的值”
#include
main()
{
int i,sum;
sum=0;
for(i=1;i
sum=sum+i;
printf(“sum=%d”,sum);
}
二、while 语句:
一般格式:
while
语句;
表示:先计算表达式的值,若为非0,则执行循环体语句,然后再计算表达式的值,重复上述过程,直到计算表达式的值为0时结束循环。
例:计算sum=1+2+3…+100的值
#include
main()
{
int i,sum;
i=1;
sum=0;
while(i
{
sum=sum+i;
i++;
}
printf(“sum=%d”,sum);
}
三、do-while语句
1、一般格式:
Do
语句;
While;
表示:先执行一次循环语句,然后计算表达式的值,若表达式的值非0,则再执行循环语句,然后从计算表达式的值开始重复上述过程,直到计算表达式的值为0,循环结束。
例:计算sum=1+2+3…+100的值
#include
main()
{
int i,sum;
i=1;
sum=0;
do
{
sum=sum+i;
i++;
}while(i
printf(“sum=%d”,sum);
}
四、break和continue语句:
1、break语句:
使用break语句可以提前结束由while、for、do-while语句构成的循环,而去执行循环下面的语句。
例:判定用户输入的一个数是否为素数
#include
main()
{
int a,d;
printf(“请输入一个整数:”);
scanf(“%d”,&a);
for(d=2;d
if(a%d==0)
break;// 跳出当前的循环,执行循环后面的语句
if(d
printf(“%d 不是素数”, a);
else
printf(“%d 是素数 “,a);
}
2、continue:
continue语句用于for、while、do-while语句中,其作用是结束本次循环,接着进入下一次是否执行循环的判断。例:输入10个非0的整数并求和。
#inclu de
main()
{
int i,n=0,sum=0;
while(n
{
printf(“ 请输入整数:”);
scanf(“%d”,&i);
if(i==0)
continue;// 若为0,则继续输入下一个数
sum+=i;
n++;
}
printf(“%d”,sum);
}
五、三种循环的比较:
1、三种循环可以处理同一个问题,一般情况下可以相互代替;
2、while和do-while循环语句只在while语句之后指定循环条件,在循环体内应包含使循环趋于结束的语句;for循环语句可以在中包含使循环趋于结束的语句;
3、对于while和do-while循环语句,循环变量的初始化应在while和do-while语句之前完成;for循环语句可以在中进行;
4、while和for语句是先判断表达式,后执行循环;do-while循环语句是先执行循环,后判断表达式;
07数组
数组是一组具有同一名字、不同下标的变量。数组中带下标的变量称为数组元素,每个数组元素由数组名字和下标唯一地来确定;同一数组中的元素数据类型相同。
一、一维数组:
1、定义:只有一个下标的数组。
2、定义格式: 类型说明符
数组名[常量表达式]
如: int a[3];//定义了一个一维数组,名称为a,数据类型为整型,含3个数组元素 a[0]、a[1]、a[2];
说明:
•类型说明符:是指数组的数据类型;
•常量表达式:是一个值为正整数的表达式,用来表示该数组的元素的个数,即数组的大小;
3、数组的引用:
数组名[下标];
如: a[2]
4、数组的初始化:
•对数组的全部因素赋初值:
如: int a[3]={10,20,30};则该语句执行后,a[0]=10,a[1]=20,a[2]=30;
• 对数组的部分元素赋初值:
如:int b[3]={12,11};则该语句执行后,b[0]=12,b[1]=11,a[2]=0;
•对数组的全部元素赋初值时,也可将数组定义为一个不确定长度的数组:
如:int c[ ]={10,15,20};则该语句执行后,数组c的长度自动确定为3,c[0]=10,c[1]=15,c[2]=20;
例:将输入的10个整数按反序输出
#include
main()
{
int a[10],i;
printf(”请输入10个整数:“);
for(i=0;i
scanf(”%d“,&a[i]);
printf(” 反序输出:“);
for(i=9;i>=0;i--)
printf(”%d“,a[i]);
printf(”n“);
}
例:计算Fibonacci数列的前20项
Fibonacci数列定义:
f(1)=1
f(2)=1
f(n)=f(n-1)+f(n-2)(n>2)
#include
main()
{
int f[21],i;
f[1]=1;
f[2]=1;
for(i=3;i
f[i]=f[i-1]+f[i-2];
for(i=1;i
{
printf(”%8d“,f[i]);
//每个数字占8位
if(i%5==0)
printf(”n“);
//按5个一行输出
}
}
二、二维数组:
具有两个下标的数组为二维数组。
1、定义格式: 类型说明符
数组名[常量表达式][常量表达式]
如: int a[3][2];//定义了一个二维数组,名称数组名为a,含有6个元素:a[0][0]、a[0][1]、a[1][0]、a[1][1]、a[2][0]、a[2][1];
说明:
•第一个常量表达式指出的是数组的行数;第二个常量表达式指出的是数组的列数;
•二维数组元素的顺序是:按行存放;即先顺序存放第一行的元素,再存放第二行的元素…以此类推;
其存储格式:
a[0][0] a[0][1]
a[1][0] a[1][1]
a[2][0] a[2][1]
2、二维数组的初始化: 同一维数组。
•分行为二维数组赋初值:
int a[3][2]={{1,2},{3,4},{5,6}};则该语句执行后,a[0][0]=1, a[0][1]=2, a[1][0]=3,a[1][1]=4, a[2][0]=5, a[2][1]=6;
•按数组在存储时的排列次序赋初值:
int a[3][2]={1,2,3,4,5,6};
•对数组的部分元素赋初值:
int a[3][2]={{1},{2,3},{4}};
•忽略第一维的长度,对二维数组赋初值:
int a[][2]={1,2,3,4,5,6};该语句执行后,C语言系统自动计算出第一维的长度为6/2=3,同样有:a[0][0]=1, a[0][1]=2,a[1][0]=3,a[1][1]=4, a[2][0]=5, a[2][1]=6;
例:将两个2行3列的矩阵相加,并显示结果。
#include
main()
{
int a[2][3]={1,3,5,7,9,11};
int b[2][3]={2,4,6,8,10,12};
int c[2][3],sum=0,i,j;
for(i=0;i
//i 表示第1行到第3行
for(j=0;j
//j 表示第1列到第3列
c[i][j]=a[i][j]+b[i][j];
for(i=0;i
for(j=0;j
{
printf(“%5d”,c[i][j]);
if((j+1)%3==0)printf(“n”);
} }
08字符数组
字符数组是用来存放字符的数组,字符数组中的一个元素存放一个字符。
1、字符数组的定义:
char a[10];
2、字符串:字符串是借助于字符数组来存放的,并规定以字符’ ’(占用存储空间,但不计入字符串的长度)为字符串的结束标记。
3、字符串处理函数:
•scanf(“%s”,a);//以格式符%s输入字符串,输入的字符串自动以’ ’结尾;输入的字符数组名前不加”&”前缀;
•printf(“%s”,a);//以格式符%s输出字符串,输出的字符串以’ ’结尾;
•gets(a);//a为字符数组名,输入的字符可以包含’ ’字符;
•puts(a);//a为字符数组名,输入的字符可以包含’ ’字符;
•strcat(字符串1,字符串2);//把字符串2连接到字符串1后;
•strcpy(字符数组1,字符串2);//把字符串2拷贝到字符数组1中;
如:str为字符数组,将字符常量赋予str: strcpy(str,”abcdef“);
•strcmp(字符串1,字符串2);//比较两个字符串,若相等,则返回0,若字符串1>字符串2,则返回1,否则返回-1;
如:比较两个字符串str
1、str2:if(strcmp(str1,str2)==1)printf(”str1>str2“);
•strlen(字符数组);//返回字符数组中包含的字符串的长度;
•strlwr(字符串);//将字符串的大写字符转换为小写;
•strupr(字符串);//将字符串的小写字符转换为大写;
例:不使用strlen()函数,计算一个字符串的长度
#include
main()
{
int i=0;
char str[30];
printf(“ 输入一个字符串:”);
gets(str);
while(str[i]!=’ ’)
i++;
printf(“字符串长度为:%dn”,i);
}
例:将一字符串逆转
#include
#include
main()
{
char str[20],temp;
int i,j;
printf(“输入一个字符串:”);
gets(str);
for(i=0;i
{
j=strlen(str)-1;
temp=str[i];
str[i]=str[j-i];
str[j-i]=temp;
}
printf(“倒置的字符串为:%sn”,str);
}
09指针
字符数组是用来存放字符的数组,字符数组中的一个元素存放一个字符。
1、字符数组的定义:
char a[10];
2、字符串:字符串是借助于字符数组来存放的,并规定以字符’ ’(占用存储空间,但不计入字符串的长度)为字符串的结束标记。
3、字符串处理函数:
•scanf(“%s”,a);//以格式符%s输入字符串,输入的字符串自动以’ ’结尾;输入的字符数组名前不加”&”前缀;
•printf(“%s”,a);//以格式符%s输出字符串,输出的字符串以’ ’结尾;
•gets(a);//a为字符数组名,输入的字符可以包含’ ’字符;
•puts(a);//a为字符数组名,输入的字符可以包含’ ’字符;
•strcat(字符串1,字符串2);//把字符串2连接到字符串1后;
•strcpy(字符数组1,字符串2);//把字符串2拷贝到字符数组1中;
如:str为字符数组,将字符常量赋予str: strcpy(str,”abcdef“);
•strcmp(字符串1,字符串2);//比较两个字符串,若相等,则返回0,若字符串1>字符串2,则返回1,否则返回-1;
如:比较两个字符串str
1、str2:if(strcmp(str1,str2)==1)printf(”str1>str2“);
•strlen(字符数组);//返回字符数组中包含的字符串的长度;
•strlwr(字符串);//将字符串的大写字符转换为小写;
•strupr(字符串);//将字符串的小写字符转换为大写;
例:不使用strlen()函数,计算一个字符串的长度
#include
main()
{
int i=0;
char str[30];
printf(“ 输入一个字符串:”);
gets(str);
while(str[i]!=’ ’)
i++;
printf(“字符串长度为:%dn”,i);
}
例:将一字符串逆转
#include
#include
main()
{
char str[20],temp;
int i,j;
printf(“输入一个字符串:”);
gets(str);
for(i=0;i
{
j=strlen(str)-1;
temp=str[i];
str[i]=str[j-i];
str[j-i]=temp;
}
printf(“倒置的字符串为:%sn”,str);
}
10函数
C程序是由函数组成的,有且只有一个主函数main(),由主函数调用其他函数,其他各函数也可以相互调用。
1、函数的定义: 一般格式:
类型说明 函数名(形式参数表)
//函数头
{
说明部分;
//函数体
执行部分;
}
其中:类型说明:是指函数返回值的数据类型;默认为int;
函数名:为一标识符;代表了函数的入口地址;
形式参数表:是用逗号分隔的一组变量说明,指出每一个形式参数的类型和名称;
函数值的返回:有时,调用函数是为了计算一个结果,这是需要使用返回语句将就是结果返回给主调函数,此值即为函数的返回值;
一般格式:return(表达式);
其中,圆括号可以省略;
当函数不需要返回值时,可以写成:return;
例:编写一个函数power(),用于计算x的n次方的值
#include
float power(float x,int n)
{
int i;
float s;
s=1;
for(i=1;i
s=s*x;
return(s);
}
2、函数的调用:
C语言中函数调用的一般格式:
函数名(实参表);
如:float f;
f=power(3,10);
3、数组作为函数的参数
•数据元素作为函数实参
在函数调用时,把数组元素作为实参传递给形参,实现单向的值传递;
如:判别各个元素的值,大于0,则输出该值,小于或等于0,则输出0
#include
void func(int x)
{
if(x>0)
printf(“%4d”,x);
else
printf(“%2d”,0);
}
main()
{
int a[5],i;
printf(“请输入5个数:”);
for(i=0;i
scanf(“%d”,&a[i]);
for(i=0;i
func(a[i]);//将数组元素作为实参传递
}
•数组名作为函数参数
(1)使用数组名作为函数参数时,形参和实参是同类型的数组;
(2)在主调函数和被调函数中分别定义数组;
(3)数组名代表了数组的起始地址,数组名作为函数参数传递的是该数组的起始地址,而不是该数组元素的值;
例:将数组中的元素的和计算并显示出来。
#include
func(int b[])
{
int sum=0,i;
for(i=0;i
sum+=b[i];
return sum;
}
main()
{
int a[]={1,2,3,4,5,6,7,8,9,10},s;
s=func(a);
//将数组a组为参数传递给函数func
printf(”s=%d“,s);
}
4、内部函数和外部函数
• 内部函数:在定义函数时,在其类型名之前加“static”,则所定义的函数为内部函数,只能被所在的源文件中的函数调用,其他源文件若有同名的内部函数,互不干扰。
• 外部函数:在定义函数时,在其类型名之前加“extern”(也可省略),则所定义的函数为外部函数(也称全局函数),可被其他源程序的函数调用。
如:static int func_1()
//内部函数
{
...}
extern func_2()
//外部函数
{
...}
综合测试
~~~~~给定程序为:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上只剩一个桃子。求第一天共摘了多少桃子。由主函数输出第一天共摘桃子数。输出结果为1534。
#include int fun(int n){ } main(){ int n=10,sum;sum=fun(n);printf(”sum=%d“,sum);}
解析:根据题意,第n+1天剩下的桃子数为x(n+1),第n天剩下的桃子数为x(n),则满足:x(n)=2*(x(n+1)+1);第十天剩下1个桃子,可推算出第九天剩下的数量;可利用for循环,递推出其他天数剩下的桃子数:
int fun(int n)
{
int x,i;
x=1;
//第十天剩下的数量
for(i=n-1;i>=1;i--)//从第九天开始推算
{
x=2*(x+1);
}
return x;}
~~~~~~给定程序的功能是:从键盘输入10个整数求其中的最大值。#include main(){ int fun(int b[],int n);int max;int i,a[10];
for(i=0;i
scanf(”%d“,&a[i]);
max=fun(a,10);
printf(”max=%d“,max);}
int fun(int b[],int n){
} 解析:比较最大值的一般算法:设置一个变量max,第一步:将第一个数赋予max;第二步:利用for循环,将剩下的9个数依次与max相比较,每次比较,max均等于大的数;
int fun(int b[],int n){
int max,i;
max=b[0];//将第一个数赋予max
for(i=1;i
//将剩下的9个数依次与max比较;
if(max
return max;}
~~~~~~~给定程序的功能是:将给定字符串中所有的小写字母转换成大写字母(大写字母A的ASCII码为65,小写字母a的ASCII码为97)。#include #include void hs(char c[]){ } main(){
char a[]={”AgRbhLfFGjI“};
hs(a);
printf(”%s“,a);} 解析:将给定字符串的每一个字符取出,判断是否介于'a'和'z'之间,若是,则将其转换为大写字符,即其ASC码值-32。void hs(char c[]){
unsigned int i;
for(i=0;i
if(c[i]>='a' && c[i]
c[i]=c[i]-32;
return;} ~~~~~~~给定程序的功能是:求1+2+3+4+5+6+......+n(n的值由键盘输入)。include main(){
int fac(int n);
int n,sum;
scanf(”%d“,&n);
sum=fac(n);
printf(”sum=%d“,sum);}
int fac(int n){
} 解析:函数fac的功能是计算1-n之间整数的累计和。int fac(int n){
int i,sum;
sum=0;
//累计和的初始值为0
for(i=1;i
sum+=i;
//将1-n之间的整数累加起来
return sum;}
~~~~~~~~~给定程序的功能是:从键盘输入
10个整数,求其中的最小值。
#include ”stdio.h“ main(){
int fun(int x[],int n);
int a[10],i,min;
printf(”please input 10 numbers:n“);
for(i=0;i
scanf(”%d“,&a[i]);
min=fun(a,10);
printf(”min=%dn",min);}
int fun(int x[],int n){ } 解析:比较最小值的一般算法:设置一个变量min,第一步:将第一个数赋予min;第二步:利用for循环,将剩下的9个数依次与min相比较,每次比较,min均等于小的数;
int fun(int x[],int n){
int min,i;
min=x[0];//将第一个数赋予min
for(i=1;i
//将剩下的9个数依次与min比较;
if(min>x[i])min=x[i];
return min;}
实验三:单精度的有效数字为7位,双精度的有效数字为16位。 实验四:x=3.6,i=3 当以浮点型输出时,小数点默认为6位; int b=-1; ;p=(i++)+(i++)+(i++);备注:i=5......
1.Problem A: Hello world! Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。Input 无Output 请输出: Hello Da_min, Hello......
1032]《C语言程序设计》选择题 [单选题]12.关于C语言程序描述正确的是()A:每个函数必须要有return语句 B:主函数必须位于程序的开头 C:程序中每行只能写一条语句 D:一个程序中只......
《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业......
语言文字运用练习题1.下面语段中加点的词语,使用恰当的一项是( )近日网上流传着香港的一份要求填上“草菅人命”形容警方才能得分的中文科测验卷。该试卷一旦流传,就引发了各方......
