初学者学习c语言想问问这两个程序怎么写,做法越简单初级越好。

一. 编写一个可以执行以下操作的C程序:

  1. 从键盘上读取一个字符串,其中至少包含2个数字(0-9);
  2. 从字符串中提取所有数字(0-9),并创建仅包含这些数字的新字符串;
  3. 确定数字串的长度,并在屏幕上打印该字符串长度。
  4. 在屏幕上反向打印数字字符串(不要反转数组中的字符
    或使用反向功能)。
  5. 打印反向数字字符串的整数值。

二. 编写一个可以执行以下操作的C程序:
1.从键盘上读取一个整数。
2.将其转换为等价的二进制值,并将转换后的值打印在屏幕上。
3.将其转换为十六进制等效值,并将转换后的值打印在屏幕上。

1.

img

#include <stdio.h>
#include <string.h>
#define max 225
int Myatoi(char *str)
{
    if(str==NULL)
        return 0;
    int tmp=0;
    while(*str !='\0')
    {
        tmp=tmp*10+(*str -'0');//获得数字并“叠加”
        str++;
    }
    return tmp;
}
int main()
{
    char t[max];
    gets(t);//从键盘上读取一个字符串
    int len=strlen(t);
    char num[max];
    int p=0;
    for(int i=0;i<len;i++)//从字符串中提取所有数字(0-9),并创建仅包含这些数字的新字符串
    {
        if(t[i]<='9'&&t[i]>='0')
        {
            num[p++]=t[i];
        }
    }
    num[p]='\0';
    printf("数字串的长度:%d\n",p);
    //puts(num);
    for(int i=0;i<p/2;i++)//倒置 
    {
        char tem=num[i];
        num[i]=num[p-1-i];
        num[p-1-i]=tem;
    }
    printf("打印反向数字字符串的整数值:%d\n",Myatoi(num));
    printf("\n");
    return 0;
}

第一题简版

#include <stdio.h>
#define max 225
int main()
{
    char t[max];
    gets(t);//从键盘上读取一个字符串
    char num[max];
    int p=0;
    for(int i=0;t[i]!='\0';i++)//从字符串中提取所有数字(0-9),并创建仅包含这些数字的新字符串
    {
        if(t[i]<='9'&&t[i]>='0')
        {
            num[p++]=t[i];
        }
    }
    num[p]='\0';
    printf("数字串的长度:%d\n",p);
    printf("打印反向数字字符串的整数值:");
    for(int i=0;i<p;i++)//倒置 
    {
        printf("%c",num[p-1-i]);
    }
    printf("\n");
    return 0;
}

第二题简单版

img

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    scanf("%d",&num);
    char t[25];
    itoa(num, t , 2);
    puts(t);
    itoa(num, t , 16);
    puts(t);
    return 0;
}

第一题


#include <stdio.h>
#include <string.h>

int main()
{
    char str[64] = {0};
    char num[64] = {0};
    int i, n = 0, len;
    int value = 0;
    gets(str);
    len = strlen(str);
    for(i=0; i<len; i++) {
        if(str[i] >= '0' && str[i] <= '9') {
            num[n] = str[i]; // 取数字字符串
            n++;
        }
    }
    printf("数字字符串长度:%d\n", n);
    printf("数字字符串反向输出:");
    for(i=n-1; i>=0; i--) {
        printf("%c", num[i]); // 反向输出数字串
        value = value * 10 + num[i] - '0'; // 记录反向数字串的整数值
    }
    printf("\n");
    printf("反向数字字符串的整数值:%d\n", value);
    return 0;
}

第二题


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num;
    char bin[64] = {0};
    char hex[64] = {0};
    printf("请输入一个整数:");
    scanf("%d", &num);
    itoa(num, bin, 2);
    printf("二进制值:%s\n", bin);
    itoa(num, hex, 16);
    printf("十六进制值:%s\n", hex);
    return 0;
}

这两题很简单,第一题可以这样做:

/** handlingString.c -- 按指定要求处理字符串 */
#include <stdio.h>
#include <string.h>

/*
    一. 编写一个可以执行以下操作的C程序:

    1. 从键盘上读取一个字符串,其中至少包含2个数字(0-9);
    2. 从字符串中提取所有数字(0-9),并创建仅包含这些数字的新字符串;
    3. 确定数字串的长度,并在屏幕上打印该字符串长度。
    4. 在屏幕上反向打印数字字符串(不要反转数组中的字符
      或使用反向功能)。
    5. 打印反向数字字符串的整数值。
*/

int main(int argc, const char *argv[])
{
    /* 
        初始化:定义索引变量 i,
        ch 字符变量用于接收读取的字符
        str 字符串用于存储从字符串中提取的数字
    */
    int i = 0;
    char ch, str[35536];
    // 提示性输出
    puts("请输入要处理的字符串:");
    // 1. 从键盘上读取字符串
    while((ch = getchar()) != '\n') {
        // 2.从字符串中提取数字
        if (ch >= '0' && ch <= '9') {
            str[i++] = ch;
        }
    }
    // 加上结尾字符,表示这是一个字符串
    str[i] = '\0';
    
    // 3. 确定数字串的长度,并打印
    int len = strlen(str);
    printf("数字串的长度为 %d\n", len);
    
    // 4. 反向打印数字字符串
    unsigned long num = 0;
    puts("反向打印数字字符串:");
    for (i = len - 1; i >= 0; i--)
    {
        // 将字符转为数字
        num = num * 10L + (str[i] - '0');
        putchar(str[i]);
    }
    putchar('\n');
    // 5. 打印反向数字字符串的整数值
    printf("其整数值为%lu\n", num);

    return 0;
}

其输出为:

img

第二题可以这样做:

/** decimalConversion.c -- 按要求进行进制转换.c */
#include <stdio.h>
#include <string.h>

/*
    二. 编写一个可以执行以下操作的C程序:
    1. 从键盘上读取一个整数。
    2. 将其转换为等价的二进制值,并将转换后的值打印在屏幕上。
    3. 将其转换为十六进制等效值,并将转换后的值打印在屏幕上。
*/

int main(int argc, const char *argv[])
{
    // 定义 num 整型变量存储读取的整数值
    int num;

    // 提示性输出
    puts("请输入要转换的数:");
    
    // 1. 读取从键盘上输入的数
    scanf("%d", &num);

    // 2. 将其转换为二进制
    int temp = num;
    int arr[20] = {0}, i = 0, j;
    while (num != 0)
    {
        int r = num % 2;
        num = num / 2;
        arr[i++] = r;
    }
    // 并将转换后的值打印在屏幕上
    printf("%d的2进制的为", temp);
    for (j = i - 1; j >= 0; j--)
    {
        printf("%d", arr[j]);
    }
    putchar('\n');
    // 3. 将其转换为十六进制并输出
    printf("%d的16进制为%X\n", temp, temp);
    
    return 0;
}

其输出为:

img

算法 就别调用库函数了。。。

第一题:

#include<stdio.h>
#include<string.h>
int fun(char*q){
    if(q==NULL)
        return 0;
    int s=0;
    while(*q!='\0'){
        s=s*10+(*q-'0');
        q++;
    }
    return s;
}
int main(){
    char t[205];
    scanf("%s",t);
    int len=strlen(t);
    char n[205];
    int p=0;
    for(int i=0;i<len;i++)
        if(t[i]<='9'&&t[i]>='0')
            n[p++]=t[i];
    n[p]='\0';
    printf("数字串的长度:%d\n",p);
    for(int i=0;i<p/2;i++){
        char t=n[i];
        n[i]=n[p-1-i];
        n[p-1-i]=t;
    }
    printf("打印反向数字字符串的整数值:%d\n",fun(n));
    return 0;
}
//第一小题:
#include<stdio.h>
#define MAX 1000
int main()
{
char c;
char num[MAX];
int digit_num=0;
int j,k;
printf("请输入字符串:\n");
while(((c=getchar())!='\n'))
{
 if(c>=48&&c<=57){
  num[digit_num]=c;
  digit_num++;
 }
}
//3、确定数字串的长度,并在屏幕上打印该字符串长度。
printf("数字串的长度:%d\n",digit_num);
//4、在屏幕上反向打印数字字符串(不要反转数组中的字符
//或使用反向功能)。
 printf("数字字符串:");
for(j=digit_num-1;j>=0;j--){//因为while结束后digit_num++,所以j=digit_num-1
    printf("%c",num[j]);
}
printf("\n");
//5、打印反向数字字符串的整数值。
printf("整数值:");
for(k=digit_num-1;k>=0;k--){
    printf("%d",num[k]-48);
}
    return 0;
}


算法

十进制转二进制

#include <stdio.h>
int main()
{
    int num;int temp;int i=0;
    int arr[20];
    printf("请输入一个十进制数:\n");
    scanf("%d", &num);
     do
    {
    temp=num%2;
    num=num/2;
    arr[i++]=temp; 
    }
    while (num!=0);
    for (int j = i-1; j>=0; j--)
   printf("%d",arr[j]);
}

十进制转十六进制

#include<stdio.h>

int main() {

    long int decimalNumber,remainder,quotient;

    int i=1,j,temp;

    char hexadecimalNumber[100];

    printf("输入十进制数任意: ");

    scanf("%ld",&decimalNumber);

    quotient = decimalNumber;

    while(quotient!=0) {

        temp = quotient % 16;

        if( temp < 10)

                   temp =temp + 48; else

                 temp = temp + 55;

        hexadecimalNumber[i++]= temp;

        quotient = quotient / 16;

    }

    printf("十进制数的等效十六进制值 %d: ",decimalNumber);

    for (j = i -1 ;j> 0;j--)

          printf("%c",hexadecimalNumber[j]);

    return 0;

}