0260C语言程序设计基础 自学考试知识点自学考试

微信小程序
资源下载
下载价格1

02600C语言程序设计基础自考历年真题试题试卷电子版及复习资料:https://www.ddwk123.cn/archives/69299

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<stdio.h>

int  main(void)

{

printf(“Hello.\n”);

return 0;

}

说明:#include<stdio.h> 是必不可少的,它包含了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<stdio.h>

int  main(void)

{

printf(“Hello.\n”);

return 0;

}

说明:#include<stdio.h> 是必不可少的,它包含了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%p

3、类型转换

如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:

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<stdio.h>

main()

{

int i=8;

printf(“%d\n”,++i);  /* i先加1,再输出i ,输出结果为9 */

printf(“%d\n”,–i);   /* i先减1,再输出i ,结果为8 */

printf(“%d\n”,i++); /* 先输出i ,输出结果为8,i再加1, */

printf(“%d\n”,i–);  /* 先输出i ,输出结果为9,i再减1, */

printf(“%d\n”,-i++); /* 先加输出-i,输出结果为-8,i再加1 */

printf(“%d\n”,-i–);  /* 先输出-i ,输出结果为-9,i再减1 */

}

 

5、求字节运算符

计算表达式的结果所占字节数或某种数据类型的定义字节数。

一般格式:sizeof(数据类型标识符)  或  sizeof(表达式)

如: sizeof(float)的值为4,占4个字节;

sizeof(2*3)的值为2,占2个字节;

6、关系运算符和关系表达式

 关系运算符:“<”(小于)、 “<=”(小于等于) 、”>”(大于)、”>=”(大于等于) 、”==”(等于)、 “!=”(不等于)

 关系表达式:若关系表达式成立,其值为“真”,否则为“假”;在C语言中,用0代表“假”,用1代表“真”;

7、逻辑运算符和逻辑表达式:

 逻辑运算符: “!” (非)、 “&&” (与)、  “||”(或);运算优先级: !>&&>||

 逻辑表达式:用逻辑运算符将表达式连接起来的式子;逻辑表达式的结果仍然是逻辑量(“真”或“假”)

8、条件运算符:

一般格式: <表达式1>?<表达式2>:<表达式3>

先计算表达式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 <stdio.h>

其中:#include命令一般写在程序的开头位置。

1、格式输入输出

1、格式输出函数printf()

(1)一般格式: printf(格式字符串,输出列表)

其中:“格式字符串”包括“输出字符”和“格式控制字符”(由%和格式字符组成,指定输出项的输出格式)。

  • d格式符:用于输出十进制整数;

%d:以十进制形式显示输出变量的值;

%5d:以十进制形式显示变量的值,且至少占用5个字符的空间,若不够5位数字,则左侧补空格;

%-5d:以十进制形式显示变量的值,且至少占用5个字符的空间,左对齐;

%5.3d:以十进制形式显示变量的值,且至少占用5个字符的空间并至少有3位数字,若不够3位数字,则左侧补0;

如:#include<stdio.h>

main()

{

int i;

i=40;

printf(“%d\n”,i);

printf(“%5d\n”,i);

printf(“%-5d\n”,i);

printf(“%5.3d\n”,i);

}

 

  • f格式符:用于以小数形式输出实数;

%10.3f:以定点十进制形式显示变量的值,且总共用10个字符,其中,整数位6位,小数位3位,小数点1位;

如:#include<stdio.h>

main()

{

float x;

x=839.21f;

printf(“%10.3f\n”,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<stdio.h>

main()

{

int a;

scanf(“%d”,&a);

if(a %3==0) printf(“OK”);

}

 

二、if-else 语句:

一般格式:

if (表达式)

语句1;

else

语句2;

 

例:给出用户输入的两个整数的较大者

#include<stdio.h>

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<stdio.h>

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<stdio.h>

main()

{

int i,absi;

scanf(“%d”,&i);

absi=i>0 ? i : -i;

printf(“%d绝对值是%d\n”,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<stdio.h>

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.2f\n”,price);

}

06.循环结构

一、for语句:

一般格式: for( 表达式1 ;表达式2;表达式3) 语句;

表示:先计算表达式1的值,再计算表达式2的值,若表达式2的值为0,则跳出循环体,转去执行循环体后面的程序命令;若表达式2的值非0,则执行循环体中的语句,接着计算表达式3的值;而后,再从计算表达式2的值开始重复上诉操作,直到表达式2的值为0时结束。

 

例:计算sum=1+2+3+…+100的值”

#include<stdio.h>

main()

{

int i,sum;

sum=0;

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

sum=sum+i;

printf(“sum=%d”,sum);

}

 

二、while 语句:

一般格式:

while<表达式>

语句;

表示:先计算表达式的值,若为非0,则执行循环体语句,然后再计算表达式的值,重复上述过程,直到计算表达式的值为0时结束循环。

 

例:计算sum=1+2+3…+100的值

#include<stdio.h>

main()

{

int i,sum;

i=1;

sum=0;

while(i<=100)

{

sum=sum+i;

i++;

}

printf(“sum=%d”,sum);

}

三、do-while语句

1、一般格式:

Do

语句;

While<表达式>;

表示:先执行一次循环语句,然后计算表达式的值,若表达式的值非0,则再执行循环语句,然后从计算表达式的值开始重复上述过程,直到计算表达式的值为0,循环结束。

例:计算sum=1+2+3…+100的值

#include<stdio.h>

main()

{

int i,sum;

i=1;

sum=0;

do

{

sum=sum+i;

i++;

}while(i<=100);

printf(“sum=%d”,sum);

}

 

四、break和continue语句:

1、break语句:

使用break语句可以提前结束由while、for、do-while语句构成的循环,而去执行循环下面的语句。

例:判定用户输入的一个数是否为素数

#include<stdio.h>

main()

{

int a,d;

printf(“请输入一个整数:”);

scanf(“%d”,&a);

for(d=2;d<a;d++)

if(a%d==0)

break;  // 跳出当前的循环,执行循环后面的语句

if(d<a)

printf(“%d 不是素数”, a);

else

printf(“%d 是素数 “,a);

}

2、continue:

continue语句用于for、while、do-while语句中,其作用是结束本次循环,接着进入下一次是否执行循环的判断。

例:输入10个非0的整数并求和。

#inclu de<stdio.h>

main()

{

int i,n=0,sum=0;

while(n<10)

{

printf(“ 请输入整数:”);

scanf(“%d”,&i);

if(i==0)

continue;  // 若为0,则继续输入下一个数

sum+=i;

n++;

}

printf(“%d”,sum);

}

五、三种循环的比较:

1、三种循环可以处理同一个问题,一般情况下可以相互代替;

2、while和do-while循环语句只在while语句之后指定循环条件,在循环体内应包含使循环趋于结束的语句;for循环语句可以在<语句3>中包含使循环趋于结束的语句;

3、对于while和do-while循环语句,循环变量的初始化应在while和do-while语句之前完成;for循环语句可以在<表达式1>中进行;

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<stdio.h>

main()

{

int a[10],i;

printf(“请输入10个整数:”);

for(i=0;i<10;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<stdio.h>

main()

{

int f[21],i;

f[1]=1;

f[2]=1;

for (i=3;i<=20;i++)

f[i]=f[i-1]+f[i-2];

for (i=1;i<=20;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<stdio.h>

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<2;i++)         //i 表示第1行到第3行

for(j=0;j<3;j++)     //j 表示第1列到第3列

c[i][j]=a[i][j]+b[i][j];

for(i=0;i<2;i++)

for (j=0;j<3;j++)

{

printf(“%5d”,c[i][j]);

if((j+1)%3==0) printf(“\n”);

}

}

08字符数组

字符数组是用来存放字符的数组,字符数组中的一个元素存放一个字符。

1、字符数组的定义:

char  a[10];

2、字符串:字符串是借助于字符数组来存放的,并规定以字符’\0’(占用存储空间,但不计入字符串的长度)为字符串的结束标记。

3、字符串处理函数:

  • scanf(“%s”,a); //以格式符%s输入字符串,输入的字符串自动以’\0’结尾;输入的字符数组名前不加”&”前缀;
  • printf(“%s”,a); //以格式符%s输出字符串,输出的字符串以’\0’结尾;
  • gets(a); //a为字符数组名,输入的字符可以包含’\0’字符;
  • puts(a); //a为字符数组名,输入的字符可以包含’\0’字符;
  • strcat(字符串1,字符串2); //把字符串2连接到字符串1后;
  • strcpy(字符数组1,字符串2); //把字符串2拷贝到字符数组1中;

如:str为字符数组,将字符常量赋予str: strcpy (str ,”abcdef”);

  • strcmp(字符串1,字符串2); //比较两个字符串,若相等,则返回0,若字符串1>字符串2,则返回1,否则返回-1;

如:比较两个字符串str1、str2:if(strcmp(str1,str2)==1) printf(“str1>str2”);

  • strlen(字符数组); //返回字符数组中包含的字符串的长度;
  • strlwr(字符串); //将字符串的大写字符转换为小写;
  • strupr(字符串); //将字符串的小写字符转换为大写;

 

例:不使用strlen()函数,计算一个字符串的长度

#include<stdio.h>

main()

{

int i=0;

char str[30];

printf(“ 输入一个字符串:”);

gets(str);

while (str[i]!=’\0’)

i++;

printf(“字符串长度为:%d\n”,i);

}

 

例:将一字符串逆转

#include<stdio.h>

#include<string.h>

main()

{

char str[20],temp;

int i,j;

printf(“输入一个字符串:”);

gets(str);

for(i=0;i<strlen(str)/2;i++)

{

j=strlen(str)-1;

temp=str[i];

str[i]=str[j-i];

str[j-i]=temp;

}

printf(“倒置的字符串为:%s\n”,str);

}

09指针

字符数组是用来存放字符的数组,字符数组中的一个元素存放一个字符。

1、字符数组的定义:

char  a[10];

2、字符串:字符串是借助于字符数组来存放的,并规定以字符’\0’(占用存储空间,但不计入字符串的长度)为字符串的结束标记。

3、字符串处理函数:

  • scanf(“%s”,a); //以格式符%s输入字符串,输入的字符串自动以’\0’结尾;输入的字符数组名前不加”&”前缀;
  • printf(“%s”,a); //以格式符%s输出字符串,输出的字符串以’\0’结尾;
  • gets(a); //a为字符数组名,输入的字符可以包含’\0’字符;
  • puts(a); //a为字符数组名,输入的字符可以包含’\0’字符;
  • strcat(字符串1,字符串2); //把字符串2连接到字符串1后;
  • strcpy(字符数组1,字符串2); //把字符串2拷贝到字符数组1中;

如:str为字符数组,将字符常量赋予str: strcpy (str ,”abcdef”);

  • strcmp(字符串1,字符串2); //比较两个字符串,若相等,则返回0,若字符串1>字符串2,则返回1,否则返回-1;

如:比较两个字符串str1、str2:if(strcmp(str1,str2)==1) printf(“str1>str2”);

  • strlen(字符数组); //返回字符数组中包含的字符串的长度;
  • strlwr(字符串); //将字符串的大写字符转换为小写;
  • strupr(字符串); //将字符串的小写字符转换为大写;

 

例:不使用strlen()函数,计算一个字符串的长度

#include<stdio.h>

main()

{

int i=0;

char str[30];

printf(“ 输入一个字符串:”);

gets(str);

while (str[i]!=’\0’)

i++;

printf(“字符串长度为:%d\n”,i);

}

 

例:将一字符串逆转

#include<stdio.h>

#include<string.h>

main()

{

char str[20],temp;

int i,j;

printf(“输入一个字符串:”);

gets(str);

for(i=0;i<strlen(str)/2;i++)

{

j=strlen(str)-1;

temp=str[i];

str[i]=str[j-i];

str[j-i]=temp;

}

printf(“倒置的字符串为:%s\n”,str);

}

10函数

C程序是由函数组成的,有且只有一个主函数main(),由主函数调用其他函数,其他各函数也可以相互调用。

1、函数的定义:

一般格式:

类型说明 函数名(形式参数表)   //函数头

{

说明部分;            //函数体

执行部分;

}

其中:类型说明:是指函数返回值的数据类型;默认为int;

函数名:为一标识符;代表了函数的入口地址;

形式参数表:是用逗号分隔的一组变量说明,指出每一个形式参数的类型和名称;

函数值的返回:有时,调用函数是为了计算一个结果,这是需要使用返回语句将就是结果返回给主调函数,此值即为函数的返回值;

一般格式:return (表达式);   其中,圆括号可以省略;

当函数不需要返回值时,可以写成:return;

例:编写一个函数power (),用于计算x的n次方的值

#include<stdio.h>

float power(float x,int n)

{

int i;

float s;

s=1;

for(i=1;i<=n;i++)

s=s*x;

return (s);

}

2、函数的调用:

C语言中函数调用的一般格式:

函数名(实参表);

如:float f;

f=power(3,10);

3、数组作为函数的参数

  • 数据元素作为函数实参

在函数调用时,把数组元素作为实参传递给形参,实现单向的值传递;

如:判别各个元素的值,大于0,则输出该值,小于或等于0,则输出0

#include<stdio.h>

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<5;i++)

scanf(“%d”,&a[i]);

for(i=0;i<5;i++)

func(a[i]);  //将数组元素作为实参传递

}

  • 数组名作为函数参数

(1)使用数组名作为函数参数时,形参和实参是同类型的数组;

(2)在主调函数和被调函数中分别定义数组;

(3)数组名代表了数组的起始地址,数组名作为函数参数传递的是该数组的起始地址,而不是该数组元素的值;

 

例:将数组中的元素的和计算并显示出来。

#include<stdio.h>

func(int b[])

{

int sum=0,i;

for(i=0;i<10;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<stdio.h>

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<stdio.h>

main()

{

int fun(int b[],int n);

int max;

int i,a[10];

for(i=0;i<10;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<=n-1;i++)    //将剩下的9个数依次与max比较;

if(max<b[i]) max=b[i];

return max;

}

 

~~~~~~~给定程序的功能是:将给定字符串中所有的小写字母转换成大写字母(大写字母A的ASCII码为65,小写字母a的ASCII码为97)。

#include<stdio.h>

#include<string.h>

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<strlen(c);i++)

if(c[i]>=’a’ && c[i]<=’z’)

c[i]=c[i]-32;

return;

}

~~~~~~~给定程序的功能是:求1+2+3+4+5+6+……+n(n的值由键盘输入)。
include<stdio.h>

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<=n;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<10;i++)

scanf(“%d”,&a[i]);

min=fun(a,10);

printf(“min=%d\n”,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<=n-1;i++)    //将剩下的9个数依次与min比较;

if(min>x[i]) min=x[i];

return min;

}

 

 

点点赞赏,手留余香 给TA打赏

AI创作

评论0

请先

支持多种货币
支持多种货币付款,满足您的付款需求
7天无忧退换
安心无忧购物,售后有保障
专业客服服务
百名资深客服7*24h在线服务
发货超时赔付
交易成功极速发货,专业水准保证时效性
显示验证码

社交账号快速登录