zoukankan      html  css  js  c++  java
  • c语言程序设计案例教程(第2版)笔记(一)—零散、输入输出、最小公倍数、选择排序、冒泡排序

    零散知识点:

    • 非格式化输入输出:getchar()、putchar()
    • 格式化输入输出   :scanf()、printf()
    • 字符串输入输出   :gets() 或 scanf()、puts() 或 printf()。
    1. gets()函数以换行符或文件结束符EOF作为输入的结束标志,因此,在输入的字符串中允许包含空格或制表符。
    2. scanf()函数则以空格、制表符、换行符和文件结束符EOF作为输入的结束标志,因此,在输入的字符串中不允许包含这些字符。
    3. puts()函数在字符串显示完毕后换行。
    4. printf()函数不会进行换行。
    • %f  表示这个位置应该输入一个实型数值
    • %s  表示这个位置应该输入一个字符串
    • break语句的目的是:终止执行后面分支的语句序列。
    • continue语句只能应用在循环语句中,它的作用是:强制终止本次循环的执行,转去执行下一次循环。
    • 交换两个数值(不引入外部参数)
     1 #include<stdio.h>
     2 #pragma warning(disable:4996)
     3 
     4 main()
     5 {
     6     int m, n;
     7     printf("Enter two numbers:");
     8     scanf("%d%d", &m, &n);
     9     printf("
    m:%d
    ", m);
    10     printf("n:%d
    ", n);
    11     m = m + n;
    12     n = m - n;
    13     m = m - n;
    14     printf("
    m:%d
    ", m);
    15     printf("n:%d
    ", n);
    16 }
    • 求最小公倍数:首先比较大小(大小排序),后使用辗转相除法,求出最大公约数(被除数/除数=商…余数,后使用除数除以余数,直至余数为0;),再使用两个数的乘积除以该最大公约数,即可。

    代码如下:

     1 #include<stdio.h>
     2 #pragma warning(disable:4996)
     3 
     4 main(){
     5     int i, j, temp, s;
     6 
     7     printf("Enter two integers : ");
     8     scanf("%d%d", &i, &j);
     9     s = i*j;
    10 /*    if (i < j){
    11         i += j;
    12         j = i - j;
    13         i = i - j;
    14     }*/
    15 
    16     do{
    17         temp = i%j;
    18         i = j;
    19         j = temp;
    20     } while (j>0);
    21     printf("the max gongyueshu: %d
    ", i);
    22     printf("the min gongbeishu: %d
    ", s / i);
    23 }

     1 #include<stdio.h>
     2 #pragma warning(disable:4996)
     3 int gcd(int m, int n);
     4 
     5 main(){
     6     int i, j, s;
     7     int r;
     8 
     9     printf("111Enter two integers : ");
    10     scanf("%d%d", &i, &j);
    11     s = i*j;
    12     /*    if (i < j){
    13     i += j;
    14     j = i - j;
    15     i = i - j;
    16     }*/
    17     r = gcd(i, j);
    18     printf("the max gongyueshu: %d
    ", r);
    19     printf("the min gongbeishu: %d
    ", s / r);
    20 }
    21 
    22 int gcd(int m, int n)
    23 {
    24     if (m % n == 0)
    25         return n;
    26     else
    27         return gcd(n, m%n);
    28 }
    • 一维数组:变量一经定义,系统将会为每个数组型变量分配一片连续的存储空间。
    • 32位操作系统,int类型是4字节。
    • int vote[10]={0} 表示为每一个元素赋予初值0。
    • 采用键盘输入的方式为数组中的每个元素赋值:
    1 int i;
    2 int score[13];
    3 for (i = 0; i < 13; i++){
    4     scanf("%f", &score[i]);
    5 }
    • 判断是否为英文字母
      1. ('A'<=ch && ch <='Z') || ('a<=ch && ch <='z') 
      2. isalpha(c)    c是一个字符,头文件是<ctype.h>。当c为英文字母,函数返回非0;否则函数返回0。
    • 选择排序法
    1. 基本思路:假设有n个数据将要参与排序操作,则具体的排序过程可以描述为:首先从n个数据中选择一个最小的数据,并将它交换到第1个位置;然后再从后面n-1个数据中选择一个最小的数据,并将它交换到第2个位置;以此类推,直至最后从两个数据中选择一个最小的数据,并将它交换到第n-1个位置为止,整个排序操作结束。
    2. 选择排序代码实现过程:
     1 #include<stdio.h>
     2 #pragma warning(disable:4996)
     3 #define NUM 10
     4 
     5 main()
     6 {
     7     int data[NUM];
     8     int i, j, min, temp;
     9 
    10     printf("Please enter %d integers:", NUM);
    11     for (i = 0; i < NUM; i++){
    12         scanf("%d", &data[i]);
    13     }
    14 
    15     printf("
    %d integers are:
    ", NUM);
    16     for (i = 0; i < NUM; i++){
    17         printf("%5d", data[i]);
    18     }
    19 
    20     for (i = 0; i < NUM - 1; i++){
    21         min = i;
    22         for (j = i + 1; j < NUM; j++){
    23             if (data[j] < data[min])
    24                 min = j;
    25         }
    26         if (min != i){
    27             temp = data[i];
    28             data[i] = data[min];
    29             data[min] = temp;
    30         }
    31     }
    32 
    33     printf("
    Ordering list is:
    ");
    34     for (i = 0; i < NUM; i++){
    35         printf("%5d", data[i]);
    36     }
    37 }
    • 冒泡排序法
    1. 基本思路:不断地将所有的相邻数据进行比较,如果前面的数据大于后面的数据(a[j]>a[j+1]),就将两个位置的数据进行交换,最终实现所有的数据按照非递减的顺序重新排列。(如果有n个数据等待排序,则最多经过n-1次冒泡排序就可以将所有的数据排列好)
    2. 具体过程:
    • 将整个待排序的数据序列划分成有序区域和无序区域。初始状态有序区域为空,无序区域包括所有待排序的数据;
    • 对无序区域从前向后依次对相邻的两个数据进行比较,若逆序则将其交换,从而使得较小的数据像泡沫一样向前,较大的数据向后;
    • 冒泡排序代码实现过程:
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #pragma warning(disable:4996)
     4 #define NUM 10
     5 void input(int value[]);
     6 void output(int value[]);
     7 void sort(int value[]);
     8 
     9 main()
    10 {
    11     int value[NUM];
    12     input(value);
    13     output(value);
    14     sort(value);
    15     output(value);
    16 }
    17 
    18 //输入待排序列
    19 void input(int value[])
    20 {
    21     int i;
    22 
    23     printf("Enter %d integers : ", NUM);
    24     for (i = 0; i < NUM; i++){
    25         scanf("%d", &value[i]);
    26     }
    27 }
    28 
    29 //输出显示数据数列
    30 void output(int value[])
    31 {
    32     int i;
    33 
    34     printf("
    ");
    35     for (i = 0; i < NUM; i++){
    36         printf("%5d", value[i]);
    37     }
    38 }
    39 
    40 //冒泡排序函数
    41 void sort(int value[])
    42 {
    43     int i, j, temp;
    44 
    45     for (i = NUM - 1; i >= 1; i--){     /*控制排序次数*/
    46         for (j = 0; j < i; j++){        /*相邻数据比较大小*/
    47             if (value[j] < value[j + 1]){
    48                 temp = value[j];
    49                 value[j] = value[j + 1];
    50                 value[j + 1] = temp;
    51             }
    52         }
    53     }
    54 }
    • 在C语言中,字符串用字符型数组存储,并且以“”作为结束标志。结束标志“”是由系统自动添加到字符序列尾部的。结束标志“”不被计算在字符串的长度中。
    • 字符串标准函数,头文件<string.h>:
    1. strlwr(str)——将字符串str中出现的所有大写字母转换成小写字母;
    2. strupr(str)——将字符串str中出现的所有小写字母转换成大写字母;
    3. strlen(str)——计算字符串长度,字符串结束标志“”不计算在内;
    4. strcmp(str1,str2)——比较字符串。str1<str2,函数返回一个负整数。区分大小写。可用来检测用户密码。
    5. stricmp(str1,str2)——比较字符串。str1<str2,函数返回一个负整数。不区分大小写。
    6. strcpy(str1,str2)——str2是将要被拷贝的字符串,str1是用于存放拷贝结果的存储区域。
    7. strcat(str1,str2)——将str2连接到str1之后。
    8. strstr(str1,str2)——检测主串str1中是否存在给定子串str2,函数返回子串str2在主串中第一次出现的位置;否则返回空。
    9. strchr(str1,ch)——检测给定字符ch是否在字符串str1中存在,函数返回ch在str1中第一次出现的位置;否则返回空。
    • 二维数组的赋值与输出
     1 #define ROW 6
     2 #define COL 4
     3 int i, j;
     4 int value[ROW][COL];
     5 
     6 //利用赋值语句
     7 for (i = 0; i < ROW; i++){
     8     for (j = 0; j < COL; j++){
     9         value[i][j] = i + j;
    10     }
    11 }
    12 //通过键盘输入
    13 for (i = 0; i < ROW; i++){
    14     for (j = 0; j < COL; j++){
    15         scanf("%d", &value[i][j]);
    16     }
    17 }
    18 //输出二维数组
    19 for (i = 0; i < ROW; i++){
    20     for (j = 0; j < COL; j++){
    21         printf("%4d", value[i][j]);
    22     }
    23     putchar('
    ');
    24 }

    程序一:

    功能描述:输入一个整数n,打印输出一个由n个字符星号“*”组成的等边三角形。

     1 #include <stdio.h>
     2 
     3 main()
     4 {
     5     int n, i, j;
     6     printf("please enter the side of the triangle:");
     7     scanf_s("%d", &n);
     8     for (i = 1; i <= n; i++){
     9         for (j = 1; j <= n - i; j++){
    10             putchar(' ');
    11         }
    12         for (j = 1; j <= i; j++){
    13             putchar('*');
    14             if (j != i){
    15                 putchar('_');
    16             }
    17         }
    18         putchar('
    ');
    19     }
    20 }

    结果:

    程序二:

    功能描述:输入文本行,统计其中包含的行数、单词书、字符数。

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include<string.h>
     4 #pragma warning(disable:4996)
     5 
     6 #define IN 1 /* inside a word */
     7 #define OUT 0 /* outside a word */
     8 /* count lines, words, and characters in input */
     9 main()
    10 {
    11     int c, nl, nw, nc, state;
    12     state = OUT;
    13     nl = nw = nc = 0;
    14     while ((c = getchar()) != 'END')
    15     {
    16         ++nc;
    17         if (c == '
    ')
    18             ++nl;
    19         if (c == ' ' || c == '
    ' || c == '	')
    20             state = OUT;
    21         else if (state == OUT) {
    22             state = IN;
    23             ++nw;
    24         }
    25     }
    26     printf("%d %d %d
    ", nl, nw, nc);
    27 }

     程序三:

    功能描述:输出当年当月的月历。

     1 #include <stdio.h>
     2 
     3 main()
     4 {
     5     int n, i, j;
     6     
     7     scanf_s("%d", &n);
     8 
     9     if (n == 7)
    10         n = 0;
    11     else
    12         n = n;
    13 
    14     printf(" Sun Mon Tue Wed Tur Fri Sat
    ");
    15 
    16     for (i = 1; i <= n; i++){
    17         printf("%4c", ' ');
    18     }
    19     for (j = 1; j <= 30; j++){
    20         if ((j + n) % 7 == 0){
    21             printf("%4d", j);
    22             printf("
    ");
    23         }
    24         else{
    25             printf("%4d", j);
    26         }
    27     }
    28     return 0;
    29 }

    结果:

    程序四:

    功能描述:菲波那切数列。

     1 #include<stdio.h>
     2 #define NUM 20
     3 
     4 main()
     5 {
     6     int fib[NUM];
     7     int i;
     8 
     9     fib[0] = 0;
    10     fib[1] = 1;
    11     for (i = 2; i < NUM; i++){
    12         fib[i] = fib[i - 2] + fib[i - 1];
    13     }
    14     for (i = 0; i < NUM; i++){
    15         if (i % 10 == 0)
    16             printf("
    ");
    17         printf("%6d", fib[i]);
    18     }
    19 }

    结果:

    程序五:

    功能描述:输入一个文本行,其中包含多个单词,计算其中最长的单词长度。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #pragma warning(disable:4996)
     5 
     6 main()
     7 {
     8     char str[1000];
     9     int i, m = 0, L = 0, x = 0;
    10     printf("please enter text line:");
    11     gets(str);
    12     for (i = 0; i < strlen(str); i++){
    13         if (str[i] >= 'a'&&str[i] <= 'z' || str[i] >= 'A'&&str[i] <= 'Z'){
    14             m++;
    15             continue;
    16         }
    17         else{
    18             if (m>L){
    19                 L = m;
    20             }
    21             m = 0;
    22         }
    23     }
    24     if (m > L){
    25         L = m;
    26     }
    27     printf("the long of the largest word is %d", L);
    28 }

    本博客内容为原创,版权所有违者必究,转载请注明来源 http://www.cnblogs.com/sunshine-blog/ 

  • 相关阅读:
    微擎 关注发送推荐消息
    修改 processor.php 文件,监听用户对该应用的消息
    微擎返回图文信息
    微擎客服消息发送的函数
    mui 底部导航栏的实现
    两张表的关联查询
    微擎 截取字符串
    webStorm中NodeJs 没有智能提示
    OpenCV 实现自己的线性滤波器
    OpenCV 基本的阈值操作
  • 原文地址:https://www.cnblogs.com/sunshine-blog/p/8342544.html
Copyright © 2011-2022 走看看