今天來講解一下數組相關的習題,鞏固昨天的知識
歡迎加入嵌入式學習群: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青年