当前位置: 首页 > article >正文

C语言Day14(c程序设计小红书+pta)

目录

(一)求总天数pta

题目说明:

代码实现:

程序分析:

(二)十进制整数转换成R进制数pta

题目说明:

代码实现:

程序分析:

(三)删除字符串中数字字符

(四)字符串拷贝-strNcpy 

(五)无符号整数的内部结构 

(六)统计对称素数 

(七)输入单词并排序输出 

(八)长整数转化成16进制字符串 


(一)求总天数pta

题目说明:

代码实现:

int leapyear(int y)
{
    return ((y%4==0&&y%100!=0)||(y%400==0));
}
int TotalDay(int year, int month, int day)
{
    int monday[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(year<1||month<1||month>12||day<1)
        return 0;
    if(month==2&&day>29)
        return 0;
    if(month!=2&&day>monday[month-1])
        return 0;
    int d;
    d=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400;
    if(leapyear(year))
        monday[1]=29;
    else
        monday[1]=28;
    for(int i=1;i<month;i++)
    {
        d+=monday[i-1];
    }
    d+=day;
    return d;
}

程序分析:

1.在 C 语言中,对于条件表达式和逻辑表达式,如果结果为 “真”,通常返回值是 1;如果结果为 “假”,则返回值是 0。所以先定义了一个判断闰年的int型函数,如果是闰年会返回1,如果不是闰年会返回0.

2.接下来在int TotalDay(int year, int month, int day)函数中先定义了几个结果为零的情况。包括year < 1 || month < 1 || month > 12 ,month == 2 && day > 28,day > monthday[month - 1](尤其注意这一条,因为数组是从0开始的,所以month要-1)。

3.然后计算按年份来的总天数,先假设每年都是365天,再另算闰年的情况。

4.再计算按月份的总天数。注意二月份的特殊情况。

5.再加上日期中哪一天的天数。

(二)十进制整数转换成R进制数pta

题目说明:

代码实现:

 

#include<stdio.h>
void zhuanhuan(int n,int r)
{
    if(n==0)
    {
        printf("0");
        return;
    }
        char a[]="0123456789ABCDEF";
       char s[100];
        int i=0;
        while(n>0)
        {
            s[i++]=a[n%r];
            n=n/r;
        }
        for(int j=i-1;j>=0;j--)
        {
            printf("%c",s[j]);
        }
}
int main()
{
    int n,r;
    scanf("%d %d",&n,&r);
    zhuanhuan(n,r);
    return 0;
}
    

程序分析:

定义一个字符数组 a,存储了用于表示不同进制的字符,包括数字 0-9 和字母 A-F,可用于表示十六进制以下的各种进制。

(三)删除字符串中数字字符

void delnum(char *s)
{
    char*p=s;
    for(int i=0;s[i]!='\0';i++)
        if((s[i]<'0')||(s[i]>'9'))
        {
            *p++=s[i];
        }
   *p='\0';
}

(四)字符串拷贝-strNcpy 

int strNcpy(char* dest, const char* src, int n)
{
    int i = 0;
    while (src[i] != '\0')
        i++;
    int j;
    for (j = 0; j < n && src[j] != '\0'; j++)
    {
        dest[j] = src[j];
    }
    if (i <n)
    {
        dest[j] = '\0';
        return 1;
    }
    else
    {
        dest[n-1] = '\0';
        return 0;
    }
}

(五)无符号整数的内部结构 

 

#include<stdio.h>
int main() {
    unsigned int v;
    scanf("%u", &v);
    printf("%x\n", v); 
    unsigned char *s = (unsigned char *)&v;
    printf("%x %x %x %x", s[0], s[1], s[2], s[3]); 
    return 0;
}

(六)统计对称素数 

#include <stdio.h>
#include <stdbool.h>

// 判断是否为素数
bool isPrime(int num) {
    if (num <= 1) return false;
    else if(num <= 3) return true;
    else if(num % 2 == 0 || num % 3 == 0) return false;
    else
    {
        for (int i = 5; i * i <= num; i += 6) {
            if (num % i == 0 || num % (i + 2) == 0) return false;
        }
        return true;
    }
}

// 判断是否为对称数
bool isPalindrome(int num) {
    int reversed = 0, original = num;
    while (num != 0) {
        reversed = reversed * 10 + num % 10;
        num /= 10;
    }
    return original == reversed;
}

int main() {
    int a, b;
    scanf("%d %d", &a, &b);

    int cnt = 0;

    for (int i = a; i <= b; i++)
    {
        if (isPrime(i) && isPalindrome(i))
            cnt++;
    }
    printf("%d\n", cnt); // 先输出对称素数的个数
    if (cnt == 0) 
        printf("none");
    else 
    {
        int j = 0;
        for (int i = a; i <= b; i++)
        {
            if (isPrime(i) && isPalindrome(i) && j==0)
            {
                printf("%d", i);
                j++;
            }
            else
            {
                if (isPrime(i) && isPalindrome(i) && j ==1)
                    printf(" %d", i);
            }

        }
    }
    return 0;
}

(七)输入单词并排序输出 


int input(char ar2[][21])
{
    int count = 0;
    char word[21];
    while (count < 10)
    {
        scanf("%20s", word);
        if (strcmp(word, "*END*") == 0)
            break;
        strcpy(ar2[count], word);
        count++;
    }
    return count;
}

void paixu(char ar2[][21], int n)
{
    char temp[21];
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (strcmp(ar2[i], ar2[j]) > 0)
            {
                strcpy(temp, ar2[i]);
                strcpy(ar2[i], ar2[j]);
                strcpy(ar2[j], temp);
            }
        }
    }
}

void printArr(char ar2[][21], int n)
{
    if (n == 0)
    {
        printf("NO WORD\n");
    }
    else
    {
        printf("After sorted:\n");
        for (int i = 0; i < n; i++)
        {
            printf("%s", ar2[i]);
            if (i < n - 1)
                printf(" ");
        }
        printf("\n");
    }
}

(八)长整数转化成16进制字符串 

void f( long int x, char *p )
{
  if(x==0)
  {
      *p='0';
  }
  else  if(x<0)
    {
        x=-x;
        *p='-';
        p++;
    }
    long int a=x;int n=0;
    while(x!=0)
    {
        x/=16;
        n++;
    }
    for(int i=0;i<n;i++)
    {
        int t=a%16;
        if(t<10)
        {
            *(p+n-1-i)=t+'0';
        }
        else
        {
            *(p+n-1-i)=t+'A'-10;
        }
        a/=16;
    }
}

http://www.kler.cn/a/487561.html

相关文章:

  • 使用 C++ 实现神经网络:从基础到高级优化
  • api开发如何在代码中使用京东商品详情接口的参数?
  • MySQL insert or update方式性能比较
  • Linux(上):基本知识篇
  • Cursor无限续杯——解决Too many free trials.
  • nodejs的降级
  • 物联网开发 的开发语言建议
  • 晨辉面试抽签和评分管理系统之五:面试准备时间倒计时管理
  • RK3562编译Android13 ROOT固件教程,触觉智能开发板演示
  • 用python实现烟花代码,完整代码拿走不谢
  • Vue开发系列——VUE入门?
  • Vue.js组件开发-Vue CLI如何配置浏览器兼容性
  • 《机器学习》——贝叶斯算法
  • 洛谷 P3435 [POI2006] OKR-Periods of Words(扩展KMP+线段树做法)
  • Servlet与JSP:Java的秘密花园入口
  • 基于深度模型的印章检测(c++)
  • 【什么是MVCC?】
  • 智慧防洪平台:构建城市安全的数字防线
  • java中日期如何比大小
  • OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)
  • Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)
  • Mysql--基础篇--约束(主键,外键,唯一,检查,枚举及复合约束等)
  • FinGPT:通过传播意识和上下文增强的LLM提升基于情感的股票走势预测
  • 设计模式 行为型 观察者模式(Observer Pattern)与 常见技术框架应用 解析
  • 欧拉公式和傅里叶变换
  • SpringcloudAlibaba黑马笔记(部分)