第6章例题
【例6.1 】对四个数组元素依次赋值,并逆序输出。
代码如下:
#include <stdio.h>
int main()
{
int a[5]={5,8,6,9,2};
int i,j;
printf("原始数组为:\n");
for(i=0;i<5;i++) //将数组中的元素依次赋值,并将其输出在屏幕上
{
printf("%5d",a[i]);
}
printf("\n");
printf("逆序后的数组为:\n");
for(j=4;j>-1;j--)
{
printf("%5d",a[j]); //将逆序后的数组输出
}
return 0;
}
运行结果如下:
【例6.2】用数组来处理求Fibonacci数列的问题。
代码如下:
#include <stdio.h>
int main ()
{
int i;
int a[20]={1,1};
for(i=2;i<20;i++) //对最前面两个数赋初值
a[i]=a[i-1]+a[i-2]; //先后求出后18个数的值
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n"); //控制每行输出5个数然后换行
printf("%12d",a[i]);
}
printf("\n");
return 0;
}
运行结果如下:
【例6.3】冒泡排序
先来一个简单的冒泡排序。
代码如下:
#include <stdio.h>
int main()
{
int i,t,j;
int a[]={98,45,46,32,52};
printf("原始数组是:\n");
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
printf("\n");
for(j=0;j<5;j++)
{
for(i=0;i<5-j;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
printf("输出的数是:\n");
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
return 0;
}
运行结果如下:
【例6.3.1】给出一个学生的部分成绩,求出给出成绩的和。
代码如下:
#include <stdio.h>
void main ()
{
int stu[5][4]={ //定义一个二维数组
{1,91,92,34},
{2,80,82,74},
{3,96,56,94},
{4,25,62,84},
{5,90,94,56},
};
double sum;
printf("学号\tC语言\t高数\t体育\t平均成绩\n"); //在屏幕上显示相应数据
int i,j;
for(i=0;i<=4;i++)
{
sum=0; //定义sum并赋值为0让每一次循环相加的都是从0开始
for(j=0;j<=3;j++)
{
printf("%d\t",stu[i][j]);
sum+=stu[i][j]; //将除了第一列的其他数据相加
}
printf("%.2lf",(sum-stu[i][0])/3); //输出平均值小数点后保留两位有效数字
printf("\n");
}
}
运行结果如下:
【例6.4.1】转置矩阵(一个矩阵的转换)
代码如下:
#include <stdio.h>
int main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i,j,t;
printf("原始数组是:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("转制后的数组是:\n");
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
//交换(a[0][1],a[1][0]),(a[0][2],a[2][0]),(a[0][3],a[3][0])1,5,9是a[i][j]:i=j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
运行结果如下:
【6.4.2】转置矩阵,将一个矩阵转换为另一个矩阵,如图:
代码如下:
#include<stdio.h>
int main ()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]); //处理数组a中的每一个元素
b[j][i]=a[i][j]; //将数组a中的元素赋值给b中的元素
}printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++) //处理赋值后的b数组
printf("%5d",b[i][j]); //输出赋值后的数组
printf("\n");
}
return 0;
}
运行结果如下:
【例6.5】一个3x4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号。
代码如下:
#include <stdio.h>
void main()
{
int i,j,r=0,c=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,48,70}}; //定义数组并赋初值
max=a[0][0]; //先认定a[0][0]最大
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max) //如果某元素大于max,就取代max的原值
{
max=a[i][j];
r=i; //记下此元素的行号
c=j; //记下此元素的列号
}
printf("max=%d\nr=%d\nc=%d\n",max,r,c);
}
运行结果如下:
【例6.6】输出一个已知的字符串。
代码如下:
#include<stdio.h>
void main()
{
char c[16]={'I','\0','l','o','v','e','\0','y','o','u','\0','y','i','j','i','a'};
int i;
for(i=0;i<16;i++)
printf("%c",c[i]);
printf("\n");
}
运行结果如下:
【例6.7】输出一个菱形图
代码如下:
#include<stdio.h>
int main()
{
char diamaond[][5]={{'\0','\0','*'},{'\0','*','\0','*'},{'*','\0','\0','\0','*'},
{'\0','*','\0','*'},{'\0','\0','*'}};
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",diamaond[i][j]);
printf("\n");
}
return 0;
}
运行结果如下:
【6.3】使用字符串处理函数
C函数库中提供了一些用来注射那么热呢处理字符串的函数,使用方便。下面介绍几种常用的函数。
- puts 函数——输出字符串的函数:(puts(字符数组))
- gets 函数——输入字符串的函数(gets(字符数组))
- strcat 函数——字符串连接函数(strcat(字符数组1,字符数组2))
- strcpy 和strncpy 函数——字符串复制函数(strcpy(字符数组1,字符数组2))
- strcmp 函数——字符串比较函数(strcmp(字符串1,字符串2))
- strlen 函数——测字符串长度的函数(strlen(字符数组))
- stlwr 函数——转换为小写的函数(strlwr(字符串))
- strupr 函数——转换为大写的函数(strupr(字符串))
【例6.8】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
代码如下:
#include<stdio.h>
int main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string); //输入一个字符串给字符数组string
for(i=0;(c=string[i])!='\0';i++) //只要字符不是'\0'就继续执行循环
if(c==' ')word=0; //如果是空格字符,使word置0
else if(word==0) //如果不是空格字符且word原值为0
{
word=1; //使word置1
num++; //num累加1,表示增加一个单词
}
printf("There are %d word in this line\n",num);//输出单词数
return 0;
}
运行结果如下:
【例6.9】有三个字符串,要求找出其中“最大”者。
代码如下
#include <stdio.h>
#include <string.h>
int main()
{
char str[3][20];
char string[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("The largest string is:\n%s\n",string);
return 0;
}
运行结果如下: