当前位置:文档之家› c语言基础

c语言基础

c语言基础
c语言基础

在一维数组中,存在p+i=a+i, *(p+i)=*(a+i)=*(&a[i])=a[i]

p1+n= a+n= &a[n];代表第n行的首地址。

二维数组:

*(p1+n)+0= *(a+n)+0= *(&a[n])代表n行0列地址。

(*p)[4]指向的是含有4个整型元素的一维数组,默认p=a,指向0行首地址; p指向的二维的0行,加1是指向下一行,不指向每一行元素,要想求行列交点值那就取摸*(*(p+i)+j)、、p+i表示行号,从而转到对应的行列数

例如:(*p)[4]用法,输出任意一行一列的值

#include

void main()

{ int a[3][3]={1,2,3,4,5,6,7,8,9},(*p)[3],i,j;

p=&a[0];

scanf("%d%d",&i,&j);

printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));

}

#include

void main()

{ int a[3][3]={1,2,3,4,5,6,7,8,9},*p,i;

p=a[0];

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

{printf("%d\t",*(p+i));}//a[0]+1到a[0]+9可以输出所有的值

printf("\n");

}

最多在一维数组中用到:

*p1=*p2是把p1指向的变量的值改变,但p1所指向的变量不变,

p1=p2,则是p1指向变量改变了,即p1不再指向原变量的地址,改为指向p2所指向的地址.

题目:把数组a复制到b数组上

法1

#include//

void main()

{ int *p,*p1,a[]={1,2,3,4,5},i,b[5];

p=a;

p1=b;

for(i=0;i<5;i++,p++,p1++)

{*p1=*p;}//赋值给他,但他们所指的变量都不变

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

{printf("%d\t",b[i]);}

printf("\n");

printf("%d\t",b[4]);//这样可以的,因为它记录了这个数组的地址以及对应素质printf("\n");

}

法2不能用,

#include

void main()

{ int *p,*p1,a[]={1,2,3,4,5},i,b[5];

p=a;

p1=b;

for(i=0;i<5;i++,p++,p1++)

{ p1=p;//导致指向的变量变了

printf("%d\t",*p1);

}

printf("\n");

}

以上几题就用到第一段的方法

案例1 数组名做实形参数

法1:

#include//1 2 3 0 4 5 6,前后调换,

void s(int a[],int n)

{ int i,t,k=(n-1)/2;

for(i=0;i

a[i]=a[n-1-i];//以下三个数组交换值固定格式

a[n-1-i]=t;

}

}

main()

{ int i;

int a[]={1,2,3,0,4,5,6};

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

{ printf("%d",a[i]); }

printf("\n");

s(a,7);

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

{ printf("%d",a[i]);}

printf("\n");

}

法2:

#include//1 2 3 0 5 6 7,前后调换,用的指针法void s(int *p,int n)

{ int i,t,k=(n-1)/2;//

for(i=0;i

{ t=*(p+i);

*(p+i)=*(p+n-1-i);

*(p+n-1-i)=t;

}

}

main()

{ int i;

int a[]={1,2,3,0,5,6,7};

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

{ printf("%d",a[i]); }

printf("\n");

s(a,7);

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

{ printf("%d",a[i]);}

printf("\n");

}

#include//一般方法,1 2 3 0 4 5 6从大到小输出,数组名做形参数void s(int a[],int n)

{ int i,j,t;

for(j=0;j

{ for(i=0;i

{ if(a[i]

{ t=a[i];

a[i]=a[i+1];

a[i+1]=t;}

}

}

}

main()

{int a[7]={1,2,3,0,4,5,6},i;

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

{ printf("%d",a[i]);}

printf("\n");

s(a,7);

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

{ printf("%d",a[i]); }

printf("\n");

}

#include//一般方法,1 2 3 0 4 5 6从大到小输出,数组名做形参数void s(int a[],int n)

{ int i,j,t;

for(j=0;j

{ for(i=0;i

{ if(a[i]

{ t=a[i];

a[i]=a[i+1];

a[i+1]=t;}

}

}

}

main()

{int a[10],i;

printf("please input 10 numbers:");

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

{ scanf("%d",&a[i]);}

s(a,10);

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

{ printf("%d",a[i]); }

printf("\n");

}

案例2数组名作实参,指针做形参数,

#include//1 2 3 0 4 5 6从大到小输出,

void s(int *p,int n)//调用函数后,就相当于定义指针变量一样,p=a,当做自己数组处理,在之前里面不能出现其他的数组

{ int i,j,t;

for(j=0;j

{ for(i=0;i

{ if(*(p+i)<*(p+i+1))

{ t=*(p+i);

*(p+i)=*(p+i+1);//这题你应该用指针的。

*(p+i+1)=t;}

}

}

}

main()

{int a[10],i;

printf("please input 10 numbers:");

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

{ scanf("%d",&a[i]);}

s(a,10);

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

{ printf("%d",a[i]); }

printf("\n");

}

案例3 实参和形参都是指针变量

就把实参指针变量指向的数组都付给形参指针变量,当做自己的数组案例4 实参为指针变量,形参为数组名

#include//3行4列输出,二维数组指针

void main()

{int a[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},i,*p;

for(p=a[0],i=1;p

{

printf("%d\t",*p);

if(i%4==0)

{printf("\n");}

}

}

上面2-底一样的题目

#include//输入行列号,输出任意一行一列元素,二维数组指针void main()

{int a[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},i,j;

printf("please input i and j:");

scanf("%d,%d",&i,&j); //不需要的p=a[0];//&a[0][0] printf("a[%d,%d]=%d\n",i,j,*(a[i]+j));

}

这两个最特殊:p指向由m个数组元素构成的一维数组

#include//3行4列输出,二维数组指针

void main()

{int a[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},i,j;

int(*p)[4];//虽然是二维数组,但是他这意思是p指向含有4个整形元素的一维数组,

p=a;//意思是指向0行a[0],p+1为a[1]行

printf("please input i and j:");

scanf("%d,%d",&i,&j);

printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));//这是二维数组取地址方式

}

#include//3行4列输出,二维数组指针

void main()

{int a[3]={1,2,2},i,j;

int(*p)[3]; //虽然是二维数组,但是他这意思是p指向含有4个整形元素的一维数组,//p=a;//意思是指向0行a[0],p+1为a[1]行

//printf("please input i and j:");

//scanf("%d,%d",&i,&j);

//printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));//这是二维数组取地址方式

p=&a;

printf("%d\n",(*p)[2]);

}

题目为:有一个班,3个学生,都学4门学科,求所有的平均成绩,可以查出n个学生的成绩,查找有一门以上课程不及格的学生,输出他们的全部课程的成绩.

把*a数组元素首地址赋给指针p,p就代表指向主调函数,

#include

void f(int *p,int n)

{ int *p1,s=0,av;

p1=p+n;

for(;p

{ s=s+(*p);

}

av=s/n;

printf("%d\n",av);//av=3

}

main()

{ int a[3][4]={2,4,2,2,2,6,2,8,2,4,4,8};

f(*a,12);//a是首行的地址&a[o],p=a;*a指的是数组首元素地址a[0]+0,或者&a[0][0],p=a[0],把*a数组元素首地址赋给指针p

}

把a数组赋给指针p,p就代表指向主调函数,

void f2(int (*p2)[4],int n)//p指向的是含有4位整形数组的一维数组,对二维讲,她也是从一维看,由上而下一行看,对一维来说p=&a,取摸(*p)[4]

{ int i,j;

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

{ for(i=0;i<4;i++)

{ if(*(*(p2+n)+i)<4)

{ for(j=0;j<4;j++)

{ printf("%d\t",*(*(p2+n)+j)); }//这三个黄色是固定搭配,死记

printf("\n");

break; }

}

}

}

main()

{ int a[3][4]={4,4,4,4,2,6,2,8,2,4,4,8};

f(*a,12);//*a指的是数组首元素地址a[0]+0,或者&a[0][0],p=a[0],把*a数组元素首地址赋给指针p

f1(a,2);

printf("\n\n");

f2(a,3);

printf("\n");

}

用二维数组求平均数

void main()//

{int a[3][4]={1,2,2,2,3,4,4,5,5,6,9,0},*p,s=0,av;

for(p=a[0];p

av=s/12;

printf("%d\n",av);

}

对于一位数组:

字符数组

指针和字符数组的相互应用:

#include

main()

{char *s={"abc"};//定义的字符指针s默认指向字符串a首地址

do

{ printf("%d\t",*s%10);//*s取摸后再取余

++s;//s指向下一个元素地址

}while(*s);

printf("\n");

}

题目:1,定义一个字符数组,存放“i love china”,输出该字符串和第8个字符数组include

void main()

{ char string[]={"i love china"};//或者string[]={'i', 'l','o','v','e',' ','c','h','i','n','a'};等价

printf("%s\n",string);//为%d求得就是0元素的地址,%s输出i love china

printf("%c",string[7]);//为%d求得就是7元素的地址ascii c=99,%c输出c,%s就有问题printf("\n");

}

2,通过字符指针变量输出一个字符串:

法1:

#include

void main()

{ char s[]={"i love china"};

printf("%c",s[1]);//为%d求得就是0元素的地址,%s输出i love china

printf("\n");

}

法2:

#include

void main()

{ char *p={"i love china"};//固定格式,定义字符指针变量s,并对s初始化

printf("%c\n",p[0]);//结果是i

p="2 1 2";//也可以对s重新赋值

printf("%c\n",a、[1]);

printf("%s\n",p); //p指向的是字符串常量的第一个字符,会自动加1指向下一个字符地址}//输出的结果是2 1 2 ,s指向2,输出自动加1

或者

#include

void main()

{ char *s;//固定格式,定义字符指针变量s,并对s初始化

s=={"i love china"};把字符数组首元素i地址赋给了s

printf("%s\n",s);//结果是i love china

}

sizeof 与strien的用法:第一:对于字符指针数组

char* s = "0123456789";

sizeof(s) 结果 4,因为s是指向字符串常量的字符指针,sizeof获得的是一个指针的之所占的空间,应该是

长整型的,所以是4

sizeof(*s) 结果 1 ,因为*s是第一个字符其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位

strlen(s)= 10 如果要获得这个字符串的长度,则一定要使用strlen(是获得有效字符长度,无\0)

例如:

#include

#include

main()

{char str[][20]={"One*World","One*Dream!"},*p=str[1];

printf("%d,",strlen(p));

printf("%s\n",p);// p指向的是字符串常量的第一个字符,会自动加1指向下一个字符地址

}// //或者str也可以输出字符串

字符串比较函数:

一般形式:strcmp(字符串1,字符串2)

说明:

当s1

当s1=s2时,返回值=0

当s1>s2时,返回值>0

即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:

"A"<"B" "a">"A" "computer">"compare"

特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,不能比较数字等其他形式的参数。

char name[20];

scanf("%s",name); //这个可以输入字符串

scanf("%s",&name);错误的

字符串连接函数:

#include

#include

void main()

{ int i; char a[]="123",a1[]="asd";

printf("%s",strcat(a,a1));//a与a1两个字符串连接在一起123asd,字符串连接函数

printf("\n");// strcpy(a,a1));//把a1复制覆盖到a1, asd 字符串复制函数

}

#include

void main()

{ char a[5];

printf("请输入字符数组a:");//在输入时,辨别谁是谁输入的,以空格为界限分开scanf("%s",a);//必须是数组名,

printf("%s",a);

printf("\n");

}

题目:将数组字符串a复制到数组b上,并输出数组b

法1:#include

void main()

{ char a[]={"i m"},b[5];//b[]在定义时候一定要知道大小

int i;

for(i=0;*(a+i)!='\0';i++)//不定义p也能用指针,用*(a+i)代替,遇到‘\0’就跳出结束输出,表示已处理完

{*(b+i)=*(a+i);}

*(b+i)='\0';//一定把\0复制过去给他

printf("string a is:%s\n",a);//下面三句也可以用printf("string b is:%s\n",b);代替

printf("string b is:");//

for(i=0;b[i]!='\0';i++)

{printf("%c",b[i]);}

printf("\n");

}

法2: #include//

void main()

{ char *p,*p1,a[]={"i love"},b[7];

int i;

p=a;

p1=b;

for(i=0;i<7;i++,p++,p1++)

{*p1=*p;}//赋值给他,但他们所指的变量都不变

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

{printf("%c",b[i]);}

printf("\n");

}

#include

void main()

{ char a[]={"i m"},b[5],*p,*p1;//b[]在定义时候一定要知道大小

int i;

p=a;

p1=b;//可省略

for(p=a,p1=b;*p!='\0';p++,p1++)//不定义p也能用指针,用*(a+i)代替,遇到'\0'就跳出结束输出

{*p1=*p;}

*p1='\0';

printf("string a is:%s\n",a);

printf("string b is:"); //下面三句也可以用printf("string b is:%s\n",b);代替

for(i=0;b[i]!='\0';i++)

{printf("%c",b[i]);}

printf("\n");

}

题目:用函数调用实现字符串的复制

法1:

#include

void copy(char a[],int n)//数组名

{ int i=0;

char b[20],*p,*p1;//b数组长度一定要大于等于调用函数的数组长度

p=a;

p1=b;

for(i=0;i

{ *p1=*p;}

for(i=0;i

{printf("%c",b[i]);}

}

main()

{ char a[]={"i love china"};

char c[]={"you love china"};

copy(c,15);//数组名

printf("\n");

copy(a,13);

printf("\n");

}

#include

void copy(char c[],char d[])//定义的数组,传递数组名或者数组名也可以用声明的指针代替{ int i=0;

for(i=0;*(c+i)!='\0';i++)//字符复制给另一方那就用左面的方法

{*(d+i)=*(c+i);}

*(d+i)='\0';

printf("%s\n",c);

printf("%s\n",d);

}

main()

{ char a[]={"i m"},b[]="i n",*p,*p1;//b[]在定义时候一定要知道大小

int i;

p=a;

p1=b;

printf("%s\n",a);

printf("%s\n",b);

printf("覆盖b数组后:\n");

copy(p,p1);//或者copy(a,b);传递数组名和指针都可以

printf("\n");

}

法3:

#include

void copy(char c[],char d[])

{ int i=0;

while(c[i]!='\0')

{ d[i]=c[i];

i++;}

printf("%s\n",c);

printf("%s\n",d);

}

main()

{ char a[]={"i m"},b[]="i n",*p,*p1;//b[]在定义时候一定要知道大小

int i;

p=a;

p1=b;

printf("%s\n",a);

printf("%s\n",b);

printf("覆盖b数组后:\n");

copy(p,p1);

printf("\n");

}

#include

void c(char *p1,char *p2)

{ int i;

for(i=0;*(p1+i)!='\0';i++)

{ *(p2+i)=*(p1+i);}

*(p2+i)='\0';

}

main()

{ char *a={"wiqo"};//定义声明字符指针变量,a指向字符串常量的第一个字符w

char *p,b[]={"1 2 2 7"};

p=b;

c(a,p);

printf("%s\n",a);

printf("%s\n",b);

}

#include

void copy(char *p,char *p1)

{ int i=0;

for(i=0;*(p+i)!='\0';i++,p++,p1++)//不定义p也能用指针,用*(a+i)代替,遇到'\0'就跳出结束输出

{*p1=*p;}

*p1='\0';

}

main()

{ char a[]={"i m"},b[]="i n",*p,*p1;//b[]在定义时候一定要知道大小

p=a;

p1=b;

printf("%s\n",a);

printf("%s\n",b);

printf("覆盖b数组后:\n");

copy(p,p1);

//printf("%s\n",a);

printf("%s\n",b);

}

指向函数的指针变量

题目:输出a,b两个最大值

#include

int max(int a,int b)

{ int z;

if(a>b)

z=a;

else

z=b;

return(z);

}

main()

{ int (*p)(int,int);//这些都是必须要有的int a=2,b=4,c;

p=max;

c=(*p)(2,4);

printf("%d\n",c);

}

题目: 输入1,2,3选择调用哪个程序

#include

int fun(int x,int y,int (*p)(int,int))//学会用fun函数的功能{ int r;

r=(*p)(x,y);

return(r);

}

int max(int a,int b)

{ int z;

if(a>b) z=a;

else z=b;

return(z);

}

int min(int a,int b)

{ int z;

if(a>b) z=b;

else z=a;

return(z);

}

int sum(int a,int b)

{ int z;

z=a+b;

return(z);

}

main()

{ int a=2,b=4,c,n;

printf("用户输入选择是:");

scanf("%d\n",&n);

if(n==1)

c=fun(2,4,sum);

if(n==2)

c=fun(2,4,max);//只要写函数名就可以了

if(n==3)

c=fun(2,4,min);

printf("%d\n",c);

}

被调用的指针函数返回指针值如下:

题目:有3个同学,每一个学生有3门成绩,任意输入一个学生序号(序号从0开始),输出该生的所有成绩

#include//指针函数定义套用格式

int *c(int (*p1)[3],i nt n)//这个最重要,从二维输出1维,只能传递数组名

{ int *p2; // p1+n= a+n= &a[n];代表第n行的首地址。

p2= *(p1+n);//p1默认指向a数组第0行的首地址p=a,加1是指向下一行,*(p1+n)= *(a+n)= *(&a[n])代表n行0列地址。

return(p2);//返回的指针值

}

main()

{ int n,i,k,a[3][3]={{1,2,3},{3,2,1},{4,5,6}},*p3;

printf("请输入学生号n:");

scanf("%d",&n);

p3=c(a,n);//只能传递数组名

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

{ printf("%d\t",*(p3+i));}//固定格式输出

printf("\n");

}

C语言基础知识_测试题

C语言程序设计基础测试题 一、单选 [1] 下面叙述中错误的是____。 A. 复合语句中定义的函数只在该复合语句中有效 B. return( )语句中的括号中,可以是变量,常量或有确定值的表达式 C. 形式参数也是局部变量 D. 主函数中定义的变量在整个程序中都是有效的 [2]下列说法中正确的是____。 A.带参数的宏定义中的参数是没有类型的 B.宏展开将占用程序的运行时间 C.宏定义命令是C语言中的一种特殊语句 D.使用#include命令包含的头文件必须以“.h"为后缀 [3.] 若函数的形参为一维数组,则下列说法中正确的是____。 A.调用函数时的对应实参必为数组名 B.形参数组可以不指定大小 C.形参数组的元素个数必须等于实参数组的元素个数 D.形参数组的元素个数必须多于实参数组的元素个数 [4]. 系统的标准输出设备是____。 A.键盘 B.硬盘 C.内存 D.显示器 [5] 下面叙述中正确的是____。 A.全局变量在定义它的文件中的任何地方都是有效的 B.全局变量在程序的全部执行过程中一直占用内存单元 C. C语言的switch语句中case后可为常量或表达式或有确定值的变量及表达式 D. 说明函数时必须明确其参数类型和返回类型 [6]. C程序的基本结构单位是____。 A.文件 B.语句 C.函数 D.表达式 [7] 对于定义,char *aa[2]={"abcd","ABCD"},选项中说法正确的是____。 A.aa数组元素的值分别是"abcd"和"ABCD" B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 [8]. 任何一个C语言的可执行程序都是从____开始执行的。 A.程序中的第一个函数 B.main( )函数的入口处

c语言程序基础练习题00道(附答案)

1.下列四组选项中,均不是C语言关健字的选项是( A )。 A) define B) gect C) include D) while IF char scanf go type printf case pow 2.下面四个选项中,均是合法整型常量的选项是( A )。 A)160 B)-0xcdf C) -01 D)-0x48a -0xffff 01a 986,012 2e5 011 0xe 0668 0x 3.下面四个选项中,均是不合法的转义符的选项是( B )。 A) '\"' B) '\1011' C) '\011' D) '\abc' '\\' '\' '\f' '\101' 'xf' '\A' '\}' 'x1f' 4.下面不正确的字符串常量是( A )。 A)'abc' B)"12'12" C)"0" D)" " 5.以下选项中不合法的用户标识符是( A )。 A)abc.c B)file C)Main D)PRINT 6.C语言提供的合法关键字是( D )。 A) swith B) cher C) Case D)default 7.下列标识符组中,合法的用户标识符为 A A)_0123与ssiped B)del-word与signed C)list与*jer D) keep%与wind 8.在C语言中,逻辑值"真"的表示是用( C )。 A) true B) 整型值0 C)非另整型值 D) T 9若有以下定义 char s='\092'; 则该语句( b ) A)使s的值包含一个字符 B)定义不合法,s的值不确定 C)使s的值包含4个字符 D)使s的值包含3个字符 10设C语言中,int类型数据占2个字节,则float类型数据占( D )个字节。 A)1 B)2 C)8 D)4 11已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'+'6'-'3'后,c2中的值为( A )。 A)D B)68 C)不确定的值 D)C 12逻辑运算符两侧运算对象的数据类型是 ( D )。 A) 只是0或1 B) 只能是0或非0正数 C) 只能是整型或字符型数据 D) 可以是任何合法的类型数据 13TURBO C中int类型变量所占字节数是( B )。

(完整版)《C语言程序设计》基本知识点

《C语言程序设计》教学基本知识点 第一章C语言基本知识 1.C源程序的框架 尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 2.C语言源程序的书写规则: (1)C源程序是由一个主函数和若干个其它函数组成的。 (2)函数名后必须有小括号,函数体放在大括号内。 (3)C程序必须用小写字母书写。 (4)每句的末尾加分号。 (5)可以一行多句。 (6)可以一句多行。 (7)可以在程序的任何位置加注释。 3.语句种类 语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。 (1)流程控制语句 流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。 (2)表达式语句 表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。 (3)函数调用语句 函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。 (4)空语句 空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。 (5)复合语句 复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。 4.运算符 用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。 根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

C语言基础知识

常量和变量 1.常量: 程序执行过程中,值不变的量。 3 ,'a' 变量:值可以改变的量。 一个变量有一个名字,在内存中有一定的存储单元,存放变量的值。 2.常量类型: a.整型:12,0,-3 b.实型:4.6,-1.2 c.字符型: 'a','d' d.符号常量: #define PRICE 30 (PRICE不能再被赋值且要大写) 3.变量: 先定义,后使用。一个变量只能被指定为一确定类型。 4.标识符:标识变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符数列。 a.由字母、数字、下划线三种字符组成,第一个字符必须为字母或下划线。 b.大写字母、小写字母被认为是两个不同的字符。 c.长度一般小于8个。 数据类型 一.整型: 1.整型常量 a.十进制:12,-3,0 b.八进制:以0开头。 c.十六进制:以0x开头。 2.整型变量 a. int -32768——32767 b. short int -32768——32767 c. long int d. unsigned int 0——65535 e. unsigned short 0——65535 f. unsigned long int、short int、long int 第一位为符号位 0000001 (0为正,1为负) unsigned 第一位不是符号位 0000001 所以int型和unsigned型的000001不是同一个值。 二.实型: 1.实型常量:

a.十进制数:数字和小数点组成。0.12,.12,12.0,0.0 b.指数:e之前必须有数字,e后面必须为整数。12e3 2.实型变量: a.单精度:float 7位有效数字 111111.1可,111111.11不可。 b.双精度:double 15—16位有效数字。 三.字符型: 1.字符常量: a. 'a' , 'x' , '*' ,'$' 。 b. 转义字符:‘\n'换。 '\t'从第九列开始。'\r'回车。 '\b'退一格。 2.字符变量: char char='a' 一个字符变量在内存占一个字节。 。将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的ASC码 放到存储单元中,所以字符型数据和整型数据之间可以通用。一个字符型数据既可以以字符形式输出, 又可以以整数形式输出。 四.字符串常量: "how are you", "a","&12" 。不能把一个字符串赋给一个字符变量。 char c='a'对,char c="how" 错。 。'a' :在内存中存a。 “a”:在内存中存a\0。 ‘\0’是C语言中判断字符串是否结束的标志。 变量赋初值 a. int a=3; float f=7.2; char c='a'; b. int a,b,c=5; 相当于 int a,b,c; c=5; c. int a=3;b=3;c=3; 不可写: int a=b=c=3;

最新C语言程序设计基础知识期末复习

C语言程序设计基础知识期末复习 一、C语言与算法 1.程序:一组计算机能识别和执行的指令。 2.C语言的特点:运算符丰富(共有34种运算符)、数据类型丰富、具有结构化的控制语句。 3.C语言程序的结构特点: (1).一个程序由一个或多个源程序文件组成:一个源程序文件中可以包括三个部分:预处理指令、全局声明、函数定义 (2).函数是C程序的主要组成部分:一个C程序是由一个或多个函数组成的必须包含一个main函数(只能有一个);每个函数都用来实现一个或几个特定功能;被调用的函数可以是库函数,也可以是自己编制设计的函数。 (3).一个函数包括两个部分函数首部和函数体(声明部分:定义在本函数中所用到的变量;对本函数所调用函数进行声明;执行部分:由若干个语句组成,指定在函数中所进行的操作) (4). 程序总是从main函数开始执行 (5). C程序对计算机的操作由C语句完成 (6.)数据声明和语句最后必须有分号 (7.)C语言本身不提供输入输出语句 (8.)程序应当包含注释,增加可读性 4、算法(1)算法+ 数据结构= 程序 (2)顺序结构、选择结构、循环结构是表示一个良好算法的基本结构 (3)算法的特性:有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性(4)算法流程图:一个流程图包括以下几部分:表示相应操作的框;带箭头的流程线;框内外必要的文字说明。 流程线不要忘记画箭头,否则难以判定各框的执行次序。 算法流程图的结构特点:只有一个入口;只有一个出口(一个判断框有两个出口;一个选择结构只有一个出口)结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都应当有一条从入口到出口的路径通过它;结构内不存在“死循环”。 二、顺序结构设计 5、标识符:用来标识变量名、符号常量名、数组名、类型名、函数名等的有效字符序列。C语言对标识符的规定: (1)只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线 (2)长度:在TC中最多允许32个字符,建议不要超过8个 如果系统规定标识符长度为8,那么x1234567A和x1234567B会被视为同一标识符。 (3)在C语言中,标识符大小写敏感。如ABC、aBC、abc分别代表3种不同的标识符(4)标识符不能与C语言的保留字、系统标准库函数同名。 program to_ _to file_2 ab1_c3 为合法标识符 非法字符举例:yes? (含有不合法字符“?”)123(第一个字符不能为数字)go to(标识符中不允许有空格) a_80%(出现非法字符“%”)if与关键字相同) 6、常量与变量 注意:以下变量定义形式是错误的int a,int b; int a;b; (1)整型常量 ·十进制整型:能出现数字0~9,可带正负号如:0,11,95,-2

C语言基础知识归纳

C语言基础知识 1.每个C程序有且只有一个主函数main(),且程序必须从main() 函数开始执行,并在main()函数中结束。 2.在C语言中,用e来表示科学计数法时,规定在e的前面必 须有数字,后面必须为整数。 3.用单引号括起来的一个字符常量只能存放一个字符;C语言中 没有字符串变量,只能用字符数组来存储字符串。 4.外部变量在编译时由系统分配永久的内存空间,所以外部变 量的类型不是自动存储类别。 5.在一个函数内的复合语句中定义的变量,只能在这个复合语 句范围内有效。 6.用sizeof(int)计算int类型数据的字节数。 7.C语言运行时,首先系统检查语法的正误,再运行程序的语法; C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。 8.预处理命令行的位置没有规定,只是习惯放在前面;在源文 件中的可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。 9.feof函数的作用是检查文件是否结束,当结束时返回的 值为非零,否则为零。

10.当定义了数组后,在给其赋值时,不能直接把字符串赋给数 组名。 11.在赋值表达式中,赋值运算符“=”右侧不能为表达式;在 求余运算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。 12.静态局部变量,只有当程序结束后,其值才释放。 13.当调用函数时,实参是一个数组名,则向函数传送的是数组 每一个元素的地址。 14.算法的特点为有零个或多个输入,有一个或多个输出,当相 同的输入时,其结果相同;算法正确的程序最终一定会结束。 15.在C语言中,预处理命令行都以“#”开头;当需要时才用 #include;预处理的作用就是实现宏定义和条件编译。 16.当数组元素的下标超出了定义的下标范围时,系统不给出“下 标越界”的字样,而是得出错误的答案,因此在编程时务必检查下标是否越界。 17.共用体变量不能作为函数的参数,也不能使函数带回共用体 变量。 18.指向函数的指针变量的定义形式为:数据类型(*指针变量) ();,因此其为指向函数的指针变量。 19.用C语言编写的代码程序是源程序,只有通过编译、连接才 能进行。 20.在说明为static时,其生存期得到延长,而其作用域并没有改

C语言基础知识(详细版)

C语言程序的结构认识 用一个简单的c 程序例子,介绍c 语言的基本构成、格式、以及良好的书写风格,使小伙伴对 c 语言有个 初步认识。 例1:计算两个整数之和的c 程序: #include main() { int a,b,sum; /* 定义变量a,b ,sum 为整型变量*/ a=20; /* 把整数20 赋值给整型变量a*/ b=15; /* 把整数15 赋值给整型变量b*/ sum=a+b; /* 把两个数之和赋值给整型变量sum*/ printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); /* 把计算结果输出到显示屏上*/ } 重点说明: 1、任何一个c 语言程序都必须包括以下格式: main() { } 这是c 语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main() - 在c 语言中称之为“主函数” ,一个c 程序有且仅有一个main 函数,任何一个c 程序总是从 main 函数开始执行,main 函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main 函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(; ),在c 语言中,我们把以一个分号结尾的一句话叫做一个 c 语 言的语句,分号是语句结束的标志。 5、printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); 通过执行这条c 语言系统提供给我们直接使用的屏幕输出 函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: a=20,b=15,sum=35 6、#include 注意:(1)以#号开头 (2)不以分号结尾这一行没有分号,所以不是语句,在c 语言中称之为命令行,或者叫做“预编译处理命令” 。 7、程序中以/* 开头并且以*/ 结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。 源程序的扩展名为.c ,目标程序的扩展名为.obj , 可执行程序的扩展名为.exe 。

C语言程序设计基础

题型及分数: 单选题:25分 判断题:10分 填空题:15分 程序分析题:20分 编程题:30分 其中:课后习题及复习大纲中相类似题所占比例在70%-80%。 带*号的内容和复习题为较难部分,为非重点考察内容。 第一章C语言程序设计基础(出题比例4-6%) 1.程序设计语言的基本概念 ?程序 ?程序设计语言 ?常用程序设计语言及其类型 ?源程序、编译、目标文件、连接、可执行程序 ?编程的步骤 2.C语言程序的基本结构 (1) C源程序的框架 C源程序的框架,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 (2) C语言源程序的书写规则: ?C源程序是由一个主函数和若干个其它函数组成的; ?函数名后必须有小括号,函数体放在大括号内; ?C程序对大、小写字母书写敏感; ?每句的末尾加分号; ?可以一行多句; ?可以一句多行; ?可以在程序的任何位置加注释,注释的方式。 3.C语言程序设计的的基本步骤和调试过程 复习题:/***** 1. 每个C语言程序中有且仅有一个函数,它是程序的入口和出口。 2. 引用C语言标准库函数,一般要用预处理命令将其头文件包含进来。 3. C语言属于() A.高级语言 B. 低级语言 C.中级语言 D. 机器语言 4. C语言规定了若干有特定意义、为C语言专用的单词,称为关键字。 5. C语言的语句以结尾。 6. C语言源程序经过编译以后生成文件,生成的文件名后缀为,经过连接后生成文件,后缀为 7.C语言中不能使用关键字作为标识符。(√)

第二章基本数据类型,运算符与表达式(出题比例20-30%) 关键知识点: 1.常量,变量: a)标识符的命名规则 b)常量,变量的概念:直接常量,符号常量,变量必须先定义后使用 c)变量名和变量值的区别。 2.C语言中的基本数据类型 a)各种数据类型的数据在内存中的存放方式 b)掌握各种数据类型数据的常量使用方法,特别注意字符常量和字符串常量的区别使 用 c)整型,字符型,浮点型变量的定义和引用方法 d)数据的数据类型,数据的取值范围,数据在内存中存放方式三者之间的联系 3.运算符和表达式的使用方法 a)自增、自减运算符 b)赋值运算符 c)算术运算符及表达式 d)逗号运算符及表达式 e)*位运算符及表达式 f)sizeof运算符及表达式 g)*强制数据类型转换符及表达式 4.运算符的优先级和结合性 本章复习题: 课后习题:一、单选题,二、填空题 1. C语言的标识符命名规则中,第一个字符可以为字符‘#’或‘&’ .(×)。 2.下列全部属于合法的用户标识符的是() A.A1 P_0 dS B. float 2la _A C. *a hy kk D. _123 temp main 3. C语言对字母的大小写不敏感。(×) 4. C语言中,符号常量由宏定义命令#define来定义。(√) 5. 在VC 6.0中,数据类型int,char,float和double所占的内存字节数分别是、、和。 6.下列四个选项中,均是合法的整型常量的选项是A A.160 –0XFFFF 011 B。-0XCDF 01A 0XE C.-01 986,012 0688 D。-0X48a 2e5 0x

c语言基本代码

c语言基本代码 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

'\0':是字符串的结束标志 ‘‘:空格 auto:声明自动变量一般不使用 double:声明双精度变量或函数(和%lf连用), m=(double)(v-l)/l*100+; 这个式子加个double是将后面式子中非double类型强制转换类型为double float:声明浮点型变量或函数(和%f连用),单精度 int:声明整型变量或函数(与%d连用) struct:声明结构体变量或函数 long:声明长整型变量或函数 switch:用于开关语句 enum:声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名(当然还有其他作用) extern:声明变量是在其他文件正声明(也可以看做是引用变量) return:子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const:声明只读变量 short:声明短整型变量或函数 unsigned:声明无符号类型变量或函数 signed:生命有符号类型变量或函数 void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)default:开关语句中的“其他”分支

goto:无条件跳转语句 sizeof:计算数据类型长度,,是整型表达式用法sizeof(类型说明符,数组名或表达式);sizeof()是获取类型占用的字节数,是整形的 volatile:说明变量在程序执行中可被隐含地改变 static:声明静态变量 char:声明字符型变量或函数 strcmp:strcmp(s1,s2)比较字符串大小两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止大于返回1小于返回-1等于返回0 循环: for:一种循环语句(可意会不可言传)for(表达式1;表达式2;表达式3)while:循环语句的循环条件 do:循环语句的循环体 break:跳出当前循环 continue:结束当前循环,开始下一轮循环 判断: d=a>30b:c:相当于if暨当a>30是d=b否则d=c; if:条件语句与elseifelse并用1、在C语言中一般认为“0”是假,其他不是“0”的都是真。 2、if()里面为真,则进入if下的大括弧{},为假,就跳过。 以此题为例: 若X是“0”(为假)。则里面为假,跳过if下的大{} 若X不是“0”(为真)。则里面为真,进入if下的大{}。 case:开关语句分支,与switch(表达式)连用,case常量表达式;default冒号后面的语句,表示除去各种casei:情况外,其它情况均用default冒号后面的语句处理,即缺省case默认case的处理 else:条件语句否定分支(与if连用)

C语言基础知识归纳

C 语言基础知识 1. 每个C 程序有且只有一个主函数main() ,且程序必须从main() 函 数开始执行,并在 main() 函数中结束。 2. 在 C 语言中,用 e 来表示科学计数法时,规定在 e 的前面必须有 数字,后面必须为整数。 3. 用单引号括起来的一个字符常量只能存放一个字符;C 语言中没有 字符串变量,只能用字符数组来存储字符串。 4. 外部变量在编译时由系统分配永久的内存空间,所以外部变量的类 型不是自动存储类别。 5. 在一个函数内的复合语句中定义的变量,只能在这个复合语句范围 内有效。 6. 用 sizeof(int) 计算 int 类型数据的字节数。 7. C 语言运行时,首先系统检查语法的正误,再运行程序的语法; C语言中,可以在一个函数中嵌套一个函数,但是不能在一 个函数中定义一个函数;只有在函数外部定义的函数才是外部函数; C语言的子程序有过程和函数两种。 8. 预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的 可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。 9. feo f函数的作用是检查文件是否结束,当结束时返回的值为非零, 否则为零。 10. 当定义了数组后,在给其赋值时,不能直接把字符串赋给数

组名。 11. 在赋值表达式中,赋值运算符“=”右侧不能为表达式;在求余运 算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。 12. 静态局部变量,只有当程序结束后,其值才释放。 13. 当调用函数时,实参是一个数组名,则向函数传送的是数组每一个 元素的地址。 14. 算法的特点为有零个或多个输入,有一个或多个输出,当相同的输 入时,其结果相同;算法正确的程序最终一定会结束。 15. 在 C 语言中,预处理命令行都以“ # ”开头;当需要时才用 #in clude;预处理的作用就是实现宏定义和条件编译。16. 当数组元素的下标超出了定义的下标范围时,系统不给出“下标 越界”的字样,而是得出错误的答案,因此在编程时务必检查下标是否越界。 17. 共用体变量不能作为函数的参数,也不能使函数带回共用体变量。 18. 指向函数的指针变量的定义形式为:数据类型(* 指针变量) ();,因此其为指向函数的指针变量。 19. 用 C 语言编写的代码程序是源程序,只有通过编译、连接才能进 行。 20. 在说明为static时,其生存期得到延长,而其作用域并没有改 变,在定义后系统会自动帮它赋值为 0, static 为关键字不能 被用作它用。

C语言基础教程经典100例

【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++)/*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } =========================================================== === 【程序2】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15;

c语言入门经典必背个程序

c语言入门经典必背个程序 c语言入门经典必背18个程序 1 、/* 输出9*9 口诀。共9 行9 列,i 控制行,j 控制列。*/ #include "stdio.h" main() {int i,j,result; for (i=1;i<10;i++) { for(j=1;j<10;j++) { result=i*j; printf("%d*%d=%-3d",i,j,result);/*-3d 表示左对齐,占3 位*/ } printf("\n");/* 每一行后换行*/ } } 2 、/* 古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔 子都不死,问每个月的兔子总数为多少? 兔子的规律为数列1,1,2,3,5,8,13,21....*/ main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/* 控制输出,每行四个*/ f1=f1+f2; /* 前两个月加起来赋值给第三个月*/ f2=f1+f2; /* 前两个月加起来赋值给第三个月*/ } } 3 、/* 判断101-200 之间有多少个素数,并输出所有素数及素数的个数。 程序分析:判断素数的方法:用一个数分别去除 2 到sqrt( 这个数) ,如果能被整除, 则表明此数不是素数,反之是素数。*/ #include "math.h" main()

C语言基础题(含答案)

第一章C语言基础知识 1.1 选择题 1. 以下不是C语言的特点的是()。 A、语言简洁紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件操作 D、C语言移植性好 2.下列字符序列中,不可用作C语言标识符的是()。 A.abc123 B.no.1 C._123_ D.-_ok 3.正确的C语言标识符是()。 A._buy_2 B.2_buy C.?_buy D.buy? 4. 请选出可用作C语言用户标识符的一组标识符()。 A.void B.a3_b3C.For D.2a define _123 -abc DO WORD IF Case sizeof 5.下列符号中,不属于转义字符的是()。 A.\\ B.\0xAA C.\t D.\0 6.不属于C语言关键字的是()。 A.int B.break C.while D.character 7.是C语言提供的合法关键字的是()。 A.Float B.signed C.integer D.Char

8.以下不能定义为用户标示符的是()。 A.scanf B.V oid C._3com_ D.int 9.一个C程序是由()。 A.一个主程序和若干子程序组成 B.一个或多个函数组成 C.若干过程组成 D.若干子程序组成 10. C语言程序的基本单位是()。 A.程序行B.语句C.函数D.字符 11.下列说法中,错误的是()。 A.每个语句必须独占一行,语句的最后可以是一个分号,也可以是一个回车换行符号 B.每个函数都有一个函数头和一个函数体,主函数也不例外C.主函数只能调用用户函数或系统函数,用户函数可以相互调用 D.程序是由若干个函数组成的,但是必须有、而且只能有一个主函数 12.以下说法中正确的是()。 A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main( )函数中定义 C.C语言程序总是从main( )函数开始执行 D.C语言程序中的main( )函数必须放在程序的开始部分13. C编译程序是()。 A.C程序的机器语言版本 B.一组机器语言指令

C语言编程基础习题答案

《C语言编程基础(第2版)》习题答案 前言 《C语言编程基础(第2版)》每章后面都安排了一定数量的习题,这有利于读者理解、消化和掌握各单元的学习内容。习题中,除了有填空题、选择题、回答问题等适合掌握基本概念的题型外,大部分是分析程序运行结果和要求编写实用程序,这有利于读者训练编程技巧和增强编程能力。应广大读者要求,特别是一线教学老师的要求,我们给出全部习题答案,供读者参考。编程答案只是实现题目算法要求的一种,并不一定是最好的。希望读者自己多做思考,利用多种方法进行编程,用以提高自己的程序设计水平和锻炼自己的创新能力。由于作者水平所限,错误和不当之处在所难免,恳请批评指正。 习题一 1、填空题。 ⑴ C语言程序由__函数__组成,其中必须有且只能有一个名为_main__的函 数。C程序的执行从___名为main的主__函数开始。 ⑵每个C语句必须以__分__号结束。 ⑶标识符只能由_英文字母_、__数字_和_下划线__三类符号构成,而且标 识符的第一个字符必须是__英文字母__或__下划线__。 ⑷关键字是指___C语言编译系统所固有的、具有专门意义的标识符___。 ⑸ C程序中,注释的内容应放在__/*_和_*/__符号之间。 2、选择题。 ⑴下面合法的C语言标识符是___ C ___。 ⑵ C语言中主函数的个数是___ A______。 ⑶以下有关注释的描述中,错误的是___ C ___。 ⑷ C程序中,main函数的位置____ D___。 3、指出并改正下面程序中的错误。 ⑴ main 应为 main() ⑵应在本程序最后加上大括号 }。 ⑶语句结束应有分号。如: int a,b; a=1;b=2; printf(%d,a+b); 、分析下列程序,写出运行结果。4. ⑴该程序是计算两个整数a和b的乘积并赋值给c,运行结果为: c=30 ⑵该程序输出一个字符串和一排星号,运行结果为:

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

第一章 C语言基础知识

第一章C语言基础知识 考点 1 C语言程序的结构认识 本节通过一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语言有个初步认识。 例1 计算两个整数之和的c程序: #include main() { int a,b,sum; /*定义变量a,b,sum为整型变量*/ a=20; /*把整数20赋值给整型变量a*/ b=15; /*把整数15赋值给整型变量b*/ sum=a+b; /*把两个数之和赋值给整型变量sum*/ printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); /*把计算结果输出到显示屏上*/ } 重点说明: 1、任何一个c语言程序都必须包括以下格式: main() { } 这是c语言的基本结构,任何一个程序都必须包含这个机构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main()----在c语言中称之为“主函数”,一个c程序有且仅有一个main函数,任何一个c 程序总是从main函数开始执行,main函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(;),在c语言中,我们把以一个分号结尾的一句话叫做一个c语言的语句,分号是语句结束的标志。 5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum); ----通过执行这条c语言系统提供给我们直接使用的屏幕输出函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: a=20,b=15,sum=35 6、#include 注意:(1)以#号开头(2)不以分号结尾 这一行没有分号,所以不是语句,在c语言中称之为命令行,或者叫做“预编译处理命令”。 7、程序中以/*开头并且以*/结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 考点 2 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件,如图所示。 编译过程

C语言程序设计基础教程习题答案

习题答案 第1章 1.1 填空题 1.1.1 应用程序ONEFUNC.C中只有一个函数,这个函数的名称是__main 。 1.1.2 一个函数由__函数头__和__函数体__两部分组成。 1.1.3 在C语言中,输入操作是由库函数__scanf 完成的,输出操作是由库函数_printf_完 成的。 1.1.4 通过文字编辑建立的源程序文件的扩展名是_.c__;编译后生成目标程序文件,扩展 名是__.obj__;连接后生成可执行程序文件,扩展名是_.exe_;运行得到结果。 1.1.5 C语言程序的基本单位或者模块是__函数__。 1.1.6 C语言程序的语句结束符是_;___。 1.1.7 编写一个C程序,上机运行要经过的步骤:______________________________。 1.1.8 在一个C语言源程序中,注释部分两侧的分界符分别为_/*__和__*/__。 1.1.9 C语言中的标识符只能由三种字符组成,它们是字母、数字和下划线。 且第一个字符必须为字母或下划线。 1.1.10 C语言中的标识符可分为关键字、预定义标识符和用户标识符3类。 1.2 选择题 1.2.1 一个C程序的执行是从( A )。 A)本程序的main函数开始,到main函数结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 1.2.2 以下叙述不正确的是(C)。 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C) 在C程序中,注释说明只能位于一条语句的后面 D) C程序的基本组成单位是函数 1.2.3 C语言规定:在一个源程序中,main函数的位置( C )。 A)必须在程序的开头B)必须在系统调用的库函数的后面 C)可以在程序的任意位置D)必须在程序的最后 1.2.4 C编译程序是(A)。 A)将C源程序编译成目标程序的程序 B)一组机器语言指令 C) 将C源程序编译成应用软件 D) C程序的机器语言版本 1.2.5 要把高级语言编写的源程序转换为目标程序,需要使用(D)。 A) 编辑程序B) 驱动程序C) 诊断程序D) 编译程序 1.2.6 以下叙述中正确的是(C)。 A) C语言比其他语言高级 B) C语言可以不用编译就能被计算机识别执行 C) C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D) C语言出现的最晚,具有其他语言的一切优点 1.2.7 以下叙述中正确的是(A)。 A) C程序中注释部分可以出现在程序中任意合适的地方 B) 花括号“{”和“}”只能作为函数体的定界符 C) 构成C程序的基本单位是函数,所有函数名都可以由用户命名 D) 分号是C语句之间的分隔符,不是语句的一部分 1.2.8 以下叙述中正确的是(B)。

C语言基础编程题

C语言基础编程题 This model paper was revised by the Standardization Office on December 10, 2020

5-1求幂之和(15分) 本题要求编写程序,计算sum=2^1 + 2^2 + 2^3 + \cdots + 2^n sum=21+22+23++2n。可以调用pow函数求幂。 输入格式: 输入在一行中给出正整数n n(\le≤10)。 输出格式: 按照格式“result = 计算结果”输出。 输入样例: 输出样例: #include<> #include<> int main() { int i,n,sum=0;

scanf("%d",&n); for(i=1;i<=n;i++) { sum=sum+pow(2,i); } printf("result = %d\n",sum); return 0; } 5-2近似求PI(15分) 本题要求编写程序,根据下式求\piπ的近似值,直到最后一项小于给定精度eps。 \frac{\pi}{2}=1+\frac{1!}{3}+\frac{2!}{3\times 5} + \frac{3!}{3\times 5\times 7}+ \cdots +\frac{i!}{3\times 5\times \cdots \times (2\times i+1)}+ \cdots2π=1+31!+3×52!+3×5×73!++3×5××(2×i+1)i!+ 输入格式: 输入在一行中给出精度eps,可以使用以下语句来读输入: 输出格式:

在一行内,按照以下格式输出\piπ的近似值(保留小数点后5位): 输入样例: 输出样例: #include<> #include<> int main() { double a=1,b=3,i=1,j=3; double eps,m=1,sum=0; scanf("%le", &eps); while(m>eps) { m=a/b;

相关主题
文本预览
相关文档 最新文档