今天来讲解一下数组相关的习题,巩固昨天的知识
欢迎加入嵌入式学习群:559601187
1.对于二维数组首地址偏移。
二维数组数组名偏移一个数,地址偏移一行,针对这个问题后面会做一个详细的讲解
#include <stdio.h>
int main()
{
int str[3][3]={1,2,3,4,5,6,7,8,9};
int i=0,j=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("str[%d][%d]=%p\n",i,j,&str[i][j]);
}
}
printf("%p\n",(str+1)[0]);//4地址--偏移一行
printf("%d\n",(str[0]+1)[0]);//数字2--偏移一个元素
return 0;
}
2、利用数组实现斐波那契数列的前30项,并要求格式化对齐,每行值输出5个数
(斐波那契数列:1 1 2 3 5 8 13 21……)
#include <stdio.h>
int main()
{
int str[30]={1,1},i=0,sum=0;
for(i=2;i<30;i++)
{
str[i]=str[i-1]+str[i-2];
}
for(i=0;i<30;i++)
{
printf("%-8d",str[i]);
if((i+1)%5==0)
{
printf("\n");
}
}
return 0;
}
3、要用用二维数组实现:求一个34的矩阵的转置矩阵
(将原来矩阵的行变成新矩阵的列,原来矩阵的列变成新矩阵的行)。*
#include <stdio.h>
int main()
{
int str[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},i=0,j=0;
int str2[4][3]={0};
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
str2[j][i]=str[i][j];
}
}
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%-4d",str2[i][j]);
}
printf("\n");
}
return 0;
}
4、输入一行字符串,统计其中大写字母的个数,并将所有的大写字母转化成小写字母后输出。scanf(“%s”,数组名)
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]={0};
int i=0,len=0,count=0;
scanf("%s",str);
len=strlen(str);
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
count++;
str[i]+=32;
}
}
printf("count=%d,%s\n",count,str);
return 0;
}
5、输入一个字符串,判断是否是回文。(回文:这个字符串顺读和反读是一样的。
如“abcba”和”123321”都是回文
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]={0};
int i=0,len=0;
scanf("%s",str);
len=strlen(str);
for(i=0;i<len/2;i++)
{
if(str[i]==str[len-i-1])
{
//count++;
break;
}
}
if(i==len/2)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
6、按以下输出格式打印杨辉三角的前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 <string.h>
int main()
{
int str[10][10]={0};
int i=0,j=0;
for(i=0;i<10;i++)
{
str[i][0]=1;
str[i][i]=1;
}
for(i=2;i<10;i++)
{
for(j=1;j<10;j++)
{
str[i][j]=str[i-1][j]+str[i-1][j-1];
}
}
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%-5d",str[i][j]);
}
printf("\n");
}
return 0;
}
9、假设有10个数已经按照从小到大的顺序存放在数组中,要求向从键盘输入一个整数,
插入这10个数中,使数组仍是从小到大的顺序排列
#include <stdio.h>
#include <string.h>
int main()
{
int str[11]={1,2,3,4,5,6,7,8,9,10};
int i=0,j=0,num=0,temp=0;
scanf("%d",&num);
for(i=0;i<10;i++)
{
if(num<str[i])
{
temp=i;
break;
}
}
if(num>str[9])
{
temp=10;
}
for(i=10;i>temp;i--)
{
str[i]=str[i-1];
}
str[temp]=num;
for(i=0;i<11;i++)
{
printf("%d\n",str[i]);
}
return 0;
}
10、输入10进制数转换为二进制进行输出
#include <stdio.h>
#include <string.h>
int main()
{
int str[100]={0};
int count=0,num=0,i=0;
scanf("%d",&num);
while(num)
{
str[count++]=num%2;
num/=2;
}
for(i=count-1;i>=0;i--)
{
printf("%-2d",str[i]);
}
printf("\n");
return 0;
}
本文章仅供学习交流用禁止用作商业用途,文中内容来水枂编辑,如需转载请告知,谢谢合作
微信公众号:zhjj0729
微博:文艺to青年
网友评论