第4章数组和字符串
字符数组和字符串

* ** ** ** *
}
main() a
{ char a[5]; int i=0;
b
while(i<=4)
c
{ scanf(“%c”,&a[i]);
c
i
{ char a[5]; int i=0
跳格分隔。因此不要试图利用scanf函数从键盘输入
How are you? 赋给一个字符串。
1.5 字符数组处理函数
1.字符串输入gets()函数 使用形式: gets(字符数组) 功能:从终端输入一个字符串(直到回车键) 到字符数组中。
例如:char str[20]; gets(str); 若从键盘输入:Hello World! 则将字符串“Hello World!”送到字符数组str中。
输出:10 char str[80]={“ab\n\0y\012/\\\””} ; printf(“%d”,strlen(str)) ;
输出:3
4.字符串连接strcat()函数
使用形式: strcat(字符数组1,字符串2)
如:“china” 占内存6个字节,但字符串长度 是5 在C语言中用字符数组来处理字符串,每个 元素存放一个字符型数据。
字符型数组可用一般数组的初始化方式初始化 外,还可以使用字符串常量初始化:
如:char message[]={“Hello”}; √ 或 char message[]=“Hello”; √
说明:字符数组本身并不要求它的最后一个元素一
定是‘\0’,例如:char ch[2]={‘A’, ‘B’};是合法的。 当定义字符数组用字符串常量赋初值时,最后有一 个元素其值为‘\0’。为了使处理方法一致,在字符 数组中也常常人为地加上一个值为‘\0’的元素。
数据结构第4章 串

/*若串s和t相等则返回0;若s>t则返回正数;若s<t则返 回负数*/
{ int i;
for (i=0;i<s.len&&i<t.len;i++)
if (s.ch[i]!=t.ch[i]) return(s.ch[i] - t.ch[i]);
初 始 条 件 : 串 S 存 在 ,1≤pos≤StrLength(S) 且 1≤len≤StrLength(S)-pos+1
操作结果:用Sub返回串S的第pos个字符起长度为len的子串
返回主目录
(11)StrIndex(S,T,pos)
初始条件: 串S和T存在,T是非空串, 1≤pos≤StrLength(S)
return(s.len); }
返回主目录
(7)清空函数
StrClear(SString *s) /*将串s置为空串*/ {
s->len=0; }
返回主目录
(8)连接函数
(1) 连接后串长≤MAXLEN,则直接将B加在A的 后面。 (2) 连接后串长>MAXLEN且LA<MAXLEN,则B 会有部分字符被舍弃。 (3) 连接后串长>MAXLEN且LA=MAXLEN,则B 的全部字符被舍弃(不需连接)。
for (i=s->len + t.len-1;i>=t.len + pos;i--)
s->ch[i]=s->ch[i-t.len];
for (i=0;i<t.len;i++) s->ch[i+pos]=t.ch[i];
s->len=s->len+t.len;
数据结构第4章数组和串

● 教学目的:理解抽象数据类型数组的概念, 掌握数组的不同存储结构的实现及应用,了 解广义表的相关概念,掌握串的逻辑结构、 存储结构及其基本运算。
● 教学重点:数作在不同 存储结构上的实现。 ● 教学难点:带状矩阵的压缩存储;稀疏矩 阵的三元组表实现及其转置算法,堆结构的 串操作实现;串的模式匹配算法。
矩阵的压缩存储
printf("Array a:\n"); k=0; for(i=0;i<N;i++)//输出矩阵A { for(j=0;j<N;j++) if(i<j)printf("%5d",sa[M-1]); else printf("%5d",sa[i*(i+1)/2+j]); printf("\n"); } printf("Array b:\n"); k=0; for(i=0;i<N;i++)//输出矩阵B { for(j=0;j<N;j++) if(i>j)printf("%5d",sb[M-1]); else printf("%5d",sb[j*(j+1)/2+i]); printf("\n"); }}
矩阵的压缩存储
由此可见,要唯一表示一个稀疏矩阵,在存储三 元组表的同时还需存储该矩阵总的行数、列数及非 零元个数。 练习:写出图4-9(a)所示稀疏矩阵的三元组表。
三元组表(也是线性表)的存储方式主要有两种: 顺序存储和链式存储,从而可引出稀疏矩阵的两种 压缩存储方法:三元组顺序表和十字链表。 3、三元组顺序表
矩阵的压缩存储
Java字符串与数组

Java字符串与数组问题及答案来源⾃《Java程序员⾯试笔试宝典》第四章 Java基础知识 4.5字符串与数组1、字符串创建与存储的机制是什么?Java中字符串声明与初始化主要有两种情况:(1)String s1 = new String("abc")与String s2 = new String("abc")语句执⾏String s1 = new String("abc")语句,字符串池中不存在"abc",则会创建⼀个字符串常量"abc",并将它添加到字符串常量池中,然后new String()会在堆中创建⼀个新的对象,s1指向堆中的String对象紧接着创建String s2 = new String("abc")语句,因为字符串常量池中已经有了字符串常量"abc",所以不会再创建"abc",直接new String()在堆中创建⼀个新的对象,然后使⽤s2指向这个对象s1与s2指向堆中的不同String对象,地址⾃然也不相同(2)String s1 = "abc"语句与String s2 = "abc"语句在JVM中存在着⼀个字符串常量池,其中保存了着很多String 对象,s1,s2引⽤的是同⼀个常量池中的对象。
当创建⼀个字符串常量时,例如String s1 = "abc",会⾸先在字符串常量池中查找是否已经有相同的字符串被定义,若已经定义,则直接获取对其的引⽤,此时不需要创建字符串常量"abc",如果没有定义,则⾸先创建字符串常量"abc",然后把它加⼊到字符串池中,再将引⽤返回例⼦1:String s1 = new String("abc"); // 先查找常量区有⽆"abc"常量,若⽆则将其"abc"添加到常量区,再在堆中创建对象,将s1指向堆中的对象String s2 = new String("abc"); // 发现在常量区已经有了"abc",在堆中创建对象,将s2指向堆中的对象例⼦2:String s1 = "abc"; // 在常量区⾥⾯创建⼀个"abc"字符串对象,s1获取对其的引⽤String s2 = "abc"; // 发现在常量区已经有了"abc",s2直接获取对其的引⽤引申 - 对于String类型的变量s,赋值语句s=null和赋值语句s=""有什么区别?s=null,是指s不指向任何⼀个字符串;s=""中的s指向空字符串笔试题 - new String("abc")创建了⼏个对象?⼀个或两个,如果常量池中原来就有"abc",那么只创建⼀个对象,否则创建两个对象2、==、equals和hashCode有什么区别?==:是运算符,⽤于⽐较两个变量是否相等。
程序:第04章:数组和字符串

第4章数组和字符串程序4.1 一维数组类#include <assert.h>template <class T>class Array1D{public:Array1D(int sz=0); //缺省时长度为0 ~Array1D(){ delete []elements; }T& operator [](int i)const; //取元素值 Array1D<T>&operator=(const Array1D<T> &r); //整体赋值friend istream &operator>>(istream &in, Array1D<T> &r);friend ostream &operator<<(ostream &out, const Array1D<T> &r);private:int size;T *elements; //指向T类型数组的指针};template <class T>Array1D<T>::Array1D(int sz){assert(sz>=0); //越界检查 size=sz;elements=new T[sz];}template <class T>T& Array1D<T>::operator [](int i)const{assert(i>=0&&i<size); //越界检查return elements[i];}template <class T>Array1D<T>& Array1D<T>::operator=(const Array1D<T> &r) //数组r整体赋值给this {if(this!=&r) { //防止自我赋值size=r.size;delete []elements; //释放原空间elements=new T[size]; //重新分配空间for(int i=0; i<size; i++)elements[i]=r.elements[i]; //复制元素}return *this;}template <class T>istream &operator>>(istream &in, Array1D<T> &r){cout<<"Intput array\n";for(int i=0; i<r.size; i++) in>>r.elements[i];return in;}template <class T>ostream &operator<<(ostream &out, const Array1D<T> &r){cout<<"Array=";for(int i=0; i<r.size; i++) out<<r.elements[i]<<' ';out<<endl;return out;}程序4.2应用一维数组类的主程序#include "array1d.h"void main(){Array1D<int> a(5),b(8);Array1D<int> c; //采用缺省长度0 cin>>a; cout<<"a "<<a;cin>>b; cout<<"b "<<b;cout<<"c "<<c;cout<<"a[0]="<<a[0]<<"; "<<"b[5]="<<b[5]<<endl;c=b; cout<<"c=b, c "<<c;b=a; cout<<"b=a, b "<<b;}程序4.3稀疏矩阵类template <class T>class SparseMatrix{public:SparseMatrix(int maxRowSize, int maxColSize){};~SparseMatrix(){};virtual void Add(const SparseMatrix <T> &B, SparseMatrix <T> &C) const;virtual void Mul(const SparseMatrix <T> &B, SparseMatrix <T> &C) const;virtual void Transpose(SparseMatrix <T> &B)const;private:int maxRows, maxCols;};程序4.4 Term结构template <class T>struct Terms{int row,col;T value;};程序4.5行三元组表示的稀疏矩阵的C++类template <class T>class SeqTriple{public:SeqTriple(int mSize);~SeqTriple(){ delete [] trip; };void Add(const SeqTriple<T> &B, SeqTriple<T> &C) const;void Mul(const SeqTriple<T> &B, SeqTriple<T> &C) const;void Transpose(SeqTriple<T> &B)const;friend istream &operator >>(istream &input, const SeqTriple <T> &);friend ostream &operator <<(ostream &output, const SeqTriple <T> &);private:int maxSize; //最大元素个数int m,n,t; //稀疏矩阵的行数、列数和非零元素个数 Term<T> *trip; //动态一维数组的指针};程序4.6稀疏矩阵的快速转置template <class T>void SeqTriple<T>::Transpose(SeqTriple<T>& B)const{ //将this①转置赋给Bint *num=new int[n]; int *k=new int[n]; //为num和k分配空间B.m=n; B.n=m; B.t=t;if (t>0){for (int i=0; i<n; i++) num[i]=0; //初始化numfor (i=0; i<t; i++) num[trip[i].col]++; //计算numk[0]=0;for(i=1; i<n; i++) k[i]=k[i-1]+num[i-1];//计算kfor(i=0; i<t; i++) { //扫描this对象的三元组表int j=k[trip[i].col]++; //求this对象的第i项在B中的位置jB.trip[j].row=trip[i].col; //将this对象的第i项转置到B的位置jB.trip[j].col=trip[i].row;B.trip[j].value=trip[i].value;}}delete [] num; delete [] k;}程序4.7字符串类#include <string.h>class String{public:String();String(const char *p);~String(){ delete [] str; };int Find(int i, String &P);private:int n; //当前串长char *str; //动态一维字符数组的指针};String::String(const char *p){n=strlen(p);str=new char[n+1];strcpy(str, p);}程序4.8 简单匹配算法int String::Find(int i, String &P){if (i<0 || i>n-1) { //越界检查cout<<"Out of bounds!"<<endl;return -1;}char *pp=P.str, //模式串指针pp指向第1个字符char *t=str+i; //主串指针t指向下标i的字符while (*pp!='\x0'&&i<=n-P.n) //pp未到串尾同时剩余字符数超过模式串长,则循环if (*pp++!=*t++) {pp=P.str; //模式串回到第1个字符t=str+(++i); //主串回到i+1的位置}if (*pp=='\0') return i; //若pp已到串尾,则匹配成功return -1;}程序4.9 KMP算法的C++程序(设串P的f值已求得)int String::FindKMP(int i, String &P){if (i<0 || i>n-1) { //越界检查cout<<"Out of bounds!"<<endl;return -1;}int j=0, m=P.n;while (i<n&&j<m)if (j==-1||str[i]==P.str[j]) {i++; j++; //相等或j=-1时,i、j均后移1个位置 }else j=P.f[j]; //到达失配点, j回溯到f[j]return ((j==m)?i-m:-1);}程序 4.10 失败函数的C++程序void String::Fail(){ // 计算失败函数int j=0,k=-1;f[0]=-1;while (j<n)if ((k==-1) || (str[j]==str[k])){j++; k++; //k==-1或str[j]==str[k]时,j,k各扩展1位,j无回溯f[j]=k; //求得的k存入f[j]}else k=f[k]; //str[j]不等于str[k]时,k回溯到f[k] }程序4.11改进的失败函数的C++程序void String::Fail (){int j=0,k=-1;f[0]=-1;while (j<n)if ((k==-1) || (str[j]==str[k])){j++; k++; //当k=-1或str[j]=str[k]时,j,k各扩展1位 if (str[j]==str[k]) f[j]=f[k]; //将字符p k和p j比较,若相等则将f[k]存入f[j] else f[j]=k; //否则求得的k存入f[j]}else k=f[k]; //str[j]不等于str[k]时,k回溯到f[k],j无回溯}。
第4章:数组和字符串

4.1.1一维数组
2. 创建一维数组
创建一维数组就是为数组分配存储空间,需指定数组长度。 数组创建后,数组名就标识用于存储数组元素的存储空间(引用)。 创建一维数组的3种方法:
(1) 先声明后创建
数组元素类型 数组名[]; 数组名 = new 数组元素类型[元素个数] ; 如:int intArray []; intArray = new int[5];4.2.3 字符串基本操作
字符串比较的注意事项:
表达式 str1.equals(str2)与表达式 str1==str2 的差异 在于:
• 前者表示所引用的两个字符串的内容是否相同, • 后者表示str1 与 str2是否引用同一个对象。 【实战编程技巧:如何避免潜在的空指针异常】
练习题
4.1 数组
4.2 字符串
4.1 数组
数组是将一组相同类型的数据顺序存储,组成的一 种复合数据类型。 数组的特点:
数组中的所有元素的数据类型相同。 数组中的元素连续顺序存储。 数组中每个元素按存储顺序对应一个下标,下标从0开始顺序编号 ,引用数组元素通过数组名和它的下标确定。 数组有一维数组和多维数组之分,数组元素的下标个数确定数组的 维数。
练习题
【真题练习】设有数组a和b的定义如下: int[]a={1,2,3}; int[]b={4,5,6} …… 执行以下代码“a=b;”,除了完成赋值操作之外,引起 系统额外要做的工作是_________。
第四章 labview数组字符串和簇

第3页
《虚拟仪器》 虚拟仪器》
4.1 数组
数组是同一类型数据的集合。 数组是同一类型数据的集合。 LabVIEW中的数组可以为任何数值类型、布尔型、字符串。 LabVIEW中的数组可以为任何数值类型、布尔型、字符串。 一个数组可以是一维的,在内存允许的情况下,也可以是多维的, 每维最多可以包含2 每维最多可以包含231个元素。 可以通过数组指针(索引index)访问数组元素,指针在0 可以通过数组指针(索引index)访问数组元素,指针在0到N-1的范 围内变化,而N就是数组元素的个数。 例:10 例:10元素的一维数组 10元素的一维数组
数组函数举例
求数组的大小 检索数组,得到指定位置的元素或子数组 检索数组,
第25页
《虚拟仪器》 虚拟仪器》
替换数组一个元素或行、列 替换数组一个元素或行、
第26页
《虚拟仪器》 虚拟仪器》
例:设计一个VI,产生9 例:设计一个VI,产生9个随机数组成的数组,先倒序排列,按从小到大 排列,并且求出最大值、最小值。
第38页
《虚拟仪器》 虚拟仪器》
不可显示字符代码表
代 码 \b \s \r \n \t 含 义 Backspace (ASCII BS, equivalent to \08) Space Return (ASCII SP, equivalent to \20) (ASCII CR, equivalent to \0D)
《虚拟仪器》 虚拟仪器》
《虚拟仪器》 虚拟仪器》
内蒙古科技大学信息学院 测控技术教研室 xjs2007@
《c++程序设计》第4章 数组

赋给另一个字符数组,只能用字符串复制函数来处理。例如下面操作是非法的: str2="C++ program"; str1=str2;
4.1 数组的定义与使用
4.1.1 一维数组的定义和使用
1.一维数组的定义与初始化赋值 (1)一维数组的定义
定义格式为:
〔存储类型〕 <类型> <数组名>[<常量表达式>]; 例:int a[10];
表示定义一个名为a的整型数组,有10个元素,分别为a[0]、a[1]、 a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9] 。
int a[ ][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};
二维数组的初始化赋值
② 给数组的部分元素赋初值 给数组的部分元素赋初值的方法与给数组的所有元素赋初值的方法 类似。
3.字符串连接函数strcat()
格式:strcat(<字符数组1>,<字符串2>) 功能:将字符串2连接到字符数组1中的字符串后,其结果存放在字符数组1中。 例如:
char str1[30]="I am a "; char str2[]="student."; strcat(str1,str2); 则字符数组1的内容为"I am a student."。 说明: (1)字符数组1必须是字符数组名,字符串2可以是字符数组名,也可以是字符串常量; (2)字符数组1必须足够大,以便容纳连接后的新字符串; (3)连接时字符串1之后的'\0'取消,只在新字符串最后保留一个'\0'。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*错误
*/
…
}
10
一组red整数
11
定义整型数组red
16位
数组red有13个元素,下标为0~12 注意:没有red[13]。
12
4.2.2一维数组的初始化
初始化是指在数组定义时给数组元素赋予初值。 格式:
类型说明符 数组名[常量表达式]={数据值1, 数据值2,…,数据值n};
注意:
分析: 本题要使用三个平行的一维数组。 两个数组的第i个元素分别记录了一个学生的期中成绩 和期末成绩。 第三个数组的第i个元素由另两个数组的第i个元素计算 得到。
31
score1
80 70 80 ……
score2
90 80 60 ……
final-Score
87 77 66 ……
期中成绩
期末成绩
/*
sum of 5 interger
*/
#include "stdio.h"
void main()
{ int i,data[5],sum=0;
printf("\nPlease enter 5 integer:");
for (i=0;i<5;i++)
scanf("%d", &data[i] );
for (i=0;i<5;i++)
printf(“the sorted numbers:\n”);
for(i=0;i<10;i++) printf(“%4d”,a[i]);
printf(“\n”);}
29
思考
用冒泡法和选择法如何解决第一个问题:输 入100个学生的“C程序设计”课程的成绩, 将这100个分数从小到大输出?
30
用一维数组解决第二个问题:输入100 个学生的“C程序设计”课程的期中和 期末成绩,算出总评成绩,总评成绩为 “30%×期中成绩+70%×期末成 绩”,计算总评成绩的分数段情况。
数组初始化是在编译阶段进行的,由可执行语句完成 的,因此不能将初始化的“=”与赋值号混淆。
规定:
可以只给部分元素赋初值。没有赋初值的元素:对于 数值型数组,自动赋初值为0;对字符型数组,自动赋 初值为空字符。 例如:
13
int red[13]={1,2,3,4};
则red[4]~red[12]的初值都为0。
如int、float、double、char、long等 。
还可以是:
指针型 结构体型 共用体型 枚举型 (以上类型后续章节介绍)
同一数组中的所有元素必须是相同类型的。
5
3.数组的维数
一维数组
元素有一个下标,如a[1]
二维数组
元素有两个下标,如a[1][1]
三维数组
三个下标,如a[1][1][1]
int data[5];
/*整型数组data,有5个元素。*/
char string[20]; /*字符型数组string,有20个元素 */
(2)“数组名” 命名规则和变量命名规则相同。
(3)数组名后的“数组长度”表示数组中数据元 素的个数,数组长度只能是一个整型常量。
8
(4)一个数组定义语句中可以只定义一个 数组,也可以定义多个数组,还可以同时 定义数组和变量。例如:
步
•……
•第k步、在m-k+1个数中找出最小
数,然后和第k个数交换,前k个
数已经排好序。
•这样一直到第m-1步结束。
000 0 0 822 2 2 554 4 4 445 5 5 288 8 8 999 9 9
第第 第 第 结
23 步步
4 步
5 步
果
交换过程
28
选择法程序:
作业:请画出选择排序法 的流程图。并分析两种
第4章数组和字符串
1
第4章 数组和字符串
4.1 数组的概念 4.2 一维数组 4.3 二维数组 4.4 字符串与字符函数
2
4.1 数组的概念
问题的提出:
第一个问题:输入100个学生的“C程序设 计”课程的成绩,将这100个分数从小到大 输出。
第二个问题:输入100个学生的“C程序设 计”课程的期中和期末成绩,算出总评成绩, 总评成绩为“30%×期中成绩+70%×期 末成绩”,计算总评成绩的分数段情况。
只能给元素逐个赋值,不能给数组整体赋值。
例如:给数组red中的13个元素全部赋值“2”只能用以下形式来 表示: int red[13]={2,2,2,2,2,2,2,2,2,2,2,2,2};
而不能为了方便写成如下的形式: int red[13]=2;
初始化数组时,允许省略数组的长度。
例如: int red[13]={1,2,3,4,5,6,7,8,9,10,11,12,13}; 可写为: int red[ ]={1,2,3,4,5,6,7,8,9,10,11,12,13};
#include<stdio.h>
main()
{
int i,m[8];
for(i=0;i<=7;i++)
m[i]=i;
for(i=7;i>=0;i--)
printf("%d ",m[i]);
}
程序的运行结果如下:
76543210
16
➢ 允许用表达式表示下标。
【例4.2】在数组m[8]中存储偶数并输出。
总评=
期中成绩×30%+期末成绩×70%
剪不断,理还乱!有没有更好的方法?请看二维数组!
32
4.3 二维数组
4.3.1 二维数组的定义 4.3.2 二维数组的初始化 4.3.3 二维数组的引用
33
4.3.1二维数组的定义
语法:
类型说明符 数组名[行数][列数]
其中
“行数”表示第一维下标的长度 “列数”表示第二维下标的长度。
3
1.数组的定义
按序排列的同类数据元素的集合就称为数组。 从概念上来说,数组是一组变量,这组变量应该满
足下列条件:
具有有相同的名字 具有相同的数据类型 在存储器中连续存放。
按数组元素类型的不同,数组又可分为
数值型数组 字符型数组 指针型数组 结构体型数组
4
2.数组的数据类型
数组的数据类型可以是各种基本数据类型
/*初始化 */
printf("\n"); for (i=2;i<20;i++)
fib[i]=fib[i-1]+fib[i-2] ;
for (i=1;i<=20;i++)
{ printf("%10d",fib[i-1]); if (i%5==0) printf(“\n”);
个*/
/*每行输出5
} }
21
例3: 输入100个整数,求出最小的数以及第一 个最小的数在数组中的下标。
分析: 用一个变量min_allo记住最小元素的下标 开始时,假设第0的元素最小,min_allo=0 循环从第一个元素开始,到第99个元素结束 判断该元素是否比下标为min_allo的元素还要
小,如果是,就让min_allo记住这个新的最小 元素的位置。
a=1;b=1; printf("%10d%10d",a,b); for( j=3;j<=20; j++) {
f=a+b; a=b; b=f; printf("%10d",f); if (j%5==0) printf("\n"); } }
20
#include "stdio.h" void main() { int i, fib[20]={1,1} ;
14
4.2.3一维数组的引用
格式:
数组名[下标表达式]
其中:
数组下标可以是整型变量或整型表达式, 任何一个数组元素的引用都可以看成是一个变量的使用。 下标从0开始,不能大于[数组长度-1]
例如: data[4]、data[i+j]、data[i++]
都是合法的引用方式。
15
【例4.1】数组m[8]存储其下标值,反向输出m的值。
C语言的数组可以是多维的,但一般常用的是一维数 组和二维数组。
6
4.2一维数组
4.2.1一维数组的定义 4.2.2一维数组的初始化 4.2.3一维数组的引用
7
4.2.1一维数组的定义
一维数组定义的语法格式如下:
类型说明符 数组名 [数组长度];
其中:
(1)“类型说明符”可以是任何一种基本数据类型或构 造数据类型。例如:
float b[10],c[20],f; 定义了:
单精度浮点型数组b,有10个元素; 单精度浮点型数组c,有20个元素; 浮点型变量f。
9
例如:
程序段一:
#define Size 5
main()
{ int a[Size],b[Size+10]; /*正确
*/
…
} 程序段二:
main()
{
int n=5; int data[n];
25
26
冒泡法程序 main() {int a[11], i,j,t;
printf(“input 10 number:\n”); for(i=1;i<11;i++)
scanf(“%d”,&a[i]); printf(“\n”); for(j=1;j<=9;j++)
for(i=1;i<=10-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1]; a[i+1]=t;}