日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c 语言学习:基本操作,数组,字符串,指针

發(fā)布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c 语言学习:基本操作,数组,字符串,指针 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 基本操作
    • 判斷閏年平年
    • 倒序輸出五位數(shù)
    • 賦值運算
    • 用條件表達式求三個數(shù)的最大值
    • 測試int,float,char類型在本機所占的字節(jié)數(shù)
    • 單個字符的輸入getchar()
    • 使用*抑制符跳過輸入的某個值
    • 判斷if,else
    • 數(shù)組
      • 選擇排序
      • 冒泡排序法
      • 矩陣轉(zhuǎn)置
    • 字符串操作
      • strcpy()復(fù)制, puts
      • strcat()拼接
      • 求字符串和字符數(shù)組的長度
      • puts,pringf;scanf,gets
      • strlen()長度
      • strcmp()比較
    • 指針
      • 指針的使用
      • 指針與一維數(shù)組 ,實現(xiàn)數(shù)組的倒序排列
      • 指針與字符串
      • 指針與二維數(shù)組
      • 指向數(shù)組

c語言學(xué)習(xí)連接:

  • https://blog.csdn.net/zpj779878443/article/details/78229049
  • http://www.runoob.com/cprogramming/c-function-getchar.html
  • 基本操作

    判斷閏年平年

    // 判斷閏年平年 #include <stdio.h> int main() {int year;printf("請輸入需要判斷的年份:\n");scanf("%d",&year); // 能被4除盡,前提不是整百年;整百年被400除盡if(!(year%4)&&(year%100)||!(year%400)&&!(year%100)){printf("%d年是閏年\n",year);}else {printf("%d年不是閏年\n",year);}return 0; }

    倒序輸出五位數(shù)

    // 倒序輸出五位數(shù) #include <stdio.h> int main() {int a,i;printf("請輸入需要倒序輸出的五位數(shù)\n");scanf("%d",&a);//通過&a獲得存放這個數(shù)據(jù)的內(nèi)存地址的值printf("輸出倒序后的五位數(shù):\n");for(i = 0;i<5;i++)//循環(huán)5次{printf("%d",a%10);a /= 10;} }

    賦值運算

    // 賦值運算 // 括號最大 > ! > 算數(shù)運算符 > 關(guān)系運算符 > 邏輯與或 > ?賦值運算符 #include <stdio.h> int main() {int a,b,c;//普通賦值:a = 2,b= 6,c = 26;a *= b = c = 3; //a = 6,b=3,c=3;printf("a = %d,b = %d,c = %d\n",a,b,c);a += b +=c; //a = 12,b=6,c =3printf("a = %d,b = %d,c = %d\n",a,b,c);a = b == c + 5; //a = 0,b = 6,c = 3printf("a = %d,b = %d,c = %d\n",a,b,c);return 0; }

    用條件表達式求三個數(shù)的最大值

    //用條件表達式求三個數(shù)的最大值 #include <stdio.h> int main() {int a,b,c;int max;printf("請輸入三個數(shù):\n");scanf("%d%d%d",&a,&b,&c);a > b ? (max = a):(max = b);max > c ? (max = max):(max = c);printf("輸出最大值:%d\n",max);return 0; }

    // 逗號表達式的值 #include <stdio.h> int main() {int a,b,c;a = b = c = 1;// 逗號表達式遵從從左到右,賦值取最右邊的值c = (a = 10,b = 10,2 * a + 5,a + a * b + c);//輸出結(jié)果:10,10,111;printf("a = %d,b = %d,c = %d\n",a,b,c);return 0; }

    測試int,float,char類型在本機所占的字節(jié)數(shù)

    // sizeof:通常用來測試某個數(shù)據(jù)類型所占的內(nèi)存空間大小 // 測試的是int,float,char類型在本機所占的字節(jié)數(shù)#include <stdio.h> int main() { int a = 1; float b = 1.1; char c = 'cv'; printf("%d,%d,%d\n",sizeof(a),sizeof(b),sizeof(c)); return 0; }

    單個字符的輸入getchar()

    //單個字符的輸入getchar(),輸出putchar() // getchar用法 #include <stdio.h> int main() { char a,b;a = getchar();b = getchar();printf("輸出存儲的字符\n%c%c\n",a,b); return 0; }

    輸出結(jié)果

    為什么只輸出第一個字符和一個回車,第二個字符還沒輸入就結(jié)束了?
    答:這是因為getchar()可以獲取一個換行符,更改代碼如下:

    #include <stdio.h> int main() { char a,b;a = getchar();getchar();b = getchar();printf("輸出存儲的字符\n%c\n%c\n",a,b); return 0; }

    修改后輸出:

    使用*抑制符跳過輸入的某個值

    //scanf和printf語句 #include <stdio.h> int main() { int a,b,c; //1.正常的scanf的用法 scanf("%d%d%d",&a,&b,&c); printf("a = %d b = %d c = %d\n",a,b,c); //2.使用*抑制符跳過輸入的某個值 scanf("%3d%*2d%2d%3d",&a,&b,&c); printf("a = %d b = %d c = %d\n",a,b,c); //3.最好不要在scanf里面寫逗號和空格之類的,不然輸入 //輸入的時候必須把這些都寫上 scanf("%d,%d,%d",&a,&b,&c); printf("a = %d b = %d c = %d\n",a,b,c); return 0; }

    判斷if,else

    //判斷結(jié)構(gòu)中的雙分支結(jié)構(gòu)-if else語句 //取錢時判斷是否為100的倍數(shù) #include <stdio.h> int main() { int money; printf("請輸入你要取款的金額\n");scanf("%d",&money); if (money%100)printf("輸入金額錯誤,請重新輸入100的倍數(shù)\n"); else printf("出鈔%d\n",money);return 0; }

    數(shù)組

    選擇排序

    // 選擇排序 // 思路,兩個for循環(huán),兩兩比較,如果前者大于后者,交換位置 #include <stdio.h> int main() {int i,j,t,a[4]; //輸入n個數(shù)字,n=4printf("please enter 4 integer\n");for(i=0;i<=3;i++) //輸入數(shù)值scanf("%d",&a[i]); for(i=0;i<=2;i++) //從第一個數(shù)開始,執(zhí)行n-1次for (j=i+1;j<=3;j++) //從第i+1開始比較if(a[i]>a[j]) {t=a[i];a[i]=a[j];a[j]=t;}printf("\n");for(i=0;i<=3;i++)printf("%5d", a[i]); printf("\n");return 0; }

    冒泡排序法

    // 冒泡排序法 //原理:用冒泡排序法的升序排列對任意輸入的 10 個數(shù)按照從小到大的順序進行排序。從最左邊開始,比較相鄰的兩位數(shù)字,將大的那個放在右邊,依次類推,第一輪結(jié)束后最大值就是最右邊的數(shù)字。#include <stdio.h> int main() {int i,j,t,a[5]; printf("input 4 integer\n");for(i=1;i<5;i++)scanf("%d",&a[i]); for(i=1;i<4;i++) //變量i代表比較的趟數(shù)(趟數(shù)=數(shù)字個數(shù)-1)for(j=1;j<5-i;j++) //變最j代表每趟兩兩比較的次數(shù)if(a[j]>a[j+1]){t=a[j]; //利用中間變童實現(xiàn)兩值互換a[j]=a[j+1];a[j+1]=t;}printf("排序后的順序是:\n");for(i=1;i<=4;i++)printf("%5d",a[i]); //將冒泡排序后的順序輸出printf("\n");return 0; }

    矩陣轉(zhuǎn)置

    // 矩陣轉(zhuǎn)置 #include <stdio.h> int main() { int i,j;int a[3][4],b[4][3];printf("please enter an aray element of a:\n");// aray afor(i=0;i<3;i++){for(j=0;j<4;j++)scanf("%d",&a[i][j]); }// transpose of a matrixfor(i=0;i<3;i++){for(j=0;j<4;j++)b[j][i]=a[i][j];}// output aray bprintf("output aray b\n");for(i=0;i<4;i++){for(j=0;j<3;j++)printf("%d",b[i][j]);printf("\n");}return 0; }

    字符串操作

    strcpy()復(fù)制, puts

    // strcpy()復(fù)制 // puts()函數(shù)會在字符串末尾自動的添加換行符,也就是說它會自動的換行, // 而printf()函數(shù)就沒有這項功能 #include <stdio.h> #include<string.h> int main() {char c1[]="hello\0",c2[15];strcpy(c2,c1);puts(c2); // helloprintf("輸出字符數(shù)組c2的長度:%d\n",sizeof(c2)); // 15return 0; }

    strcat()拼接

    // strcat()拼接 #include <stdio.h> #include<string.h> int main() {char c1[]="hello world",c2[10];//除了字符串,這里還可以連接字符數(shù)組strcpy(c2,c1);strcat(c1,"pig"); //直接在c1后面拼接 strcpy(c2,"pig"); // 后面的字符數(shù)組復(fù)制到c2中,c2原來的數(shù)組清零,但是c2長度不變puts(c1);puts(c2);return 0;

    結(jié)果:

    求字符串和字符數(shù)組的長度

    // 求字符串和字符數(shù)組的長度 #include <stdio.h> int main() {int i=0,n=0;char c[]="abcd\0-";while(c[i++]!='\0'){n++;}printf("輸出字符串的長度:%d\n",n);//4, 字符串的結(jié)束標志為\0,之后的字符不屬于該字符串了 n = sizeof(c)/sizeof(char); //字符數(shù)組長度=sizeof(數(shù)組名)/sizeof(數(shù)組原始類型) printf("output the length of c:%d\n",sizeof(c)); //7,sizeof(數(shù)組名)printf("output the length of c:%d\n",sizeof(char)); //1,字符數(shù)組一定有個空字符串\0作為字符串的結(jié)束標志 printf("輸出字符數(shù)組的長度:%d\n",n); //7for(i=0;i<7;i++){printf("%c",c[i]); //abcd}return 0; }

    puts,pringf;scanf,gets

    // 分別用兩種方法演示字符串的輸入輸出 // puts和pringf區(qū)別:puts能自動在末尾輸入一個換行符 // scanf和gets區(qū)別:scanf不支持空格、制表符輸入 #include <stdio.h> int main() {char c1[10],c2[10];scanf("%s",c1); printf("%s\n",c1);/*printf("接著輸入第二組字符串\n");gets(c2);puts(c2);*/return 0; }

    strlen()長度

    // strlen()長度 #include <stdio.h> #include<string.h> int main() {char c[10]="hello";int n;n = strlen(c);//求字符串的長度,不含字符串結(jié)束標志'\0' printf("c長度為:%d\n",n);//n=5printf("c長度為:%d\n",sizeof(c));//值為10 printf("c長度為:%d\n",sizeof(char));//值為1。char 型數(shù)據(jù)占 1 字節(jié)return 0; }

    strcmp()比較

    // strcmp()比較 #include <stdio.h> #include <string.h> /*strcmp(a,b):將a,b兩個字符串從左到右對每個字符,按照ASCII碼的值進行比較, 知道出現(xiàn)不同的或者’\0’,終止比較,如果內(nèi)容一樣,返回0;大于返回正整數(shù),小于 則返回負整數(shù);*/ int main() {// strcmp()函數(shù):從左到右根據(jù)ASCII碼值比較 // 每個字母的大小,直接遇到不同或結(jié)束標志時為止char a[5]="abc", b[5]="abc";int flag; //1. 直接用等號比較的話 //比較的是地址是否一樣if(a==b) printf("a==b\n");else if (a!=b) printf("a!=b\n"); //2. 用strcmp()比較flag = strcmp(a,b);if(flag== 0) printf("a與b內(nèi)容相同\n");else if (flag>0) printf("a>b\n");else if (flag<0) printf("a<b\n");return 0; }**要點小結(jié):** 1.數(shù)組是用來 存儲數(shù)據(jù)類型相同 的變量的 有序集合,可以 通過下標訪問 數(shù)組中的 元素; 2.一維數(shù)組 的定義,初始化與引用; 3.二位數(shù)組 用于存儲表格數(shù)據(jù),定義,初始化與引用; 4.區(qū)分字符串與字符數(shù)組的區(qū)別:字符串是要用字符數(shù)組存儲,最后要加上一個‘\0; 5.字符數(shù)組的長度至少比字符串多16.使用sizeof(數(shù)組名)/sizeof(數(shù)組元素的數(shù)據(jù)類型) = 字符數(shù)組長度 7.字符數(shù)組直接 == 比較的是 地址 8.使用string.h提供的字符串操作函數(shù): strcpy(a,b):將b的字符串復(fù)制到a中,會覆蓋 strcat(a,b):將字符串b的內(nèi)容拼接到a的后面 strcmp(a,b):將a,b兩個字符串從左到右對每個字符,按照ASCII碼的值進行比較, 知道出現(xiàn)不同的或者’\0’,終止比較,如果內(nèi)容一樣,返回0;大于返回正整數(shù),小于 則返回負整數(shù); strlen(a):返回字符串的長度,不包括字符串結(jié)束的標記’\0

    指針

  • 指針:是一個地址
  • 指針變量:用來存放另一變量的地址
  • *:表示“指向
  • 如果定義變量 i 為指針變量,那么 *i 就表示指針變量i里面存放的地址是所指向的存儲單元里面的數(shù)據(jù)。
  • int*i;*表示這個變量是一個指針變量,而int表示這個變量只能存放 int 型變量的地址。
  • 指針的使用

    // 指針的使用 #include <stdio.h>int main() {int a=10,b;int *p,*q;//指針變量的定義 // 取得a變量的地址賦值給pp = &a; b = *p+3;//通過指針變量訪問變量 printf("%d\n",p);//p是一個地址:6487616 printf("%d\n",b);//b=13 // 如果p指向的內(nèi)存中的數(shù)據(jù)+1,a會等于多少?*p = *p+1;printf("a = %d,b = %d\n",a,b);//a = 11,b = 13 // 我們把p的地址賦給q,然后對q+1,觀察a的變化q = p;*q = *q+1; printf("a = %d,b = %d\n",a,b);//a = 12,b = 13 return 0; }

    指針與一維數(shù)組 ,實現(xiàn)數(shù)組的倒序排列

    // 指針與一維數(shù)組 #include <stdio.h>int main() {int a[10]={1,2,3,4,5,6,7,8,9,10};int *p=a,*q=&a[9],*c=&a[3]; int i,num;// 數(shù)組名本身就是一個指針(地址),它代表了數(shù)組的首地址,數(shù)組在內(nèi)存中連續(xù)存放printf("%p %p %p %p\n",a,p,&a[0],q); //%p 打印地址,三者地址相同 printf("*p=%d,*q=%d,*c=%d\n",*p,*q,*c); //*p=1,*q=10,*c=4 // 循環(huán)的目的是實現(xiàn)數(shù)組的倒序排列 while(p<=q){num = *q;*q = *p;*p = num; // 將指針p后移一個單位 // 將陣陣q后移一個單位p++;q--; } printf("*p=%d *q=%d\n",*p,*q) ;// *p=5 *q=6 printf("輸出交換后的數(shù)組:\n");for(i=0;i<10;i++){printf("%d",a[i]);}printf("\n"); //輸出結(jié)果:10987654321 return 0; }

    指針與字符串

    // 指針與字符串 // 雙引號表示字符串,單引號表示字符 #include <stdio.h>int main() {int num = 0; //定義方式一:char str1[]= "How do you do!"; printf("%s\n",str1);// How do you do! printf("%p\n",str1);// str1指向了字符串的第一個字符的地址 //定義方式二:char *str = "How do you do!"; printf("%s\n",str); // How do you do! printf("%d\n",*str); // 指用字符指針向了字符串的第一個字符H,值為十進制的72 for(;*str;str++) // 第一個分號前面沒有寫循環(huán)初始狀態(tài),表明無條件開始循環(huán)。 // *str意思是*str!=0執(zhí)行,*str==0停止循環(huán) // 執(zhí)行一次循環(huán)體后, 執(zhí)行步長運算部分: p++{if(*str == 'o') num++;}printf("*str = %d\n",*str);// *str=0 printf("字符串中o出現(xiàn)了%d次\n",num);return 0; }

    指針與二維數(shù)組

    // 指針與二維數(shù)組 #include <stdio.h> int main() {int a[2][2] = {{1,2},{3,4}};int (*p)[2],i,j; // 定義一個二維指針 p = &(a[0]);printf("%d",(*p)[0]); // 1return 0; }

    指向數(shù)組

    // 指向數(shù)組 #include <stdio.h> int main() {int i,j;int a[2][3];//定義一個行指針,并指向數(shù)組的首地址int (*p)[3];// 該語句是定義一個數(shù)組指針,指向含4個元素的一維數(shù)組// int (*p)[n]; ()優(yōu)先級高,首先說明p是一個指針,指向一個整型的一維數(shù)組,這個一維數(shù)組的長度是n,// 也可以說是p的步長。也就是說執(zhí)行p+1時,p要跨過n個整型數(shù)據(jù)的長度p = &(a[0]);printf("請輸入二維數(shù)組中的數(shù)組元素:\n");for(i = 0;i < 2;i++) {for(j = 0;j < 3;j++){scanf("%d",p[i]+j);}}printf("輸出二維數(shù)組中的數(shù)據(jù):\n");for(i = 0;i < 2;i++) {for(j = 0;j < 3;j++){printf("%4d",*(p[i]+j));}printf("\n");}return 0; }

    總結(jié)

    以上是生活随笔為你收集整理的c 语言学习:基本操作,数组,字符串,指针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。