精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言_二維數組與一維指針

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-05-21 09:11 ? 次閱讀

知識點1:字符串

字符串:本身屬于字符數組、字符串結尾有’\0’。

1.1字符串作業

1.從鍵盤上輸入一串字符串,計算字符串里的空格、大寫字母、小寫字母、數字個數

2.字符串比較:從鍵盤上錄入2個字符串,判斷是否相等。

#include

int main()

{

char str1[100];

char str2[100];

int i=0;

/*1. 錄入數據*/

printf("輸入字符串1:");

scanf("%s",str1);

printf("輸入字符串2:");

scanf("%s",str2);

/*2. 比較字符串*/

while(str1[i]!='\0'||str2[i]!='\0')

{

if(str1[i]!=str2[i])break;

i++;

}

if(str1[i]=='\0'&&str2[i]=='\0')

{

printf("字符串相等.\n");

}

else

{

printf("字符串不相等.\n");

}

return 0;

}

3.字符串刪除:從鍵盤上錄入一個字符串,刪除字符串里指定的單詞,輸出結果。

比如:原字符串”akjbcds123dfjvbf123fdvbfd123”

刪除單詞:“123”

輸出的結果:”akjbcdsdfjvbffdvbfd”

#include

#include

int main()

{

char str1[100];

char str2[100];

int i=0,j=0;

int str2_len=0;

/*1. 錄入數據*/

printf("輸入源字符串:");

scanf("%s",str1);

printf("輸入要刪除的字符串:");

scanf("%s",str2);

/*2. 計算要刪除字符串的長度*/

str2_len=strlen(str2);

/*3. 查找字符串*/

for(i=0;str1[i]!='\0';i++)

{

//比較字符串

for(j=0;str2[j]!='\0';j++)

{

if(str1[i+j]!=str2[j])break;

}

if(str2[j]=='\0')

{

//4. 刪除字符串---后面向前面覆蓋

for(j=i;str1[j]!='\0';j++)

{

str1[j]=str1[j+str2_len];

}

str1[j]='\0';

i--;

}

}

//5. 輸出結果

printf("str1=%s\n",str1);

return 0;

}

4.字符串查找:從鍵盤上錄入一個字符串,查找字符串里有幾個特定的單詞。再輸出結果。

比如:原字符串”akjbcds123dfjvbf123fdvbfd123”

查找的單詞:“123”

輸出結果:3

5.字符串排序:從鍵盤上錄入一個字符串,按照小到大的順序排序。

#include

#include

int main()

{

char str1[100];

int len=0;

int i,j;

int tmp;

printf("輸入要排序的字符串:");

scanf("%s",str1);

len=strlen(str1);

//開始排序

for(i=0;i;i++)<>

{

for(j=0;j;j++)<>

{

if(str1[j]>str1[j+1])

{

tmp=str1[j];

str1[j]=str1[j+1];

str1[j+1]=tmp;

}

}

}

printf("排序之后的字符串:%s\n",str1);

return 0;

}

6.字符串的插入:從鍵盤上錄入一個字符串,從指定位置插入一個字符串,再輸出結果。

比如:原字符串“1234567890”

(1).從指定位置插入新的單詞。 比如 從第2個下標插入一個“ABC”字符串。

結果:“123ABC4567890”

#include

#include

int main()

{

char str1[100];

char str2[100];

int addr=0;

int str1_len;

int str2_len;

int i;

/*1. 錄入數據*/

printf("錄入源字符串:");

scanf("%s",str1);

printf("錄入要插入的字符串:");

scanf("%s",str2);

printf("輸入要插入的下標位置:");

scanf("%d",&addr);

str1_len=strlen(str1); //3

str2_len=strlen(str2); //2

/*2. 完成插入*/

//完成數據移動

for(i=str1_len-1;i>=addr;i--)

{

str1[i+str2_len]=str1[i];

}

//數據替換

for(i=0;i;i++)<>

{

str1[i+addr]=str2[i];

}

str1[str1_len+str2_len]='\0';

/*3. 輸出數據*/

printf("str1=%s\n",str1);

return 0;

}

(2).從指定單詞后面插入新的單詞。 比如 從”123”這個單詞后插入一個“ABC”字符串。

結果:“123ABC4567890”

7.字符串替換: 從鍵盤上錄入一個字符串,將指定單詞替換成想要的單詞。

比如:原字符串“123jfvfdj123dkfvbfdvdf”

想要將“123”替換成“888”或者“8888”或者“88”

#include

#include

int main()

{

char str1[100];

char str2[100];

char str3[100];

int str1_len=0;

int str2_len=0;

int str3_len=0;

int i,j;

int cnt=0;

/*1.準備數據*/

printf("輸入源字符串:");

scanf("%s",str1);

printf("輸入查找的字符串:");

scanf("%s",str2);

printf("輸入替換的字符串:");

scanf("%s",str3);

/*2. 計算長度*/

str1_len=strlen(str1);

str2_len=strlen(str2);

str3_len=strlen(str3);

/*3. 字符串替換*/

for(i=0;i;i++)<>

{

//查找字符串

for(j=0;j;j++)<>

{

if(str1[i+j]!=str2[j])break;

}

//如果查找成功就進行替換

if(j==str2_len)

{

//總長度變短了

if(str2_len>str3_len)

{

cnt=str2_len-str3_len; //差值

//完成數據向前移動--覆蓋

for(j=i+str2_len-cnt;j;j++)<>

{

str1[j]=str1[j+cnt];

}

str1[str1_len-cnt]='\0';

}

//總長度變長了

else if(str2_len)<>

{

cnt=str3_len-str2_len; //差值

//完成數據向后移動

for(j=str1_len;j>=i+str2_len;j--)

{

str1[j+cnt]=str1[j];

}

str1[str1_len+cnt]='\0';

}

//替換

for(j=0;j;j++)<>

{

str1[i+j]=str3[j];

}

//重新計算長度

str1_len=strlen(str1);

}

}

/*4. 完成字符串打印*/

printf("str1=%s\n",str1);

return 0;

}

8.從鍵盤上輸入一個整數:將整數轉為字符串輸出。

比如:int a; scanf(“%d”,&a);使用字符串形式打印出a的值。

#include

#include

int main()

{

char str[100];

char str1[100];

int data=0;

int j=0,i=0;

printf("從鍵盤上輸入整數:");

scanf("%d",&data);

// 123 -->'1' '2' '3'

while(data)

{

str[i++]=data%10+'0';

data=data/10;

}

for(j=0;j;j++)<>

{

str1[j]=str[i-j-1];

}

str1[j]='\0';

printf("str1=%s\n",str1);

return 0;

}

9.從鍵盤上輸入一個字符串,轉為整數輸出。

#include

#include

int main()

{

//"123"

char str[100];

int data=0;

int i=0;

printf("從鍵盤上輸入字符串:");

scanf("%s",str);

while(str[i]!='\0')

{

data*=10;//data=0 data=10 data=120

data+=str[i]-'0';//data=1 data=12 data=123

i++;

}

printf("data=%d\n",data);

return 0;

}

10.回文字符串。 “121”,“1221”

11.將第8題和第9題轉成浮點數。

12.將10進制數據轉為16進制輸出。 比如: 3 --->0x3

13.將10進制數據轉為二進制輸出。

知識點2:字符串到整數-浮點數的格式化轉換

//輸出的都是字符串

#include

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

int sprintf(char *str, const char *format, ...); //格式化轉換函數

int snprintf(char *str, size_t size, const char *format, ...);

#include

#include

int main()

{

char str[100];

sprintf(str,"%s%s%s%d%c%f","123","456","789",666,'A',123.456);

printf("str=%s\n",str);

return 0;

}

//輸入的是字符串

#include

int scanf(const char *format, ...);

int fscanf(FILE *stream, const char *format, ...);

int sscanf(const char *str, const char *format, ...);

#include

#include

int main()

{

float a;

char str[]="123.456";

sscanf(str,"%f",&a); //"123"

printf("a=%f\n",a);

return 0;

}

//字符串轉整數

#include

int atoi(const char *nptr);

long atol(const char *nptr);

long long atoll(const char *nptr);

long long atoq(const char *nptr);

知識點3:多維數組

一維數組和二維數組使用頻率較高。

一維數組: 定義的時候只有一個下標。 char buff[100];

二維數組: 定義的時候只有二個下標。 char buff[10][100];

二維數組可以看成一個矩陣。char buff[行][列];

3.1二維數組特點:

  1. 二維數組定義的時候,如果賦了初始值,行可以省略掉,列不可用省略。

int main()

{

char data1[3][3]={{1,2,3},{4,5,6},{7,8,9}};

char data2[3][3]=

{

{1,2,3},

{4,5,6},

{7,8,9}

};

//第1個[]指定有多少個一維數組,第2個指定1維數組有多大

char data3[][5]=

{

1,2,3,

4,5,6,

7,8,9

};

return 0;

}

3.2.二維數組如何訪問成員?

#include

#include

int main()

{

char data[3][3]=

{

{1,2,3},

{4,5,6},

{7,8,9}

};

printf("第1行的第2列:%d\n",data[1][2]);

char str[][100]={"123","456","789","中國","嵌入式"};

printf("%s\n",str[3]);// str[3]== char str[]="中國";

return 0;

}

3.3 作業

定義一個int類型的二維數組,比如:[400][400],從鍵盤上向這個二維數組錄入數據,計算二維數組交叉數據之和。 ---計算矩陣交叉—對角線數據的和。

#include

#include

int main()

{

int data[4][4];

int i,j;

//從鍵盤上錄入數據

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

scanf("%d",&data[i][j]);

}

}

return 0;

}

知識點4:一行代碼上字符串太長該如何定義?

#include

#include

int main()

{

//第一種方法:

char str1[]="1234567890123456789012 \

34567890123456789012345678901234567 \

89012345678901234567890123456789012 \

345678901234567890";

//第二種方法:

char str2[]="1234567890"

"123456789012345678901234"

"567890123456789012345678"

"9012345678901234567890";

printf("str1=%s\n",str1);

printf("str2=%s\n",str2);

return 0;

}

知識點5:一維指針

5.1指針的概念

指針就是地址C語言里指針可以直接訪問地址,計算機的CPU、外設硬件都是依靠地址操作的。

指針變量如何定義?

#include

#include

int main()

{

char *p1; //定義一個char類型的指針變量

int *p2; //定義一個int類型的指針變量

//int類型的指針變量:存放地址數據。

int data=123; //定義一個int類型的變量

//int類型的變量:存儲整數數據。

return 0;

}

指針如何使用?

#include

#include

int main()

{

// &data 取地址 a&b按位與 a&&b 并且

// int *p定義一個int類型的指針

// *p 取出指針指向空間中的數據--取數據

// a*b a和b乘法

int *p; //指針變量本身就是存放地址的

int data=123;

//p=data; //錯誤:data本身只是一個變量標識符,不是地址

p=&data; //將data的地址賦值給指針p

printf("*p=%d\n",*p); //取出指針p指向空間中的數據

*p=666; //給指針指向的空間賦值

printf("data=%d\n",data);

return 0;

}

什么是野指針?

野指針就是本身沒有合法地址空間---非法指針。

野指針會導致的常見錯誤:段錯誤。

下面代碼就會導致段錯誤:

#include

#include

int main()

{

int *p;//指針只能存放地址

*p=123;

printf("*p=%d\n",*p);

return 0;

}

指針本身占的空間是多少?

所有指針類型都占4個字節空間。和類型沒有關系。

#include

#include

int main()

{

int *int_p;//指針只能存放地址

int int_a;

char *char_p;//指針只能存放地址

char char_a;

float *float_p;//指針只能存放地址

float float_a;

double *double_p;//指針只能存放地址

double double_a;

printf("int_a=%d\n",sizeof(int_a));//4

printf("int_p=%d\n",sizeof(int_p));//4

printf("char_a=%d\n",sizeof(char_a));

printf("char_p=%d\n",sizeof(char_p));

printf("float_a=%d\n",sizeof(float_a));

printf("float_p=%d\n",sizeof(float_p));

printf("double_a=%d\n",sizeof(double_a));

printf("double_p=%d\n",sizeof(double_p));

return 0;

}

5.2指針訪問數組成員

訪問一維數組成員的方式有哪些?

#include

#include

int main()

{

int a[]={1,2,3,4,5,6,7,8,9,0};

int *p;

p=a;

printf("下標4的值:%d\n",a[4]); //5

printf("下標4的值:%d\n",*(a+4)); //5

printf("下標4的值:%d\n",*(p+4)); //5

return 0;

}

指針訪問一維數據常用的操作方式:字符串

#include

#include

int main()

{

char str[]="1234567890";

char *p=str;

int len=0;

printf("p=%s,str=%s\n",p,str);

//計算字符串的長度

while(*p++!='\0')

{

len++;

}

printf("len=%d\n",len);

return 0;

}

指針自增和自減?++和—運算符

#include

#include

int main()

{

int a[]={1,2,3,4,5,6,7,8,9,0};

int *p=a;

printf("%d\n",*p); //1

printf("%d\n",*p++); //1

printf("%d\n",*p); //2

printf("%d\n",*(p+3));//5

printf("%d\n",*p);//2

printf("%d\n",*(++p));//3

printf("%d\n",*p);//3

printf("%d\n",*p--);//3

printf("%d\n",*p);//2

return 0;

}

指針自增自減偏移字節是多少? 與指針本身的類型有關系。

#include

#include

int main()

{

/*

int a[]={1,2,3,4,5,6,7,8,9,0};

int *p=a;

printf("偏移之前的地址:p=%#x\n",p);

*(p++);

printf("%d\n",*p); //2

printf("偏移之后的地址:p=%#x\n",p);

*/

char a[]={1,2,3,4,5,6,7,8,9,0};

char *p=a;

printf("偏移之前的地址:p=%#x\n",p);

*(p++);

printf("%d\n",*p); //2

printf("偏移之后的地址:p=%#x\n",p);

return 0;

}

數組本身可以當做指針使用嗎?不可以

指針特點:自增、自減、可以改變指向。

#include

#include

int main()

{

int a[]={1,2,3,4,5}; //*(a+3)

int b[]={11,12,13,14,15};

//下面3行代碼是錯誤的

a--;

a++;

a=b;

return 0;

}

指針可以當做數組使用嗎? 可以

數組特點:可以通過下標訪問數組成員。

#include

#include

int main()

{

int a[]={1,2,3,4,5};

int *p=a;

printf("%d\n",a[0]);

printf("%d\n",p[0]); //*p

return 0;

}

5.3數組指針

數組指針可以指向一個一維數組,行指針也叫一維數組指針

定義語法: char (*p)[5];該指針指向一個二維數組里的一個一維數組地址,一維數組的成員是5個字節。

二維數組的定義方法: char a[10][5];

#include

#include

int main()

{

int (*p)[5]; //定義一個一維數組指針---行指針

int a[2][5]=

{

{1,2,3,4,5},

{6,7,8,9,10}

};

p=a; //將a地址給p指針

printf("%d\n",p[0][2]);

p++; //加一個一維數組的大小

printf("%d\n",p[0][2]);

return 0;

}

5.4指針數組

指針數組: 表示該數組成員可以存放指針。

指針數組定義語法:int *p[5];表示定義一個int數組,該數組的類型可以存放5個int類型的指針變量(地址)。

#include

#include

int main()

{

int a,b,c;

int *p[3]; //一次定義3個int類型的指針變量

//存放地址

p[0]=&a;

p[1]=&b;

p[2]=&c;

//對空間賦值

*p[0]=123;

*p[1]=456;

*p[2]=789;

//取出數據

printf("%d\n",*p[0]);

printf("%d\n",*p[1]);

printf("%d\n",*p[2]);

return 0;

}

#include

#include

int main()

{

char a[][100]={"小明","小白","小李"};

char *p[]={"小明","小白","小李"};

printf("%s\n",a[0]);

printf("%s\n",p[0]);

return 0;

}

5.5字符串查找函數

#include

char *strstr(const char *源字符串, const char *要查找的字符串);

函數功能:就是在源字符串里查找指定的字符串,查找到之后就返回該字符串的地址。

#include

#include

int main()

{

char str[]="123abc4567890";

char *p;

p=strstr(str,"abc");

printf("%s\n",p);

return 0;

}

5.6指針類型常見的初始化值:NULL

#include

#include

int main()

{

char *p=NULL; // (void*)0 == NULL

printf("%#x\n",p);

if(p!=NULL)

{

//判斷指針是否可以使用

}

return 0;

}

5.7作業:字符串解析

1.練習上午學習的新知識。

2.解析GPS的數據。GPS芯片接收到衛星的信號之后,會通過字符串的形式將解析的數據輸出。

#include

#include

int main()

{

char gps_data[]=

{

"$GNGGA,114955.000,2842.4158,N,11549.5439,E,1,05,3.8,54.8,M,0.0,M,,*4F"

"$GNGLL,2842.4158,N,11549.5439,E,114955.000,A,A*4D"

"$GPGSA,A,3,10,31,18,,,,,,,,,,5.7,3.8,4.2*37"

"$BDGSA,A,3,07,10,,,,,,,,,,,5.7,3.8,4.2*2A"

"$GPGSV,3,1,10,10,49,184,42,12,16,039,,14,54,341,,18,22,165,23*7B"

"$GPGSV,3,2,10,22,11,318,,25,51,055,,26,24,205,,29,13,110,*7C"

"$GPGSV,3,3,10,31,50,287,36,32,66,018,*7F"

"$BDGSV,1,1,04,03,,,07,05,,,29,07,79,246,33,10,52,232,19*62"

"$GNRMC,114955.000,A,2842.4158,N,11549.5439,E,0.00,44.25,061117,,,A*4D"

"$GNVTG,44.25,T,,M,0.00,N,0.00,K,A*14"

"$GNZDA,114955.000,06,11,2017,00,00*47"

"$GPTXT,01,01,01,ANTENNA OK*35"

};

return 0;

}

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • 字符串
    +關注

    關注

    1

    文章

    577

    瀏覽量

    20488
  • 數組
    +關注

    關注

    1

    文章

    416

    瀏覽量

    25913
收藏 人收藏

    評論

    相關推薦

    二維數組指針的問題?

    比如定義二維數組int a[3][5], 我們知道a是這個二維數組的首地址,a[0]是第
    發表于 05-09 11:28

    C語言二維數組的定義和引用

    今天用二維數組時不知道怎么用了,網上查了下,摘到這里來了。數組只有個下標,稱為
    發表于 07-12 08:55

    C51語言指針、結構、聯合和枚舉

     指針C51語言的精華也是難點。本章主要介紹指針的概念、定義指針的方法,介紹指向
    發表于 06-12 23:47 ?112次下載

    C語言教程之使用二維數組保存數據問題

    C語言教程之使用二維數組保存數據問題,很好的C語言資料,快來學習吧。
    發表于 04-25 15:03 ?0次下載

    C語言教程之求二維數組對角線之和

    C語言教程之求二維數組對角線之和,很好的C語言資料,快來學習吧。
    發表于 04-25 15:21 ?0次下載

    c語言二維數組定義及其規則詳解

    數組只有個下標,,稱為數組,其
    發表于 11-16 08:49 ?2.2w次閱讀
    <b class='flag-5'>c</b><b class='flag-5'>語言</b><b class='flag-5'>二維</b><b class='flag-5'>數組</b>定義及其規則詳解

    c語言二維數組初始化及使用

    ,就組成了二維數組。當然,前提是各元素類型必須相同。根據這樣的分析,二維數組也可以分解為多個
    發表于 11-16 09:15 ?2w次閱讀
    <b class='flag-5'>c</b><b class='flag-5'>語言</b><b class='flag-5'>二維</b><b class='flag-5'>數組</b>初始化及使用

    C語言入門教學之數組資料總結免費下載

    本文檔的主要內容詳細介紹的是C語言入門教學之數組資料總結免費下載主要內容包括了:1 數組的定
    發表于 10-23 17:53 ?5次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>入門教學之<b class='flag-5'>數組</b>資料總結免費下載

    C語言程序設計教程之二維數組如何應用二維數組的資料概述

    本文檔的主要內容詳細介紹的是C語言程序設計教程之二維數組如何應用二維數組的資料概述主要內容包括了
    發表于 10-26 16:48 ?3次下載

    C語言二維數組演示實例及電路圖免費下載

     1、C語言允許使用多維數組,最簡單的多維數組二維數組,定義多維
    發表于 08-20 17:31 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>二維</b><b class='flag-5'>數組</b>演示實例及電路圖免費下載

    二維數組指針指向錯誤應該如何糾正

    本文檔的主要內容詳細介紹的是二維數組指針指向錯誤應該如何糾正。
    發表于 12-13 16:01 ?12次下載
    <b class='flag-5'>二維</b><b class='flag-5'>數組</b>的<b class='flag-5'>指針</b>指向錯誤應該如何糾正

    二維數組數組指針以及指針數組

    二維數組數組指針以及指針數組
    的頭像 發表于 08-16 09:02 ?2587次閱讀

    C語言二維數組介紹

    定義個兩行三列的二維數組,總共有6個元素
    的頭像 發表于 09-11 14:51 ?867次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>—<b class='flag-5'>二維</b><b class='flag-5'>數組</b>介紹

    數組轉為二維python

    數組轉為二維數組個常見的問題,特別是在處理數據時。
    的頭像 發表于 11-23 14:54 ?5268次閱讀

    指針數組二維數組有沒有區別

    指針數組二維數組有沒有區別?比如這樣的兩個代碼。 int main(){ char *s1[] = { "hello", "world", "total" }; char s2[][
    的頭像 發表于 11-24 11:12 ?83次閱讀