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,计算 y值 。
1 当 x>=0
y =
-1 当 x<0
main( )
{
int x,y;
scanf(“%d”,&x);
if (x>0) y = 1;
else y = -1;
printf(“x=%d,y=%d”,x,y);
}
x>0
满足 不满足
y = 1 y = -1
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);
}
(请注意书写格式)