文章目录

  • 函数题
    • 1.其右上三角(含主对角线)元素之和
    • 2.逆序(函数
    • 3.函数选择法排序
    • 4. 用函数求平均分。
    • 5.各位上的数字之积
    • 6.函数判断一个数是否完数。
    • 7.递归函数求n!
    • 8.使用函数判断完全平方数
    • 9.完成求阶乘的函数
    • 10.素数
  • 编程题
    • 1.计算分段函数
    • 2.计算符号函数的值
    • 3.成绩转换
    • 4.计算分段函数
    • 5.输出三角形面积和周长
    • 6.简单四则运算
    • 7.统计素数并求和
    • 8.求奇数和
    • 9.水仙花数
    • 10.求最大值及其下标
    • 11.找完数
    • 12.输出整数各位数字
    • 13.字符串逆序
    • 14.求矩阵各行元素之和
    • 15.交换最小值和最大值
    • 16.输出数组元素
    • 17.冒泡法排序

函数题

1.其右上三角(含主对角线)元素之和

输入二维数组的所有元素,求二维数组右上三角(包括主对角线)元素之和。在这里插入代码

//在这里给出函数被调用进行测试的例子。例如:#include int fun(int a[3][3]);int main(){int i,j,s,x[3][3];for(i=0;i<3;i++){for(j=0;j<3;j++)scanf("%d",&x[i][j]);} s=fun(x); printf("sum=%d\n",s); return 0;}/* 您的答案将被嵌入在这里 */

answer:

int fun(int a[3][3]){int sum = 0;int i = 0;int n = 3;for (i = 0; i < n; i++){int j = 0;for (j = i; j < n; j++)sum += a[i][j];}return sum;}

2.逆序(函数

将一个含有n个元素的一维数组逆序存放。

#include void inv(int x[],int n);int main(){ int i,a[100],n; scanf("%d",&n); for (i=0;i<n;i++) scanf("%d",&a[i]); inv(a,n); for (i=0;i<n;i++)printf("%4d",a[i]); printf("\n");return 0; }/* 请在这里填写答案 */

answer:

void inv(int a[],int n){int left = 0;int right = n-1;while(left < right){a[left] = a[right] ^ a[left];a[right] = a[right] ^ a[left];a[left] = a[right] ^ a[left];left++;right--;}}

3.函数选择法排序

用选择法对数组a 进行由小到大的排序

#include void fun(int a[],int n);int main(){ int i,a[10]={3,7,5,1,2,8,6,4,10,9}; fun(a,10); for(i=0;i<10;i++) printf("%3d",a[i]);return 0; }/* 请在这里填写答案 */

answer:

void fun(int a[],int n){int i,j;for(i=0;i<n;i++){for(j=0;j<n;j++){if(a[i]<a[j]){a[i]=a[i]^a[j];a[j]=a[i]^a[j];a[i]=a[i]^a[j];}}}}

4. 用函数求平均分。

数组名作为函数参数,求平均成绩。

#include float aver(float a[ ]);int main(){float sco[5],av;int i;for(i=0;i<5;i++)scanf("%f",&sco[i]);av=aver(sco);printf("average score is %5.2f\n",av);return 0; }/* 请在这里填写答案 */

answer:

float aver(float a[]){int i = 0;float sum = 0.0f;for(i = 0;i < 5;i++){sum += (float)a[i];}return sum/5.0f;}

5.各位上的数字之积

函数fun的功能是:计算正整数num的各位上的数字之积。例如,输入252,则输出应该是20。

#includelong fun(long num);int main(){long n;scanf("%ld",&n);printf("%ld\n",fun(n));return 0;}/* 请在这里填写答案 */

answer:

long fun(long num){long k = 1;do{k *= num % 10;//k=k*(num%10)num/=10;} while (num);return (k);}

6.函数判断一个数是否完数。

编写函数判断一个数是否完数,在函数中给出是否完数的信息,如果是完数,函数返回1,否则返回0。然后调用它找出10000以内的全部完数。

#include int wanshu(int n);int main(){intn,i;for(n=1;n<=10000 ;n++) if(wanshu(n) == 1) {printf("%d=%d",n,1);for(i=2;i<=n/2;i++)if(n%i == 0)printf("+%d",i); printf("\n");}return 0; }/* 请在这里填写答案 */

answer:

int wanshu(int n) {int factors[n], sum = 0, i;int len = 0;for (i = 1; i < n; i++) {if (n % i == 0){factors[len] = i;len++;}}for (i = 0; i < len; i++) {sum += factors[i];}if (sum == n) {return 1;// 是完数} else {return 0;// 不是完数}}

7.递归函数求n!

编程用递归函数求n!,然后调用该函数计算5!+7!+9!的值。

#include  floatfun(int n);int main(){int i;float s=0;for(i=5;i<=9;i=i+2)s=s+fun(i);printf("%.0f",s);return 0;}/* 请在这里填写答案 */

answer:

 floatfun(int n) { if(n > 1) return n*fun(n-1); return 1; }

8.使用函数判断完全平方数

本题要求实现一个判断整数是否为完全平方数的简单函数。

#include #include int IsSquare( int n );int main(){int n;scanf("%d", &n);if ( IsSquare(n) ) printf("YES\n");else printf("NO\n");return 0;}/* 你的代码将被嵌在这里 */

answer:

//方法一int IsSquare( int n ){ int i = 0;if(n >= 0){for(i=0;i <= n/2+1;i++){if(n==i*i){return 1;}}}return 0;}//方法二// int IsSquare(int n)// {// for (int i = 0; i < sqrt(n) + 1; i++)// {// if (i*i == n)// {// return 1;// } // }// return 0;// }

9.完成求阶乘的函数

本题要求实现一个计算非负整数阶乘的简单函数,使得可以利用该函数,计算组合数 的值。

#include // 求阶乘double Fac(int n);int main(){int m, n;scanf("%d%d", &m, &n);printf("%g\n",(double)Fac(m)/(Fac(n)*Fac(m-n)));return 0;}/* 你提交的代码将被嵌在这里 */

answer:

double Fac(int N){if(N > 1)return N*Fac(N-1);return 1;}

10.素数

本题要求实现一个函数,判断一个正整数是否为素数。。

#include #define N 1000intprime(int x);int main(){int x,k;scanf("%d",&x);k=prime(x);if(k)printf("%d is prime",x);elseprintf("%d is not prime",x);return 0;}/* 请在这里填写答案 */

answer:

intprime(int x){if(x ==2)return 1;int i;for(i = 1;i<x/2;i++){if(x%i==0)return 0;}return 0;}

编程题

1.计算分段函数

本题目要求计算下列分段函数f(x)的值:

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

#include #includeint main(){ double x = 0.0, result = 0.0;scanf("%lf", &x);if (x >= 0){result = sqrt(x);}else{result = pow((x + 1), 2.0) + 2 * x + 1 / x;}printf("f(%0.2f) = %0.2f", x, result);return 0;}

2.计算符号函数的值

对于任一整数n,符号函数sign(n)的定义如下:
请编写程序计算该函数对任一输入整数的值。

输入格式:
输入在一行中给出整数n。
输出格式:
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。

#include int main(){int n;scanf("%d", &n);int y;if (n < 0){y = -1;}else if (n == 0){y = 0;}else{y = 1;}printf("sign(%d) = %d", n, y);return 0;}

3.成绩转换

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A;小于90且大于等于80为B;小于80且大于等于70为C;小于70且大于等于60为D;小于60为E。

输入格式:
输入在一行中给出一个整数的百分制成绩。

输出格式:
在一行中输出对应的五分制成绩。

#include//法一:int main(){int n;scanf("%d",&n);if(n>=90) printf("A");else if(n>=80&&n<90) printf("B");else if(n>=70&&n<80) printf("C");else if(n>=60&&n<70) printf("D");else printf("E");}//法二,用switch更简单;将输入值取10的商作为case选项即可

4.计算分段函数

本题目要求计算下列分段函数f(x)的值:

输入格式:
输入在一行中给出实数x。
输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

#include#includeint main(){float x;float result=0;scanf("%f",&x);if(x!=10)result = x;elseresult = 1/x;printf("f(%.1f) = %.1f\n",x,result);return 0;}

5.输出三角形面积和周长

本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
注意:
在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(s−a)(s−b)(s−c)​,
其中 s=(a+b+c)/2。

#include#includemain(){int a,b,c;double s,area;scanf("%d %d %d",&a,&b,&c);if(a+b>c&&a+c>b&&c+b>a){s = (a+b+c)/2.0;area = sqrt(s*(s-a)*(s-b)*(s-c));printf("area = %.2f; perimeter = %.2f",area,s*2);}else{printf("These sides do not correspond to a valid triangle");}return 0;} 

6.简单四则运算

读入一个实数、一个操作符(仅限于+ – * /)、一个实数,求该表达式的值。若除数为0,输出“The divisor is 0.”

输入格式:
读入操作数、操作符、操作数
输出格式:
输出表达式的值(保留两位小数)。若除数为0,输出“The divisor is 0.”

#include int main(){float num1,num2;char sign;//符号输入  scanf("%f",&num1); scanf("%c",&sign); scanf("%f",&num2); switch(sign) {case '+':printf("%.2f",num1+num2);break;case '-':printf("%.2f",num1-num2);break;case '*':printf("%.2f",num1*num2);break;case '/':if(num2!=0)printf("%.2f",num1/num2);else printf("The divisor is 0.");break;default:break;}return 0; }

7.统计素数并求和

本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:

输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:

在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

#include int f(int i);int main(void){int m,n,i,cnt1=0,sum=0;scanf("%d%d",&m,&n);if(m==1&&n==1){sum=0;cnt1=0;}else {if(m==1){m=2;}for(i=m;i<=n;i++){if(f(i)){sum+=i;cnt1++;}}}printf("%d %d",cnt1,sum);return 0;} int f(int i){int x,cnt=0;for(x=2;x<i;x++){if(i%x==0){cnt++;}} if(cnt==0){return 1;}else return 0;}

8.求奇数和

本题要求计算给定的一系列正整数中奇数的和。
输入格式:

输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:

在一行中输出正整数序列中奇数的和。

#includeint main(void){int i,n;int sum=0;while(scanf("%d",&n)){if(n%2 ==1){sum+=n;}if(n==0||n<0)break;}printf("%d",sum);}

9.水仙花数

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+33。 本题要求编写程序,计算所有N位水仙花数。

#include#includeint main(){int i,n,digit,a1,b,m,s;int a[10];scanf("%d",&n);for(i=0;i<10;i++){a[i]=pow(i,n);}a1=pow(10,n-1);b=a1*10;for(i=a1;i<b;i++){m=i;s=0;while(m!=0){digit=m%10;m/=10;s+=a[digit];}if(s==i){printf("%d\n",i);}}return 0;} 

10.求最大值及其下标

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

#include int main(void){int n,i;scanf("%d",&n);int a[n-1];for(i=0; i<n;i++){scanf("%d",&a[i]);}int maxn;maxn=0;for(i=1;i<n;i++){if(a[i]>a[maxn]){maxn=i;}}printf("%d %d",a[maxn],maxn);return 0;}

11.找完数

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:

输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

#includeint main(){int m,n,i,j,a,b,flag=1,x;int t[100];scanf("%d %d",&m,&n);for(i=m;i<=n;i++){a=1;b=0;for(j=2;j<i;j++){if(i%j==0){a+=j;t[b++]=j;}}if(i==a){flag=0;printf("%d = 1",i);for(x=0;x<b;x++){printf(" + %d",t[x]);}printf("\n");}}if(flag){printf("None\n");}return 0;}

12.输出整数各位数字

本题要求编写程序,对输入的一个整数,从高位开始逐位分割并输出它的各位数字。
输入格式:

输入在一行中给出一个长整型范围内的非负整数。
输出格式:

从高位开始逐位输出该整数的各位数字,每个数字后面有一个空格。

#include #include  int main(){long int n,k;int count;int p;count = 0;scanf("%ld", &n);k = n;if(n==0){printf("%d ", 0);}else{while(k!=0){k= k/10;count++;}while(count>0){count--;p = pow(10,count);printf("%d ", n/p);n = n % p; }}return 0;}

13.字符串逆序

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:

在一行中输出逆序后的字符串。

#includeint main(){char arr[81];char q;gets(arr);int a = strlen(arr);int i = 0;for(i = 0;i<a/2;i++){q = arr[i];arr[i] = arr[a-i-1];arr[a-i-1] = q;}puts(arr);return 0;}

14.求矩阵各行元素之和

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

以空格分隔。
输出格式:

每行输出对应矩阵行元素之和

#includeint main(){int a[6][6];int m, n, i, j;int sum = 0;scanf("%d %d", &m, &n);for (i = 0; i < m; i++){for (j = 0; j < n; j++){scanf("%d", &a[i][j]);sum += a[i][j];}printf("%d\n", sum);sum = 0;} return 0;}

15.交换最小值和最大值

本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。
输入格式:

输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:

在一行中顺序输出交换后的序列,每个整数后跟一个空格。

#include int main(){int N,a[10],max,min,t,i;scanf("%d",&N);for(i=0;i<N;i++)scanf("%d",&a[i]);min=a[0];max=a[0];for(i=1;i<N;i++){if(a[i]>max)max=a[i];}for(i=1;i<N;i++){ if(a[i]<min)min=a[i];}for(i=0;i<N;i++)if(a[i]==min){ t=a[0];a[0]=a[i];a[i]=t;}for(i=0;i<N;i++){if(a[i]==max){ t=a[N-1];a[N-1]=a[i];a[i]=t;}}for(i=0;i<N-1;i++)printf("%d ",a[i]);printf("%d ",a[N-1]);return 0;}

16.输出数组元素

本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果。
输入格式:

输入的第一行给出正整数n(1<n≤10)。随后一行给出n个整数,其间以空格分隔。
输出格式:

顺次计算后项减前项之差,并按每行三个元素的格式输出结果。数字间空一格,行末不得有多余空格。

#includeint main (){int n,i,a[10],b[9];scanf("%d\n",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n-1;i++){b[i]=a[i+1]-a[i];}int count=0;for(i=0;i<n-1;i++){if(i==0)printf("%d",b[i]);else if(count%3==0){printf("\n");printf("%d",b[i]);}else printf(" %d",b[i]);count++;}}

17.冒泡法排序

将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。
输入格式:

输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。
输出格式:

在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

#includeint main(){int arr[100];int N,K;scanf("%d%d",&N,&K);if(1 <= K&&K < N&&N <= 100){int i = 0;for(i = 0;i < N;i++){scanf("%d",&arr[i]);}for(i = 0;i <K;i++){int j = 0;for(j = 0;j <N-1-i;j++){if(arr[j] > arr[j+1]){arr[j] = arr[j] ^ arr[j+1];arr[j+1] = arr[j] ^ arr[j+1];arr[j] = arr[j] ^ arr[j+1];}}}for(i = 0;i < N-1;i++){printf("%d ",arr[i]);}printf("%d",arr[N-1]);}return 0;}