一. 编写一个可以执行以下操作的C程序:
二. 编写一个可以执行以下操作的C程序:
1.从键盘上读取一个整数。
2.将其转换为等价的二进制值,并将转换后的值打印在屏幕上。
3.将其转换为十六进制等效值,并将转换后的值打印在屏幕上。
1.
#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;
}
第二题简单版
#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;
}
其输出为:
第二题可以这样做:
/** 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;
}
其输出为:
算法 就别调用库函数了。。。
第一题:
#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;
}