C语言指针练习题(MOOC)

教授的课(10分)

教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。

从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。

假设教授在时刻0开始上课。

①如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。

②如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。

③如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。

假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。

图片中的“输入提示”“Input n,k:\n”只能注释掉,要求的输入格式“%d,%d”的逗号也需要改成空格,否则编译不会过关

已知函数原型:

//函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0

int IsCancel(int a[], int n, int k);

输入格式:

“%d %d”

“%d”

输入包括两行数据:

第1行是n,k的值。

第2行是学生的到达时间。

输出格式:

课程被取消,输出"YES"

课程不取消,输出

"NO"

输入:

20 10

-8 -5 3 6 0 0 -7 -4 -5 7 -4 -1 1 1 2 -6 -2 2 -9 3

输出:

NO

时间限制:500ms内存限制:32000kb

#include<stdio.h>
int IsCancel(int a[],int n,int k);
int main(void){
	int result;
	int n,k;
	int i;

	scanf("%d %d",&n,&k);              //输入共有多少学生:n,以及来上课的最小人数k
	
	if(k<1000){
		int a[n];
		i = 0;
		for( ;i < n;i ++){
			scanf("%d",&a[i]);         //输入到达时间
			if(a[i]>100||a[i]<-100){
				continue;
			}
		}
	
		//printf("k=%d\n",k);
		result = IsCancel(a,n,k);      //注意调用函数时数组的写法
		switch(result){                //如果写成a[n]会显示warning;写成a[]会显示error
			case 1:printf("YES");
			break;
			case 0:printf("NO");
			break;
		}
	}
	
		return 0;
}

	
	
int IsCancel(int a[],int n,int k)
{
	int i,late=0,before=0,ret;
//	scanf("%d,%d",&n,&k);
	
	for(i = 0;i < n;i++)
	{
		if(a[i]>0){
			late ++;
		}
		else{
			before ++;
		}
	}
	//printf("late=%d\nbefore=%d\n",late,before);
		switch(before < k){
		case 1: ret = 1;
		break;
		case 0: ret = 0;
		break;
		}
		
		return ret;
		
}

(我是学生,编程纯小白,在这里分享一些自己学习过程中的经验吧。希望和大家交流,有错误希望大家加以指正)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值