C语言练习-day27

题目:使用函数统计指定数字的个数。本题要求实现一个统计整数中指定数字的个数的简单函数。

输入:一个被统计数字number,类型为int;一个统计的数字digit(用于number中出现了几个digit,范围为[0,9]),类型为int。

输出:输出在number中出现了几次digit。

优化目标:无。

算法思想:如果number等于0且digit也是0,就count(统计出现次数) = 1。如果number是负数就转为正数。然后依次取出number的个位,判断是否和digit相等,相等就count++,再将number除10。重复操作,直到number不大于0。返回count。

#include 

int CountDigit( int number, int digit );
    
int main()
{
    int number, digit;

    scanf("%d %d", &number, &digit);
    printf("Number of digit %d in %d: %d\n", digit, number, CountDigit(number, digit));
    
    return 0;
}

int CountDigit( int number, int digit ){
	int count = 0;
	if(number == 0&&digit == 0){
		count = 1;
	}
	if(number<0){
		number = -number;
	}
	while(number>0){
		if(number%10 == digit){
			count++;
		}
		number = number/10;
	}
	return count;
}

输入:1211253 1

输出:Number of digit 1 in 1211253:3

题目:使用函数输出水仙花数。水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。题目保证100≤m≤n≤10000。

输入:所要求的水仙花的上下界m和n,类型都是int。

输出:输出在m到n之间的水仙花数。

优化目标:无。

算法思想:函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。先判断m是否为水仙花数,是就输出m(数字) is a narcissistic number,然后输出m到n之间的水仙花数,最后判断n是否为水仙花数,是就输出n(数字) is a narcissistic number。

#include 

int narcissistic( int number );
void PrintN( int m, int n );
    
int main()
{
    int m, n;
  
    scanf("%d %d", &m, &n);
    if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
    PrintN(m, n);
    if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);

    return 0;
}

int narcissistic( int number ){
	int a,sum = 0,n = 3,k = number;
	if(number/1000 != 0){
		n = 4;
	}
	while(k>0){
		a = k%10;
		if(n ==3){
			sum = sum+a*a*a;
		}
		else{
			sum = sum+a*a*a*a;
		}
		k = k/10;
	}
	if(sum == number){
		return 1;
	}
	else{
		return 0;
	}
}

void PrintN( int m, int n ){
	for(int i=m+1;i

输入:153 400

输出:

153 is a narcissistic number

370

371

题目:使用函数求余弦函数的近似值。本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e。cos(x)=x^0/0!-x^2/2!+x^4/4!-x^6/6!+...。

输入:误差上线e和自变量x,类型都为double。

输出:输出在误差小于e的情况下cos(x)的值。

优化目标:无。

算法思想:函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。函数jiecheng为返回输入值的阶乘。调用funcos函数,对返回值进行输出。

#include 
#include 

double funcos( double e, double x );
double jiecheng(int n);
int main()
{    
    double e, x;

    scanf("%lf %lf", &e, &x);
    printf("cos(%.2f) = %.6f\n", x, funcos(e, x));
    
    return 0;
}


double jiecheng(int n){
	int i;
	double s = 1;
	for(i = 1;i<=n;i++){
		s*=i;
	}
	return s;
}


double funcos( double e, double x ){
	int i;
	double s = 1,t = 1,xi = 1;
	for(i = 2;xi>=e;i+=2){
		t*=-1;
		xi = pow(x,i)/jiecheng(i);
		s+=xi*t;
	}
	return s;
}

输入:0.01 4

输出:cos(4.00) = -0.653839

题目:分类统计字符个数。本题要求实现一个函数,统计给定字符串中英文字母、空格、数字字符和其他字符的个数。输出格式:letter = 英文字母个数, blank = 空格个数, digit = 数字字符个数, other = 其他字符个数

输入:用户传入的字符串s,类型为char s[]。

输出:按格式输出英文字母个数、空格个数、数字字符个数、其他字符个数。

优化目标:无。

算法思想:设置letter,blank,digit,other分别存储英文字母、空格、数字字符、其他字符的个数,依次读取s数组中每一个元素并判断是否为对应元素,是就对应的计数加一,不是就other++。最后就按格式输出。

#include 
#define MAXS 15

void StringCount( char s[] );
void ReadString( char s[] ); 

int main()
{
    char s[MAXS];

    ReadString(s);
    StringCount(s);

    return 0;
}

void ReadString( char s[] ){
	gets(s);
	return;
	
}

void StringCount( char s[] ){
	int letter = 0,blank = 0,digit = 0,other = 0,i = 0;
	while(s[i]!='\0'){
		if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){
			letter++;
		}
		else if(s[i] == ' '){
			blank++;
		}
		else if(s[i]>='0'&&s[i]<='9'){
			digit++;
		}
		else{
			other++;
		}
		i++;
	}
	printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
}

输入:2112xsx 51x5s15 51x51 +-56+

输出:letter = 6, blank = 3, digit = 15, other = 3

今日总结:前段时间一直在做关于数据结构的题,感觉有点忽略了C语言本身的题,所以这几天就主要是练一下C语言的题。

你可能感兴趣的:(c语言,学习)