本次实验要求熟悉开发环境,掌握选择和循环结构

熟悉C语言开发环境 - VS Code

启动 Code 软件,在左侧项目文件夹中新建 C语言源程序(注意文件名以.c为后缀。

程序编写完毕后,点击右上角 三角形图标按钮进行编译运行,如果有错,根据提示的行数进行修改,直至无错(可不理会警告)。

编写如下程序

  1. 输入2个整数,将大者输出。
  2. 使用switch语句,输入一个数字,输出对应的星期几(如5则输出Friday)。
  3. 使用switch语句编写一个简单的计算器(+-*/)。如当用户输入2+3时输出结果。
  4. 使用while语句,依次输出1~100中的偶数,每行五个,每个数字占5个字符宽度。
  5. 使用for语句,输出1+2+3+...+99+100的结果。
  6. 求 1!+2!+...+9!+10!的结果。
  7. 输出一个用*组成的倒三角形图案。
  8. 求1.5元钱兑换成1、2、5分硬币的方案。
  9. 
    /*输入2个整数,将大者输出。*/
    #include <stdio.h>
    void main(){
        int a,b,max;
        printf("Please input 2 number:");
        scanf("%d%d",&a,&b);
        if(a > b){
            max = a;
        }else{
            max = b;
        }
        printf("Max:%d\n", max);
    }
    
    /*使用switch语句,输入一个数字,输出对应的星期几(如5则输出Friday)。*/
    #include "stdio.h"
    void main(){
        int n;
        printf("Please input a integer number:");
        scanf("%d", &n);
        switch(n){
            case 1: printf("MON\n");break;
            case 2: printf("TUE\n");break;
            case 3: printf("WED\n");break;
            case 4: printf("THE\n");break;
            case 5: printf("FRI\n");break;
            case 6: printf("SAT\n");break;
            case 7: printf("SUN\n");break;
            default: printf("Error!\n");break;
        }
    }
    
    /*使用switch语句编写一个简单的计算器(+-×÷)。如当用户输入2+3时输出结果。*/
    #include "stdio.h"
    void main(){
        float a,b;
        char c;
        printf("Please input(like 1+2):");
        scanf("%f%c%f", &a, &c, &b);
        switch(c){
            case '+': printf("%.2f%c%.2f=%.2f\n", a, c, b, a + b);break;
            case '-': printf("%.2f%c%.2f=%.2f\n", a, c, b, a - b);break;
            case '*': printf("%.2f%c%.2f=%.2f\n", a, c, b, a * b);break;
            case '/': printf("%.2f%c%.2f=%.2f\n", a, c, b, a / b);break;
            default: printf("Error!\n");break;
        }
    }
    
    
    /*使用while语句,依次输出1~100中的偶数,每行五个,每个数字占5个字符宽度。*/
    #include "stdio.h"
    void main(){
        int i, n=1;
        for(i = 2; i <= 100; i+=2){
            printf("%5d", i);
            if(n % 5 == 0){
                putchar('\n');
            }
            n++;
        }
    }
    
    
    /*使用for语句,输出1+2+3+...+99+100的结果。*/
    #include "stdio.h"
    void main(){
        int i, sum = 0;
        for(i = 1; i <= 100; i++){
            sum += i;
        }
        printf("1+2+3+...+99+100 = %d\n", sum);
    }
    
    
    /*求 1!+2!+...+9!+10!的结果。*/
    #include "stdio.h"
    void main(){
        int i, jc = 1, sum = 0;
        for(i = 1; i <= 10; i++){
            jc = jc * i;
            sum += jc;
        }
        printf("1!+2!+3!+...+9!+10! = %d\n", sum);
    }
    
    
    /*输出一个用*组成的倒三角形图案。*/
    #include "stdio.h"
    void main(){
        int i, j;
        for(i = 10; i >= 1; i--){
            printf("          ");
            for(j = 1; j <= 10 - i + 1; j++){
                printf(" ");
            }
            for(j = 2 * i - 1; j >= 1; j--){
                printf("*");
            }
            printf("\n");
        }
    }
    
    
    /*求1.5元钱兑换成1、2、5分硬币的方案*/
    #include "stdio.h"
    void main(){
        int i, j, k, n=0;
        for(i = 0; i <= 150; i++){
            for(j = 0; j <= 75; j++){
                for(k = 0; k <= 30; k++){
                    if(i + j *2 + k * 5 == 150){
                        n++;
                        printf("No.%d: %d %d %d\n", n, i, j, k);
                    }
                }
            }
        }
    }
    

课后思考及练习

  1. 输出3-1000内的素数。
  2. 输出Fibonacci(1,1,2,3,5,8,13,21...)数列的前20项。
  3. 一个三位整数的各位数字的立方之和等于其本身,该数则称为“水仙花数”,输出全部的水仙花数。
  4. 任意输入一个正整数,倒序输出(如输入12345,则输出54321)。
  5. 12个苹果,除有1个重量与其它11个不同外,其余都相同,现用无砝码的天枰称3次,找出该苹果且说出其是比其它轻还是重。
  6. 
    /*输出3-1000内的素数。*/
    #include "stdio.h"
    #include "math.h"
    void main(){
        int n, i, flag;
        for(n = 3; n <= 1000; n++){
            flag = 1;
            for(i = 2; i <= sqrt(n); i++){
                if(n % i == 0){
                    flag = 0;
                    break;
                }
            }
            if(flag == 1){
                printf("%5d", n);
            }
        }
    }
    
    
    /*输出Fibonacci(1,1,2,3,5,8,13,21...)数列的前20项。*/
    #include <stdio.h>
    void main(){
        int f1,f2,f3,i;
        f1 = f2 = 1;
        printf("Fibonacci:\n%5d%5d", f1,f2);
        for(i = 1;i <= 18;i++){
            f3 = f1 + f2;
            printf("%5d", f3);
            f1 = f2;
            f2 = f3;
        }
    }
    
    
    /*一个三位整数的各位数字的立方之和等于其本身,该数则称为“水仙花数”,输出全部的水仙花数。*/
    #include "stdio.h"
    void main(){
        int i,gw,sw,bw;
        for(i = 100;i < 1000;i++){
            gw = i % 10;
            sw = (i / 10) % 10;
            bw = i / 100;
            if(i == gw * gw * gw + sw * sw * sw + bw * bw * bw){
                printf("%5d", i);
            }
        }
    }
    
    
    /*任意输入一个正整数,倒序输出(如输入12345,则输出54321)。*/
    #include "stdio.h"
    void main(){
        int n, num;
        printf("Please input a integer number (>0):");
        scanf("%d", &n);
        while(n > 0){
            num = n % 10;
            printf("%d", num);
            n = n / 10;
        }
    }
    
    
    /*参考程序*/
    #include <stdio.h>
    void main(){
        int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12;
        printf("Please input 12 apple's weight:");
        scanf("%d%d%d%d%d%d%d%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9,&a10,&a11,&a12);
        if(a1+a2+a3+a4>a5+a6+a7+a8){
        //第一次,不同的苹果在1~8中,当前左重右轻
            if(a1+a2+a3+a5>a4+a9+a10+a11){
            //第二次,因为9~11号苹果是标准的,我们又交换了a4和a5,还维持左边重,
            //说明不同的苹果在1~3中,且重一些
                if(a1>a2){//第三次
                    printf("No.1,Weighter\n");
                }else if(a1<a2){//第三次
                    printf("No.2,Weighter\n");
                }else{//第三次
                    printf("No.3,Weighter\n");
                }
            }else if(a1+a2+a3+a5<a4+a9+a10+a11){
            //第二次,因为9~11号苹果是标准的,我们又交换了a4和a5,但现在右边重,
            //说明不同的苹果在4~5中,现在不知道轻重
                if(a4>a1){//第三次,a1是标准的,故4重
                    printf("No.4,Weighter\n");
                }else if(a4<a1){//第三次,a1是标准的,故4轻
                    printf("No.4,lighter\n");
                }else{//第三次,a1是标准的,故5轻
                    printf("No.5,lighter\n");
                }
            }else{//第二次,天平相等,说明不同的苹果在6~8中,且轻
                if(a6>a7){
                    printf("No.7,lighter\n");
                }else if(a6<a7){
                    printf("No.6,lighter\n");
                }else{
                    printf("No.8.lighter\n");
                }
            }
        }else if(a1+a2+a3+a4==a5+a6+a7+a8){
        //第一次,,不同的苹果在9~12中
            if(a1+a2+a3+a4>a5+a9+a10+a11){
            //第二次,不同的苹果在9~11中,且轻一些
                if(a9>a10){//第三次,10轻
                    printf("No.10,lighter\n");
                }else if(a9<a10){//第三次,9轻
                    printf("No.9,lighter\n");
                }else{//第三次,11轻
                    printf("No.11,lighter\n");
                }
            }else if(a1+a2+a3+a4<a5+a9+a10+a11){
            //第二次,不同的苹果在9~11中,且重一些
                if(a9>a10){//第三次,9重
                    printf("No.9,Weighter\n");
                }else if(a9<a10){//第三次,10重
                    printf("No.10,Weighter\n");
                }else{//第三次,11重
                    printf("No.11,Weighter\n");
                }
            }else{//第二次,不同的苹果是12
                if(a1>a12){//第三次,12轻
                    printf("No.12,lighter\n");
                }else if(a1<a12){//第三次,12重
                    printf("No.12,Weighter\n");
                }else{//第三次,输入错误
                    printf("Input Error!\n");
                }
            }
        }else{
        //第一次,不同的苹果在1~8中,当前左轻右重
            if(a1+a2+a3+a5<a4+a9+a10+a11){
            //第二次,因为9~11号苹果是标准的,我们又交换了a4和a5,还维持左边轻,
            //说明不同的苹果在1~3中,且轻一些
                if(a1>a2){//第三次
                    printf("No.2,lighter\n");
                }else if(a1<a2){//第三次
                    printf("No.1,lighter\n");
                }else{//第三次
                    printf("No.3,lighter\n");
                }
            }else if(a1+a2+a3+a5>a4+a9+a10+a11){
            //第二次,因为9~11号苹果是标准的,我们又交换了a4和a5,但现在右边轻,
            //说明不同的苹果在4~5中,现在不知道轻重
                if(a4>a1){//第三次,a1是标准的,故4重
                    printf("No.4,Weighter\n");
                }else if(a4<a1){//第三次,a1是标准的,故4轻
                    printf("No.4,lighter\n");
                }else{//第三次,a1是标准的,故5重
                    printf("No.5,Weighter\n");
                }
            }else{
            //第二次,天平相等,说明不同的苹果在6~8中,且重
                if(a6>a7){//第三次
                    printf("No.6,Weighter\n");
                }else if(a6<a7){//第三次
                    printf("No.7,Weighter\n");
                }else{//第三次
                    printf("No.8.Weighter\n");
                }
            }
        }
    }
    

本次实验要求了解C语言程序由函数构成,能熟练掌握自定义函数。

编写如下程序

  1. 由用户给出次数后,main函数调用welcome函数能打印该次数的欢迎词。
  2. 用户任意输入2个整数,main函数调用getMin函数后得到小的数并输出。
  3. 用户输入要打印的字符和次数,main函数调用myPrint函数后打印指定次数的该字符。
  4. 输出3~100之间的素数,判断是否素数用isPrime函数完成。
  5. 
    /*由用户给出次数后,main函数调用welcome函数能打印该次数的欢迎词。*/
    #include "stdio.h"
    void welcome(int n){
        int i;
        for(i=1;i<=n;i++){
            printf("Welcome to CQ!\n");
        }
    }
    void main(){
        int a;
        printf("Please input a integer number:");
        scanf("%d", &a);
        welcome(a);
    }
    
    
    /*用户任意输入2个整数,main函数调用getMin函数后得到小的数并输出。*/
    #include "stdio.h"
    int getMin(int a, int b){
        int min;
        min = a;
        if(min > b){
            min = b;
        }
        return min;
    }
    void main(){
        int a, b;
        printf("Please input two integer number:");
        scanf("%d%d", &a, &b);
        printf("MIN:%d\n", getMin(a, b));
    }
    
    
    /*用户输入要打印的字符和次数,main函数调用myPrint函数后打印指定次数的该字符。*/
    #include "stdio.h"
    void myPrint(char a, int n){
        int i;
        for(i = 1; i <= n; i++){
            printf("%c", a);
        }
    }
    void main(){
        char a;
        int n;
        printf("Please input a character and a integer number:");
        scanf("%c%d", &a, &n);
        myPrint(a, n);
    }
    
    
    /*输出3~100之间的素数,判断是否素数用isPrime函数完成。*/
    #include "stdio.h"
    #include "math.h"
    int isPrime(int n){
        int i;
        for(i = 2; i <= sqrt(n); i++){
            if(n % i == 0){
                return 0;
            }
        }
        return 1;
    }
    void main(){
        int i;
        for(i = 3; i <= 100; i++){
            if(isPrime(i)){
                printf("%5d", i);
            }
        }
    }
    

课后思考和练习

本次实验要求掌握普通自定义函数、递归函数的编写,掌握全局变量及其用法,掌握变量存储类型中的自动、静态变量及其用法,了解编译预处理。

编写如下程序

  1. 在main函数中输入一个年份,由isLeap函数判断是否为闰年并在main函数中输出结果。(闰年的条件:能被4整除但不能被100整除,或者能被400整除)
  2. 哥德巴赫猜想是:6及其以上的所以偶数都可分解为2个素数之和。请在main函数中对6~100直接的偶数进行判断并输出结果,是否为素数由函数isPrime完成。
  3. 在main函数中输入一个正整数,由fact函数使用递归的方式求出该正整数的阶乘并在main函数中输出结果。
  4. 由fibonacci函数采用递归的方式求出斐波那契数列某项,在main函数中调用该函数并输出其前20项的值。
  5. 在main函数中输入3个数,函数noReturn(无返回值)计算出这3个数的平均值、最大值和最小值,由main函数输出结果。(注意:请使用全局变量)
  6. 
    /*在main函数中输入一个年份,由isLeap函数判断是否为闰年并在main函数中输出结果。(闰年的条件:能被4整除但不能被100整除,或者能被400整除)*/
    #include "stdio.h"
    int isLeap(int year){
        int result = 0;
        if((year % 4 == 0 && year % 100 != 0) || (year % 400 ==0)){
            result = 1;
        }
        return result;
    }
    void main(){
        int year;
        printf("Please input a year:");
        scanf("%d", &year);
        if(isLeap(year)){
            printf("%d is leap year!\n", year);
        }
    }
    
    
    /*哥德巴赫猜想是:6及其以上的所以偶数都可分解为2个素数之和。请在main函数中对6~100直接的偶数进行判断并输出结果,是否为素数由函数isPrime完成。*/
    #include "stdio.h"
    #include "math.h"
    int isPrime(int n){
        int i;
        for(i = 2; i <= sqrt(n); i++){
            if(n % i == 0){
                return 0;
            }
        }
        return 1;
    }
    void main(){
        int i,j;
        for(i = 6; i <= 100; i+=2){
            for(j = 2;j <= i/2;j++){
                if(isPrime(j)&&isPrime(i-j)){
                    printf("%d=%d+%d\n", i, j, i-j);
                }
            }
        }
    }
    
    
    /*在main函数中输入一个正整数,由fact函数使用递归的方式求出该正整数的阶乘并在main函数中输出结果。*/
    #include "stdio.h"
    int fact(int n){
        if(n == 0){
            return 1;
        }else{
            return n * fact(n - 1);
        }
    }
    void main(){
        int n;
        do{
            printf("Please input a integer number(>=0):");
            scanf("%d", &n);
        }while(n < 0);
        printf("%d!=%d\n", n, fact(n));
    }
    
    
    /*由fibonacci函数采用递归的方式求出斐波那契数列某项,在main函数中调用该函数并输出其前20项的值。*/
    #include "stdio.h"
    int fibonacci(int n){
        if(n == 1 || n == 2){
            return 1;
        }else{
            return fibonacci(n - 1) + fibonacci(n - 2);
        }
    }
    void main(){
        int i;
        for(i = 1; i <=20; i++){
            printf("%5d", fibonacci(i));
            if(i % 5 == 0){
                printf("\n");
            }
        }
    }
    
    
    /*在main函数中输入3个数,函数noReturn(无返回值)计算出这3个数的平均值、最大值和最小值,由main函数输出结果。(注意:请使用全局变量)*/
    #include "stdio.h"
    float average;
    int min, max;
    void noReturn(int a, int b, int c){
        average = (a + b + c) / 3.0;
        min = a;
        if(min > b){
            min = b;
        }
        if(min > c){
            min = c;
        }
        max = a;
        if(max < b){
            max = b;
        }
        if(max < c){
            max = c;
        }
    }
    void main(){
        int a, b, c;
        printf("Please input 3 integer number:");
        scanf("%d%d%d", &a, &b, &c);
        noReturn(a, b, c);
        printf("Average:%.2f, Min:%d, Max:%d\n", average, min, max);
    }
    

课后思考和练习

本次实验要求掌握数值型一维数组、二维数组以及字符数组的使用。

编写如下程序

  1. 输入10个数到数组,输出比平均值小的数。
  2. 利用数组求Fibonacci数列的前20项并按每行5个输出。
  3. 输入10个数到数组,从小到大排序后输出。
  4. 一个3×4的矩阵已经有数据(也即已经初始化),请输出其转置矩阵。
  5. 一个3×4的矩阵已经有数据(也即已经初始化),请输出最大的数及其所在的行和列。
  6. 某班有4个同学,学习了3门课程,求各课程和各同学的平均分。
  7. 有字符串“I love you”,请分别使用scanf函数的%s格式控制符以及gets函数进行输入,用puts函数输出,了解这两个输入函数的区别。
  8. 编程练习strcpy()、strcat()、strcmp()以及strlen()函数的用法。
  9. 编写自定义函数myStrcat()和myStrlen()完成系统函数strcat()和strlen()的功能。
  10. 从键盘上输入一行文字,分别统计出大写字母、小写字母、数字字符、空格以及其它字符的个数。
  11. 
    /*输入10个数到数组,输出比平均值小的数。*/
    #include "stdio.h"
    void main(){
        int a[10], sum = 0, average, i;
        for(i = 0; i < 10; i++){
            printf("Please input No.%d:", i + 1);
            scanf("%d", &a[i]);
        }
        for(i = 0; i < 10; i++){
            sum += a[i];
        }
        average = sum / 10;
        for(i = 0; i < 10; i++){
            if(a[i] < average){
                printf("%5d", a[i]);
            }
        }
    }
    
    
    /*利用数组求Fibonacci数列的前20项并按每行5个输出。*/
    #include "stdio.h"
    void main(){
        int a[20], i;
        a[0] = a[1] = 1;
        for(i = 2; i < 20; i++){
            a[i] = a[i-1] + a[i-2];
        }
        for(i = 0; i < 20; i++){
            printf("%5d", a[i]);
            if((i + 1) % 5 == 0){
                printf("\n");
            }
        }
    }
    
    
    /*输入10个数到数组,从小到大排序后输出。*/
    #include "stdio.h"
    void main(){
        int a[10], i, j, temp;
        for(i = 0; i < 10; i++){
            printf("Please input No.%d:", i + 1);
            scanf("%d", &a[i]);
        }
        for(i = 0; i < 9; i++){
            for(j = i + 1; j < 10; j++){
                if(a[i] > a[j]){
                    temp = a[i]; a[i] = a[j]; a[j] = temp;
                }
            }
        }
        for(i = 0; i < 10; i++){
            printf("%d  ", a[i]);
        }
    }
    
    
    /*一个3×4的矩阵已经有数据(也即已经初始化),请输出其转置矩阵。*/
    #include "stdio.h"
    void main(){
        int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}, b[4][3], i, j;
        for(i = 0; i < 4; i++){
            for(j = 0; j < 3; j++){
                b[i][j] = a[j][i];
            }
        }
        for(i = 0; i < 4; i++){
            for(j = 0; j < 3; j++){
                printf("%5d", b[i][j]);;
            }
            putchar('\n');
        }
    }
    
    
    /*一个3×4的矩阵已经有数据(也即已经初始化),请输出最大的数及其所在的行和列。*/
    #include "stdio.h"
    void main(){
        int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}, max, hang, lie, i, j;
        max = a[0][0]; hang = 0; lie = 0;
        for(i = 0; i < 3; i++){
            for(j = 0; j < 4; j++){
                if(max < a[i][j]){
                    max = a[i][j];
                    hang = i;
                    lie = j;
                }
            }
        }
        printf("Max is %d ( %d, %d )\n", max, hang + 1, lie + 1);
    }
    
    
    /*某班有4个同学,学习了3门课程,求各课程和各同学的平均分。*/
    #include "stdio.h"
    void main(){
        int i, j;
        float a[3][4], course[3], student[4];
        for(i = 0; i < 3; i++){
            for(j = 0; j < 4; j++){
                printf("Please input No.%d course No.%d student's score:", i + 1, j + 1);
                scanf("%f", &a[i][j]);
            }
        }
        for(i = 0; i < 3; i++){
            for(j = 0; j < 4; j++){
                course[i] += a[i][j];
            }
            course[i] /= 3;
        }
        for(i = 0; i < 4; i++){
            for(j = 0; j < 3; j++){
                student[i] += a[j][i];
            }
            student[i] /= 4;
        }
        for(i = 0; i < 3; i++){
            printf("No.%d course's average score is %5.2f", i + 1, course[i]);
        }
        for(i = 0; i < 4; i++){
            printf("No.%d student's average score is %5.2f", i + 1, student[i]);
        }
    }
    
    
    /*有字符串“I love you”,请分别使用scanf函数的%s格式控制符以及gets函数进行输入,用puts函数输出,了解这两个输入函数的区别。*/
    #include "stdio.h"
    void main(){
        char str1[100], str2[100];
        scanf("%s", str1);//请输入“I love you”字符串
        gets(str2);
        printf("No.1 string:");
        puts(str1);
        printf("No.2 string:");
        puts(str2);
    }
    
    
    /*编程练习strcpy()、strcat()、strcmp()以及strlen()函数的用法。*/
    #include "stdio.h"
    #include "string.h"
    void main(){
        char str1[100] = "25th Anniversary for ", str2[] = "8 * 8";
        if(strcmp(str1, str2) > 0){
            printf("String one > string two.\n");
        }else if(strcmp(str1, str2) == 0){
            printf("String one is equal string two.\n");
        }else{
            printf("String one < string two.\n");
        }
        puts(strcat(str1, str2));
        printf("length is %d\n", strlen(str1));
        puts(strcpy(str1, str2));
    }
    
    
    /*编写自定义函数myStrcat()和myStrlen()完成系统函数strcat()和strlen()的功能。*/
    #include "stdio.h"
    void myStrcat(char s1[], char s2[]){
        int i = 0, j = 0;
        while(s1[i] != '\0'){
            i++;
        }
        while(s2[j] != '\0'){
            s1[i] = s2[j];
            i++; j++;
        }
        s1[i] = '\0';
    }
    int myStrlen(char s[]){
        int i = 0;
        while(s[i] != '\0'){
            i++;
        }
        return i;
    }
    void main(){
        char str1[100] = "25th Anniversary for ", str2[] = "8 * 8";
        myStrcat(str1, str2);
        puts(str1);
        printf("length is %d\n", myStrlen(str1));
    }
    
    
    /*从键盘上输入一行文字,分别统计出大写字母、小写字母、数字字符、空格以及其它字符的个数。*/
    #include "stdio.h"
    void main(){
        char str[100];
        int i = 0, daXie = 0, xiaoXie = 0, shuZhi = 0, kongGe = 0, qiTa = 0;
        printf("Please input a string:\n");
        gets(str);
        while(str[i] != '\0'){
            if(str[i] >= 'A' && str[i] <= 'Z'){
                daXie++;
            }else if(str[i] >= 'a' && str[i] <= 'z'){
                xiaoXie++;
            }else if(str[i] >= '0' && str[i] <= '9'){
                shuZhi++;
            }else if(str[i] == ' '){
                kongGe++;
            }else{
                qiTa++;
            }
            i++;
        }
        printf("daxie:%d\n", daXie);
        printf("xiaoxie:%d\n", xiaoXie);
        printf("shuzhi:%d\n", shuZhi);
        printf("kongge:%d\n", kongGe);
        printf("qita:%d\n", qiTa);
    }
    

本次实验要求掌握指针的用法,是课程的重点和难点。

编写如下程序

  1. 有两个整型变量a,b,请用指针操作a和b,完成a和b的 + - * / 运算并输出结果。
  2. 有10个元素的整型数组a,请用指针操作数组a,输出最大的元素并指出其所在位置。
  3. 用指针实现:生成Fibonacci数列的前20项。
  4. 用指针实现:将数组元素逆序存放。
  5. 请用指针操作字符串,输出该字符串中的大写字母的个数。
  6. 请用指针操作字符串,删除该字符串中指定的字母后输出更改后的字符串。
  7. 用字符指针数组存放8个字符串(“非法日期,周一 ~ 周日”),根据输入的数字,输出对应的星期。
  8. main函数中输入两个整数,调用swap函数后交换变量的值(用指针完成),在main函数中输出。
  9. 将字符串中的第m个字符开始的全部字符复制生成一个新的字符串。要求main函数中输入该字符串和m,调用myCopy函数完成复制,然后在main函数中输出新字符串(注意:myCopy函数返回指针)。
  10. 
    /*有两个整型变量a,b,请用指针操作a和b,完成a和b的+-*÷运算并输出结果。*/
    #include "stdio.h"
    void main(){
        int a, b, *pa, *pb, he, ca, ji, shang;
        pa = &a;
        pb = &b;
        scanf("%d", pa);
        scanf("%d", pb);
        he = *pa + *pb;
        ca = *pa - *pb;
        ji = *pa * *pb;
        shang = *pa / *pb;
        printf("%d+%d=%d\n", a, b, he);
        printf("%d-%d=%d\n", a, b, ca);
        printf("%d*%d=%d\n", a, b, ji);
        printf("%d/%d=%d\n", a, b, shang);
    }
    
    
    /*有10个元素的整型数组a,请用指针操作数组a,输出最大的元素并指出其所在位置。*/
    #include "stdio.h"
    void main(){
        int a[10] = {1,2,3,4,5,66,7,8,9,28}, *p = a, max, wz, i;
        max = *p;
        wz = 0;
        for(i = 1; i < 10; i++){
            if(max < *(p + i)){
                max = *(p + i);
                wz = i;
            }
        }
        printf("Max is %d, at %d\n", max, wz + 1);
    }
    
    
    /*用指针实现:生成Fibonacci数列的前20项。*/
    #include "stdio.h"
    void main(){
        int fibo[20], *p, i;
        p = fibo;
        *p = *(p + 1) = 1;
        for(i = 2; i < 20; i++){
            *(p + i) = *(p + i - 1) + *(p + i - 2);
        }
        for(i = 0; i < 20; i++){
            printf("%5d", *p++);
            if((i + 1) % 5 == 0){
                putchar('\n');
            }
        }
    }
    
    
    /*用指针实现:将数组元素逆序存放。*/
    #include "stdio.h"
    void main(){
        int a[10] = {1,2,3,4,5,6,7,8,9,10}, *p1, *p2, temp, i;
        p1 = &a[0];
        p2 = &a[9];
        while(p1 < p2){
            temp = *p1;
            *p1 = *p2;
            *p2 = temp;
            p1++;
            p2--;
        }
        for(i = 0; i < 10; i++){
            printf("%d ", a[i]);
        }
    }
    
    
    /*请用指针操作字符串,输出该字符串中的大写字母的个数。*/
    #include "stdio.h"
    void main(){
        char str[100], *p = str, dx = 0;
        printf("Please input a string:");
        gets(p);
        while(*p != '\0'){
            if(*p >= 'A' && *p <= 'Z'){
                dx++;
            }
            p++;
        }
        printf("Daxie: %d\n", dx);
    }
    
    
    /*请用指针操作字符串,删除该字符串中指定的字母后输出更改后的字符串。*/
    #include "stdio.h"
    void main(){
        char str[] = "delete one character", *p, ch;
        int i, j;
        printf("Please a character:");
        ch = getchar(); //scanf("%c", &ch);
        p = str;
        for(i = j =0; *(p + i) != '\0'; i++){
            if(*(p + i) != ch){
                *(p + j) = *(p + i);
                j++;
            }
        }
        *(p + j) = '\0';
        puts(str);
    }
    
    
    /*用字符指针数组存放8个字符串(“非法日期,周一 ~ 周日”),根据输入的数字,输出对应的星期。*/
    #include "stdio.h"
    void main(){
        char *day[] = {"Illegal day", "Monday", "Tuesday", "Wednesday", "Tursday", "Friday", "Saturday", "Sunday"};
        int n;
        printf("Please input a number:");
        scanf("%d", &n);
        if(n >= 1 && n <= 7){
            printf("%s", day[n]);
        }else{
            printf("%s\n", day[0]);
        }
    }
    
    
    /*main函数中输入两个整数,调用swap函数后交换变量的值(用指针完成),在main函数中输出。*/
    #include "stdio.h"
    void swap(int *p1, int *p2){
        int temp;
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
    }
    void main(){
        int a = 1, b = 2;
        swap(&a, &b);
        printf("%d,%d\n", a, b);
    }
    
    
    /*将字符串中的第m个字符开始的全部字符复制生成一个新的字符串。要求main函数中输入该字符串和m,调用myCopy函数完成复制,然后在main函数中输出新字符串(注意:myCopy函数返回指针)。*/
    #include "stdio.h"
    char *myCopy(char *p, int m){
        static char newString[100];//注意:此处需定义为static,否则返回该数组的首地址后,该数组的所占用的空间即刻被系统收回,则main函数中就得不到新的字符串。(编译警告:returning address of local variable or temporary)
        int i = 0;
        while(*(p + m) != '\0'){
            newString[i] = *(p + m);
            m++;
            i++;
        }
        newString[i] = '\0';
        return newString;
    }
    void main(){
        char str[] = "copy string from somewhere", *p;
        int m;
        printf("Please input a number: ");
        scanf("%d", &m);
        p = myCopy(str, m);
        puts(p);
    }