-
C第五天
老師早上先給我們講了昨天留的兩道題,然后就開始給我們講數(shù)組和指針,最后還涉及一點二維數(shù)組廓八。每次到了指針這里總感覺頭腦繞不過來,但是確實又是講來講去就那么點內(nèi)容,感覺內(nèi)容很少,就是消化特別慢。
"最近總能聽到在“終端”下面不能粘貼復制,在這里我推薦試試ctrl+shift+c復制,ctrl+shift+v粘貼,反正我在虛擬機中可以這么用,實體機應該也可以"伦籍。
作業(yè)1.有一個袋子瘾晃,里面有三種顏色的球贷痪,白:3 紅:3 黑:6. 從中間取8只球,共有多少種方案
#include <stdio.h>
void main()
{
int i,j;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(8-i-j<=6)
printf("紅:%d 白:%d 黑:%d\n",i,j,8-i-j);
}
作業(yè)2.求輸出和為一個給定整數(shù)的所有組合
如:4
0+4
1+3
2+2;
5
0+5
1+4
2+3
#include <stdio.h>
void main()
{
int data,i;
printf("請輸入一個數(shù):");
scanf("%d",&data);
for(i=0;i<=data/2;i++)
printf("%d+%d\n",i,data-i);
}
練習:有一個整型數(shù)組蹦误,含有10個元素劫拢,在整個數(shù)組中查找某一個值,找到了就給出這個值在數(shù)組中的位置强胰,沒有找到就輸出"沒有找到"
#include <stdio.h>
void main()
{
printf("請輸入10個數(shù):");
int i,a[10],search;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("請輸入要找的值:");
scanf("%d",&search);
int flag=0;
for(i=0;i<10;i++)
{
if(search==a[i])
{
printf("%d\n",i+1);
flag++;
}
}
if(flag==0)
{
printf("沒有找到!\n");
}
}
定義一個數(shù)組舱沧,里面升序排好了5個數(shù),現(xiàn)在往其中插入某個數(shù)偶洋,使插入后的數(shù)組依然有序熟吏。
#include <stdio.h>
void main()
{
int a[6]={1,3,5,7,9,11},in,i,j;
printf("請輸入要插入的數(shù):");
scanf("%d",&in);
//1.找到要插入的位置
for(i=0;i<=4;i++)
{
if(a[i]>in)
break;//找到第一個比in大的元素結束循環(huán),此時i即為in的下標號
}
//2.把原有數(shù)組中比插入的數(shù)大的元素往后挪一個位置
for(j=5;j>i;j--)//把插入點i之后的元素都往后挪一個位置
{
a[j]=a[j-1];
}
//3.把數(shù)插進入
a[i]=in;
for(i=0;i<6;i++)
printf("%d\n",a[i]);
}
#include <stdio.h>
void main()
{
int a=5;
// &a玄窝; //表示a所代表的空間的地址
printf("%d\n",*(&a));
*(&a)=3;//*,表示一個地址里面的值
printf("%d\n",a);
}
指針變量:用來接受內(nèi)存中的地址牵寺。
指針:地址。
定義一個指針變量:
例:要定義一個指針變量恩脂,用來接受一個整型變量的地址
int a;//得到整型變量 &a 整型變量的地址
int *p=&a; //定義一個接受整型變量的地址的變量帽氓。指針變量。取名指針變量因為它保存的是一個變量的地址俩块,只要找到了該指針變量就能找到那個變量黎休,像一個指針時刻指向那個變量.
char c;
char *p=&c;//定義一個指向字符變量c的指針變量
整型變量數(shù)據(jù)類型:int
定義一個整型變量: int p; 用來接受一個整數(shù): p=10;
小數(shù)變量數(shù)據(jù)類型:float
定義一個小數(shù)變量:float p;用來接受一個小數(shù): p=1.2
字符變量的數(shù)據(jù)類型:char
定義一個字符變量:char p;用來接受一個字符:p='a'
指針變量數(shù)據(jù)類型:datatype*
定義一個接受整型變量的地址的指針變量:int *p; int a; p=&a;
定義一個接受小數(shù)變量的地址的指針變量:float* p;float a; p=&a;
定義一個接受字符變量的地址的指針變量:char* p;char a; p=&a;
int *p1,*p2;正確寫法
int* p1,p2;錯誤寫法
#include <stdio.h>
void main()
{
int a=5;
int *p=&a;
*p;
printf("*p=%d p=%p\n",*p,p);
}
#include <stdio.h>
void main()
{
int a[5]={1,2,3,4,5};
int *p;
/*
printf("a:%p &a[0]:%p\n",a,&a[0]);
printf("a+1:%p &a[0]+1:%p &a[1]:%p\n",a+1,&a[0]+1,&a[1]);
*/
printf("&a=%p a=%p &a+1=%p a+1=%p\n",&a,a,&a+1,a+1);
}
/*
1.a:表示數(shù)組的首元素的首地址。
a+1:表示數(shù)組第二個元素的地址玉凯,+1势腮,跨過指針所指向?qū)ο蟮囊粋€長度,此處a作為指針所指向的對象是數(shù)組中的元素壮啊。
%p:輸出一個地址的格式
3.指針的含義包含2方面:1.它的值(地址)2.它指向的對象
2.&a:它的值是數(shù)組a的第一個元素的地址嫉鲸,但是作為一個指針,所指向的對象是整個數(shù)組歹啼,
&a+1:指針&a跨過一個&a所指向的對象玄渗,即從數(shù)組開頭指向了數(shù)組最后,跨過整個數(shù)組
4.指向一個數(shù)組的指針p,加*,即為*p,變?yōu)橹赶蛟摂?shù)組中的元素的指針,再加*,即為**p,變成了所指向的這個元素的值
*/
#include <stdio.h>
void main()
{
int a[5]={1,2,3,4,5};
int (*p)[5]=&a;
printf("%p\n",p);
}
/*
int a[5];//定義了一個int型的數(shù)組a狸眼,里面含有五個int型的元素
int *a[5];//定義了一個int*型的數(shù)組a藤树,里面含有5個int*型的元素,指針數(shù)組——指針的數(shù)組
int (*a)[5];//定義了一個指向含有5個int型元素的數(shù)組的指針a.數(shù)組指針——數(shù)組的指針.
int *(*a)[5];//定義了一個指向含有5個int*型元素的數(shù)組的指針a.
*/
int a[5]={1,2,3,4,5};
a:1的地址
a+1:2的地址
&a:整個數(shù)組的地址==1的地址
&a+1:跳過該數(shù)組長度的地址
*a:1
*(a+1)=2
*&a<=>a
**&a<=>*a
int (*p)[3]=a
#include <stdio.h>
void main()
{
int a[5]={1,2,3,4,5};
int (*p)[3]=(int (*)[3])&a;
//左邊:指針p指向含有3個int型元素的數(shù)組的指針
//右邊:指針&a是一個指向含有5個int型元素的數(shù)組的指針拓萌,強制轉換成指向一個含有3個int型元素的數(shù)組的指針岁钓。
printf("**p=%d,*p=%p,*p+1=%p,*(*p+1)=%d\n",**p,*p,*p+1,*(*p+1));
printf("**p=%d **(p+1)=%d\n",**p,**(p+1));
}
二維數(shù)組
定義一個二維數(shù)組:
datatype name[行數(shù)r][列數(shù)c];
例:int a[2][3];定義了一個二維數(shù)組,數(shù)組的名字為0;是一個2行3列的數(shù)組,數(shù)組中的每個元素都是int型
a[0][0]:第一行第一列的元素
a[1][1]:第二行第二列的元素
二維數(shù)組的行下標號從0開始到r-1結束,列下標號從0開始到c-1結束
二維數(shù)組在存儲的時候是按行存儲的,
二維數(shù)組的賦值:
1.初始化賦值:
2.先定義數(shù)組再賦值:
//求一個4行5列的整型數(shù)組的最大值,并輸出他的行號和列號
#include<stdio.h>
int main()
{
printf("請輸入一個4行5列的整型數(shù)組:");
int i,j,a[4][5],max = 0,c,d;
for(i = 0;i < 4;i++)
{
for(j = 0;j < 5;j++)
{
scanf("%d",&a[i][j]);
if(max < a[i][j])
{
max = a[i][j];
c=i;
d=j;
}
}
}
printf("max = %d %d %d\n",max,c,d);
}