当前位置:首页 » 编程语言 » c语言基础知识第一章程序设计初步
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言基础知识第一章程序设计初步

发布时间: 2022-08-11 09:27:01

❶ 初二学c语言

c程序设计 作者:姚国清//夏军宝//何勇强
ISBN:10位〔780243081X〕 13位〔9787802430815〕
出版社:航空工业出版社
出版日期:2008-3-1
定价:¥32.00 元
[编辑本段]内容提要
本书为高等院校规划教材,主要讲述了使用C语言设计程序的方法。本书不仅对C语言的基本概念和基本知识进行了深入浅出的讲解,同时还将作者多年来在C语言教学过程中积累的经验和体会告诉了读者。在每章的最后,我们为读者提供了有针对性的类型多样的习题,另外,在本书最后,还为读者安排了大量综合练习。希望读者学练结合,逐步培养阅读程序和编写程序的能力。
本书语言浅显易懂、实例和习题众多,可以作为高等院校计算机专业和非计算机专业通用教材,也可供大专院校学生和程序爱好者自学使用。
[编辑本段]编辑推荐
本书为高等院校规划教材,主要讲述了使用C语言设计程序的方法。书中以简短的篇幅介绍C语言的基本概念和基本语法,使读者通过学习可以具有初步使用C来解决问题的能力。 本书可以作为高等院校计算机专业和非计算机专业通用教材,也可供大专院校学生和程序爱好者自学使用。
[编辑本段]目录
第0章 程序设计概论
0.1 程序与程序设计语言
0.1.1 程序
0.1.2 程序设计语言
0.2 C语言的历史和发展
0.3 一个简单程序的诞生
0.3.1 简单的C语言程序概貌
0.3.2 第一个程序的诞生
本章小结
复习题
第1章 C程序设计基础知识
1.1 变量
1.1.1 有关内存的基础概念
1.1.2 变量的引入
1.2 常量
1.2.1 字面常量
1.2.2 符号常量
1.2.3 const常量
1.3 算术运算符与算术表达式
1.3.1 运算符概述
1.3.2 算术运算符
1.3.3 算术表达式
1.4 赋值运算符与赋值表达式
1.4.1 简单赋值运算符
1.4.2 复合算术赋值运算符
1.4.3 赋值运算时的数据类型转换
1.5 自加、自减、逗号运算符
1.5.1 自加和自减运算符:++
1.5.2 逗号运算符
1.6 位运算
1.6.1 位运算的基本规律
1.6.2 位运算符
本章小结
复习题
第2章 简单C语句
2.1 C语句概述
2.1.1 表达式语句
2.1.2 控制语句
2.1.3 函数调用语句
2.1.4 复合语句
2.1.5 空语句
2.2 输入输出的概念
2.3 基本输入输出函数
2.3.1 格式化输出库函数:printf
2.3.2 格式输入库函数:scanf
2.3.3 字符输入输出函数
本章小结
复习题
第3章 分支结构程序设计
3.1 算法与基本程序结构
3.1.1 算法简介
3.1.2 算法的表示
3.1.3 基本程序结构
3.2 关系运算和逻辑运算
3.2.1 关系运算
3.2.2 逻辑运算
3.3 if语句
3.3.1 简单if语句
3.3.2 if~else语句
3.3.3 if语句的嵌套
3.3.4 if语句使用注意事项
3.4 switch语句
3.5 条件运算符
本章小结
复习题
第4章 循环结构程序设计
4.1 循环的引入
4.2 for循环
4.3 while循环
4.4 do-while循环
4.5 循环的比较
4.5.1 for语句和while语句
……
第5章 函数
第6章 数组
第7章 指针
第8章 字符数据处理
第9章 结构
第10章 文件
第11章 Turbo C图形
第12章 存储类型
附录A C语言预处理器
附录B 综合练习题
附录C 常用函数
附录D 图形驱动程序和模式

❷ c语言基础知识入门我哪有

c语言基础知识入门:

C语言功能丰富,表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合于编写系统软件。

C语言不需要基础只是有计算的地方要用二进制计算,C+要有C语言的基础,主要是知道那些关键字,还有编程语法。以及基本算法。知道这些c语言就差不多了。至于数学之类的那是对你比较高深的编程才用到的。

特性

1、C语言是一个有结构化程序设计、具有变量作用域(variablescope)以及递归功能的过程式语言。

2、C语言传递参数均是以值传递(passbyvalue),另外也可以传递指针(apointerpassedbyvalue)。

3、不同的变量类型可以用结构体(struct)组合在一起。

4、只有32个保留字(reservedkeywords),使变量、函数命名有更多弹性。

5、部分的变量类型可以转换,例如整数型和字符型变量。

6、透过指针(pointer),C语言可以容易的对存储器进行低端控制。


❸ C语言入门

1、 DIP40双列直插;
2、 P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)
3、 电源VCC(PIN40)和地线GND(PIN20);
4、 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位)
5、 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍)
6、 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序)
7、 P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1

单片机内部I/O部件:(所胃学习单片机,实际上就是编程控制以下I/O部件,完成指定任务)
1、 四个8位通用I/O端口,对应引脚P0、P1、P2和P3;
2、 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1)
3、 一个串行通信接口;(SCON,SBUF)
4、 一个中断控制器;(IE,IP)

针对AT89S52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。

C语言编程基础正式内容:

1、 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。
2、 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。
3、 ++var表示对变量var先增一;var—表示对变量后减一。
4、 x |= 0x0f;表示为 x = x | 0x0f;
5、 TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。
6、 While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}
一、常量

(1)无符号单字节数

(2)带符号单字节数

(3)无符号双字节数

(4)带符号双字节数

(5)浮点数,占用4个字节

二、变量

(1)无符号单字节数:unsigned char

(2)带符号单字节数:char

(3)无符号双字节数:unsigned int

(4)带符号双字节数:int

(5)浮点数,占用4个字节:float

(6)位变量:sbit

(7)数组:Arrary[ ][ ]

(8)联合体:union

union{

inti_Data;

unsigned char b_Data[2];

}u_int;

(9)结构体:struct

struct Stu_Channel_Info{

unsigned char Device_Info;

unsigned intDevice_ID;

unsigned intDevice_Time;

}Channel_Info[con_MaxNumber];

(10)指针:在C51语言中,我们尽量避免指针。

三、存储类型

code:指放到程序存储器中,不可变得常数 比如:unsigned char code x

data:指内部RAM低128字节空间 00~7FH比如:unsigned char data x

idata:指全部内部RAM空间00H~FFH。unsigned char idata x

bdata:指放到可位寻址区域20H~2FH中 unsigned char bdata x

pdata:指可用Ri寻址的区域,通常固定为外部RAM256字节unsigend char pdata x

xdata:指外部64KBRAM空间 unsiged char xdata x

四、关于运算符号

+:加法运算

-:减法运算

*:乘法运算

/:除法运算

%:取余数

<<:左移

>>:右移

=:等于

&:与操作

|:或操作

~:取反

&&:逻辑与

||:逻辑或

五、关于位操作

(1)口线位操作

sbit Left_Red P1^0表示用Left_Red来表示P1.0位

Left_Red = 0则表示将P1.0清零Left_Red = 1则表示将P1.0置位

(2)位变量的操作方法

unsigend char bdata Control_Port;// 声明一个可位寻址的字节变量

sbitOutput1 = Control_Port^1;// 引用该字节变量的某一位

sbitOutput2 = Control_Port^2;

sbitOutput3 = Control_Port^3;

则我们可以对Control_Port操作,也可以直接对其中定义好的位变量直接操作

六、关于外部端口的操作

#define LED_Address XBYTE[0xC400]固定LED_Address为0xC400地址

读该端口的方法:x = LED_Address;

写该端口的方法:LED_Address = x;LED_Address = 0x33; LED_Address = Arr[5];

七、外部RAM区的操作

unsigned char xdata Arr[20]; 表示声明了20个字节的外部RAM空间

写方法:Arr[1] = 1;

读方法:x = Arr[1];

unsigned char xdata Arr[20] _at_ 0x0000;表示这20个外部RAM的起始地址为0x0000

八、普通函数的书写方法:

void Delay( void ){

}

void Output( unsigned char x ){

}

unsigned char Input( void ){

}

unsigned char Key_Disp( unsigned char *P ){

}

九、中断服务函数的写法:

void p_Int0( void ) interrupt 0 using 0{

}

其中interrupt 0 表示第0号中断,即INT0中断

using0 表示中断服务程序中使用的工作组为0区。

十、常用语句

if (){}

else{}

for(;;; ) {}

while( ) {}

switch( ){

case:break;

case:barek;

default:break;

}

十一、书写规范

x = x + 1;

for( i = 1; i < 10; i++ ){

j = Arr[5] + i;

}

void Delay_10ms( void ){

unsigned char i;

for( i = 0; i < 100; i++ ) { }

}

❹ c语言有哪些基础知识

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。

C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

(4)c语言基础知识第一章程序设计初步扩展阅读:

C语言的字符串其实就是以''字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行操作的函数。

它们不同于字符数组。使用这些函数需要引用头文件<string.h>。

在C语言中,输入和输出是经由标准库中的一组函数来实现的。在ANSI C中,这些函数被定义在头文件<stdio.h>;中。

❺ 在C语言中,在执行 char str[10]=”ch\nina” ; strlen(str) 的结果是( )。 A、5 B、6 C、7 D、9

Neusoft

《C语言程序设计》习题集
《C程序设计》习题集
第一章C语言基础知识

1.1 填空题
1.要把高级语言编写的源程序转换为目标程序,需要使用
A) 编辑程序 B) 驱动程序 C) 诊断程序 D) 编译程序
2. 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);
C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);
3.以下选项中合法的用户标识符是______。
A) long B) _2Test C) 3Dmax D) A.dat
4.设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是______。
A) 6.500000 B) 6 C) 5.500000 D) 6.000000
5.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是______。
A) scanf("%2d%2d%2d",&i,&j,&k);
B) scanf(""%d %d %d",&i,&j,&k);
C) scanf("%d,%d,%d",&i,&j,&k);
D) scanf("i=%d,j=%d,k=%d",&i,&j,&k);
6.C语言程序的执行,总是起始于()。
A) 程序中的第一条可执行语句
B) 程序中的第一个函数
C) main函数
D) 包含文件中的第一个函数

7.下列说法中正确的是()
A) C程序书写时,不区分大小写字母
B) C程序书写时,一行只能写一个语句
C) C程序书写时,一个语句可分成几行书写
D) C程序书写时每行必须有行号

8.若有说明语句:int a; float b;,以下输入语句正确的是()
A) scanf("%f%f",&a,&b);
B) scanf("%f%d",&a,&b);
C) scanf("%d,%f",&a,&b);
D) scanf("%6.2f%6.2f",&a,&b);
9.以下程序的输出结果是()
main( )
{ int x=11,y=11;
printf("%d%d\\n",x--,--y);
}
A) 11,11 B) 10,10 C) 10,11 D) 11,10

10.执行下面程序段,给x、y赋值时,不能作为数据分隔符的是()
int x,y;
scanf("%d%d",&x,&y);
A) 空格 B) Tab键 C) 回车 D) 逗号

11.执行下面程序时,欲将25和2.5分别赋给a和b,正确的输入方法是。
int a;
float b;
scanf("a=%d,b=%f",&a,&b);
A) 25□2.5
B) 25,2.5
C) a=25,b=5.5
D) a=25□b=2.5

12.英文小写字母d的ASCII码为100,英文大写字母D的ASCII码为
A) 50 B) 66 C) 52 D) 68
13.以下定义语句中错误的是( )。
A)int a=3,b=5; B)float x1; x2;
C)char c1,c2,c3; D)double y3, y4;
14.若将整数4和5赋给整型变量a和b,对于语句scanf("%d%d" , &a,&b);在从键盘输入数据时,正确的数据输入格式为( )。
A)4,5 B)4 5 C)4:5 D)4#5
15.若整型变量a和b的值分别为6和8,则下列语句printf("a=%d,b=%d",a,b); 的输出结果为( )。
A)6, 8 B)6 8 C)a=6 b=8 D)a=6, b=8
16.C语言中的字符常量是以( )括起来的一个字符。
A)双引号 B)单引号 C)\……\ D)*……*
17.C语言中的转义字符\n的作用是( )。
A)回车换行 B)横向跳格
C)纵向跳至本列下行 D)将光标移至本行行首
18.若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为
A) 1.4 B) 1 C) 2.0 D) 2
19.如果要把常量327存入变量a中,a可以定义成哪些类型?(多选)
A. int B. char
C. long D. float
20.下面哪个表达式的值为4.(单选)
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)
#include<stdio.h>
#include<math.h>
main( )
{int a=1,b=4,c=2;
float x=5.5,y=9.0,z;
z=(a+b)/c+sqrt((double)y)*1.2/c+x;
printf("%f\n",z);
}
A).9.800000 B).9.300000 C).8.500000 D).8.000000

21.main( )
{int x = 10, y = 3;
printf("%d\n",y=x/y);
}
A).0 B).1 C).3 D).不确定的值

22.main( )
{int a;
printf("%d\n";(a=3*5,a*4,a+5));
}
A).65 B).20 C).15 D).10

23.已知小写字母a的ASCII码为97,大写字母A的ASCII码为65。以下程序
main()
{ unsigned int a=32, b=66;
printf("%c\n", a+b);
}
的结果为:
A).66 B).98 C).b D).B

24.设有如下定义
int x=10,y=3,z;
则语句
printf("%d\n",z=(x%y,x/y));
的输出结果是
A).1 B).0 C).4 D).3

25.#define SQR(X) X*X
main()
{
int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
A).10 B).1 C).9 D).0

26.#define MAX(x, y) (x)>(y)?(x):(y)
main()
{ int a=1, b=2, c=3, d=2, t;
t=MAX(a+b, c+d)*100;
printf("%d\n",t);
}
的运行结果为:
A).500 B).5 C).3 D).300

27.以下程序的输出结果是
main()
{
int x=10,y=10;
printf("%d %d\n",x--,--y);
}
A).10 10 B).9 9 C).0 10 D).10 9

28.语句:printf("%d",(a=2)&&(b= -2));的输出结果是
A).无输出 B).结果不确定 C).-1 D).1
33、当c的值不为0时, 能正确将c的值赋给变量a、b
A).c=b=a;
B).(a=c)||(b=c)
C).(a=c)&&(b=c)
D).a=c=b

29.能正确表示a和b同时为正或同时为负的逻辑表达式是
A).(a>=0||b>=0)&&(a<0||b<0) B).(a>=0&&b>=0)&&(a<0&&b<0)
C).(a+b>0)&&(a+b<=0) D).a*b>0

30.下面合法的赋值语句是
A) x+y=2002; B) ch="green"; C) x=(a+b)++; D) x=y=0316;

31.下面哪个表达式的值为4.(单选)
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)

32.已知a为整型变量,那么与表达式 a!=0 真假值情况相同的表达式有哪些?(多选)
A. a>0||a<0 B. a
C. !a= =0 D. !a

33.以下非法的赋值语句是
A) n=(i=2,++i); B) j++; C) ++(i+1); D) x=j>0;
34.若有以下程序:
main()
{int k=2,i=2,m;
m=(k+=i*=k); printf("%d,%d\n",m,i);
}
执行后的输出结果是______。
A) 8,6 B) 8,3 C) 6,4 D) 7,4

35.已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是______。
A) 6 B) 0 C) 2 D) 1

36.以下程序的输出结果是
main()
{
int a=3;
printf("%d\n",(a+=a-=a*a) );
}
A) -6 B)12 C) 0 D) –12

37.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为
A) 0 B) 1 C)2 D) 3

38.假定w、x、y、z、m均为int型变量,有如下程序段:
w=1; x=2; y=3; z=4;
m=(w<x)?w: x;
m=(m<y)?m:y;
m=(m<z)?m: z;
则该程序运行后,m的值是
A) 4 B) 3 C) 2 D) 1

1.2 填空题
1.下面程序段的输出结果是。
int k=10;
float a=3.5,b=6.7,c;
c=a+k%3*(int)(a+b)%2/4;

2.表达式5%(-3)的值是,表达式-5%(-3)的值是。

3.已知:int a=5;则执行a+=a-=a*a;语句后,a的值为。

4.下面程序的运行结果是x=,y=。
main( )
{ float x=4.9;int y;
y=(int)x;
printf ("x=%f , y=%d", x ,y); }

5.若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值为。

6.以下程序的输出结果是。
main()
{ int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}

7.以下程序的输出结果是。
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}

8.当a=3,b=4,c=5时,写出下列各式的值。
a<b的值为___, a<=b的值为___,
a==c的值为___, a!=c的值为___,
a&&b的值为___, !a&&b的值为___,
a||c的值为___, !a||c的值为___,
a+b>c&&b==c的值为___。

9.整型变量a的值是5,表达式a/=a+a;的值。

10.已知a=3,b=4,c=5,逻辑表达式a||b+c&&b-c的值

11.已知a=3,b=4,c=5,逻辑表达式!(a>b)&&!c||1的值

1.3 程序设计题
1.编写程序:在屏幕上显示一句话“hello neusoft!”。

2.编写程序在屏幕上输出如下图型:
*
***
*****
*******
3.已知圆的半径是5.6,求其直径、周长、面积并输出。
4.从键盘输入圆的半径,求其直径、周长、面积并输出。

5.编写程序求任意圆的体积

6.求任意一元二次方程度两个实根。

第二章 顺序程序结构设计

2.1 填空题
1.计算机语言提供三种基本控制结构,即,,。人们提倡使用这三种结构编写程序,并称这样的程序设计为。
2.2 程序设计题
1.从键盘输入5个整数,求它们的和、平均值并输出。

2.编写程序,从键盘输入两个整数分别存放在变量c1,c2中,要求通过程序交换它们的值。

第三章 分支结构程序设计

3.1 填空题
1.能正确表示“当x的值在[1,10]和[200,210]范围内为真,否则为假”的表达式是()。
A)(x>=1)&& (x<=10) && (x>=200) || (x<=210)
B)(x>=1)|| (x<=10) || (x>=200) || (x<=210)
C)(x>=1)&& (x<=10) || (x>=200) && (x<=210)
D)(x>=1)|| (x<=10) && (x>=200) || (x<=210)
2.判断char型变量ch是否为大写字母的正确表达式是()。
A)’A’<=ch<=’Z’ B) (ch>=’A’) & (ch<=’Z’)
C) (ch>=’A’) && (ch<=’Z’) D)(‘A’<=ch) AND (‘Z’>=ch)
3.请阅读以下程序:
main()
{ int a=5, b=0, c=0;
if (a=b+c) printf(“***\n”);
else printf(“$$$\n”);
}
以上程序()。
A) 有语法错误不能通过编译 B) 可以通过编译但不能通过连接
C) 输出*** D) 输出$$$
4.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是()。
if (a<b)
if(c<d) x=1;
else
if (a<c)
if (b<d) x=2;
else x=3;
else x=6;
else x=7;
A) 1 B) 2 C) 3 D) 6
5.以下程序的输出结果是()。
main()
{ int x=2, y=-1, z=2;
if (x<y)
if (y<0) z=0;
else z=z+1;
printf(“%d\n”, z);
}
A) 3 B) 2 C) 1 D) 0
6.若运行时给变量x输入12,则以下程序的运行结果是()。
main()
{ int x, y;
scanf(“%d”, &x);
y=x>12?x+10:x-12;
printf(“%d\n”, y);
}
A) 0 B) 22 C) 12 D) 10

3.2 填空题
1.输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其它字符不变。请在横线上填写正确的内容。
main()
{ char ch;
scanf(“%c”, &ch);
if () ch=ch+32;
else if ( ch>=’a’ && ch<=’z’ ) ;
printf(“%c”, ch);
}
2.以下程序实现:输入三个整数,按从大到小的顺序进行输出。请在横线上填写正确内容。
main()
{ int x, y, z, c;
scanf(“%d %d %d”, &x, &y, &z);
if ( )

if ( )

if ()

printf(“%d, %d,%d”, x, y, z);
}
3.以下程序的运行结果是。
main()
{ int a, b, c, d, x;
a=c=0; b=1; d=20;
if (a) d=d-10;
else if (!b)
if (!c) x=15;
else x=25;
printf(“%d\n”,d);
}
4.下面程序根据以下函数关系,对输入的每个x值,计算出y值。请在横线上填写正确内容。
x y
2<x<=10 x(x+2)
-1<x<=2 2x
X<=-1 x-1
main()
{ int x, y;
scanf(“%d”, &x);
if () y=x*(x+2);
else if () y=2*x;
else if ( x<=-1 ) y=x-1;
else ;
if (y!=-1) printf(“%d”, y);
else printf(“error”);
}
5.设有程序片段:
switch (grade)
{ case ‘A’ : printf(“ 85-100\n”);
case ‘B’ : printf(“ 70-84\n”);
case ‘C’ : printf(“ 60-69\n”);
case ‘D’ : printf(“<60\n”);
default : printf(“error!\n”);
}
若grade的值为’C’,则输出结果是。
6.以下程序段的运行结果是。
int x=1, y=0;
switch (x)
{ case 1:
switch (y)
{ case 0 : printf(“**1**\n”); break;
case 1 : printf(“**2**\n”); break;
}
case 2: printf(“**3**\n”);
}

3.3 程序设计题
1.写一程序,从键盘上输入一年份year(为十进制数),判断其是否为闰年。(闰年的条件是:能被4整除、但不能被100整除,或者能被400整除)

2.从键盘输入x的值,求y的值并输出。

3.从键盘输入四个整数,输出其中的最大者。

4.求任意二次方程的根。(包括虚根)

5.根据输入的X值计算并输出如下分段函数的值。

6.某百货公司采用购物打折扣的方法来促销商品,该公司根据输入的购物金额,计算并输出顾客实际付款金额,顾客一次性购物的折扣率是:
(1)少于500元不打折;
(2)500元以上且少于1000元者,按九五折优惠;
(3)1000元以上且少于2000元者,按九折优惠;
(4)2000元以上且少于3000元者,按八五折优惠;
(5)3000元以上者,按八折优惠。

7.根据输入的三个边长a,b,c,判断它们能否构成三角形;若能构成三角形,继续判断该三角形是等边、等腰还是一般三角形。

第四章 循环结构程序设计

4.1 选择题
1.设有程序段
int k=10;
while (k=0) k= k—1;
则下面描述中正确的是()
A) while循环执行10次 B)循环是无限循环
C)循环体语句一次也不执行 D)循环体语句执行一次
2.下面程序的功能是计算:至50中是7的倍数的数值之和,请选择填空。
#include <stdio.h>
main()
{int i,sum= 0;
for(i=1;i<=50;i++)
if( () ) sum+=i;
printf("%d",sum);
}
A) (int)(i/7)==i/7 B) (int)i/7==i/7
C) i%7= 0 D) i%7==0
3.下面程序段的运行结果是
a=1;b= 2;c=2;
while(a<b<c)
{
t= a;
a= b;
b=t;
c- -;
}
printf("%d,%d,%d",a,6,c);
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1
4.下面程序的功能是计算 1至10之间的奇数之和及偶数之和。请选择填空
#include <stdio.h>
main()
{int a,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{ a+=i;
() ;
c+=b;
}
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",c-11),
}
A)b=i-- B) b=i+1 C)b=i++ D)b=i-1
5.下面程序段:
for (t=1; t<=100;t++)
{
scanf("%d",&x);
if(x<0) continue;
printf("%3d",t);
}
A) 当x<0时整个循环结束
B) x>=0时什么也不输出
C) printf函数永远也不执行
D)最多允许输出100个非负整数
6.下面程序的运行结果是:
#include "stdio.h"
main()
{int i;
for(i=1;i<=5;i++)
{if (i%2) printf("*");
else continue;
printf("#");
}
printf("#");}
A) *#*#$ B) #*#*#*$ C) *#*#$ D)#*#*$
7.设有程序段
int k=10;
while(k=5) k=k-1;
则下面描述正确的是
A)while循环执行10次 B)是死循环
C)循环语句一次也不执行 D)循环体语句执行一次
8.以下程序运行后的输出结果是________。
main()
{int x=15;
while(x>10&&x<50)
{x++;
if(x/3)
else continue;
}
printf("%d\n",x);
}

4.2 程序设计题
1.求1~1000内所有能被3整除的整数,所有数右对齐,每行输出10个数,每屏输出20行。
2.从键盘上接受10个数,求和。要求:
(1)、先提示“请输入第1个数:” ,输入第一个数后再提示“请输入第2个数”,依次类推;
(2)、输入完十个数后,输出十个数求和的结果。

3.求n! ,n的值从键盘输入.

4.从键盘上输入一个正整数(VC下少于10位,winTC下小于32767),求其各数位之和.
5.从键盘输入10个数,找出其中最大的数。分别用while和for语句实现。
6.输出2~100(不含100)之间的全部同构数。所谓同构数是指:如果某数与其右起若干位的平方数相等,则称该数为同构数。

7.编写输出以下图形的程序(要求行数从键盘输入)。

1
12
123
1234
12345
123456
……
8.计算200以内的所有素数的和。

5.1 选择题
1.以下对一维数组a的正确说明是( )
(A)int a(10);
(B)int n=10,a[n];
(C)int n; scanf(“%d”,&n); int a[n];
(D)#define SIZE 10
int a[SIZE];
2.对以下说明语句的正确理解是( )
int a[10]=;
(A)将5个初值依次赋给a[1]至a[5]
(B)将5个初值依次赋给a[0]至a[4]
(C)将5个初值依次赋给a[6]至a[10]
(D)因为数组长度与初值的个数不相同,所以此语句不正确
3.下面程序的运行结果是( )
char c[5]=; printf(“%s”,c);
(A)ab (B)abc (C)abc+乱码 (D)ab\0c\0
4.对两个数组a和b进行如下初始化
char a[]=”ABCDEF”;
char b[]=;
则以下叙述正确的是 ( )
(A)a与b数组完全相同 (B)a与b长度相同
(C)a和b中都存放字符串 (D)a数组比b数组的长度长
5.下面是对s的初始化,其中不正确的是( )
(A)char s[5]=; (B)char s[5]=;
(C)char s[5]=””; (D)char s[5]=”abcdef”;
6.以下程序运行的结果是( )
char s[6];
s=”abcd”;
printf(“%s\n”,s);
(A)”abcd” (B)abcd (C)abcd+乱码 (D)编译出错
7.若有说明语句char u[]=”Microsoft”,则数组的大小是( )
(A)100 (B)80 (C)10 (D)9
8.以下不正确的定义语句是 ( )
(A)double y[5]=;
(B)int y[5]=;
(C)char c[]=;
(D)char c[]=;
9.当执行下面的程序时,如果输入ABC,则输出结果是( )
A) ABC6789 B) ABC67 C) 12345ABC6 D) ABC456789
#include "stdio.h"
#include "string.h"
main()
{ char ss[10]="1,2,3,4,5";
gets(ss); strcat(ss, "6789"); printf("%s\n",ss);
}
10.下列程序段的输出结果是 。
main()
{ char b[]="Hello,you";
b[5]=0;
printf("%s \n", b );
}
11. 以下程序的输出结果是( )
main()
{ int i, a[10];
for(i=9;i>=0;i--) a[i]=10-i;
printf("%d%d%d",a[2],a[5],a[8]);
}
A) 258 B) 741 C) 852 D) 369
12.在定义int a[10];之后,对a的引用正确的是( )。
A.a[10] B.a[6.3] C.a(6) D.a[10-10]

13.以下对一维数组a进行正确初始化的是( )。
A.int a[10]=(0,0,0,0,0); B.int a[10]={};
C.int a[]=; D.int a[10]=;

14.以下对字符数组word进行不正确初始化的是( )。
A.char word[]=’Trubo\0’;
B.char word[]=;
C.char word[]=;
D.char word[]=”Trubo\0”;
15.以下正确的定义语句是( )。
A.int A[‘a’]; B.int A[3,4]; C.int A[][3]; D.int A[10];

16.以下给字符数组str定义和赋值正确的是( )。
A.char str[10]; str=;
B.char str[]=;
C.char str[10]; strcpy(str,“abcdefghijklmnop”);
D.char str[10]=;

17.在执行char str[10]=”China\0”; strlen(str)的结果是( )。
A.5 B.6 C.7 D.9

18.在执行char str[10]=”Ch\nina\0”; strlen(str)的结果是( )。
A.5 B.6 C.7 D.9

19.当接受用户输入的含空格的字符串时,应使用( )函数。
A.scanf() B.gets() C.getchar() D.getc()

20.当输出含空格的字符串时,应使用( )函数。
A.printf() B.puts() C.putchar() D.putc()

5.2 填空题
1. 若有定义语句char c[10]=”hello”,s[]=”world”;,则字符数组c的长度为,字符数组c的长度为,字符串”hello”的长度是,字符串“world”的长度为_。
2. 字符串”hello,world!”的长度为,若有说明语句char s[]=”hello,world!”,则数组s的大小是。
3.以下程序执行时输入Language Programming<回车>的结果是。
#include <stdio.h>
main( )
{
char str[30];
scanf(“%s”, str);
printf(“str=%s\n”, str);
}

4.以下程序执行时输入Language Programming<回车>的结果是。
#include <stdio.h>
main( )
{
char str[30];
gets(str);
printf(“str=%s\n”, str);
}

5.以下程序的执行结果是。
#include <stdio.h>
main( )
{
int a[]=, i, j, s=0;
j=0;
for (i=3; i>=0; i--)
{
s=s+a[i]*j;
j=j*10;
}
printf(“s=%d\n”, s);
}

6.以下程序的执行结果是。
#include <stdio.h>
main( )
{
char str[]=;
int i;
for (i=0; str[i]!=’\0’; i++)
if (str[i]>=’0’ && str[i]<=’9’)
printf(“%c”, str[i]);
printf(“\n”);
}
5.3 程序设计题
1.从键盘输入5个整数,保存到数组a中,先正序输出再逆序输出
2.从键盘输入6个整数保存到数组中,求值最大的元素,将这个值最大的元素与数组的最后一个元素交换。最后输出整个数组
3.从键盘输入8个整数保存到数组中,运用选择法按从大到小排序后输出数组。
4.编程实现:从键盘输入10个字符,存储到字符型一维数组str中,再从键盘上输入另一个字符ch,要求将str中出现的第一个ch字符删除。将删除ch后的数组str输出到屏幕上。
5.编写程序实现:将两个字符串数组进行交换。
6.编程求两个3×4 (3行4列)矩阵之和,然后输出(矩阵元素的值从键盘输入)
7.定义一个4行5列的二维整型数组,对其进行赋值,然后从该数组中选择出一个最小数及该数的下标值(行和列的下标值都要记录)。
另外,虚机团上产品团购,超级便宜

❻ C语言知识总结

c语言概要
第一章、 概述
1、 c语言的基本知识
1.1、 c语言的执行步骤
编辑-程序代码的录入,生成源程序*.c
编译-语法分析查错,翻译生成目标程序*.obj
(语法或逻辑错误,从第一个开始改,变量定义,语句格式,表达式格式等)
链接-与其他目标程序或库链接装配,生成可执行程序*.exe
执行
1.2、 main函数的基本知识
main()函数的位置
c程序总是从main( )函数开始执行
一个c程序可以包含一个主函数,即main()函数;也可以包含一个main()函数和若干其它函数
1.3、 c程序的结构
函数与主函数
程序由一个或多个函数组成
必须有一个且只能有一个主函数main()
程序执行从main开始,在main中结束,其他函数通过嵌套调用得以执行
程序语句
C程序由语句组成
用“;”作为语句终止符
注释
//

/* */ 为注释,不能嵌套
不产生编译代码
1.4、c 程序书写的规则
习惯用小写字母,大小写敏感
不使用行号,无程序行概念:通常一个语句占一行
可使用空行和空格
常用锯齿形的书写格式;同一层次结构的语句上下对齐。
第二章、基本数据类型与运算
2.1、c程序的数据类型
注意类型和变量含义的不同(类型是固定好的名字,变量是自己起的名字)
变量占用的存储空间
数据类型
基本类型:整型、字符型、浮点型(单精度型,双精度型)
构造类型:数组类型、结构体类型
指针类型
空类型
注意基本类型赋初值的方式
基本数据类型的表示形式
整形数据
十进制:以非0数字开头,如:123,-9,0
八进制;以0数字开头,如:0123,067
十六进制:以0x开头,如:0x123,0xff
实型数据
十进制:必须带小数点,如:123.0,-9.0
指数形式;如:1.23E3,0.9e-2,5e2
字符型数据
普通字符:如:’a’,’2’,’H’,’#’
转义字符:如:’\n’,’\167’,’\xlf,’\\’
(实现几列的对齐:指定宽度。如%100\ ‘\t’制表位)
(字符串长度。“abc\n\t\\” strlen 6; sizeof 7)
基本数据类型的存储长度
整型
Int 字节数 2 位数 16 数的表示范围 -32768—32767
Short 2 16 -32768—32767
Long 4 32 -2147483648—2147483647
实型
Float 4 32 3.4e-38---3.4e38
Double 8 64 1.7e-308---1.7e308
字符型
Char 1 8 -128----127
2.2、标识符命名规则
C语言标志符命名规则
标识符有数字,字母,下划线组成
标识符的首字符必须为字母和下划线
标识符不能为c语言的保留字(关键字)
如:auto extern sizeof float static case for struct char goto switch continue in typedef const if union default long unsigned do register void double return else short while enum signed
算术运算符 + - * / %
关系运算符 > < == >= <= !=
逻辑运算符 ! && ||
位运算符 << >> ~ | ^ &
赋值运算符 = 及其扩展赋值运算符
条件运算符 ? :
逗号运算符 ,
指针运算符 * &
求字节数运算符 sizeof
强制类型转换运算符 (类型)
分量运算符 . ->
下标运算符 [ ]
其他 如函数调用运算符()
运算符的优先级
由高到低:单目运算符,算数运算符,关系运算符,赋值运算符
说明:单目运算符:自增运算符,自减运算符,类型装换运算符。结合方向:自右至左
如:++--I 先—i.。
算术运算 结合方向自左至右
2.3基本运算和表达式
关系表达式和逻辑表达式
(a>b)&&(x>y) (a==b)||(x==y) !=a||(a>b)
A&&b.a为0.不执行b
A||b a为1.不执行b
在 c 中逻辑运算结果:1代表“真”,0代表“假”;
判断一个表达式是否真:0代表“假”,非0代表“真”
条件表达式 逗号表达式
如:k=5,k++
逗号值为5;k为6.
表达式1?表达式2 :表达式3
K=5>6 ? 1 : 0
2.4、混合运算的数据类型转换
2/3+0.5 双精度浮点型
第三章、顺序结构程序设计
3.1、c语句的分类
简单语句
表达式语句 表达式+分号
空语句 只有分号的语句
复合语句 用花括号将若干语句括起来
流程控制语句
选择语句 if ,switch
循环语句 while, do while , for
转移语句 break ,continue ,return goto
3.2、格式输入函数scanf
一般形式:scanf(“格式控制字符串“,地址列表);
使用scanf函数时,需要注意:
格式字符的个数必须与输入项的个数相同,数据类型必须一一对应,非格式字符串(说明性的)要原封不动的输入。
输入实行数据时,可以不带小数点,即按整型数据输入
数值型数据与字符或字符串混合输入时,需要注意输入方式。
3.3、格式输出函数printf
Printf(“格式控制字符串“,输出列表);
指定输出格式,由格式字符串和非格式字符串两种组成,非格式字符串照原样输出。
%[标志][输出最小宽度][.精度][长度]类型
标志:- 左对齐;+ 右对齐;
%f, %d, %c, %s
3.4、其他输入输出函数
Putchar getchar puts gets
第四章、选择结构程序设计
If选择结构
单分支
If(表达式)
语句
双分支
If(表达式)
语句1
Else
语句2
多分支
If (表达式1)
语句1
Else if(表达式2)
语句2
。。。
Else if(表达式m)
语句m
Else
语句n
Switch(表达式)
{
Case 常量表达式1:语句1;break;
Case 常量表达式2:语句2;break;
。。。
Case 常量表达式m:语句m;break;
Default:语句n;break;
}
注意break的使用
第五章、循环结构程序设计
循环三要素
初始条件 ;终止条件 ;在初始条件和终止条件间反复做某件事情(循环体)
While(表达式)
语句

Do
语句
While(表达式);

For(循环体变量赋初值;循环条件;循环变量增量)
( for( ) ; // ; 进行时间延迟。在信息交换等时用。如for(i=0,i<100) ; 互相通讯的时间延迟。 Delay )
Break语句 :不能用于循环语句和switch语句之外的任何其他语句;跳出循环。
Continue语句 :跳过循环体中剩余的语句而强行执行下一次循环;跳出本次循环。
第六章、函数与编译预处理
6.1、函数的定义和调用
类型标识符 函数名 (形式参数列表)
{ 声明部分
语句
}
例:
Int max (int x,int y)
{int z;<br>Z=x>y?x:y;<br>Return(z);}
6.2、局部变量和全局变量
注意函数中静态变量的定义和使用
6.3、变量的存储类型
局部变量的存储类型
自动变量(auto) 动态存储
局部静态变量(static) 静态存储
寄存器变量(register) 静态存储
全局变量的存储类型
自动变量(auto) 动态存储
外部变量 (extern) 静态存储
全局静态变量(static )静态存储
Extern 外部引用
Static 不能用extern 引用。
第七章、数组
7.1、一维数组的定义和使用
特别需要注意循环体的初值,终止条件
例:
Main()
{
Int I,a[10];
For(i=0;i<=9;i++)
A=I;
For(i=9;i>=0;i--)
Printf(“%d”,a);
}
注意下标问题
7.2、二维数组的定义和使用
二维数组的初始化
例如:
Int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
Int a[ ][4]={{1,2,3,4},{5},{9,10,11,12}};
例如:int a[3][3]={{1},{2},{3}};
是对每一行的第一列元素赋值,未赋值的元素取0
7.3、字符数组和 字符串
字符串用字符数组来处理,结束标志符 ‘\0’
如:char c[ ]={“I am happy”};
用字符串常量使字符数组初值化
Char c[ ]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’,’\0’};
第八章、指针
8.1、地址和指针的概念
Int I;
Int *i_point;
8.2、指针变量和变量的地址
操作符:* &
8.3、指针和一维数组
若有定义
Int a[10];
Int *p=a;
分析下面表达式的含义:
A, &a,
*(a+i), a+I,
*(p+i), p+i
A=*(a+i)=*(P+i)
&a=a+i=p+i
8.4、指针与字符串
Main()
{
Char string[ ]=”I love china!”;
Printf(“%s\n”,string);
}
Main()
{ char *string=”I love china!”;
Printf(“%s\n”,string);
}
8.5、指针变量作为函数参数
形参的定义方式;实参的形式;参数的传递方式。
第九章、结构体
9.1、结构体类型和变量的定义
Struct 结构体名
{成员列表};
Struct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};

Stuct student
{char stuNO[8];<br>Char name[20];<br>Char sex;<br>Int age;<br>Float score;<br>Char addr[30];<br>};
Struct student stu1, stu2;
9.2、结构体变量的引用
一般形式为:
结构体变量名.成员名
9.3、结构体数组
结构体数组 结构体数组元素.成员名
指向结构体的指针变量
(*p).成员名
p->成员名
其他
Strcpy(字符数组1,字符串2)
Strcat(字符数组1,字符数组2)
Strcmp(字符串1,字符串2)
Strlen(字符数组)

❼ C语言入门知识

char a[20],b[20],c[20];上面的a,b,c都是数组变量,在定义时已经为其分配栈内存,而char (*str1)[20],(*str2)[20],(*str3)[20]; 只是分配了4个字节的内存来保存指针变量(即变量本身),而指针的值(即指向)还没有,所以这些指针还不能保存数据!--------------char (*str1)[20],(*str2)[20],(*str3)[20]; str1 str2 str3均为指针,都指向长度为20的char数组.你只定义了指针,但是没有对其进

❽ C语言程序设计这门课程第一章C语言编程基础(初级)的知识点有哪些

C语言程序设计这门课第一章C语言编程基础(初级)的知识点包含【初级】第1讲-C程序的结构,【初级】第2讲-运算符,【初级】第3讲-创建和调用函数,【初级】第4讲-输入输出函数,【初级】第5讲-整型变量,【初级】第6讲-浮点型变量,【初级】第7讲-字符型变量,【初级】第8讲-类型转换,【初级】第9讲-常量,。

❾ 求c语言基础知识

如何学好c语言
教了多年《C程序设计》课程,大多学生觉的这门课程难学。其实,按照我们现在的教学大纲和教学要求,只要同学们掌握一些方法,克服心理上畏难、不轻言放弃,是完全可以学好的。
《C程序设计》的内容很丰富,按照我们现在的教学大纲,教学的主要内容是基础知识、四种结构的的程序设计、函数与数组的应用和一些简单的算法。在学习时,同学们应该把主要精力放在这些部分,通过实践(练习和上机调试等熟练掌握。当然,在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺,大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题,回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学的好?
学习C语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。比如:在C语言中最典型的是关于结构化程序设计构思,不管是那种教材,一开始就强调这种方法,这时也许你不能充分体会,但是学到函数时,再回头来仔细体会,温故知新,理解它就没有那么难了。学习C语言就是要经过几个反复,才能前后贯穿,积累应该掌握的C知识。
那么,我们如何学好《C程序设计》呢?
一.学好C语言的运算符和运算顺序
这是学好《C程序设计》的基础,C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。
先要明确运算符按优先级不同分类,《C程序设计》运算符可分为15种优先级,从高到低,优先级为1 ~ 15,除第2、3级和第14级为从右至左结合外,其它都是从左至右结合,它决定同级运算符的运算顺序。下面我们通过几个例子来说明:
(1) 5*8/4%10 这个表达式中出现3种运算符,是同级运算符,运算顺序按从左至右结合,因此先计算5 *8=40,然后被4除,结果为10,最后是%(求余数)运算,所以表达式的最终结果为10%10 = 0;
(2)a = 3;b = 5;c =++ a* b ;d =a + +* b;
对于c=++a*b来说,按表中所列顺序,+ +先执行,*后执行,所以+ + a执行后,a的值为4,由于+ +为前置运算,所以a的值4参与运算,C的值计算式为4*5=20而不是3*5=15了;而对于d=a++*b来说,由于a + +为后置运算,所以a值为4参与运算,使得d的值仍为20,而a参与运算后其值加1,值为5。 这个例子执行后,a的值为5,b的值为5,c的值为20,d的值也是20;
(3)(a = 3,b = 5,b+ = a,c = b* 5)
例子中的“,”是逗号结合运算,上式称为逗号表达式,自左向右结合,最后一个表达式的结果值就是逗号表达式的结果,所以上面的逗号表达式结果为40,a的值为3,b的值为8,c的值为40。
(4)a=5;b=6;c=a>b?a:b;
例中的a>b?a:b是一个三目运算,它的功能是先做关系运算a>b部分,若结果为真,则取问号后a的值,否则取冒号后b的值,因此c的值应该为6,这个运算可以用来代替if…else…语句的简单应用。
二.学好C语言的四种程序结构
(1)顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如;a = 3,b = 5,现交换a,b的值,这个问题就好象交换两个杯子水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为: c = a; a = b; b = c; 执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b = c; 则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。 顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 3.14159*r*r,输出圆的面积s。不过大多数情况下顺序结构都是作为程序的一部分,与其它结构一起构成一个复杂的程序,例如分支结构中的复合语句、循环结构中的循环体等。
(2) 分支结构
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌套只不过是分支中又包括分支语句而已,不是新知识,只要对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种基本的分支结构。
①if(条件)
{
分支体
}
这种分支结构中的分支体可以是一条语句,此时“{ }”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0) x=-x;
②if(条件)
{分支1}
else
{分支2}
这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根
分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:

d=b*b-4*a*c;
if(d>=0)
{x1=(-b+sqrt(d))/2a;
x1=(-b-sqrt(d))/2a;
printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2);
}
else
{r=-b/(2*a);
i =sqrt(-d)/(2*a);
printf(“x1=%8.4f+%8.4fi\n”r, i);
printf(“x2=%8.4f-%8.4fi\n”r,i)
}
③嵌套分支语句:其语句格式为:
if(条件1) {分支1};
else if(条件2) {分支2}
else if(条件3) {分支3}
……
else if(条件n) {分支n}
else {分支n+1}
嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用下面的语句。
④switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。
(3)循环结构:
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do –while循环和for循环。四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误,在学习中我们主要学习while、do…while、for三种循环。常用的三种循环结构学习的重点在于弄清它们相同与不同之处,以便在不同场合下使用,这就要清楚三种循环的格式和执行顺序,将每种循环的流程图理解透彻后就会明白如何替换使用,如把while循环的例题,用for语句重新编写一个程序,这样能更好地理解它们的作用。特别要注意在循环体内应包含趋于结束的语句(即循环变量值的改变),否则就可能成了一个死循环,这是初学者的一个常见错误。
在学完这三个循环后,应明确它们的异同点:用while和do…while循环时,循环变量的初始化的操作应在循环体之前,而for循环一般在语句1中进行的;while 循环和for循环都是先判断表达式,后执行循环体,而do…while循环是先执行循环体后判断表达式,也就是说do…while的循环体最少被执行一次,而while 循环和for就可能一次都不执行。另外还要注意的是这三种循环都可以用break语句跳出循环,用continue语句结束本次循环,而goto语句与if构成的循环,是不能用break和 continue语句进行控制的。
顺序结构、分支结构和循环结构并不彼此孤立的,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构,其实不管哪种结构,我们均可广义的把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序,但是要编程的问题较大,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将C程序设计成模块化结构。
(4)模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因些,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。
三.掌握一些简单的算法
编程其实一大部分工作就是分析问题,找到解决问题的方法,再以相应的编程语言写出代码。这就要求掌握算法,根据我们的《C程序设计》教学大纲中,只要求我们掌握一些简单的算法,在掌握这些基本算法后,要完成对问题的分析就容易了。如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作;若a[2]~a[10] 中有一个比a[1]小,则将其中最大的一个(假设为a[i])与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a[i]与a[2]交换,此时a[2] 中存放的10个数中第2小的数;依此类推,共进行9轮比较,a[1]到a[10]就已按从小到大的顺序存放。即每一轮都找出剩下数中的最小一个,代码如下:
for(i=1;i<=9;i++)
for(j=i+1;j<=10;j++)
if(a[i]>a[j]
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
结语:当我们把握好上述几方面后,只要同学们能克服畏难、厌学、上课能专心听讲,做好练习与上机调试,其实C语言并不难学。