c语言复习

2005年的老博,转到这个空间来
<一>入门
1.helloworld

以下内容为程序代码:
/* first.c: A First Program */
 #include <stdio.h>                         //导入standard IO头文件。
 int main() {                
     puts("** Welcome to C++ **");          //puts 读为put string
     puts("(You'll be glad you came!)");
     return 0;
 }


 
--------OUTPUT-----------------------------
 ** Welcome to C++ **
 (You'll be glad you came! ) 
-------------------------------------------

注意:
    1)导入自己定义的包时要用" "括起来不能用< >
    2)可以导入嵌套了头文件的头文件

2.基本输入输出


以下内容为程序代码:
/* avg.c: Averages 2 integers */
 #include <stdio.h>
 int main() {
     /* 必须在头部声明 */
     int num1, num2;
     float sum;
    
     puts("Enter the 1st number:" );
     scanf("%d",&num1);                     //输入时的&别忘了
     puts("Enter the 2nd number:" );
     scanf("%d",&num2);
    
     sum = num1 + num2;
     printf("The average is %f/n", sum/2 );
     printf("The average is %.2f/n", sum/2 );//规定小数点后面的显示位数
     return 0;
 }
 


--------OUTPUT-----------------------------
Enter the 1st number:
10
Enter the 2nd number: 
23
The average is 16.500000 
The average is 16.50
-------------------------------------------

注意:
    1)标准输入输出:
        1>提供控制台,文件,内核I/O这三种形式
        2>预定义的输入输出流:stdin(standard input, 键盘),stdout(standard output,显示器),stderr(standard error,显示器)
        3>控制台里的功能默认用的stdin和stdout
    2)在控制台里通过"<"可以把文件做为输入源,通过">"可以把文件作为输出点,如:dir *.exe>exeback.txt  

3.转义符
━━━━━━━━━━━━━━━━━━━━━━━━━━ 
   符号                  作用 
────────────────────────── 
    %d              十进制有符号整数 
    %u              十进制无符号整数 
    %f              浮点数 
    %s              字符串 
    %c              单个字符 
    %p              指针的值 
    %e              指数形式的浮点数 
    %x, %X          无符号以十六进制表示的整数 
    %0              无符号以八进制表示的整数 
    %g              自动选择合适的表示法 
━━━━━━━━━━━━━━━━━━━━━━━━━━ 

━━━━━━━━━━━━━━━━━━━━━━━━━━ 
    字符                           作用 
────────────────────────── 
     /n                   换行 
     /f                   清屏并换页 
     /r                   回车 
     /t                   Tab符 
     /xhh                 表示一个ASCII码用16进表示, 
                          其中hh是1到2个16进制数 
━━━━━━━━━━━━━━━━━━━━━━━━━━ 

<二>基本数据类型
1.数字边界
C中整形的数字边界定义在<limits.h>里面,浮点型的在<float.h>里面界定

2.浮点型
  1>浮点型的在不同的平台上精度不一样.
  2>浮点数离零越近的越准确
   ╋━━━╋━━╋━╋╋╋━╋━━╋━━━
    -                   0                   +
  3>float型是浮点型里最不准的,下面是测试例子:

以下内容为程序代码:

/* missing.c */
 #include <stdio.h>
 #include <limits.h>
 main() {
     float x = ULONG_MAX;    /* 4,294,967,295 */
     double y = ULONG_MAX;
     long double z = ULONG_MAX;
     printf("%f/n%f/n%Lf/n",x,y,z);
 }


==========output==============
 4294967296.000000
 4294967295.000000
 4294967295.000000
==============================

3.常量
  1>例:
    const int i = 7;
  2>C中不能定义常量数组,但是C++中可以

  4.宏        
  1>例:
    #define SIZE 100 
    int a[size]; /* "int a[100];" */
  2>C++中不常用
 
      <三>操作符 
     1.布尔环境中,0会被识别成false,非零识别成true  

      <四>控制流程 
1.scanf的时候在操作符前加空格可以忽略输入时在前加入的任何空格,如scanf(" %c", &really);

      <五>复杂数据类型 
       1.使用struct的例子

以下内容为程序代码:

/* struct.c: Illustrates structures */
 #include <stdio.h>
 #include <string.h>
 struct Hitter {
     char last[16]; /* 15 + 1 */
     char first[11]; /* 10 + 1 */
     int home_runs;
 }; /* Don’t forget ';' !!! */
 int main() {
     struct Hitter h1 = {"McGwire", "Mark", 70};
     struct Hitter h2;
     strcpy(h2.last, "Sosa");
     strcpy(h2.first, "Sammy");
     h2.home_runs = h1.home_runs - 4;
     printf("#1 == {%s, %s, %d}/n", h1.last, h1.first, h1.home_runs);
     printf("#2 == {%s, %s, %d}/n", h2.last, h2.first, h2.home_runs);
     return 0;
 }

     <四>函数  
     1.void可以用来表示不许输入函数参数  ,如

以下内容为程序代码:

void title(void){
    printf("Welcome to …");
}

title(); 

       2.C里面尽量少用全局变量或注意它的命名。它没有this来区别函数内部和外部变量,内外部变量重名时容易被搞混。
    3.C中用static表示文件范围内的private作用,用extern表示在其他文件里也可用此变量,相当于public 

以下内容为程序代码:

/* file1.c */
 int i = 10;         /* global */
 static int j = 20;  /* private */
 int get_j(void) {
     return j;
 }

以下内容为程序代码:

 /* file2.c */
 #include <stdio.h>
 int main() {
     extern int i;
     /* extern optional for functions: */
     int get_j(void);
    
     printf("i == %d/n", ++i); /* i == 11 */
     printf("j == %d/n", get_j()); /* j == 20 */
     return 0;
 }

       <五>指针 
      1.#ifndef. 
    比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大

量的声明冲突。把头文件的内容都放在#ifndef和#endif中。这时就可以不管你的头文件会被多个文件引用。一般格式是这样的:

    #ifndef  <标识>
    #define <标识>
    ......
    ......
    #endif

     2.指针
1>例子

以下内容为程序代码:
/* pptr.c: Illustrates pointers to pointers */
 #include <stdio.h>
 int main() {
     int i = 7, *ip = &i, **ipp = &ip;          //注意给指针赋值的方式,是给地址
     printf("Address %p contains %d/n", ip, *ip);
     printf("Address %p contains %p/n", ipp, *ipp);
     printf("**ipp == %d/n", **ipp);
     return 0;
 }


==========output===================
 Address 0012FF88 contains 7
 Address 0012FF84 contains 0012FF88
 **ipp == 7
===================================

2>只要搞清楚一下几个问题,指针就没有问题了:   
    1) *p是什么?所指向的内容的值
    2) &p是什么?存放本指针的地址
    3) p是什么?存放直接所指向内容的地址
    4) 其他情况,一对&*可以互相抵消,用(&*)p=()p这个公式进行替换。


    3.给指针分配内存 
定义在 <stdlib.h>:
 void* malloc(size_t size); //size_t表示unsigned int
 void  free(void *ptr); //释放内存

   4.复习结构体的例子  

以下内容为程序代码:

/* structarg.c: Passes a struct by address */
 #include <stdio.h>
 struct Date {
     int year;
     int month;
     int day;
 };
 void printDate(struct Date* p) {
     printf("%2d/%2d/%02d", p->month, p->day,
                            p->year);
 }
 int main() {
     struct Date d = {98, 10, 2};
     printDate(&d);
     return 0;
 }

==========output===================
 10/ 2/98
===================================

    5.复习typedef的例子 

以下内容为程序代码:

struct Foo {
     int x;
     int y;
 };
 typedef struct Foo Foo;
 Foo f; /* struct not needed */

     6.指针和数组
1>在一维数组里面可以用指针进行移位读取,路人皆知。
2>在多维数组里,还是要通过一维的方式进行,例子

以下内容为程序代码:

    int a[][4] = {{0,1,2,3},{4,5,6,7},{8,9,0,1}};
    int (*p)[4] = a;  
    for (i = 0; i < 3; ++i) {
         int j;
         for (j = 0; j < 4; ++j)
             printf("%d ",p[i][j]);
         putchar('/n'); 
    } 


    7.指针和const 
const 在*之前表示指针指向的内容不变
const 在*之后表示指针的地址不变
volatile observes the same syntax
 const char* p1;        /* *p1 = ‘c’ illegal; ++p1 OK */
 char* const p2;        /* *p2 = ‘c’ OK; ++p2 illegal */
 const char* const p3;  /* no changes at all allowed */

     8.指针和函数引用
1>基本例子

以下内容为程序代码:

/* fptr.c */
 #include <stdio.h>
 int main() {
     int i = 1;
     int (*fp)(const char*, ...) = printf;          //用到了变长参数
     fp("i == %d/n", i);       /* or (*fp)(" i == ...); */
     return 0;
 } 


 2>高级例子

以下内容为程序代码:

/* menu.c:  Illustrates an    array of function ptrs */
 #include <stdio.h>
 /* You must provide definitions for these: */
 extern void retrieve(void);
 extern void insert(void);
 extern void update(void);
 /* Returns keypress: */
 extern int show_menu(void);
 int main() {     int choice;
     void (*farray[])(void) =
         {retrieve,insert,update};
     for (;;) {
         choice = show_menu();
         if (choice >= 1 && choice <= 3)
             /* Process request: */
             farray[choice-1]();
           else if (choice == 4) 
            break;
     }
     return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值