3-2

1.指向一個基本類型變量(int)的指針
int p;
2.指向一個int型數(shù)組的指針,int a[5];
int (
p)[5]
3.定義一個函數(shù)的指針。void func();
int func(int a,int b)
函數(shù)的指針——函數(shù)指針。
void (p)()=func;//定義一個指向函數(shù)返回值為void,并且函數(shù)不帶參數(shù)的函數(shù)的指針變量,并給這個指針變量賦了值,讓它指向此類型函數(shù)中的func函數(shù)。
void (
p)()=&func;也是可以
int (*p)(int,int)=func;//定義了一個指向函數(shù)返回值為int,并且函數(shù)帶有2個int型參數(shù)的函數(shù)的指針變量,并給整個變量賦了值,讓它指向此類型函數(shù)中的func函數(shù)。

例:

include <stdio.h>

void func1()
{ printf("func1 be called!\n");}
int func2(int a)
{ printf("func2 be called! a=%d\n",a);
return 0;}
void main()
{ void (pfun1)();
pfun1=func1;//讓pfun1指向func1函數(shù)
//pfun1=&func1;
//(
pfun1)();
int (*pfun2)(int);
pfun2=func2;//讓pfunc2指向func2函數(shù)
pfun1();//通過指針調(diào)用func1函數(shù)
pfun2(10);//通過指針調(diào)用func2函數(shù)
}

include <stdio.h>/*

void func(int num1,int num2)
{
++num1;
++num2;
printf("num1=%d num2=%d\n",num1,num2);
}
void main()
{
int num1=1,num2=2;
func(num1,num2);//int num1=num1
printf("num1=%d num2=%d\n",num1,num2);
}/
/

void func()
{
int num=5;

}
void main()
{
func();
printf("num=%d\n",num);
}*/

void main()
{
int num;
printf("%d\n",num);

}

/*
局部變量:定義在函數(shù)內(nèi)的變量,
1.各個函數(shù)里面的變量可以同名,并且相互不影響,因?yàn)榫植孔兞康淖饔糜蛑幌抻诙x它的函數(shù)體內(nèi)。
2.它的生命周期始于定義它的那一刻,終于定義它的函數(shù)的結(jié)束之前.在定義的時候會給他分配空間,結(jié)束的時候空間會被釋放。
3.局部變量如果沒有賦值,將是隨機(jī)值。
*/

include <stdio.h>

int num=1;
void func1()
{ int num=3;
printf("num=%d\n",num);
}
void func2()
{ printf("num=%d\n",num);
}
void main()
{
int num=2;
printf("num=%d\n",num);
func1(); func2();
printf("num=%d\n",num);
}

/*
全局變量:定義在函數(shù)外面的變量。
特點(diǎn):1.不賦值,默認(rèn)為0
2.如果全局變量和局部變量同名,起作用的是局部變量。
3.在函數(shù)中如果沒有同名的局部變量,那么起作用的是全局變量

*/

include <stdio.h>

/*
void func()
{
int i=1;
for(i=1;i<=3;i++)
{
static int a=1;
a++;
printf("a:%d\n",a);
}
}
void main()
{
func();
// printf("a:%d\n",a);
}/
/

void main()
{
static int a;
printf("a=%d\n",a);
}
/
static int a;
void main()
{
printf("a:%d\n",a);
}
/

static:靜態(tài)的
靜態(tài)變量:用static修飾的變量。
靜態(tài)局部變量:用static修飾的局部變量
特點(diǎn):1.作用域只限于定義它的函數(shù)體內(nèi)。
2.它分配的空間會一直存在,即使當(dāng)定義它的函數(shù)結(jié)束了,它里面的值也能保留下來,只是出了函數(shù)就不能再用了,因?yàn)樗淖饔糜蛑幌抻诙x他的函數(shù)。直到整個程序結(jié)束,空間被釋放。
3.靜態(tài)局部變量沒有賦初值,則默認(rèn)為0.
靜態(tài)全局變量:static修飾的全局變量
特點(diǎn):
1.沒有賦值的話,為0
2.只能在定義它的文件中用,在其他文件中不能用
全局變量的特點(diǎn):
1.沒有賦值的話,默認(rèn)為0
2.作用于整個程序,除了定義它的文件可以使用它,其他文件中也能使用它,但是在其他文件中使用它之前先聲明它,聲明語句:如:int a;
*/

include <stdio.h>

void main()
{
const int a=1;
printf("a:%d\n",a);
// a=2;
// printf("a:%d\n",a);
}
/*
常變量:用const修飾的變量,雖然是變量,但體現(xiàn)著常量的特性,只能訪問它的值,不能修改它的值,它的值只能在定義這個變量的時候以初始化的方式被賦值。
*/
練習(xí):給出年,月,日,判斷該天是一年中的第幾天?
1 2 3 4 5 6 7 8 9 10 11
31 28 31 30 31 30 31 31 30 31 30

1.20
12.10

int a[]={31,28,31,30,31,30,31,31,30,31,30}

include <stdio.h>

int a[]={31,28,31,30,31,30,31,31,30,31,30};
int Isleap(int);
int Sum(int,int);
void main()
{
int year,month,day;
printf("輸入年、月、日:");
scanf("%d %d %d",&year,&month,&day);
int days=Sum(month,day);
if(Isleap(year) && month>2)
days=days+1;
printf("總天數(shù):%d\n",days);
}
int Sum(int month,int day)
{
int i;
for(i=1;i<month;i++)
day=day+a[i-1];
return day;
}
int Isleap(int year)
{
return (year%4==0 && year%100!=0)||(year%400==0);
}

include <stdio.h>

int Isleap(int);
void main()
{
int year,month,day;
printf("請輸入年、月、日:");
scanf("%d %d %d",&year,&month,&day);
switch(month-1)
{
case 11:
day += 30;
case 10:
day += 31;
case 9:
day += 30;
case 8:
day += 31;
case 7:
day += 31;
case 6:
day += 30;
case 5:
day += 31;
case 4:
day += 30;
case 3:
day += 31;
case 2:
day += Isleap(year)+28;
case 1:
day += 31;
}
printf("總天數(shù):%d\n",day);
}
int Isleap(int year)
{
return (year%4==0 && year%100!=0)||(year%400==0);
}

home home work:

游戲說明:
有3個商人帶著3隨從和貨物過河,船每次最多只能載2個人,由他們自己劃行,并且如何乘船渡河的大權(quán)由商人們掌握。要求保證在過河期間的任一岸上商人的人數(shù)大于或者等于隨從的人數(shù),否則隨從會殺死商人搶奪貨物。設(shè)計(jì)一個符合上述要求的商人過河游戲。
游戲規(guī)則:
1.依次輸入過河的商人和隨從人數(shù)
2.非法輸入按鍵將重新開始游戲(例如,輸入的人數(shù)不能超過2,所以負(fù)數(shù),字符屬于非法輸入)
程序設(shè)計(jì)要點(diǎn):1.界面友好,光標(biāo)定位,字體或者背景顏色控制
2.多些功能子函數(shù),主函數(shù)的功能只是負(fù)責(zé)調(diào)用子函數(shù)。

設(shè)商人為A,B,C。隨從為a,b,c 渡河過程:
1.A 帶a渡河
2.A將船劃回來
3.b.c兩名隨從接著劃船渡河
4.c將船劃回來
5.A B兩名商人劃船渡河
6.B b主仆二人劃船回來
7.B C兩人劃船渡河
8.a劃船回來
9.a b 渡河
10.商人C劃船回來
11.商人C帶c劃船渡河

字符串常量:用雙引號括起來的任意字符序列。 “asdfg”.
因?yàn)樵赾語言中沒有專門字符串類型,所以無法定義一個字符串變量用來接受一個字符串常量。所以通常定義一個字符數(shù)組,用來存儲字符串常量。
例:
char a[]="sdfghjk"; sizeof(a)<=>8
char a[]={'s','d','f','g'}; sizeof(a)<=>4

特點(diǎn):
1.字符串常量默認(rèn)以'\0'字符結(jié)尾。
sizeof(變量名/類型);
sizeof(a):計(jì)算出以整個地址為起始地址的一段連續(xù)內(nèi)存的長度。

2.一個字符串常量,本身就表示一個指針,即一個地址,該字符串首元素的地址,作為一個指針指向的對象是該字符串中的字符。
例:

include <stdio.h>

void main()
{
char p="asdfgh";
printf("
p=%c (p+1)=%c\n",p,*(p+1));
printf("%d\n",sizeof(p));
}

gets(地址):從標(biāo)準(zhǔn)輸入(鍵盤)獲取一行字符串,在獲取字符串時,會把獲取的最后一個字符‘\n’,換成'\0'存儲。
例:

include <stdio.h>

void main()
{
char name[30];
gets(name);
printf("%s\n",name);
}
練習(xí):從鍵盤獲取一行字符串,統(tǒng)計(jì)含有多少個空格

include <stdio.h>

void main()
{
char name[30];
gets(name);
/* int i=0,count=0;

while(name[i]!='\0')
{
    if(name[i]==' ')
        count++;
    i++;
}*/
char *p=name;
int count=0;
while(*p!='\0')
{
    if(*p==' ')
        count++;
    p++;
}

printf("%d\n",count);

}

homework:利用遞歸函數(shù),逆序輸出一個字符串。

include <stdio.h>

void Inverse(char str)
{
if(
str=='\0')
return;
Inverse(str+1);
printf("%c",*str);
}
void main()
{
char *str="abcdefgh";
Inverse(str);
printf("\n");
}

puts(地址):向屏幕輸出字符串,括號里面的地址可以是數(shù)組名/字符串常量/指針變量。輸出字符串會自動換行

include <stdio.h>

void main()
{
char name[30]="asdfghj";
char *p="aaaaaaa";
puts("bbbbbbbb");
puts(name);
puts(p);
}

練習(xí):自己寫個函數(shù)mygets(),實(shí)現(xiàn)gets的功能,但不會出現(xiàn)越界。

include <stdio.h>

void mygets(char *a,int len)
{
int i;
for(i=0;i<len-1;i++)
{
a[i]=getchar();
if(a[i]=='\n')
break;
}
if(a[i]!='\n')
{
while(getchar()!='\n');//吸收多余的字符。
}
a[i]='\0';
}
void main()
{
char a[30];
mygets(a,30);
printf("%s\n",a);

}

strlen():計(jì)算字符串的字符個數(shù),并把計(jì)算結(jié)果返回出來,用整個函數(shù)要包含頭文件:string.h
例:

include <stdio.h>

include <string.h>

void main()
{
char a[]="i love beijing";
int len1,len2;
len1=strlen(a);
len2=strlen("i love beijing");
printf("%d %d\n",len1,len2);
}

練習(xí):自己寫個函數(shù)mystrlen()實(shí)現(xiàn)strlen的功能。

include <stdio.h>

include <string.h>

int mystrlen(char str)
{
int c=0;
while(
str!='\0')
{
str++;
c++;
}
return c;
}
void main()
{
char *str="asdfghjk";
int n=mystrlen(str);
printf("%d\n",n);
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容