C总结2

C_总结2

1, Const的用法

   Const修饰变量,标志着这个变量是不可修改的。

   如:int const i= 2; 或者const  int  i=2;

   Const 修饰指针变量。(有两种形式)

   如:int* const p1=&i;  和 const int* p2= &i;

  下面是对两种形式的分析:

const int x=2;

const int y=3;

int z=3;

const int*pc=&x;

int* constcp=&z;

int* pp=&z;

 

x=y;  //不可以,因为使用const修饰的变量值是不可改变的。

 

pc =&z; //可以,指向常量的指针,可以改变其value的值。

 

*pc=10; //不可以,指向常量的指针,防止改变其指向的变量的值。

 

*pc=y; //不可以,指向常量的指针,防止改变其指向的变量的值。

 

*pc=5; //不可以,指向常量的指针,防止改变其指向的变量的值。

 

pc=pp; //可以,指向常量的指针,可以改变其value的值。

 

z=5;//可以,必须的可以。

 

z=x; //可以,必须的可以

 

*cp=x; // 可以,常指针可以修改其对应的变量的值。

 

cp=&x; //不可以,常指针不可以改变其value值

 

pp=&x; //不可以 在不同的编译器下,有不同的结果

 

pp=pc;//不可以 如果可以的话,pp 就有了修改变量值的功能了,和定义有冲突

 

pp=cp; //可以

 

2,练习:

 

// test_day05.cpp: Defines the entry point for the console application.

//

 

#include"stdafx.h"

 

bool flag=true;

double v(doubler,double h){

      if(r!=0&h!=0){

      return 3.14159*r*2*h;

      }

      return NULL;

}

 

void jisuan(intx,int y,int z){

 

      printf("你输入的三个数的和是:%d\n",x+y+z);

 

      printf("你输入的三个数的平均值是:%f\n",(float)(x+y+z)/3);

 

}

 

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

{

/**     //exercise 4

      enum WEEKDAY{

               Sunday,

                 Monday,

                 Tuesday,

                 Wednsday,

                 Thursday,

                 Friday,

                 Saturday

      }; 

 

   enum WEEKDAY day;

    day=Tuesday;

   switch(day){

 

    case Sunday:

      printf("Today is Sunday\n");

        break;

    case Monday:

      printf("Today is Monday\n");

        break;

       case Tuesday:

      printf("Today is Tuesday\n");

        break;

    case Wednsday:

      printf("Today is Wednsday\n");

        break;

      case   Thursday:

      printf("Today is      Thursday\n");

        break;

      case       Friday:

      printf("Today is    Friday\n");

        break;

      case       Saturday:

      printf("Today is    Saturday\n");

        break;

    default :

           printf("Your input iserror!!!");

   

 

   }

**/

 

/**     //exercise 5

   int a,b;

   scanf("%d\n%d",&a,&b);

 

   if(a>b){

  

     printf("您输入的最小值是:%d\n",b);

   }else{

  

      printf("您输入的最小值是:%d\n",a);

   }

 

  **/

      /** //Exercise 6

      while(flag){

      double r;

      double h;

      printf("请输入圆柱的半径和高!\n");

      scanf("%lf,%lf",&r,&h);

      if(r==0||h==0){

       flag=false;

       continue;

        }

  double V=v(r,h);

 

  printf("%lf\n",V);

      }

      **/

      //Exercise 7

      while(flag){

      int x,y,z;

      printf("请输入三个整数:\n\n");

      scanf("%d,%d,%d",&x,&y,&z);

       if(x==-1){

        flag=false;

       continue;

    

       }

 

       jisuan(x,y,z);

      }

      return 0;

}

3,

  Functions : Parameters(参数)

Parameters can bepassed in two ways: 向函数传递参数的三种方式。

1. 传值

2. 传地址(指针)

3. 传引用(c++的内容)

4, 函数重载.

两个函数名字一样,参数不一样(参数个数不同、参数类型不同),成为函数重载。

5,指针传递

  void f(int *x) { x = x+1;}

intmain (void)

{

int a[]={1,2}, *pa=a;

f(pa);

printf(“%d”,*pa);  /* Again prints 1. Value of ptr passed. */

/* The ptr value is increased - byvalue */

return 0;

}

6,数组作为参数传递

  定义:int func1 (int array[]);

int func1 (int *array);

7. void * malloc(size_t size);向堆内存中申请空间。

8,释放资源:

  void free(void *ptr);

9,指向函数的指针

  Example:

#include <stdio.h>

int (*fpointer)(int, int);    /* Define a pointer to a function     */

int add(int, int);                 /* Define a few functions.                 */

int sub(int, int);

int main()

{

   fpointer = add;                   /*Put the address of 'add' in 'fpointer' */

   printf("%d \n", fpointer(4, 5));         /* Execute 'add' and print results */

   fpointer = sub;          /* Repeatfor 'sub'                     */

printf("%d\n", fpointer(6, 2));

return 0;

}

int add(int a, int b)

{

   return(a + b);

}

int sub(int a, int b)

{

   return(a - b);

}

 

10,Void指针

For example:

int func(void*Ptr);

       int main()

       {

           char *Str = "abc";

func(Str);

return 0;

       }

       int func(void *Ptr)

       {

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

       }

 

11,String 

 char str[11] = {'G', 'o', 'o', 'd', ' ', 'D','a', 'y', '!', '\0', ‘e’ };

char str[11] ="Good Day!";

 如果打印第一个字符数组,只会打印\0前面的字符,

如果打印第二个字符数组长度的话,长度为:九个字节。(包含\0).

12, int strlen(constchar *s);

char*pstr="Hello";

int i =strlen(pstr);

13, char *strcpy(char*to, const char *from);

For example:

#include <string.h>

#include <stdio.h>

void main( void )

{

  char string[80];

  strcpy( string, "Hello world from " );

  strcat( string, "strcpy " );

  strcat( string, "and " );

  strcat( string, "strcat!" );

  printf( "String = %s\n", string );

}

 

14, int strcmp(constchar *str1,const char*str2);

15,练习;

//test_day06rr.cpp : Defines the entry point for the console application.

//

 

#include"stdafx.h"

void exercise8();

double  exercise9(double  x);

void max(int x,inty);

void min(int x,inty);

int jiecheng(inti);

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

{

     

//exercise8();

 

/**

      //exercise9 用户自定义函数--求数的平方

      double d;

      printf("用户请输入一个数:\n");

    scanf("%lf",&d);

  printf("您输入值的平方是:%lf\n",exercise9(d));

  **/

 

 

/**

//  Exercise 10

// 编写两个函数:max和min,分别计算两个数字的最大值和最小值。然后再在main函数中,读入两个数字,分别调用max和min进行计算。

 

      int f,g;

      printf("用户请输入两个数,以逗号连接:\n");

      scanf("%d,%d",&f,&g);

 

      max(f,g);

      min(f,g);

      **/

 

 

 

      /**

//Exercise 11

//定义一个函数打印1到5的阶乘

 

      int i;

      printf("用户请输入一个数:\n");

 

    scanf("%d",&i);

 printf("您输入的%d的阶乘是%d\n",i,jiecheng(i));

 **/

 

 

      /**

 //Exercise 13

//Write a programthat uses pointers to set each element of an array to zero.

 

      int shuzhu[4][4];

      int* s=&shuzhu[0][0];

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

     *s=0;

       if(i%4==0)

            printf("\n");

       printf("%d",*s);

       s++;

      }

    printf("\n");

 

  **/

 

/**

      Exercise 12

给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

1234  4321

87965  56978

**/

 

      long int num;

int a,b,c,d,e,x,y;

printf("请输入(0-99999)

if (num>9999)x=5;

elseif(num>999)x=4;

elseif(num>99)x=3;

elseif(num>9)x=2;

else x=1;

printf("它是一个%d位数\n",x);

printf("分别是:"); :");

scanf("%ld",&num);

a=num/10000;

b=num/1000%10;

c=num/100%10;

d=num/10%10;

e=num%10;

switch(x)

{

case1:printf("%d\n",e);

printf("逆序输出为:%d\n",e);break;

case2:printf("%d,%d\n",d,e);

printf("逆序输出为:%d%d\n",e,d);break;

case3:printf("%d,%d,%d\n",c,d,e);

printf("逆序输出为:%d%d%d\n",e,d,c);break;

case4:printf("%d,%d,%d,%d\n",b,c,d,e);

printf("逆序输出为:%d%d%d%d\n",e,d,c,b);break;

case5:printf("%d,%d,%d,%d,%d\n",a,b,c,d,e);

printf("逆序输出为:%d%d%d%d%d\n",e,d,c,b,a);break;

}

 

 

 

      return 0;

 

 

}

 

int jiecheng(inti){

  

      int q=1;

      for(int e=1;e<=i;e++){

     

      q*=e;

      }

 

      return q;

}

 

void max(int x,inty){

 

      if(x>y){

 

    printf("您输入的数的最大值是:%d\n",x);     

      }else{

       printf("您输入的数的最大值是:%d\n",y); 

      }

     

}

 

void min(int x,inty){

 

      if(x<y){

 

    printf("您输入的数的最小值是:%d\n",x);     

      }else{

       printf("您输入的数的最小值是:%d\n",y); 

      }

     

}

 

double  exercise9(double  x){

  

 

    return x*x;

}

void exercise8(){

//exercise8:本程序从键盘输入一个5*5整型数组赋值,找出其中的最小值并显示出来. 考虑更高效的算法。

 

      int q[5][5]={0};

    printf("请输入数据:\n");

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

       printf("请输入第%d组五个数据:\n",i);

           for(intj=0;j<5;j++){

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

                 }

      }

/**

int min=q[0][0];

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

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

          

                 if(min>q[x][y]){

                 min=q[x][y];

                

            

                 }

           //  printf("q[%d][%d]=%d\t",x,y,q[x][y]);

           }

           printf("\n");

 

 

      }

 

  printf("您输入的数据最小值是:%d\n",min);

**/

int min=q[0][0];

int*p=&q[0][0];

for(intw=0;w<25;w++){

      if(w%5==0){

      printf("\n");

      }

      printf("%d\t",*p);

 

      if(min>*p){

     

      min=*p;

      }

 

   p++;

}

 

 printf("\n\n您输入的数据最小值是:%d\n",min);

}

 

 

 

#include"stdafx.h"

//  int a[] = {0, 2,   4,   6,  8};

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

 

 

  //int ** pp = p;

 

void input(int*x){

   printf("请输入三个数:\n");

    scanf("%d,%d,%d",x,(x+1),(x+2));

}

 

 

void deal(int* x){

 

      int y=0;

 

      if(*x>*(x+1)){

       y=*x;

       *x=*(x+1);

     *(x+1)=y;

 

      }

 

      if(*x>*(x+2)){

           y=*x;

       *x=*(x+2);

     *(x+2)=y;

      }

 

      if(*(x+1)>*(x+2)){

      y=*(x+1);

      *(x+1)=*(x+2);

      *(x+2)=y;

      }

 

 

}

 

 

void print(int*x){

      printf("经排序后是:");

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

    printf("%d  ",*x);

     x++;

      }

 

      printf("\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值