学习目标:
1. 掌握与数组有关的算法。
2. 掌握二维数组的定义、存储结构、初始化及输入/输出的方法。
3. 掌握字符数组的定义、初始化及输入/输出的方法。
4. 掌握字符串和字符串函数的使用。
学习内容:
1. 编写程序实现:输出二维数组(数值型)每一行的最大值。要求数组的行数、列数、数组的值均由键盘输入。
源代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{ int a[3][3],i,j,max;//数组行列多少看题意
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
scanf("%d",&a[i][j]);}//输入值,中间可用空格隔开每个值
printf("输入数组是%d行,%d列:\n",i,j);
printf("输入二维数组:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)printf("%5d",a[i][j]);//对输入的值按题意的行列数依次打出
printf("\n");}
printf("------输出统计结果------\n");
for(i=0;i<3;i++)
{max=a[i][0];
for(j=0;j<3;j++)
if(a[i][j]>max)
max=a[i][j];
printf("第%d行的最大值%d\n",i+1,max);}
printf("\n");
system("pause");}
![](https://img-blog.csdnimg.cn/fbcd072ea22c420281ea173e5bda6dfb.png)
杨辉三角
杨辉三角最本质的特征是:它的两条斜边都是由数字1组成的,而其余的数则是等于它上面的两个数之和。
![](https://img-blog.csdnimg.cn/1e8576c412b84da39d7fc4e01eb58446.png)
(本题不能打出这种效果,换用另一种模式)
2. 编写程序实现:按杨辉三角的规律打印以下数据(要求只打印出10行)。编译、连接、运行该程序,给出运行结果。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…
(由于本题只打印十行就够,则以下代码为十行的)
源代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{ int a[11][11],i,j;
//因为是几行几列,不能是0行几列或几行0列,初始值从1行1列开始
for(i=1;i<11;i++)
{ a[i][1]=1;a[i][i]=1;//根据杨辉三角的定义,斜边上都是1,则某行1列是1,末行末列也是1}
for(i=3;i<11;i++)//前两行都是1,则从第三行开始一直到结束中间的值都是等于它上面两个数的和
for(j=2;j<i;j++)//行从第3行开始,从第2列开始
a[i][j]=a[i-1][j-1]+a[i-1][j];//该位置的上一行的前一列和本列的值相加
for(i=1;i<11;i++)
{for(j=1;j<=i;j++)
printf("%5d",a[i][j]);//打印出来10行10列的效果图,输出间隔宽度为5的各个值
printf("\n");}
system("pause");
}
![](https://img-blog.csdnimg.cn/02c2dafc4c5147f890a9263508a0148c.png)
3.编写程序实现:输入一行字符串,统计其中大写字母、小写字母、空格、数字及其他字符的个数。编译、连接、运行该程序,给出运行结果。
源程序:#include<stdio.h>
#include<stdlib.h>
#include<string.h> //本题用到字符,则需要相应的申明
void main()
{ char c[108];//字符串的所有值可以定义大些,但是如果没有写完,会被默认为其他字符
gets(c);//用gets()函数输入字符串值
int a[5]={0,0,0,0,0},i=0;
//由题意只用定义数组含有5个值即可,
//分别表示大写字母、小写字母、空格、数字及其他字符的个数
for(i=0;i<107;i++)
{if(c[i]>='A'&&c[i]<='Z') a[0]++;//大写字母个数
else if(c[i]>='a'&&c[i]<='z') a[1]++;//小写字母个数
else if(c[i]==' ') a[2]++;//空格个数
else if(c[i]>='0'&&c[i]<='9') a[3]++;//数字个数
else a[4]++;//其他字符个数
}
printf("大写字母个数=%d\n小写字母个数=%d\n空格个数=%d\n数字个数=%d\n其他字符=%d\n",a[0],a[1],a[2],a[3],a[4]);
system("pause");
}
![](https://img-blog.csdnimg.cn/0941897db0754fe0bf307c9cb56ce1b4.png)
4. 编写程序实现:输入一行字符,统计其中有多少个单词,单词之间用一个或多个空格分隔。编译、连接、运行该程序,给出运行结果。
源程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{char c[30];
gets(c);
int i,j=1; //j记录单词数量,初始值应设为1,为了占一个空格符,避免设为0引起的记词数不对
for(i=0;c[i]!='\0';i++)
if(c[i]==' '&&!(c[i-1]==' ')) j++; //当该位置为空格并且前一个不为空格时,j计数加1
printf("j=%d\n",j);
system("pause");
}
![](https://img-blog.csdnimg.cn/7d0d7cb179a54725ae0636949cb3a79d.png)
5.编写程序实现:将输入的任一字符串中的大写字母替换为小写字母。编译、连接、运行该程序,给出运行结果。
(此题主要思想是一个C语言strlwr()函数,该函数是用于将字符串中的字符转换为小写,其原型为char *strlwr(char *str);若想将字符串转换为大写形式则使用strupr()函数)
源程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{ char c[20];//输入的字符串长度,随自己定,注意在键盘输入时要为连续的,不要分开写字符
printf("-----将大写字符均改为小写字符-----\n");
printf("输入字符串小于等于定义的长度字符串:\n");
scanf("%s",c);
printf("转换后的字符串为:%s\n",strlwr(c));//此处别忘了加%s,(小编就是忘了,调了很多次尴尬)
system("pause");
}
![](https://img-blog.csdnimg.cn/efc721a5ceed4d64817105552a4f710b.png)
(若转换为大写,改为strupr()即可)