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/ 

  • 相关阅读:
    C/C++多文件之间的变量定义
    PKU POJ 2186 Popular Cows 强连通分量
    重载函数
    ZOJ 2763 Prison Break
    201357 训练赛总结
    hdu 4467 Graph 构造
    201356 训练赛总结
    201353 NEERC 2012, Eastern subregional contest
    2013512 CF 183 总结
    一道动态规划
  • 原文地址:https://www.cnblogs.com/sunshine-blog/p/8342544.html
Copyright © 2011-2022 走看看