今天来讲解一下数组相关的习题,巩固昨天的知识
欢迎加入嵌入式学习群: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、要用用二维数组实现:求一个3*4的矩阵的转置矩阵
(将原来矩阵的行变成新矩阵的列,原来矩阵的列变成新矩阵的行)。
#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青年