思维导图
作业
1、输入一个字符串,计算空格的个数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char a[20]="";//初始化
printf("输入一个字符串:");
gets(a);
int len=strlen(a);
printf("字符串长度是:%d\n",len);
int i=0,j=0;
int count=0;
while(a[i]!='\0')
{
if(a[i]==' ')
count++;
i++;
}
printf("空格个数是:%d\n",count);
return 0;
}
运行结果
2、输入一个字符串,计算单词的个数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char a[20]="";
printf("输入一行字符串:\n");
gets(a);
int i=0,j=0,count=0;
int word=0; //标记位,标记是否在单词内
while(a[i]!='\0')
{
if(a[i]==' ') //检测到空格
{
word=0; //标记位为0
}else if(word==0) // 不是空格且标记位为0
{
word=1; //设置标记位为1,在单词内
count++; //计单词数
}
i++;
}
printf("单词个数是%d\n",count);
return 0;
}
或者
运行结果
3、矩阵相乘:
前提条件A矩阵的列数需要和B矩阵的行数相同
原理
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a,b,c,d; //输入矩阵
printf("数组arr1的行列分别是:");
scanf("%d%d,",&a,&b);
printf("数组arr2的行列分别是:");
scanf("%d%d,",&c,&d);
if(b!=c)
printf("error\n");
int arr1[a][b];
int arr2[c][d];
int arr3[a][d];
printf("输入数组arr1的元素\n");
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
scanf("%d",&arr1[i][j]);
}
}
printf("输入数组arr2的元素\n");
for(int i=0;i<c;i++)
{
for(int j=0;j<d;j++)
{
scanf("%d",&arr2[i][j]);
}
}
for(int i=0;i<a;i++) //矩阵相乘
{
for(int j=0;j<d;j++)
{
int sum=0;
for(int k=0;k<b;k++)
{
sum+=arr1[i][k]*arr2[k][j];
}
arr3[i][j]=sum;
}
}
printf("相乘后得到;\n"); //循环输出
for(int i=0;i<a;i++)
{
for(int j=0;j<d;j++)
{
printf("%d ",arr3[i][j]);
}
puts("");
}
return 0;
}
运行结果
4、定义有参无返函数实现杨慧三角
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Yanghui(int n) //函数在主函数前 可不加分号
{
int a[n][n];
int i=0,j=0;
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
if(j==0||i==j)
{
a[i][j]=1;
}else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%-4d",a[i][j]);
}
puts("");
}
}
int main(int argc, const char *argv[])
{
int n;
printf("请输入杨辉三角层数:");
scanf("%d",&n);
Yanghui(n);
return 0;
}
运行结果
5、定义有参无返函数实现二维数组转置?
参数:二维数组,行,列
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Rev(int line,int row,int a[line][row]);
int main(int argc, const char *argv[])
{
int a[][4]={1,2,3,4,12,12,13,13,15,15,15,15};
int line=sizeof(a)/sizeof(a[0]);
int row=sizeof(a[0])/sizeof(a[0][0]);
Rev(line,row,a);
return 0;
}
void Rev(int line,int row,int a[line][row])
{
int b[row][line];
for(int i=0;i<line;i++)
{
for(int j=0;j<row;j++)
{
b[j][i]=a[i][j];
}
}
for(int i=0;i<row;i++)
{
for(int j=0;j<line;j++)
{
printf("%-3d",b[i][j]);
}
puts("");
}
}
运行结果
6、输入一个字符串实现单词的逆置
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char a[30]="";
printf("请输入字符串:\n");
gets(a);
int i=0,j=strlen(a)-1;
while(i<j) //交换位置
{
char t=a[i];
a[i]=a[j];
a[j]=t;
i++;
j--;
}
i=0,j=0;
while(a[i]!='\0') //外层循环每一个字符
{
while(a[j]!=' '&&a[j]!='\0') //找到空格
{
j++;
}
int k=j-1;
while(i<k) //空格前的字符进行逆置
{
char t=a[k];a[k]=a[i];a[i]=t;
i++;
k--;
}
while(a[j]==' ') //跳过空格
{
j++;
}
i=j;
}
puts(a);
return 0;
}
运行结果
7、输入n个字符串每个字符串20字节,并实现输出
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int n;
printf("请输入字符串个数:");
scanf("%d",&n);
char a[n][20];
getchar();
for(int i=0;i<n;i++)
{
printf("请输入第%d个字符串:",i+1);
gets(a[i]);
//scanf("%s",a[i]);
}
for(int i=0;i<n;i++)
{
printf("第%d个字符串是:%s\n",i+1,a[i]);
}
return 0;
}
运行结果