数组
数组
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;
}