C语言经典习题实例及讲解
4 7 2 8 12 5 10 3
i
jHale Waihona Puke 逆置后: 3 10 5 12 8 2 7 4
(1) i:0~N/2-1 j=N-i-1 (2) 交换:t=a[i]; a[i]=a[j]; a[j]=t;
程 序 示 例(二)
例2 将数组内容逆置重放。
#define N 6 main( ) { int a[N],i,j,p,t;
- 2 3 . 5 \0
if(s[i]=='.') i++; for(power=1;s[i]>='0'&&s[i]<='9';i++)
sign= -1
{val=10*val+s[i]-'0'; power*=10;}
val= 235
number=sign*val/power; printf("\nnumber=%f\n",number); }
2 4 7 10
运行结果: Input 4 numbers: 4 2 10 7 The sorted numbers: 2 4 7 10
程 序 示 例(二)
例2 将数组a的内容逆置重放。要求不得另外开辟数组,只 能借助于一个临时存储单元。
分析:
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
gets(s); i=0; sign=1; if(s[i]=='+'‖s[i]=='-')
-23.5 ↙ number=-23.500000
sign=(s[i++]=='+')? 1:-1;
for(val=0;s[i]>='0'&&s[i]<='9';i++)
val=10*val+s[i]-'0';
for(j=1;j<4;j++) if(rmax<a[i][j]) {rmax=a[i][j];c=j;} find=1; k=0; while(k<3&&find==1) { if(k!=i)
if(a[k][c]<=rmax) find=0; k++;} if(find==1)printf("The saddle pointer
printf("Input %d number to the array:\n",N);
for(i=0;i<N;i++) scanf("%d",&a[i]);
p=N/2-1; for(i=0;i<=p;i++) { j=N-i-1; t=a[i];a[i]=a[j];a[j]=t;} printf("\nThe array has been
into array:",x); for(i=0;i<m;i++)
printf(" %d",a[i]); }
运行结果: Input 4 sequential data: 8 10 20 27 ↙ Input an integer to insert: 16↙ Integer 16 has been Inserted into array:
#define N 4 main( ) { int array[N],i,j,k,t;
printf("Input %d number:\n",N); for (i=0;i<N;i++) scanf("%d",&array[i]); printf("\n"); for (i=0;i<N-1;i++) { k=i;
(3)若rmax是c列上最小的元素,则找到,并打印。
(4)重复以上步骤,使i从第1行到第3行重复。
例:
3 5 18 14 1 4 6 18
5 9 12 13
程 序 示 例(四)
main( ) {int a[3][4],i,j,c,k,rmax,find;
printf("The matrix is:\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d",&a[i][j]); find=0; i=0; while(i<3&&(find==0)) { rmax=a[i][0]; c=0;
分析:
(1)先找到插入位置; (2)再将插入位置后的元素均向后移动一个位置; (3)最后将数插入到相应位置上。
8 10 20 27 插入数x=16 p
8 10 16 20 27
8 10 20 20 27 p
程 序 示 例(六)
#define N 4
main( )
{int a[N+1],p,i,x,m; printf("Input %d sequential data:",N); for(i=0;i<N;i++) scanf("%d",&a[i]);
while(str[i]!='\0')
{ nc=str[i];
if(nc!=' '&& pc==' ') num++;
t h e i s d o \0
pc=nc; i++;
}
printf("\nThe number of words is:%d",num);
num=3
}
程 序 示 例(六)
例6 将一个数插入到升序的数列中,使插入后的数列仍然有 序。
若数组中的元素个数为N,则需要进行N-1轮排序。例:
待排序数: 4 2 10 7 第一趟: 2 4 10 7 第二趟: 2 4 10 7 第三趟: 2 4 7 10
程 序 示 例(一)
例1 选择法排序。将数组中的整数按由小到大顺序输出。
#define N 4 main( ) { int array[N],i,j,k,t;
程 序 示 例(三)
例3 将字符串转换成相应的双精度浮点数。 例如:“-23.5 ” -23.5
分析:
(1) 先对字符串中的“+”和“-”进行处理; (2) 再处理‘.’前的部分,即将每一个数字字符转换成相应的数值
(方法:相应字符-’0’),并加权累加成相应的整数部分。 (3) 最后处理‘.’后的部分(若有的话)。最终 结果存放在变量
number中。
程 序 示 例(三)
例3 将字符串数转换成相应的双精度浮点数。
main( ) {char s[8]; int i,sign;
运行结果:
double val,power,number;
Input string of a
printf("Input string of a number:"); number:
程 序 示 例(五)
main( ) { char str[80],pc,nc;
int i,num;
运行结果: Input a text line:
printf("Input a text line:"); the is do ↙
gets(str); pc=' '; num=0; i=0;
The number of words is:3
for (j=i+1;j<N;j++) if(array[j]<array[k]) k=j; if (i!=k)
{t=array[k];array[k]=array[i];array[i]=t;} } printf("The sorted numbers:\n"); for (i=0;i<N;i++) printf(" %d",array[i]); }
is:a[%d][%d]=%d\n",i,c,a[i][c]); i++; } if(find==0)printf("not been found"); }
18 12 19 13 79 65 52 38 63 88 71 49
rmax= 19 find=1
运行结果: The matrix is: 18 12 19 13 79 65 52 38 63 88 71 49 The saddle pointer is: a[0][2]=19
例6 将一个数插入到升序的数列中,使插入后的数列仍然 有序。
程 序 示 例(一)
例1 用选择排序法对数组中的N个整数排序,按由小到大的 顺序输出。
分析:
选择排序法的思路是:先在a[0]~a[N-1]中选出最小的数,将 它与数组中的第一个元素对换;再将a[1]~a[N-1]中的最小的数与 a[1]对换…;每比较一轮,找出一个未经排序的数中最小的一个, 逐步缩小排序范围,直至完成排序。
习题课
程序示例演示
程序示例
例1 用选择排序法对数组中的N个整数排序,按由小到大的 顺序输出。
例2 将数组a的内容逆置重放。要求不得另外开辟数组,只 能借助于一个临时存储单元。
例3 将字符串转换成相应的双精度浮点数。 例4 输入3行4列的矩阵,找出在行上最大,在列上最小的 那个元素。若没有这样的元素,则打印出相应的信息。 例5 输入一个由若干单词组成的文本行(最多80个字 符),每个单词之间用若干空格隔开,统计文本行中单词 的个数。