C总结2

本文涵盖C++基本概念如const修饰符用法、指针与数组操作、函数定义及重载等内容,并通过实例讲解参数传递方式、字符串处理等高级主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C_总结2

1, Const的用法

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

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

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

如:int* constp1=&i; 和 constint* 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、付费专栏及课程。

余额充值