nullC程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
C程序设计 ----组织数据课程组织课程组织C语言入门
数据
操作
过程组织
基本算法
判断与选择-------分支
迭代与递推-------循环
穷举-------流程转向控制
递归--------变量的存储类型
组织数据
数组
结构
指针
文件改错改错#include
int main()
{
int x,y;
scanf("%d%d",&x,&y);
if(x<1) y=x;
if(x>=1&&x<10) y=2x-1;
if(x>=10) y=3x-11;
printf("x=%d,y=%d\n",x,y);
return 0;
}………
int x,y;
printf("input x:\nx=");
scanf("%d",&x);
if(x<1) y=x;
else if(x<10) y=2*x-1;
else y=3*x-11;
printf("x=%d,y=%d\n",x,y);
……………………
if(x>=10) y=3*x-11;
else if(x>=1) y=2*x-1;
else y=x;
…………组织数据-----1.数组(处理批量数据)组织数据-----1.数组(处理批量数据)
数组类型;
常用算法:排序、查找、求最大最小值等;
用字符数组存取字符串;
使用字符串处理函数处理字符串
向函数传递一维数组和二维数组;(指针)
null问题一:成绩处理程序
从键盘输入某班全体50位同学英语学习成绩,然后求平均成绩,打印出最高分、最低分,平均成绩,并进行排名处理。
分析:
null#include
void main()
{ float scores[50],min,max;
for (int i=0;i<50;i++) scanf(“%f”,&scores[i]);
min=scores[0]; max=socres[0];
for (i=1; i<50;i++) {
if (scores[i]max) max=screos[i];
}
printf(“min=%f max=%f”,min,max);
}null一维数组的定义
定义方式: 数据类型 数组名[常量表达式];
合法标识符表示元素个数
下标从0开始例 int a[6];编译时分配连续内存
内存字节数=数组维数*
sizeof(元素数据类型)数组名表示内存首地址,
是地址常量null一维数组的引用
数组必须先定义,后使用
只能逐个引用数组元素,不能一次引用整个数组
数组元素表示形式: 数组名[下标]
其中:下标可以是常量或整型表达式例 int i=15;
int data[i]; (不能用变量定义数组维数)例 int a[10];
printf(“%d”,a); ()
必须 for(j=0;j<10;j++)
printf(“%d\t”,a[j]); ()null一维数组的初始化
初始化方式 在定义数组时,为数组元素赋初值
(在编译阶段使之得到初值) int a[5]={1,2,3,4,5};
等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;说明:
数组不初始化,其元素值为随机数当全部数组元素赋初值时,可不指定数组长度如 int a[5]={6,2,3};
等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0;只给部分数组元素赋初值 int a[]={1,2,3,4,5,6};
编译系统根据初值个数确定数组维数一维数组的输入和输出一维数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)输入方法:int a[10],i;输入第i个数组元素:scanf("%d",&a[i]);输入整个数组元素:for (i=0;i<10;i++)
scanf("%d",&a[i]);输出方法:输出第i个数组元素:printf("%d",a[i]);输出整个数组元素:for (i=0;i<10;i++)
printf("%d",a[i]);null程序举例例1 读10个整数存入数组,找出其中最大值和最小值步骤:
1. 输入:for循环输入10个整数
2. 处理:
(a) 先令max=min=x[0]
(b) 依次用x[i]和max,min比较(循环)
若maxx[i],令min=x[i]
3. 输出:max和min
null#include
#define SIZE 10
main()
{ int x[SIZE],i,max,min;
printf("Enter 10 integers:\n");
for(i=0;ix[i]) min=x[i];
}
printf("Maximum value is %d\n",max);
printf("Minimum value is %d\n",min);
}null程序举例例2 读10个整数存入数组,按相反的顺序排列#include
#define SIZE 10
main()
{ int x[SIZE],i, t;
printf("Enter 10 integers:\n");
for(i=0;i
main()
{ int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{ if(i%5==0) printf("\n");
printf("%12d",f[i]);
}
}null例4 用冒泡法对10个数排序排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然
后比较第二个数与第三个数;依次类推,直至第n-1个数和第
n个数比较为止——第一趟冒泡排序,结果最大的数被安置在
最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在
第n-1个元素位置
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束null9
8
5
4
2
08
9
5
4
2
08
5
9
4
2
08
5
4
9
2
08
5
4
2
9
08
5
4
2
0
9大数沉淀,小数起泡a[0]
a[1]
a[2]
a[3]
a[4]
a[5]for(i=0;i<5;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }null8
5
4
2
0
95
8
4
2
0
95
4
8
2
0
95
4
2
8
0
95
4
2
0
8
9a[0]
a[1]
a[2]
a[3]
a[4]
a[5]for(i=0;i<4;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }null5
4
2
0
8
94
5
2
0
8
94
2
5
0
8
94
2
0
5
8
9a[0]
a[1]
a[2]
a[3]
a[4]
a[5]for(i=0;i<3;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }null4
2
0
5
8
92
4
0
5
8
92
0
4
5
8
9a[0]
a[1]
a[2]
a[3]
a[4]
a[5]for(i=0;i<2;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }null2
0
4
5
8
90
2
4
5
8
9a[0]
a[1]
a[2]
a[3]
a[4]
a[5]for(i=0;i<1;i++)
if (a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t; }nullfor(i=0;i<5;i++)
if (a[i]>a[i+1])
{ ……}for(i=0;i<4;i++)
if (a[i]>a[i+1])
{ ……}for(i=0;i<1;i++)
if (a[i]>a[i+1])
{ ……}……for(i=0;i<5-j;i++)
if (a[i]>a[i+1])
{ ……}for(j=0;j<5;j++)nullint a[10]; int i,j,t;
printf("input 10 numbers :\n");
for (i=0;i<10;i++) scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if (a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n");
for(i=0;i<10;i++) printf("%d ",a[i]);
printf("\n");null例5 用简单选择法对10个数排序排序过程:
(1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数
交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
,
将它与第二个数交换—第二趟选择排序
(3)重复上述过程,共经过n-1趟排序后,排序结束null例初始: [ 49 38 65 97 76 13 27 ]i=11349一趟: 13 [38 65 97 76 49 27 ]i=22738六趟: 13 27 38 49 65 76 [97 ]null#include
main()
{ int a[11],i,j,k,x;
printf("Input 10 numbers:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(i=1;i<10;i++)
{ k=i;
for(j=i+1;j<=10;j++)
if(a[j]
main()
{ int a[3][4]={{1,2,3,4},
{9,8,7,6},
{-10,10,-5,2}};
int i,j,row=0,colum=0,max;
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{ max=a[i][j];
row=i;
colum=j;
}
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum);
}null
#include
main()
{ int a[10][10]; int i,j;
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=0;i<10;i++)
{
for(j=1;j
main()
{ char a[15],b[5],c[5];
scanf("%s%s%s",a,b,c);
printf("a=%s\nb=%s\nc=%s\n",a,b,c);
scanf("%s",a);
printf("a=%s\n",a);
}运行情况:
输入:How are you?
输出:a=How
b=are
c=you?
输入:How are you?
输出:a=Howscanf中%s输入时,遇空格或回车结束运行情况:
输入:How are you?null常用的字符串处理函数字符串输出函数puts字符串输入函数gets包含在头文件 string.h包含在头文件 stdio.h字符串拷贝函数strcpy字符串连接函数strcat字符串比较函数strcmp字符串长度函数strlennull例 有三个字符串,找出其中最大者#include
#include
main()
{ char string[20],str[3][20];
int i;
for(i=0;i<3;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("\nThe largest string \
is:\n%s\n",string);
}null 例 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
解题思路:问题的关键是怎样确定“出现一个新单词了”
从第1个字符开始逐个字符进行检查,判断此字符是否是新单词的开头,如果是,就使变量num的值加1,最后得到的num的值就是单词总数
应用举例null判断是否出现新单词,可以由是否有空格出现来决定(连续的若干个空格作为出现一次空格;一行开头的空格不统计在内)
如果测出某一个字符为非空格,而它的前面的字符是空格,则表示“新的单词开始了”,此时使num累加1
如果当前字符为非空格而其前面的字符也是非空格,则num不应再累加1null用变量word作为判别当前是否开始了一个新单词的标志,若word=0表示未出现新单词,如出现了新单词,就把word置成1
前面一个字符是否空格可以从word的值看出来,若word等于0,则表示前一个字符是空格;如果word等于1,意味着前一个字符为非空格
nullYc=空格word=0Nword=0Yword=1
num++Nif(c==' ')
word=0;
else if(word==0)
{ word=1;
num++;
}nullnull ……
char string[81],c; int i,num=0,word=0;
gets(string);
for (i=0;(c=string[i])!=‘\0’;i++)
if(c==‘ ’) word=0;
else if(word==0)
{ word=1;
num++;
}
printf(“%d words\n”,num);
……一定要设初始值null ……
char string[81],c; int i,num=0,word=0;
gets(string);
for (i=0;(c=string[i])!=‘\0’;i++)
if(c==‘ ’) word=0;
else if(word==0)
{ word=1;
num++;
}
printf(“%d words\n”,num);
……相当于
c=string[i];
c!=‘\0’
null应用举例例 输入一行字符,统计其中有多少个单词#include
main()
{ char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else if(word==0)
{ word=1; num++; }
printf("There are %d words \
in the line\n",num);
}null洗扑克牌洗扑克牌用计算机进行洗扑克牌。
分析:
基本思路是:
将54张扑克牌统一编号为:0,1,2,……,52,53,然后随机地从中一一抽取一张牌,并依次放起,形成新的序列。具体还要解决两个问题:
如何存储54张扑克牌;
在此基础上如何一一抽取。问题分析问题分析1. 扑克牌的存储
在计算机高级语言中,允许用一个名字来命名一组依次存放的同类型数据,并把这样的数据类型称为数组。例如,可以把54张扑克牌用数组pk来存储,pk代表了54个扑克数据的整体,也代表了54个变量。这54个变量,用数组名加上写在方括弧中的序号(称下标)标识,即pk[0],pk[1],…,pk[53],被称为下标变量。问题分析问题分析设想,用三位整数表示每张扑克牌,其中第一位表示牌种类,后两位表示牌号,例如:
101,……113,分别表示红桃尖、……红桃K;
201,……213,分别表示方块尖、……方块K;
301,……313,分别表示梅花尖、……梅花K;
401,……413,分别表示黑桃尖、……黑桃K;
501,502,分别表示大、小王。
于是,54张扑克牌可以用整数表示,存储54张扑克牌的数组pk可以用如下的声明语句建立:
int pk[54];
问题分析问题分析 数组可以用括在花括弧中的数据序列进行初始化。如数组pk的初始化语句为:
int pk[54]={501,502,
101,102,103,104,105,106,107,108,109,110,111,112,113,
201,202,203,204,205,206,207,208,209,210,211,212,213,
301,302,303,304,305,306,307,308,309,310,311,312,313,
401,402,403,404,405,406,407,408,409,410,411,412,413};
问题分析——数组元素赋值问题分析——数组元素赋值(a)初始化后的pk数组问题分析问题分析2. 随机抽牌算法在0到53之间产生一个随机数r=46,将pk[0]与pk[r]交换在1到53之间产生一个随机数r=53
将pk[1]与pk[r]交换问题分析问题分析random(53+1)
在0到53之间产生一个随机数
在0到53-i之间产生一个随机数
random(53-i+1)
在i到53之间产生一个随机数
(r=random(53-i+1)+i,将pk[i]与pk[r]交换;
……
直到前53张牌被全部交换。
函数Random(int num)返回一个0到num-1之间的随机整数程序程序源程序
运行结果406,413,205,105,304,310,101,307,412,410,203,311,301,305,202,313,411,206,405,208,102,407,211,106,110,103,111,207,308,401,212,309,109,403,404,502,501,104,201,306,209,409,210,112,302,213,107,204,402,108,303,312,113,408null学习数组应注意以下数组的基本概念。
(1)数组用来处理多个性质相同的数据。
(2)数组用数组名及其下标来区分不同的数据。
(3)数组的下标可以是整型常量或整型变量(引用时)。
(4)数组的下标是0、1、2等有规律的数,所以可以很方便用循环变量来提供。
(5)数组的下标是从0开始的。注意检查数组下标是否越界。null数组的应用
1.计算n个数据的平均值
2.计算n个数据中的最大最小值
3.排序(冒泡法)
4. 递推数列的计算
5. 矩阵运算
6. 字符串匹配搜索null输出一个菱形图。
解题思路:
定义一个字符型的二维数组,用“初始化列表”进行初始化
用嵌套的for循环输出字符数组中的所有元素。
null#include
int main()
{ char diamond[][5]={{' ',' ','*'},
{' ','*',' ','*'},{'*',' ',' ',' ','*'},
{' ','*',' ','*'},{' ',' ','*'}};
int i,j;
for (i=0;i<5;i++)
{for (j=0;j<5;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
return 0;
}
null#include
main()
{ int k , a[10];
for(k=0;k<10;k++)
scanf(“%d”,&a[k]);
for(k=0;k<10;k++)
sum+=a[k];
printf(“Average is %d\n”,sum/10);
}