C语言/C++常见习题问答集锦(三十九) 之一石二鸟
程序之美
1、C语言中实现“17进制”转“10进制”实例代码
C++版:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
int len,factor=17,num;
bool sign;//用来标志输入字符串是否非法
while(cin>>s)
{
len = s.size();
sign =1;
num=0;
for(int i=0;i<len;i++)
{
if(s[i]>='0'&&s[i]<='9')
num=num*factor+(s[i]-'0');
else if(s[i]>='A'&&s[i]<='H')
num=num*factor+(s[i]-'A'+10);
else
{
sign=0;
break;
}
}
if (sign)
cout<<num<<endl;
else
cout<<"Error Input!"<<endl;
}
return 0;
}
C语言版:
#include <stdio.h>
#include <stdlib.h>
/*
================================================
功能:十七机制转换为十进制
输入:十七进制数
输出:十进制数
作者:龙行江湖
时间:2.13.8.16.
================================================
*/
int convert(char str[]) //转换函数
{
int sum=0,n=0,i;
for(i=0;i<strlen(str);i++) //从高位到低位一位一位读取
{
if(str[i]>='0'&&str[i]<='9')
n=str[i]-'0'; //0-9可以用-‘0’的方法隐式转换为int类型
else n=str[i]-55; //A-G可以用-55的方法隐式转换为int类型
sum=sum*17+n; //累加计算结果
//printf("%d,%d,%d\n",i,n,sum); //验证结果过程
}
return sum;
}
main()
{
char str[20];
gets(str);
int a=convert(str);//实现转换
printf("%d",a);
getchar();
}
2、分别用指针和数组两种方式,实现随机输入一组字符串,然后按字母顺序排列。
要求:两个函数均为独立函数,可输入任意长度字符串(<1024),非法输入要提示错误信息。
#include<stdio.h>
#include<string.h>
void sort(char number[],int n); //这里直接用 char number[] 就行了
void sortPtr(char* number,int n);
void main()
{
char a[100],*number;
int n;
printf("请输入一串字符串:\n");
gets(a);
number=a;
printf("排序后得:%d\n",n=strlen(a));
sortPtr(number,n);
puts(a);
getchar();
}
void sort(char number[],int n) //这里也要改成 char number[]
{
char temp; //这里直接用temp
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
k=i;
for(j=i+1;j<n;j++)
if(number[k]>number[j]) //你是当个字符比较 直接用munber[k]>number[j]就行了
k=j;
if(k!=i)
{
temp=number[i];
number[i]=number[k];
number[k]=temp;
}
}
}
}
void sortPtr(char* number,int n) //这里也要改成 char number[]
{
char temp; //这里直接用temp
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
k=i;
for(j=i+1;j<n;j++)
if(*(number+k)>*(number+j)) //你是当个字符比较 直接用munber[k]>number[j]就行了
k=j;
if(k!=i)
{
temp=*(number+i);
*(number+i)=*(number+k);
*(number+k)=temp;
}
}
}
}
3、泰勒级数sin(x)=x-x3/3!+x5/5!-x7/7!+x9/9!-… 计算sin(x)的值。要求最后一项的绝对值小于10^(-5)
#include <stdio.h>
#include <math.h>
/* 利用泰勒级数sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-...
计算sin(x)的值。要求最后一项的绝对值小于10^(-5)*/
void main(){
double sum,item;
int i=0,count=0;
float x;
printf("Input x: ");
scanf("%f",&x);
sum=x;
item=x;//初始化赋值 item存放每一项的值
do{
i++;
item = -item*x*x/((2*i)*(2*i+1));//第一項为-x^3/3! item=-x*x*x/(2*3)
//第二项为x^5/5! 直接对第一項取负,-item*x*x/(4*5),后面以此类推
sum+=item;
count++;
}while(fabs(item)>=1e-5);
printf("sin(%f)=%6.6lf,count=%d\n",x,sum,count);
}