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);
}
https://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;
}
}
}
}
代码链接
https://pan.baidu/s/1Bu5HIeQMeIzsimnyWnaFBA提取码:rndk
更多推荐
C语言程序设计题(函数题前15道)
发布评论