码迷,mamicode.com
首页 > 编程语言 > 详细

C语言笔记(六)

时间:2016-05-18 18:53:13      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

   作用域和存储类型


作用域:变量的作用范围,每一个变量都有一个作用域,变量在自己的作用域内是有效的,离开自己的作用域后就无效


1:文件作用域:变量定义开始到文件结束

例子:全局变量

全局变量:函数外定义的变量


2:函数作用域:函数体中有效

例子:函数的形参


3:块{}作用域:变量定义开始,到}结束

例子:局部变量

局部变量:函数体中定义的变量

#include <stdio.h>

int c = 0;//全局变量,具有文件作用域

void add(int a, int b)//a,b函数行参,具有函数作用域

{

return a+b;

}

int d = 0;

int main(int argc, const char *argv[])

{

int e = 0;//局部变量,具有块作用域

return 0;


#include <stdio.h>

int main(int argc, const char *argv[])

{

for (int i=0; i<5; i++){

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

}

printf("i = %d\n", i);//i是局部变量,具有块作用域

return 0;

}   


同名标识符隐藏规则:就近原则

#include <stdio.h>

int a = 0;

int main(int argc, const char *argv[])

{

int a = 3;

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

return 0;


变量的完整定义:

修饰符  存储类型  符号类型  数据类型  变量名

变量:存储数据

数据类型:决定了变量的大小

符号类型:决定最高位用来保存数据还是符号

存储类型:变量保存在哪里

1:自动存储auto:内存栈中

2:静态存储static:数据段

3:寄存器存储register:寄存器中

4:外部声明extern:只是声明变量,没有开辟存储空间

修饰符:const,volatile


内存分布图:

#include <stdio.h>

#include <stdlib.h>


int b = 0;//已经初始化的全局变量

static int c = 0;//已经初始化的static修饰的变量

int e;//未始化的全局变量

static int f;//未初始化的static修饰的变量

int main(int argc, const char *argv[])

{

//只读存储区

char *a = "abcd";

static int d = 0;//已经初始化的static修饰的变量

static int g;//未初始化的static修饰的变量

char *h = malloc(10);//

int i = 0;//局部变量,


printf("只读存储区 = %p\n", a);

printf("已经初始化的全局变量 = %p\n", &b);

printf("已经初始化的static修饰的变量 = %p\n", &c);

printf("已经初始化的static修饰的变量 = %p\n", &d);

printf("未初始化的全局变量 = %p\n", &e);

printf("未初始化的static修饰的变量 = %p\n", &f);

printf("未初始化的static修饰的变量 = %p\n", &g);

printf(" = %p\n", h);

printf(" = %p\n", &i);

return 0;


特点:

栈:局部变量,栈上的空间是由系统自动开辟,并且由系统自动释放(当发生函数调用时,系统会为局部变量在栈上开辟空间,函数调用结束后自动释放

堆:程序员通过malloc开辟,free释放(整个程序运行结束后由系统释放,不建议)

数据段:数据段上数据在整个程序运行过程中一直存在,当程序结束后由系统释放


1、什么是地址(指针)

scanf——>&取出变量地址

数组名——>地址常量,等于数组首元素的地址

函数名——>地址常量,等于函数的入口地址

什么是地址?

内存中最小的单位是字节

2的64次方

地址:内存中每个字节前面都有一个编号,这个编号就是地址

变量的地址:变量在内存中某个字节的编号

什么是指针地址就是指针,指针就是地址


2、如何去保存(指针)

思考:

整数——>整型变量

字符——>字符变量

指针——>指针变量

结论:通过指针变量来保存指针


3、指针变量的定义

格式:数据类型  *变量名;

变量名:满足标识符命名规则

*:表示该变量是一个指针变量

数据类型:指针所指向的变量的数据类型

为什么要这样定义?

变量名:变量的名字

*:表示该变量是指针变量

数据类型:

1:决定该指针所能指向的变量的数据类型

2:当指针指向一个数组时,数据类型决定指针加1(p+1),1的大小

int arr[5];

int *p = &arr[0];

p+1——>4个字节


char buf[10];

char *p = &buf[0]

p+1——>1个字节

int a = 0;

int (*p) = &a;

练习:

定义出两个指针变量,分别指向整型变量和字符型变量

int c=0;int *a=&c;

char d=‘e‘;char *b=&d;


4、指针变量的大小

计算方式:sizeof(变量名)

char *p=NULL;sizeof(p); 大小8个字节

int *p=NULL;sizeof(p); 大小8个字节

#include <stdio.h>

int main(int argc, const char *argv[])

{

int a = 0;

char ch = 0;

int *pa = &a;

char *pCh = &ch;

printf("sizeof(pa) = %lu\n", sizeof(pa));

printf("sizeof(pCh) = %lu\n", sizeof(pCh));

return 0;


指针变量的大小:指针变量的大小是由当前操作系统位数决定64位操作系统下的指针变量都是8个字节(32位是4个字节)


5、指针变量的赋值

1:初始化

int a=0;

int *p=&a;

2:赋值语句

int a=0;

int *p=NULL;

p=&a;

练习:定义出两个指针变量,分别指向整型变量和字符型变量,分别使用初始化和赋值语句的方式对变量进行赋值


6、指针变量的作用

1:保存指针

2:另一种操作数据的方式

#include <stdio.h>


int main(int argc, const char *argv[])

{

int a = 5;

int *pa = &a;

printf("&a = %p\n", &a);

printf("pa = %p\n", pa);

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

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

return 0;

`

7、与指针相关的基本操作

1:&

作用:取出变量的地址

2:*

1:*地址=

作用:向该地址中存数据

2:=*地址

作用:从该地址中取数据

3:p+n:当p指向一个数组时,p+1指向下一个元素

p——>&arr[0]

p+1——>&arr[1]

#include <stdio.h>

#define NUM 5

int main(int argc, const char *argv[])

{

int arr[NUM] = {};

int (*p) = &arr[0];

int i = 0;

for (i=0; i<NUM; i++){

printf("&arr[%d] = %p\n", i, &arr[i]);

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

}

return 0;

4:p-q:p和q指向同一个数组

int arr[5];

int *p = &arr[0];——>p+0

int *q = &arr[4];——>p+4

q-p————>4———>p和q之间相隔元素的个数

#include <stdio.h>


#define NUM 5

int main(int argc, const char *argv[])

{

int arr[NUM] = {};

int *p = &arr[0];

int *q = &arr[4];

printf("q - p = %ld\n", q-p);

return 0;


5:关系运算(p,q,p>q,p<q,p>=q,p<=q,p==q,p!=q)

#include <stdio.h>

#define NUM 5


int main(int argc, const char *argv[])

{

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

int *p = NULL;

for (p=arr; p<(arr+5); p++){

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

}

return 0;


8、指针和其他数据类型的结合

1:指向基本数据类型变量的指针

例子:

int a = 3;

int *p = &a;

printf(“a = %d\n”, a);

prntf(“*p = %d\n”, *p);

两个数的交换

int a = 3;

int b = 5;

int *pa = &a;

int *pb = &b;

int tmp = 0;

#include <stdio.h>

int main(int argc, const char *argv[])

{

int a = 3;

int b = 5;

int *pa = &a;

int *pb = &b;

int *pTmp = NULL;

int tmp = 0;

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

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


#if 0

tmp = a;

a = b;

b = tmp;

#endif

#if 0

tmp = *pa;

*pa = *pb;

*pb = tmp;

#endif

pTmp = pa;

pa = pb;

pb = pTmp;

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

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

// printf("a = %d\n", a);

// printf("b = %d\n", b);

return 0;

2:指向数值型数组首元素的指针

1:指向数组首元素指针的定义

例子:int arr[5];//arr等价于&arr[0]

初始化:

int *p = &arr[0];//int *p = arr;

赋值语句:

int *p = NULL;

p = &arr[0];//p = arr;

2:数组成员的引用://p等价于arr

下标法:arr[i], p[i]

指针法:   *(arr+i), *(p+i)

思考:arr和p是否完全等价

数组名是一个地址常量,不能够被修改(arr++不可以的)

指针变量是一个地址变量,可以被修改(p++可以的)

int arr[5];

int brr[5];

int *p = arr;

{

p操作arr

}

p = brr;

{

p操作brr

}

定义一个数组并初始化,用四种方式打印数组成员的值

#include <stdio.h>

#define NUM 5

int main(int argc, const char *argv[])

{

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

int *pArr = arr;

int i = 0;

for (i=0; i<NUM; i++){

printf("%d ", arr[i]);

}

printf("\n");

for (i=0; i<NUM; i++){

printf("%d ", pArr[i]);

}

printf("\n");

for (i=0; i<NUM; i++){

printf("%d ", *(arr+i));

}

printf("\n");

for (i=0; i<NUM; i++){

printf("%d ", *(pArr+i));

}

printf("\n");

return 0;

练习:

1:找出数组arr中值最大的数组成员,打印值(比较和查找)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define NUM 10

int main(int argc, const char *argv[])

{

int arr[NUM] = {};

int i = 0;

int max = 0;

srand(time(NULL));

for (i=0; i<NUM; i++){//输入

*(arr+i) = rand()%100;

printf("%d ", *(arr+i));

}

printf("\n");

for (max=*(arr+0),i=0; i<NUM; i++){

if (max < *(arr+i)){

max = *(arr+i);

}

}

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

return 0;

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 10

int main(int argc, const char * argv[])

{

    int a[N]={};

    int *p=a;

    int i,k=0;

    srand(time(NULL));

    for (; p<(a+N); p++) {

        *p=rand()%100;

        printf("%d ",*p);

    }

    printf("\n");

    p=a;

    for (; p<(a+N); p++) {

        if (*p>k) {

            k=*p;

            i=p-a;

        }

    }

    printf("%d %d\n",k,i);

}

2:冒泡排序(排序)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define NUM 10

int main(int argc, const char *argv[])

{

int arr[NUM] = {};

int i = 0;

int tmp = 0;

int j = 0;

srand(time(NULL));

for (i=0; i<NUM; i++){//输入

*(arr+i) = rand()%100;

printf("%d ", *(arr+i));

}

printf("\n");

for (j=0; j<NUM; j++){//冒泡执行的次数

for (i=0; i<NUM-1; i++){//相邻成员比较

if (*(arr+i) > *(arr+i+1)){//交换

tmp = *(arr+i);

*(arr+i) = *(arr+i+1);

*(arr+i+1) = tmp;

}

}

}

for (i=0; i<NUM; i++){//输入

printf("%d ", *(arr+i));

}

printf("\n");

return 0;

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 10

int main(int argc, const char * argv[])

{

    int a[N]={};

    int *p=a;

    int i,j,k=0;

    srand(time(NULL));

    for (; p<(a+N); p++) {

        *p=rand()%100;

        printf("%d ",*p);

    }

    printf("\n");

    p=a;

    for (i=0; i<N; i++) {

        for (j=0; j<N-i-1; j++) {

            if (*(p+j)>*(p+j+1)) {

                k=*(p+j);

                *(p+j)=*(p+j+1);

                *(p+j+1)=k;

            }

        }

    }

    for (; p<(a+N); p++) {

        printf("%d ",*p);

    }

    printf("\n");

}

3:将数组a中的成员按相反顺序存放(逆序)

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define NUM 10

int main(int argc, const char *argv[])

{

int arr[NUM] = {};

int i = 0;

int tmp = 0;

srand(time(NULL));

for (i=0; i<NUM; i++){//输入

*(arr+i) = rand()%100;

printf("%d ", *(arr+i));

}

printf("\n");

for (i=0; i<(NUM/2); i++){//逆序

tmp = *(arr+i);//交换

*(arr+i) = *(arr+NUM-1-i);

*(arr+NUM-1-i) = tmp;

}

for (i=0; i<NUM; i++){//输入

printf("%d ", *(arr+i));

}

printf("\n");

return 0;

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define N 10

int main(int argc, const char * argv[])

{

    int a[N]={};

    int *p=a;

    int i=0,k=0;

    srand(time(NULL));

    for (; p<(a+N); p++) {

        *p=rand()%100;

        printf("%d ",*p);

    }

    printf("\n");

    p=a;

    for (; p<(a+N/2); p++) {

        k=*p;

        *p=*(p+N-i-i-1);

        *(p+N-i-i-1)=k;

        i++;

    }

    p=a;

    for (; p<(a+N); p++) {

        printf("%d ",*p);

    }

    printf("\n");

}

4:在有序的数组中插入整数n

5:在有序的数组中删除整数n

3:指向字符型数组首元素的指针

字符串的常见表示形式:

1:字符数组保存字符串

例子:char buf[5] = “abcd”;

2:指向字符串首地址的指针

例子:char *p = “abcd”;

3:指向数组首元素的指针

例子:char buf[5] = “abcd”;char *p = buf;

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

#if 0

char buf[SIZE] = "abcd";

buf[0] = ‘h‘;

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


char *p = "abcd";

*p = ‘h‘;//"abcd"是字符串常量,不能被修改

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

#endif


char buf[SIZE] = "abcd";

char *p = buf;

buf[0] = ‘h‘;

p[1] = ‘S‘;

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

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

return 0;


1:实现字符串处理函数strlen

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

int i = 0;


gets(buf);

for (i=0; *(buf+i); i++);


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

return 0;

3:实现字符串处理函数strcat

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf1[SIZE] = "";

char buf2[SIZE] = "";

int i = 0;

int j = 0;


gets(buf1);

gets(buf2);


for (i=0; *(buf1+i); i++);

for (j=0; *(buf2+j); j++){

*(buf1+i+j) = *(buf2+j);

}


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

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

return 0;

4:实现字符串处理函数strcpy

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf1[SIZE] = "";

char buf2[SIZE] = "";

int i = 0;


gets(buf2);


for (i=0; *(buf2+i); i++){

*(buf1+i) = *(buf2+i);

}


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

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

return 0;

5:实现字符串处理函数strcmp

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf1[SIZE] = "";

char buf2[SIZE] = "";

int i = 0;

int j = 0;


gets(buf1);

gets(buf2);


for (i=0; *(buf1+i) && *(buf2+i); i++){

if (*(buf1+i) != *(buf2+i)){

break;

}

}


printf("*(buf1+%d)-*(buf2+%d) = %d\n", i, i, *(buf1+i)-*(buf2+i));

return 0;

6:实现字符串处理函数strchr

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

char ch = 0;

int i = 0;


gets(buf);

ch = getchar();

for (i=0; *(buf+i); i++){

if (*(buf+i) == ch){

break;

}

}


if(*(buf+i)==0){

printf("null\n");

} else {

printf("%s\n", buf+i);

}


return 0;

8:给定一个英文句子,单词之间用1个空格分开,求其中所有单词的数量

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

int i = 0;

int t = 0;

gets(buf);


for (i=0; *(buf+i); i++){

if (*(buf+i) == ‘ ‘){

t++;

}

}

printf("t = %d\n", t+1);

return 0;

a b c d e f

p = strchr , p++

#include <stdio.h>

#include <string.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

char *p = NULL;

int t = 0;

gets(buf);


for (p=buf; (p=strchr(p, ‘ ‘)); t++, p++);


printf("t = %d\n", t+1);

return 0;

9:删除字符串中的数字字符

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

int i = 0;

int j = 0;

gets(buf);


for (i=0; *(buf+i); i++){//遍历buf

if ((*(buf+i)>=‘0‘) && (*(buf+i)<=‘9‘)){//buf中找到数组字符

for (j=i; *(buf+j); j++){//循环前移

*(buf+j) = *(buf+j+1);

}

i--;//重复

}

}

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

return 0;

10:将字符串中连续出现的空格(两个以上)合并成一个

strstr(p, “  ”)

a******b

#include <stdio.h>

#include <string.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

char *p = buf;

char *pCp = NULL;

int i = 0;

int j = 0;

gets(buf);


for (; (p = strstr(p, "  ")); p++){//遍历连续空格

for (pCp=p; *(pCp); pCp++){//循环前移

*pCp = *(pCp+1);

}

p--;//重复

}

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

return 0;

11:找出字符串中首次只出现一次的字符

abcabc

abcdabc

flag = 1;

if (flag == 1){

break;

}

#include <stdio.h>


#define SIZE 100

int main(int argc, const char *argv[])

{

char buf[SIZE] = "";

int i = 0;

int j = 0;

int flag = 0;

gets(buf);



for (i=0; *(buf+i); i++){//取出buf中的每个字符

for (j=0, flag=0; *(buf+j); j++){//查找每个字符出现的次数

if (*(buf+i) == *(buf+j)){

flag++;//计数

}

}

if (flag == 1){//判断出现的次数

break;

}

}


if (*(buf+i) == 0){

printf("没有\n");

} else {

printf("%c\n", *(buf+i));

}

return 0;


4:指向指针的指针

int a = 3;

int (*p) = &a;

int *(*pp) = &p;

int **(*ppp) = &pp;


printf(&a);

printf(p);

printf(*pp);

printf(**ppp);


printf(a);

printf(*p);

printf(**pp);

printf(***ppp);

#include <stdio.h>


int main(int argc, const char *argv[])

{

int a = 3;

int *p = &a;

int **pp = &p;

int ***ppp = &pp;


printf("&a = %p\n", &a);

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

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

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


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

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

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

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

return 0;

5:指向函数的指针

6:指向结构体变量的指针

7:指向结构体数组的指针


9、const修饰指针

常见const修饰的指针:

1:const int *p;//*p不能变

2:int const *p;//*p不能变

3:int *const p;//p不能变

4:const int *const p;//*p和p都不能变


const修饰谁谁不能变

const离谁近谁就不能变


10、指针数组

思考:

大量整型变量———>整型数组

大量字符变量———>字符数组

大量指针变量(指向的变量的数据类型相同)———>指针数组

指针数组:本质是数组,数组的成员是指针

int *pArr[5];

pArr——>&pArr[0]

指针数组的定义:

格式:数据类型 *数组名[常量];

数组名:地址常量,等于数组首元素的地址,数组名是二级指针

常量:数组成员的个数

数据类型 *:数组成员的类型

数据类型:数组成员指向变量的数据类型

例子:

int *pArr[5] = {int*p0, int *p1…..};

int *

int

练习:

1:通过比较,找出五个字符串中最大的字符串并输出

char *pArr[5] = {“bei”, “jing”, “huan”,”ying”, “nin”}


char buf0[100] = “bei”;

char buf1[100] = “jing”

……

char *pArr[5] = {buf0, buf1, buf2, buf3, buf4};


char *pMax = pArr[0];

if (strcmp(pMax, pArr[i]) < 0){

pMax = pArr[i];

}

printf(“%s”, pMax);

#include <stdio.h>

#include <string.h>


#define NUM 5

int main(int argc, const char *argv[])

{

char *pArr[NUM] = {"bei", "jing", "huan", "ying", "nin"};

char *pMax = NULL;

int i = 0;


for (pMax=pArr[0],i=0; i<NUM; i++){//遍历数组

if (strcmp(pMax, pArr[i]) < 0){//pMax和数组成员比较

pMax = pArr[i];

}

}

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

return 0;

2:实现五个字符串的排序

#include <stdio.h>

#include <string.h>


#define NUM 5

int main(int argc, const char *argv[])

{

char *pArr[NUM] = {"bei", "jing", "huan", "ying", "nin"};

int i = 0;

char *pTmp = NULL;

int j = 0;

for (j=0; j<NUM; j++){

for (i=0; i<(NUM-1); i++){//冒泡

if (strcmp(pArr[i], pArr[i+1]) > 0){//相邻成员比较

pTmp = pArr[i];//交换

pArr[i] = pArr[i+1];

pArr[i+1] = pTmp;

}

}

}

for (i=0; i<NUM; i++){

printf("%s\n", pArr[i]);

}

return 0;


11、malloc和free

malloc在堆上开辟存储空间

free释放存储空间,把该存储空间的使用权还给系统


数据类型 数组名[常量];

数组名:数组首元素的地址


int arr[5];//可以//栈上开辟了一个数组,数组成员5个每个成员大小4个字节

int n;

scanf(“%d”, &n);

int arr[n];//不可以的


int *pArr = malloc(sizeof(int)*5);//4*5

int n = 0;

scanf(“%d”, &n);

int *pArr = malloc(sizeof(int)*n);//可以的


char *p = malloc(sizeof(char)*100);

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(int argc, const char *argv[])

{

int n = 0;

scanf("%d", &n);

char *p = malloc(sizeof(char)*n);

strcpy(p, "bei jing huan ying nin");

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

return 0;




课后练习:(指针实现)

1. 给定某个字符数组,统计数组中所有英文字符的个数,比如“123fdd”中有3个。

2. 给定某个字符数组,统计数组中所有英文字符和阿拉伯数字的个数,比如“123fdd”中有英文字符有3个,数字3个。

3. 给定某个拥有5个元素的字符数组,数组的成员都有阿拉伯字符构成,试着将该数组转换成一个整数,比如字符数组的内容是:{‘1’,’2’,’3’,’3’,’2’} 则将被转换成12332

4. 给定一个完全由英文字符构成的数组,将数组中的小写字母转换成大写字母,大写字母转换成小写字母并输出。例如“abcGGG”转化为“ABCggg”

5. 给定一个完全由英文字符构成的数组,将数组中下标为偶数的字符都转换为大写(如果原来是大写则不变)。

6. 给一个完全由英文字符构成的字符数组加密,加密原则如下,除了字符‘Z’‘z’之外,每个字符变成ASCII码值比它大1的字符,也就是‘A’变成‘B’‘Z’或者‘z’转化为‘A’或者‘a’

7. 计算某个由英文、数字以及标点符号构成的数组的总宽度,其中英文字符的宽度为1cm,数字宽度为0.5cm、标点符号宽度为0.8cm

8. 接上题,如果规定行的宽度为10cm,将某个字符长度超过50的字符串截断,恰好使10cm宽的行能容纳。输出这个被截断的子数组。

9. 给定某个整型数组,计算该数组所有偶数的合。

10. 给某个整型数组赋值,赋值规律如下,下标能被3整除的都赋值为1,能被5整除的都赋值为2,能被7整除的都赋值为3,其余都赋值为0.

11. 通过终端输入10个整数并将其保存在一个整型数组中,数字保存在数组中的顺序与下标正好相反,也就是第一个被输入的数放在数组最后一个元素中,最后一个输入的数字放到第一个元素中。

12. 通过终端输入10个整数,计算10个整数中所有能被3整除的数的合。

13. 给定一个5个元素构成的整型数组,每个元素的值都在0-9之间,按照位置将其组成一个5位数并输出,例如int a[5] = {1,2,2,3,7};则输出73221

14. 给定2个大小一样的整型数组,将某个数组作为源数组,另一个作为目的数组,然后将源数组的内容拷贝到目的数组。

15. 给定一个整型数组,将第一个跟最后一个元素的内容交换。

16. 给定一个整型数组,从第1个元素开始将相邻的两个元素分别相互交换。交换完后,第1个元素将变成最后一个元素,其余元素都前进一位。

17. 给定一个有10个整形数的元素,将前5个元素跟后5个元素做整体交换,比如{1,1,1,1,1,2,3,2,2,2}->{2,3,2,2,2,1,1,1,1,1}

18. 判断一个整型数组是否是对称数组,例如{1,2,3,3,2,1}{1,6,8,1,8,6,1}都是对称数组。

19. 给定两个大小一样的整型数组,交换这两个数组的内容。

20. 给定两个大小一样的整型数组,将两个数组中下标一样的元素两两相加,相加后的结果作为这两个数组对应下标的新值,也就是操作完毕后两个数组的内容完全相同。

21. 给定一个能容纳10个元素的整型数组,现有9个元素,现在第5个元素的位置插入一个数字88,后面的数字顺序后移。

22. 给定一个10个元素的整型数组,现在将第2个元素删除,后面的数组顺序前移。

23. 给定一个有100个元素的数组,查询数组中是否有元素的值等于某个数n

24. 给定一个整型数组,求该数组元素中最大值的下标。

25. 给定一个整型数组,求该数组中第二大的数的下标。

26. 给定一个整型数组,求该数组中数值小于10的元素的个数。

27. 给定一个整型数组,计算大于该数组平均值的元素的个数。

28. 给定一个整型数组,找到数组中的最小值,并将其放到数组的首元素中,原来首元素的内容放到最小值所在的元素中。

29. 给定一个整型数组,统计某个整数在数组中出现的次数。

30. 给定一个英文句子,单词之间用1个空格分开,求出第2个单词的偏移位置。例如“Professor du comes from Korea”的偏移位置是10

31. 给定一个英文句子,单词之间用1个空格分开,求其中所有单词的数量。

32. 给定两个字符数组,将这两个拼接起来放在第一个数组中(假定第一个数组足够长),比如“abc”“123”构成“abc123”

10:将一个字符串进行逆序

例如:逆序前:abcdefg 逆序后:gfedcba

11: 一个字符串,其中有多个单词,单词之间用空格分开,将每个单词进行逆序

例如:逆序前:abc defg heitf 逆序后:cba gfed ftreh

12输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)

13:m个人围成一圈,开始顺序报数,报到n退出,问最后剩下的是几号。(从1号开始)

14:将字符串中连续出现的空格(两个以上)合并成一个

课后练习:

1:用数组来处理Fibonacci数列的前20个成员的值。

 2:有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。

3:有一行电文,已按下面的规律译成密码:

A-Z a-z

B-Y b-y

C-X c-x

即第一个字母编程第26个字母,第i个字母编程第(26-i+1)个字母。非字母字符不变,要求编程序将密码译回原文,并输出密码和原文。


C语言笔记(六)

标签:

原文地址:http://blog.csdn.net/wzc10101415/article/details/51425159

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!