目录
C语言练习题专栏: C语言习题_繁星Starry的博客-CSDN博客
试题1
【题目描述】
请编写一个求两整数的最大值函数GetMax。要求在main函数中调用该函数,计算并输出最大值。其中已经给出了部分代码,请你编写计算最大值的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int num1, num2, max;
scanf("%d %d", &num1, &num2);
max = GetMax(num1, num2);
printf("MAX=%d\n", max);
return 0;
}
【输入】
两个整数。
【输出】
两个整数中的最大值。
【样例输入】
15 30
【样例输出】
MAX=30
int GetMax(int x,int y)
{
return(x>y?x:y);
}
试题2
【题目描述】
编写程序分模块设计实现计算器的基本运算功能(加减乘除,除数默认不为0)。
其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
float x, y, result;
char c;
scanf("%f%c%f", &x, &c, &y);
if (c =='+')
result = sum(x, y); /*有参函数调用*/
else if (c =='-')
result = sub(x, y);
else if (c == '*')
result = mult(x, y);
else if (c == '/')
result = divi(x, y);
printf("%.2f\n", result);
return 0;
}
【输入】
两个数字,一个运算符号
【输出】
运算结果,结果保留2位小数。
【样例输入】
2*3
【样例输出】
6.00
float sum(float x,float y)
{
float sum;
return sum=x+y;
}
float sub(float x,float y)
{
float sub;
return sub=x-y;
}
float mult(float x,float y)
{
float mult;
return mult=x*y;
}
float divi(float x,float y)
{
float divi;
return divi=x/y;
}
剩下的题过几天更~
试题3
【题目描述】
编写函数实现功能:若a,b,c 能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int a,b,c,shape;
scanf("%d%d%d",&a,&b,&c);
shape =fun(a,b,c);
printf("The shape : %d\n",shape);
return 0;
}
【输入】
三个整数
【输出】
三角形的形状用1、2或3表示
【样例输入】
3 3 3
【样例输出】
The shape : 3
int fun(int a,int b,int c)
{
if(a==b&&b==c)
return 3;
else if(a==b||b==c||c==a)
return 2;
else if(a+b>c&&b+c>a&&a+c>b)
return 1;
else
return 0;
}
试题4
【题目描述】
从键盘输入n 值,输出如下图形(n=6时)。
1 2 3 4 5 6
1 1 2 3 4 5
1 1 1 2 3 4
1 1 1 1 2 3
1 1 1 1 1 2
1 1 1 1 1 1
其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int n;
scanf("%d",&n);
fun(n);
return 0;
}
【输入】
正整数n
【输出】
n*n大小的数字图形(每个数字占3个域宽)
【样例输入】
5
【样例输出】
1 2 3 4 5
1 1 2 3 4
1 1 1 2 3
1 1 1 1 2
1 1 1 1 1
#define N 100
int fun(int n)
{
int i,j,k,a[N];
for(i=0;i<n;i++)
{
a[i]=i+1;
}
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
printf("%3d",a[i]);
}
printf("\n");
for(i=0;i<n;i++)
{
a[i]--;
if(a[i]==0)
a[i]++;
}
}
}
试题5
【题目描述】
完成函数计算任意两个整数的阶乘之和。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int num1, num2, result;
scanf("%d,%d",&num1,&num2);
result = factorial(num1) + factorial(num2);//调用两次factorial()
printf("%d", result);
return 0;
}
【输入】
两个整数
【输出】
两个数字分别阶乘然后相加的运算结果
【样例输入】
2,3
【样例输出】
8
int factorial(int num)
{
int i,result=1;
for(i=1;i<=num;i++)
result*=i;
return result;
}
试题6
【题目描述】
编写一个函数Fun,其功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int n;
scanf("%d",&n);
printf("The result is: %d\n",Fun(n));
return 0;
}
【输入】
一个整数n。
【输出】
按照要求形成的新整数。
【样例输入】
27638496
【样例输出】
The result is: 26846
int Fun(int n)
{
int i,j,k=0,b[10],ss;
do
{
i=n%10;
if(i%2==0)
{
b[k]=i;
k++;
}
n=n/10;
}
while(n>0);
ss=0;
for(j=k-1;j>=0;j--)
ss=ss*10+b[j];
return ss;
}
试题7
【题目描述】
从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中,将中间值放在变量b中。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
fun(&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
【输入】
三个整数
【输出】
按要求输出变量a、b和c的值
【样例输入】
55 12 34
【样例输出】
a=55,b=34,c=12
例如:
输入 | Result |
-10 -32 -789 | a=-10,b=-32,c=-789 |
6 6 6 | a=6,b=6,c=6 |
int fun(int *a,int *b,int *c)
{
int m,i;
for(i=1;i<=2;i++)
{
if(*a<*b)
{
m=*a;
*a=*b;
*b=m;
}
if(*b<*c)
{
m=*b;
*b=*c;
*c=m;
}
}
return *a,*b,*c;
}
试题8
【题目描述】
编写函数将两个变量的值交换,例如变量a中的值原为3,b中的值原为8,程序运行后a中的值为8,b中的值为3。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int a,b;
scanf("%d %d",&a,&b);
fun(&a,&b);
printf("%d %d\n",a,b);
return 0;
}
【输入】
两个整数
【输出】
交换后的两个整数
【样例输入】
3 5
【样例输出】
5 3
int fun(int *a,int *b)
{
int m;
m=*a;
*a=*b;
*b=m;
return *a,*b;
}
试题9
【题目描述】
编写函数,求一个字符串长度。main函数中输入字符串,并输出其长度
其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int len;
char str[200];
scanf("%s", str);
len = lenght(str);
printf("%d\n", len);
return 0;
}
【输入】
一个字符串。
【输出】
其字符个数。
【样例输入】
china↙
【样例输出】
5↙
int lenght(char str[200])
{
int i=0;
while(str[i]!='\0')
i++;
return i;
}
试题10
【题目描述】
请编写一个判断素数的函数PrimeJudge。具体功能是对录入的一个整数num进行判断,判断其是否为素数,如果是素数,则返回1,否则返回0。其中已经给出了部分代码,请你编写要求的函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int num;
scanf("%d", &num);
if( PrimeJudge(num) )
printf("Prime\n");
else
printf("Non Prime\n");
return 0;
}
【输入】
一个整数num。
【输出】
num如果是素数,则返回1,否则返回0。
【样例输入】
13
【样例输出】
Prime
例如:
输入 | Result |
21 | Non Prime |
31 | Prime |
2 | Prime |
56 | Non Prime |
79 | Prime |
int PrimeJudge(int num)
{
int p=1,i;
for(i=2;i<num-1;i++)
{
if(num%i==0)
p=0;
}
return p;
}
试题11
【题目描述】
哈哈!我们终于学了递归了,现在大家一定感到非常有意思吧,那个典型的“汉诺塔”问题,一个非常短的程序居然可以完成如此复杂的工作,真是神奇啊!来吧,让我们也动手编写一个递归程序,当然,我们要编写的不可能太复杂。功能:从键盘录入两个数n和m来表示一个区间, n 为区间的起始点,m为区间的终止点 ,求整数 n 到 m 区间的累加和,其中n<=m。
其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int m,n,s;
scanf("%d%d",&n,&m);
s=GetSum(n,m);
printf("%d\n",s);
return 0;
}
【输入】
两个整数n和m。
【输出】
n 到 m 区间的累加和。
【样例输入】
1 100
【样例输出】
5050
int GetSum(int a,int b)
{
if(a==b)
return b;
return a+GetSum(a+1,b);
}
试题12
【题目描述】
据说有个智商不高的富翁和一个智商较高的骗子。有一天骗子对富翁说:“我搞了一个基金会,你将短期不用的富余资金存到我这里吧。第一天你只需要存入一元,第二天存入两元,以此类推,以后每天存入的资金是前一天的2倍,直到若干天期满为止。与此同时,你可以每天最多支取一笔价钱不菲的金额。”俩人按照上述要求立字据,合约执行若干天后结束,到时两人互不相欠。
现要求编写两个函数Deposit()和Withdraw()分别计算富翁的存入和支取金额,并编写程序调用这两个函数判断骗子要想骗取富翁的金钱,合约需要执行的最少天数,以及骗子总共骗取的金钱数,其中通过输入获得富翁每天可以支取的最大金额数。其中录入数据格式要求有多行。第一行输入一个整数n,表示有n行测试数据。以下有n行数据,每行数据表示富翁每天可以支取的最大金额数amount(1<=amount<=1000000),单位为元。输出有n行。每行两个数据,第1个数据表示,骗子要想骗取富翁的金钱,根据富翁每天可以支取的最大金额数,判断出的合约需要执行的最少天数;第2个数据表示骗子所骗取的金钱数。
其中已经给出了部分代码,请你编写函数,将代码补充完整。只提交你写的函数。
部分代码如下:
#include <stdio.h>
/******函数写在此处******/
int main()
{
int n,i,day;
int amount,dpt,wd;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&amount);
for(day=1;;day++)
{
dpt=Deposit(day);
wd=Withdraw(day,amount);
if(dpt-wd>0)
{
printf("%d天骗取现金%d元\n",day,dpt-wd);
break;
}
}
}
return 0;
}
【输入】
有多行。第1行输入一个整数n,表示有n行测试数据。以下有n行数据,每行数据表示富翁每天可以支取的最大金额数amount(1<=amount<=1000000),单位为元。
【输出】
有多行。每行两个数据,第1个数据表示,骗子要想骗取富翁的金钱,根据富翁每天可以支取的最大金额数,判断出的合约需要执行的最少天数;第2个数据表示骗子所骗取的金钱数。
【样例输入】
2↙
300000↙
400000
【样例输出】
23天骗取现金1488607元↙
24天骗取现金7177215元↙
int fun(int x)
{
if(x==1)
return 1;
return 2*fun(x-1);
}
int Deposit(int x)
{
if(x==1)
return 1;
return 2*fun(x-1)+Deposit(x-1);
}
int Withdraw(int x,int y)
{
return x*y;
}
本文就到这里啦,如有帮助,请多支持~