Chap3 算法与c程序设计
?算法
?C语句概述
?C 程序的基本结构
算 法
?程序
用编程语言编写, 完成特定功能的语句的集合 。
?编程步骤:
1,明确问题
2,问题 若干具体步骤 ( 算法 )
3,算法 程序
4,上机调试运行
?算法
解题方法或解题步骤的精确描述
算法表示:文字描述, 流程图和 N-S流程图
算法 与程序
?程序=算法+数据结构
+ 结构化程序设计方法
+ 语言工具和环境
例 3-1
从键盘中输入 100个整数, 对其中的正整数进行累
加, 最后输出结果 。
算法描述 (自然语言 )
⑴ 输入一个数;
⑵ 如果该数 > 0,累加它;
⑶ 如果 100个数没有输入完, 转步骤 (1);
⑷ 输入完 100个数后, 输出累加和 。
例 3-1 算法描述 (流程图 )
开始
输入一个数
该数
>0
累加
输入完 100个

输出累加和
结束
起止框
处理框
判断框
流向线
Y
Y
N
N
例 3-1 算法描述 (N-S流程图 ) 输入一个数
该数〉
0
满足
不满足
加到累加和中
输入完
1 0 0
个数否
输出累加和
处理
判断
重复
算法的 C语句实现
void main( )
{
int x; /* 存放输入数的单元 */
int count; /* 存放输入个数的单元 */
int sum; /* 存放累加和的单元 */
count = 0; sum = 0; /* 工作单元初值 */
do {
scanf(“%d”,&x); /* 输入一个数 */
count ++; /* 每输入一个数, 记一下数 */
if (x>0) /* 判断输入数 〉 0否 */
sum = sum + x; /* 是 〉 0,则加到累加和中 */
} while ( count <100 ); /* 未输入完 100个数, 则重复 */
printf (,%d”,sum ); /* 输出累加和 */
}








C语句概述
C语言的五类语句
?1 函数调用语句
?2 表达式语句
?3 空语句
?4 复合语句
?5 程序结构控制语句
C语言的所有语句 必须以分号 ; 结束
C语句概述
1 函数调用语句
scanf(,%d%d”,&a,&b );
printf( "%d",x );
2 表达式语句
x = 3;
i++;
3 空语句;
C语句概述
?4复合语句
{
statement 1;
statement 2;
……
statement n;
}
?5 程序结构控制语句
条件控制(第四章)
循环控制(第五章)
C 程序的基本结构
? 顺序结构
? 选择结构
? 循环结构
C 程序的基本结构
?顺序结构
语句 1 ;
语句 2 ;
语句 3 ;
……..
语句 1;
语句 2; 冯,若依曼机
工作原理
——顺序执行
例 3- 4 交换变量的值
对两个变量先输入两个值, 然后交换这两个变量的值 。
x temp y
步骤:
1 x -> temp
例 3- 4 交换变量的值
例 对两个变量先输入两个值, 然后交换这两个变量的值 。
x temp y
步骤:
1 x -> temp
2 x <- y
例 3- 4 交换变量的值
例 对两个变量先输入两个值, 然后交换这两个变量的值 。
x temp y
步骤:
1 x -> temp
2 x <- y
3 temp->y
例 3- 4 交换变量的值
例 对两个变量先输入两个值, 然后交换这两个变量的值 。
x temp y
步骤:
1 x -> temp
2 x <- y
3 temp->y
例 3- 4 交换变量的值
对两个变量先输入两个值, 然后交换这两个变量的值 。
main()
{ int x,y,temp;
scanf(“%d%d”,&x,&y);
temp = x;
x = y;
y = temp;
printf(“first=%d,second=%d”,x,y);
}
C 程序的基本结构
?顺序结构
?选择结构
语句 1 ; 语句 2 ;
条件?满足
不满足
条件
满足 不满足
语句 1 语句 2
选择结构
例 输入变量 x,计算符号函数:
1 当 x>0
y = 0 当 x=0
-1 当 x<0
main( )
{
int x,y;
y=0;
scanf(“%d”,&x);
if (x>0) y = 1;
else y = -1;
printf(“x=%d,y=%d”,x,y);
}
x>0
满足 不满足
y = 1 y = -1
y = 0
C 程序的基本结构
?顺序结构
?选择结构
?循环结构
不满足
满足
重复执行的语句;
后一语句;
条件?
循环结构
void main( )
{ int i,max,x;
i=9;
scanf("%d",&x)
max = x;
while ( i > 0 ){
scanf (“%d”,&x);
if ( x > max ) max = x;
i --;
}
printf("max number is %d",max);
}




C 程序的基本结构
?结构化程序设计基本要求:
o 自顶向下, 模块化设计;
o 使用三种基本结构构造程序;
o 程序书写规范, 切勿随心所欲;
o 清晰第一, 效率第二 。
? 思路清晰
? 书写清晰 ( 变量名, 函数名, 注解等 )
? 书写使用阶梯形
int merge(int a1[ ],int n1,int a2[ ],int n2) /* 把 2个排好序的数组 a1,a2归并到 a2上 */
{
int i,j=0,k=0,b[10];
if (n2==0)
for ( ; j<n1; j++,k++)
a2[k]=a1[j];
if (n1>0){
for (i=0; i<n2; i++)
b[i]=a2[i];
i=0;
while (i<n1&&j<n2){
if (a1[i]>b[j]){
a2[k]=b[j];
j++;
}
else{
a2[k]=a1[i];
if (a1[i]==b[j])
j++;
i++;
}
k++;
}
if ( i<n1 ) for ( ; i<n1; i++,k++) a2[k]=a1[i];
if ( j<n2 ) for ( ; j<n2; j++,k++) a2[k]=b[j];
}
return(k);
}
(请注意书写格式)