admin管理员组

文章数量:1794759

C语言程序设计题(函数题前15道)

C语言程序设计题(函数题前15道)

C语言程序设计 勿喷,学习留作纪念,也供新手参考,新手入门

浙大版《C语言程序设计(第3版)》题目集
  • C语言程序设计
            • 勿喷,学习留作纪念,也供新手参考,新手入门
  • 函数题
      • 练习5-1 求m到n之和
      • 练习5-2 找两个数中最大者
      • 练习5-3 数字金字塔
      • 习题5-1 符号函数
      • 习题5-2 使用函数求奇数和
      • 习题5-3 使用函数计算两点间的距离
      • 习题5-4 使用函数求素数和
      • 习题5-5 使用函数统计指定数字的个数
      • 习题5-6 使用函数输出水仙花数int
      • 习题5-7 用函数求余弦函数的近似值
      • 习题6-1 分类统计字符个数
      • 习题6-2 使用函数求特殊a串数列和
      • 习题6-3 使用函数输出指定范围内的完数
      • 习题6-4 使用函数输出指定范围内的Fibonacci数
      • 习题6-5 使用函数验证哥德巴赫猜想
      • 代码链接

函数题 练习5-1 求m到n之和 是负数的时候 把负数变成正数 是正数的时候,不变 不管是m是负数还是正数,其结果都是前n位和-前m位和 int sum(int m, int n) { int sum1=0,sum2=0; if(m<0){ m = -m; } sum1 = (m+1)*m/2; sum2 = (n+1)*n/2; return sum2-sum1; } 练习5-2 找两个数中最大者 int max( int a, int b ){ if(a>b) return a; else return b; } 练习5-3 数字金字塔 void pyramid( int n ){ int i,j,k; for(i=1;i<=n;i++) // { for(j=n-i;j>0;j--) //每一层前的空格 第一行 n-1个 第二行 n-2个... { printf(" "); } for(k=i;k>0;k--) //输出每行的字符,第一行1个第二行2个... printf("%d ",i); printf("\\n"); } } 习题5-1 符号函数 int sign( int x ){ if(x>0) return 1; else if(x==0) return 0; else return -1; } 习题5-2 使用函数求奇数和 int even( int n ){ if(n<0) //传入数为负数时,切换成正数 n=-n; if(n%2 == 1) return 0; else return 1; } int OddSum( int List[], int N ){ int i; int sum=0; for(i=0;i<N;i++) { if(even(List[i]) == 0) //为奇数时,累加 sum+= List[i]; } return sum; } 习题5-3 使用函数计算两点间的距离 区分 abs()和fabs() 函数原型: int abs(int x); 函数功能: 求整数x的绝对值 函数原型:double fabs(double x); 函数功能:求浮点数x的绝对值. 函数名称: pow 函数原型: double pow(double x,double y); 函数功能: 计算以x为底数的y次幂,即计算x^y的值. 函数原型: double sqrt(double x); 函数功能: 计算x的开平方. 函数返回: 计算结果 参数说明: x>=0 double dist( double x1, double y1, double x2, double y2 ){ //勾股定理 double x = fabs(x2 - x1); //去绝对值 double y = fabs(y2 - y1); return sqrt(pow(x,2)+pow(y,2)); } 习题5-4 使用函数求素数和 素数是在自然数里相对而言的,自然数概念指用以计量事物的件数或表示事物件数的数 即用数码0、1、2、3、4、到正无穷所表示的数 素数不可以为负数 int prime( int p ){ if(p <= 1) // 1,负数都不是素数,所以首先排除 return 0; for(int i=2;i<p;i++) if(p%i == 0) //能被比p小的数整除,不是素数直接返回0 return 0; return 1; } int PrimeSum( int m, int n ){ int sum = 0; //素数之和 while(n>=m){ if(prime(m)) sum += m; m++; } return sum; } 习题5-5 使用函数统计指定数字的个数 int CountDigit( int number, int digit ){ int num=0; //dight 出现次数 if(number < 0 ) // number 切 正数 number = -number; if(number == 0 && digit == 0) return 1; while(number > 0){ if(number%10 == digit) num++; number = number / 10; } return num; } 该题该题有漏洞 0 2情况 如果将if(number == 0 && digit == 0)改为if(number == 0) 还是能过,自行分析 所以说,写题,要理解题意,不单单是能跑过 习题5-6 使用函数输出水仙花数int narcissistic( int number ){ int i,j; //临时变量 int set,bit=0; //set 个位 bit 几位数 int c_num=number; while(c_num>0){ //查出number 位数 bit++; c_num = c_num / 10; } c_num=number; //判断水仙花 while(c_num>0){ set=1; j=c_num % 10; for(i=1;i<=bit;i++) //计算各个位的n次方 set *=j; number -= set; // 将number 依次减去 各个位的n次方 如果最后等于0说明是--- c_num = c_num / 10; } if(number == 0) //说明是水仙花 return 1; return 0; } void PrintN( int m, int n ){ // (m,n) m++; while(m < n){ if(narcissistic(m) == 1) printf("%d\\n",m); m++; } } 习题5-7 用函数求余弦函数的近似值 注意审题要求,最后一项小于e,说明还是加进去最后一项小于e的值 所以可以用do while语句 此题可以分步骤,首先计算出分母,分子值,然后flag标志加减位,最后计算 double funcos( double e, double x ){ int i,temp=0,flag=0; //flag 标志位,temp 指数位 double sum1,sum=1; //分母sum1 sum最终值 do{ //最后一项的绝对值小于e temp=temp+2; sum1=1; for(i=1;i<=temp;i++) //分母sum1 sum1*=i; if(flag == 0){ sum -= pow(x,temp)/sum1; flag=1; } else{ sum += pow(x,temp)/sum1; flag=0; } }while(fabs(pow(x,temp)/sum1) >= e ); return sum; } 习题6-1 分类统计字符个数 void StringCount( char s[] ){ int letter = 0, blank = 0, digit = 0, other = 0; int i = 0; for(i=0; s[i]!='\\0'; i++){ if(s[i]>=48 && s[i]<=57) //ASCII码表示 0-9 digit++; else if((s[i]>=65 && s[i]<=90)||(s[i]>=97 && s[i]<=122)) // a-z ,A-Z letter++; else if(s[i] == ' '||s[i] == '\\n') blank++; else other++; } printf("letter = %d, blank = %d, digit = %d, other = %d",letter, blank, digit, other); }

blog.csdn/qq_44520665/article/details/113779176(ASCII)

习题6-2 使用函数求特殊a串数列和 int fn( int a, int n ){ int i,sum=0; for(i=1;i<=n;i++) //累乘 sum = sum*10+a; return sum; } int SumA( int a, int n ){ int temp,sum=0; for(temp=1;temp<=n;temp++){ sum += fn(a,temp); } return sum; } 习题6-3 使用函数输出指定范围内的完数 1 不是完数,直接排除 int factorsum( int number ){ //返回计算数 --因子的所有和 --- int half = number/2; int i,sum=1; if(number == 1) return 0; for(i=2; i<=half; i++){ if(number%i == 0) sum += i; } return sum; } void PrintPN( int m, int n ){ int flag = 1; //标志位 检测区间内是否有完数 for(int i=m; i<=n; i++){ if(factorsum(i) == i){ //是完数,输出 flag = 0; printf("%d = 1",i); for(int j=2; j<=i/2; j++){ if(i%j == 0) printf(" + %d",j); } printf("\\n"); } } if(flag) printf("No perfect number"); } 习题6-4 使用函数输出指定范围内的Fibonacci数 int fib( int n ){ int a =0, b =1, temp; for(int j=1; j<n; j++){ //求第n个完数 0 1 1 2 3 5 .... temp = b; b = a+b; a = temp; } return b; } void PrintFN( int m, int n ){ int flag = 0; //首个完数前面没有空格,同时当循环结束flag = 0时,说明没有完数 for(int i=1; fib(i)<=n; i++){ if(fib(i) >= m){ if(flag == 0) printf("%d",fib(i)); else printf(" %d",fib(i)); flag ++; } } if(flag == 0){ //TODO printf("No Fibonacci number"); } } 习题6-5 使用函数验证哥德巴赫猜想 int prime( int p ){ if(p<=1){ //小于等于1,非素数 返回0 return 0; } for(int i=2; i<p; i++) if(p%i == 0) //能被整除,返回0 return 0; return 1; } void Goldbach( int n ){ for(int i=2;i<n;i++){ if(prime(i)){ // i 为素数时 if(prime(n-i)){ // i,n-i 同时为素数时 printf("%d=%d+%d",n,i,n-i); break; } } } } 代码链接

pan.baidu/s/1Bu5HIeQMeIzsimnyWnaFBA提取码:rndk

本文标签: 函数语言程序设计