C语言程序设计精髓(MOOC第9周 )题

第9周编程题在线测试

NOTE:

  1. 要输出一个变量的地址值时,要用格式转换说明符 %p
  2. 空指针 ,即值为NULL的值,是无效指针。
  3. p = 0 和p = NULL 的区别:p = NULL可以明确说明p是指针变量,而不是一个数值变量,而且空指针并不一定就是指向地址为0的存储单元的指针,并非所有编译器都是用0地址。
  4. warning: 每次用指针时都要对其进行初始化!!!
  5. 判断素数的时候注意:对于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[]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值