第9周编程题在线测试
NOTE:
- 要输出一个变量的地址值时,要用格式转换说明符 %p
- 空指针 ,即值为NULL的值,是无效指针。
- p = 0 和p = NULL 的区别:p = NULL可以明确说明p是指针变量,而不是一个数值变量,而且空指针并不一定就是指向地址为0的存储单元的指针,并非所有编译器都是用0地址。
- warning: 每次用指针时都要对其进行初始化!!!
- 判断素数的时候注意:对于double类型变量x(不是整型)不能执行求余运算,即不能用 x % i == 0来判断x是否能被i整除,可以使用 x / i == (int)(x/i)来判断x是否能被i整除。
1. 重复数字检查
题目内容:
从键盘输入一个数,检查这个数中是否有重复出现的数字。如果这个数中有重复出现的数字,则显示“Repeated digit!”;否则显示“No repeated digit!”。
函数原型: int CountRepeatNum(int count[], int n);
注: 若有重复数字,则该函数返回重复出现的数字;否则返回-1.
#include<stdio.h>
#define N 10
int CountRepeatNum(int count[], int n);
int main()
{
int count[N] = {
0};
int n;
printf("Input n:\n");
scanf("%d",&n);
if(CountRepeatNum(count,n) == -1)
printf("No repeated digit!\n");//返回-1,没有重复数字
else
printf("%d is Repeated digit!\n",CountRepeatNum(count,n));//返回重复数字
return 0;
}
int CountRepeatNum(int count[], int n)
{
int i = 0,digit = 0;
int cnt = 0;
while(n != 0)
{
count[i] = n%10;
n = n/10;
i++;
}
int a[10] = {
0};
for(int j = 0;j < i; j++)
{
a[count[j]]++;
}
for(int k = 0;k < 10; k++)
{
if(a[k] != 0)
cnt++;
}
if(cnt == i)
return -1;
else
{
for(int p = 0;p < 10; p++)
{
if(a[p] > 1)
return p;
}
}
}
2. 教授的课
题目内容:
教授正在为一个有N个学生的班级讲授离散数学课。他对某些学生缺乏纪律性很不满意,于是决定:如果课程开始后上课的人数小于K,就取消这门课程。从键盘输入每个学生的到达时间,请编程确定该课程是否被取消。如果该门课程被取消,则输出“Yes”,否则输出“No”。假设教授在时刻0开始上课。如果一个学生的到达时间是非正整数,则表示该学生在上课前进入教室。如果一个学生的到达时间是正整数,则表示该学生在上课后进入教室。如果一个学生在时刻0进入教室,也被认为是在上课前进入教室。假设到达时间的绝对值不超过100,学生数N不超过1000。要求在输入学生的到达时间之前,先输入N和K。
函数原型: int IsCancel(int a[], int n, int k);
注: 函数功能:根据数组a中记录的学生到达时间确定课程是否被取消,取消则返回1,否则返回0
#include<stdio.h>
#define N 1000
int IsCancel(int a[], int n, int k);
int main()
{
int n,k;
int a[N] = {
0};
printf("Input n,k:\n");
scanf("%d,%d",&n,&k);
getchar();
for(int i = 0;i < n; i++)
scanf("%d",&a[i]);
if(IsCancel(a,n,k))
printf("YES\n");
else
printf("NO\n");
return 0;
}
int IsCancel(int a[], int n, int k)
{
int count = 0;
for(int i = 0;i < n; i++)
{
if(a[i] <= 0)
count++;
}
if(count < k)return 1;
else return 0;
}
3. 寻找鞍点
题目内容:
请编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!”
函数原型: void FindSaddlePoint(int a[][N], int m, int n);
注: 在该函数中输出有无鞍点的信息。
#include<stdio.h>
#define N 100
void FindSaddlePoint(int a[][N], int m, int n);
int main()
{
int m,n;
int a[N][N];
printf("Input m,n:\n");
scanf("%d,%d",&m,&n);
printf("Input matrix:\n");
for(int i = 0;i < m; i++)
for(int j = 0;j < n; j++)
scanf("%d",&a[i][j]);
FindSaddlePoint(a,m,n);
return 0;
}
void FindSaddlePoint(int a[]