C第六天

空语句:仅包含一个分号的语句。
int i = 10;
printf ("%d\n", i);
; // 空语句
空语句经常用来表示空循环体。在while/for循环中的圆括号后误写分号,意外形成了空循环,有可能导致错误的结果。
练习:打印图形
令h=4,d=2
                             行  空格            星号
            *                0   8                 1
         *****             1   6                 5
      *********          2   4                 9
   *************      3    2                13
*****************   4    0                17
                               i    (h-i)*d        i*d*2+1
   *************       1    2               13
       *********          2   4               9
          *****             3   6                5
             *                4    8               1
                               i     i*d           (h-i)*d*2+1
4.跳转
goto 标号;
使控制流直接跳转到标号所对应的语句行。
第四课    数组
一、基本概念
数组是用来存储多个类型相同的数据的数据结构——容器。
1.多个,类型相同。
2.数组是一段连续的内存区域。
3.数组变量的本质就是其首字节的地址。
4.数组是数据的容器,而非数据本身。
5.数组中的每个数据项被称为数组的元素,一个数组包括一到多个元素。数组中元素的个数被称为数组的长度。
6.数组下标就是元素在数组中的索引号,从零开始。
7.数组元素通过数组名和下标的组合进行访问,[]叫做下标运算符:数组名[下标],表示数组中第“下标”个元素。
二、数组的定义
元素类型 数组名[长度(元素个数)] = {初始化表};
int arr[10];
arr是个数组,其中包含10个元素,每个元素都是int类型的。
类型定义:从近到远,由右向左,括号优先。
arr[0] = 100; // 将100赋值给arr数组的第0个元素。
printf ("%d", arr[8]); // 打印arr数组的第8个元素。
有效元素:arr[0], arr[1], ..., arr[9]
printf ("%d", arr[10]); // 越界
arr[10] = 100; // 可能引发错误
arr[12] = 200; // 可能引发错误
arr[i]是数组元素,i数组元素的下标,从0到数组的长度-1。超出此范围,将导致段错误或者覆盖其它变量。
三、数组的使用
1.数组的初始化
int arr[10] = {100,200,300,400,500,600,700,800,900,1000};
依次取初始化表中的值对数组中的每个元素进行初始化。
int arr[10] = {100, 200, 300};
初始化没有显示指明初始值的元素,一律初始化为零。
int arr[10] = {0}; // 全部初始化为0
int arr[10] = {}; // 全部初始化为0
int arr[10]; // 不做初始化
如果在定义数组时不指定长度,则取初始化表的长度作为数组的长度。
int arr[] = {1,2,3,4,5}; // 等价于int arr[5] = {1,2,3,4,5}
int arr[]; // 错误!
计算数组长度:sizeof (arr) / sizeof (arr[0])
练习:输入10个整数,逆序输出。
注意:
1)键盘->键盘缓冲区->程序输入缓冲区->程序变量。对于scanf("%d", &i),如果输入的数据不是int而是字符,scanf读不走这些字符,该字符会一直留在程序输入缓冲区中,进而影响后续scanf的读取操作。解决方案:
scanf ("%*[^\n]"); // 忽略(丢弃)缓冲区中除\n以外的全部字符
scanf ("%*c"); // 忽略(丢弃)\n字符
经过这两步,使程序输入缓冲区处于干净的状态,后续的scanf读取可以正常工作。
2)程序变量->程序输出缓冲区->显示缓冲区->显示器。printf并不会立即将所要打印的数据放到显示器上显示,而是将其放入程序输出缓冲区中。而只有在以下时机,该缓冲区中的内容才会真的被同步到显示设备上:
a.遇到\n;
b.程序结束;
c.缓冲区满;
d.需要输入;
e.手动更新缓冲区(setbuf/setbuffer);
f.手动刷新流(fflush)。
四、变长数组
int arr[10]; // 定长数组
int arr[] = {1,2,3,4,5}; // 定长数组
int len = 10;
int arr[len]; // 变长数组
练习:输入某班的学生人数以及每个学生的考试成绩,输出总分、平均分和最高分。
筛法求素数。
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
                                                 ^
2 3 5 7 11 13 17
五、多维数组








二维数组:由多个一维数组组成的数组。二维数组的元素是一维数组。
int arr[5][10];
arr是一个包含5个元素的数组,其中每个元素都是一个包含10个元素的数组,其中每个元素都是int类型的。
arr[0]代表arr的第0个元素,是一个一维数组。
arr[0][0]代表代表arr的第0个元素的第0个元素。
arr[i][j]代表arr的第i个元素的第j个元素。
N维数组:由多个N-1维数组组成的数组。N维数组的元素是N-1维数组。
一维数组元素的类型 二维数组名[二维数组长度][一维数组长度];
double matrix[3][4];
double matrix[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
double matrix[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
其中,二维数组长度可以省略,但一维数组长度不能省略。
int a[2][3] = {0};
int a[][3] = {{1,2},{0}};
int a[][3] = {1,2,3,4,5,6};
int a[2][3] = {{1,2},{3,4},{5,6}}; // error !


#include <stdio.h>

int main (void) {
    int n = 1234;
    int arr[10], i;
    for (i = 0; i < 10; i++)
        arr[i] = (i+1)*100;
    for (i = 0; i < 10; i++)
        printf ("%d ", arr[i]);
    printf ("\n");
    printf ("n=%d\n", n);
    arr[10] = 4321; // 越界
    printf ("n=%d\n", n);
    printf ("%u,%u\n", arr, &n);
    return 0;

}

#include <stdio.h>
int main (void) {
    printf ("hello\n");
    goto mw;
    printf ("world\n");
    printf ("tarena\n");
mw:
    printf ("minwei\n");
    int i;
    /*
    for (i = 0; i < 10; i++)
        printf ("%d ", i);
    */
    i = 0;
loop:
    if (i < 10) {
        printf ("%d ", i);
        i++;
        goto loop;
    }
    printf ("\n");
    int j;
    for (i = 0; i < 1000; i++)
        for (j = 0; j < 1000; j++) {
            printf ("%d,%d\n", i, j);
            if (i == 10 && j == 10)
                goto escape;
        }
escape:
    for (;;) {
        printf ("[1] 打开文件\n");
        printf ("[2] 关闭文件\n");
        printf ("[3] 退出\n");
        int select;
        scanf ("%d", &select);
        switch (select) {
            case 1:
                printf ("打开文件...\n");
                break;
            case 2:
                printf ("关闭文件...\n");
                break;
            case 3:
                printf ("再见!\n");
goto quit;
        }
    }
quit:
    // 善后工作...
    return 0;
}


#include <stdio.h>
int main (void) {
  int ma[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  int mb[][4] = {12,11,10,9,8,7,6,5,4,3,2,1};
  int mc[3][4], i, j;
  for (i = 0; i < 3; i++)
    for (j = 0; j < 4; j++)
      mc[i][j] = ma[i][j] + mb[i][j];
  printf ("ma+mb=\n");
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 4; j++)
      printf ("%4d", mc[i][j]);
    printf ("\n");
  }
  int md[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
  int me[3][3] = {0}, k;
  for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
      for (k = 0; k < 4; k++)
        me[i][j] += ma[i][k] * md[k][j];
  printf ("ma*md=\n");
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++)
      printf ("%4d", me[i][j]);
    printf ("\n");
  }
  return 0;
};

#include <stdio.h>
int main (void) {
  printf ("请输入10个整数:\n");
  int arr[10] = {0}, i;
  for (i = 0; i < sizeof (arr) / sizeof (arr[0]); i++) {
    scanf ("%d", &arr[i]);
    scanf ("%*[^\n]");
    scanf ("%*c");
  }
  printf ("逆序:\n");
  for (i--; i >= 0; i--)
    printf ("%d\n", arr[i]);
  return 0;
}


#include <stdio.h>
int main (void) {
    int i;
    /*
    for (i = 1; i <= 100; i++)
        if (i % 2)
            printf ("%d ", i);
    */
    /*
    for (i = 1; i <= 100; i += 2)
        printf ("%d ", i);
    */
    for (i = 1; i <= 100; printf ("%d ", i), i += 2);
    printf ("\n");
    return 0;
}

#include <stdio.h>
#include <math.h>
int main (void) {
    printf ("请输入一个整数:");
    int max;
    scanf ("%d", &max);
    int i = 2;
    while (i <= max) {
        int j = sqrt (i);
        while (j > 1) {
            if (i % j == 0)
                break;
            j--;
        }
        if (j == 1)
            printf ("%d ", i);
        i++;
    }
    printf ("\n");
    return 0;
}

#include <stdio.h>
int main (void) {
  setbuf (stdout, NULL);
  printf ("hello world");
  //fflush (stdout);
  for (;;);
  return 0;
}

#include <stdio.h>
int main (void) {
  printf ("学生人数:");
  int sts;
  scanf ("%d", &sts);
  float scores[sts];
  int i;
  for (i = 0; i < sts; i++) {
    printf ("第%d个学生:", i+1);
    scanf ("%f", &scores[i]);
  }
  float total = 0;
  int max = 0;
  for (i = 0; i < sts; i++) {
    total += scores[i];
    if (i != max && scores[i] > scores[max])
      max = i;
  }
  printf ("总分:%g,平均分:%g,最高分:%g\n", total, total / sts, scores[max]);
  return 0;
}

#include <stdio.h>
int main (void) {
  printf ("请输入一个整数:");
  int max;
  scanf ("%d", &max);
  int sieve[max], i, j;
  for (i = 0; i < max; i++)
    sieve[i] = i + 1;
  for (i = 0; i < max; i++) {
    while (i < max && sieve[i] == 1)
      i++;
    if (i < max) {
      printf ("%d ", sieve[i]);
      for (j = i; j < max; j += i + 1)
        sieve[j] = 1;
    }
  }
  printf ("\n");
  return 0;
}

#include <stdio.h>
int main (void) {
    int h = 6, d = 3, i, j;
    for (i = 0; i <= h; i++) {
        for (j = 0; j < (h - i) *d; j++)
            printf (" ");
        for (j = 0; j < i * d * 2 + 1; j++)
            printf ("*");
        printf ("\n");
    }
    for (i = 1; i <= h; i++) {
        for (j = 0; j < i * d; j++)
            printf (" ");
        for (j = 0; j < (h - i) * d * 2 + 1; j++)
            printf ("*");
        printf ("\n");
    }
    return 0;
}

#include <stdio.h>
int main (void) {
  char sz[256] = {'h','e','l','l','o',' ','w','o','r','l','d',0};
  printf ("%s\n", sz);
  char sz2[] = "hello world";
  printf ("%s\n", sz2);
  printf ("%d\n", sizeof (sz2));
  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值