数组

数组
gets与scanf(“%s”)的区别,gets允许输入的字符串含有空格,scanf(%s)不允许含有空格

函数,宏定义《猜数字游戏》《打字游戏》

在函数定义中没有说明extern或static则隐含为extern

注意:一般情况下文件包含操作多用于头文件的包含,头文件中定义了一些常量、函数声明、结构体与全局变量的声明等

带参数的宏与带参函数的区别:
①函数调用时,先求实参表达式值,再代入行参,而宏只是简单的替换,并不求值;
②函数调用在程序运行时分配内存,而宏展开时并不分配内存,也没有返回值的概念;
③函数中的实参和行参都要定义类型,而且要求一致,宏名无类型,其参数也没有类型;
④宏替换不占运行时间,只占编译时间,而函数调用占运行时间

函数名: getch
  功 能: 从控制台无回显地取一个字符
  用 法: int getch(void);
  返回值:读取的字符
  程序例:
  #include <stdio.h>
  #include <conio.h>
  int main(void)
  {
  char ch;
  printf("Input a character:");
  ch = getch();
  printf("\nYou input a '%c'\n", ch);
  return 0;
  }
  在WINDOWS/MS-DOS中,也可以利用getch()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,用法:包含conio.h头文件后,在主函数结尾,return 0;之前加上getch();即可

0、消化吸收今天所学的知识

1、用函数实现求两个数中较大的数,较小数
main()
{
    max(x,y);
    min(x,y);
}

int max(int a ,int b)
{

}
int min(int a,int b)
{

}


2、以调用函数的方法实现 冒泡法、插入
void bubble(int a[],int n)     
{
    int i,j;                                    
    for()
    for()

}
/*定义两个参数:数组首地址与数组大小*/
采冒泡法,从一个从小到大排序的数组中找出要查找的数

int main()
{
    int a[10]={2,3,4,1,2,33,2,12,3};
    
        
    for(i=0;i<10;i++)
    printf("a[%d]=%d\n",i,a[i]);
    
    bubble(a,10);
    
    for(i=0;i<10;i++)
    printf("a[%d]=%d\n",i,a[i]);
}


3、从键盘输入五个人、三门课(语文、数学、英语)
    求每个人的平均成绩及不及格课数
  求每门课的平均成绩及各科不及格人数
    
4、有一个已经排好序的数组(由小到大)。
现输入一个数,要求按原来的规律将它插入数组中。
int a[10]={1,3,5,7,8,9}
int n=6;


5、打字游戏
1)随机函数
srand((unsigned)time(NULL));

a=rand()%26;

num  0     25
'a' +num

2)getchar()  
  include<conio.h>
  ch=getch();
3)时间函数

start_time=time(NULL);可以返回系统当前时间,以秒为单位

end_time=time(NULL);

4)所需头文件
#include <conio.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
system("cls");清屏


注意:getch()和getchar()的区别

附加题:
    猜字游戏
    1)随机函数
    2)比较算法


习题答案
1、
#include <stdio.h>
typedef unsigned char uchar ;
typedef unsigned int uint ;

int x,y;

int max(int a ,int b)
{
    int temp;
    if(a>b)
    {
        temp=a;
    }
    else
    {
        temp=b;
    }
    return temp;
}
int min(int a,int b)
{
    int temp;
    if(a<b)
    {
        temp=a;
    }
    else
    {
        temp=b;
    }
    return temp;
}

void input(void)
{
    printf("请输入两个比较的值:(格式:x y)\n");
    scanf("%d %d", &x, &y);
}

void output(void)
{
    printf("您输入的值是:x=%d,y=%d\n", x, y);
    printf("您输入的最大值是:%d\n",max(x,y));
    printf("您输入的最小值是:%d\n",min(x,y));
}

int main(void)
{
    input();
    output();
    return 0;
}

2、
#include <stdio.h>
typedef unsigned char uchar ;
typedef unsigned int uint ;

int arry[10]={9,8,7,6,5,4,3,2,1,0};

void bubble(int arry[],int n)     
{
    int i,j;  
    int temp;

    for(i=0;i<n-2;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(arry[i]>arry[j])
            {
                temp = arry[i];
                arry[i] = arry[j];
                arry[j] = temp;
            }
        }
    }

}

int main(void)
{
    int a= 0;
    bubble(arry,10);
    printf("请输入要查找数的位置:");
    scanf("%d", &a);
    printf("arry[%d]=%d\n", a, arry[a]);
    return 0;
}

3、
#include <stdio.h>
typedef unsigned char uchar ;
typedef unsigned int uint ;

uint arry[5][3]={{45,56,69},{50,23,86},{96,45,23},{78,59,87},{56,65,73}};

void input(void)
{
    uchar i;
    uchar ch;

    printf("使用系统自带的参数吗(y,n)?\n");
    if((ch=getchar()=='n'))
    {
        printf("请输入同学的成绩:(格式:语文 数学 英语)\n");
        for(i=0;i<5;i++)
        {
            printf("第%d个同学的成绩:",i+1);
             scanf("%d %d %d", &arry[i][0], &arry[i][1], &arry[i][2]);
        }
    }
    else if((ch=getchar()=='y'))
    {
        printf("使用系统自带的参数:\n");
    }
}

void dis(void)
{
    uchar i;
    for(i=0;i<5;i++)
    {
        printf("第%d个同学的成绩:",i+1);
        printf("语文:%d 数学:%d 英语:%d\n", arry[i][0], arry[i][1], arry[i][2]);
    }
}

void classmate_average(void)
{
    uchar i;
    float average;

    printf("\n学生的平均成绩:\n");
    for(i=0;i<5;i++)
    {
        average=(float)((arry[i][0]+arry[i][1]+arry[i][2])/3.0);
        printf("第%d个同学的平均成绩:%2.2f\n", i+1, average);
    }
}

void class_average(void)
{
    uchar i;
    float average;

    printf("\n班级每科的平均成绩:\n");
    for(i=0;i<3;i++)
    {
        average=(float)((arry[0][i]+arry[1][i]+arry[2][i]+arry[3][i]+arry[4][i])/5.0);
        if(i==0)
        {
            printf("语文");
        }
        else if(i==1)
        {
            printf("数学");
        }
        else if(i==2)
        {
            printf("英语");
        }
        printf("的平均成绩:%2.2f\n", average);
    }
}

void classmate_nopass(void)
{
    uchar i,j;
    uchar total;

    printf("\n每个学生的不及格门数:\n");
    for(i=0;i<5;i++)
    {
        total=0;
        for(j=0;j<3;j++)
        {
            if(arry[i][j]<60)
            {
                total++;
            }
        }
        printf("第%d个同学不及格门数:%d\n", i+1, total);
    }
}

void class_nopass(void)
{
    uchar i,j;
    uchar total;

    printf("\n每科不及格人数:\n");
    for(i=0;i<3;i++)
    {
        total=0;
        for(j=0;j<5;j++)
        {
            if(arry[j][i]<60)
            {
                total++;
            }
        }
        if(i==0)
        {
            printf("语文");
        }
        else if(i==1)
        {
            printf("数学");
        }
        else if(i==2)
        {
            printf("英语");
        }
        printf("不及格人数:%d\n", total);
    }
}

int main(void)
{
    input();
    dis();
    classmate_average();
     class_average();
    classmate_nopass();
    class_nopass();
    while(1);
    return 0;
}

4、
#include <stdio.h>
typedef unsigned char uchar ;
typedef unsigned int uint ;

int abc[7]={1,3,5,7,8,9};

void littletolarge(int arry[],int n)     
{
    int i,j;  
    int temp;

    for(i=0;i<n-2;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(arry[i]>arry[j])
            {
                temp = arry[i];
                arry[i] = arry[j];
                arry[j] = temp;
            }
        }
    }

}

void largetolittle(int arry[],int n)     
{
    int i,j;  
    int temp;

    for(i=0;i<n-2;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(arry[i]<arry[j])
            {
                temp = arry[i];
                arry[i] = arry[j];
                arry[j] = temp;
            }
        }
    }

}

void fun(int arry[])
{
    int temp;
    uchar i;
    printf("以前的数为:");
    for(i=0;i<6;i++)
    printf("%d,",arry[i]);
    printf("\n请输入一个数:\n");
    scanf("%d", &temp);
    arry[6]=temp;
    printf("现在的数为:");
    for(i=0;i<7;i++)
    printf("%d,",arry[i]);
    putchar('\n');
    if(arry[0]<arry[1])
    {
        littletolarge(arry,7);
    }
    else
    {
        largetolittle(arry,7);
    }
    printf("插入后的数为:");
    for(i=0;i<7;i++)
    printf("%d,",arry[i]);
    putchar('\n');
}

int main(void)
{
    fun(abc);
    return 0;
}

5、
#include <conio.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

typedef unsigned char uchar ;
typedef unsigned int uint ;

char creatletter(void)
{
    char ch;
    ch = rand()%26+'a';
    return ch;
}
void fun(void)
{
    uchar i;
    uchar buffer[2][50];
    uchar ch,temp = 0;
    float rightrate;
    uint start_time,end_time,deltatime;

    srand((unsigned)time(NULL));
    printf("**********************************************************************\n");
    printf("********************************打字游戏******************************\n");
    printf("******************************按任意键开始****************************\n");
    printf("**********************************************************************\n");
    getch();
    putchar('\n');
    for(i=0;i<50;i++)
    {
        buffer[0][i ] = creatletter();
        printf("%c",buffer[0][i]);
    }
    putchar('\n');
    start_time=time(NULL);
    for(i=0;i<50;i++)
    {
        buffer[1][i] = getch();
        if(buffer[1][i]==buffer[0][i])
        {
            putchar(buffer[1][i]);
            temp++;
        }
        else
        {
            putchar('-');
        }
    }
    end_time=time(NULL);
    deltatime=end_time-start_time;
    printf("\n**********************************************************************\n");
    printf("\n您用时:%ds",deltatime);
    rightrate = (float)(100*temp/50.0);
    printf("\n正确率:%2.2f%%\n",rightrate);
    printf("按回车键重新开始玩\n ");
    printf("\n**********************************************************************\n");
    while((ch=getch())!=13);
}

int main(void)
{
    while(1)
    {
        fun();
        system("cls");    
    }
    return 0;
}


               

posted @ 2012-04-02 08:43  福。oO  阅读(200)  评论(0编辑  收藏  举报