C语言--期末前夜刷题计划(吉林大学高级语言程序设计超星慕课作业题为主)

1.输出前驱后继字符

#include "stdio.h"
int main(){
    char x;
    scanf("%c",&x);
    int a,b,c;
    b=x;
    a=x-1;
    c=x+1;
    printf("%c%c%c",a,b,c);
    return 0;
}

要点:利用C语言字符也是用数字表示特点,来一个输出的类型转换即可

2.爱因斯坦阶梯

#include "stdio.h"
int main(){
    int n;
    for(n=1;;n++) {
        if (n % 2 == 1 && n % 3 == 2 && n % 5 == 4 && n % 7 == 0)
            break;
    }
    printf("%d",n);
    return 0;
}

一个for循环搞定(一个for语句没写判断条件的循环)

3.大兔子斐波那契(注意第0项的时候就已经有一对儿大兔子了,相当于从正常斐波那契的第二项开始取)

#include "stdio.h"
int f(int n){
    if(n==0)return 1;
    else if(n==1)return 1;
    else return f(n-1)+f(n-2);
}
int main(){
    int n;
    scanf("%d",&n);
    printf("%d",f(n));
    return 0;
}

4.计算 e^x

题目描述:请计算上述序列的前101项的和(截止到n取100)

GJBook3-04-02.jpg

输入:一个浮点数,对应x值。

输出:一个浮点数,即e^x的近似值,小数点后保留到第2位。

注:本题不允许使用math.h头文件和相关的pow和exp等函数。

样例1:

输入:0
输出:1.00

样例2:

输入:4.3
输出:73.70

一个求e的小东西(容易溢出。。。)

#include<stdio.h>

int main() {

float x;

double sum=1.0,num=1.00;

int i;

scanf("%f",&x);

for (i = 1; i < 100-1; i++) {

num = num * x / i;

sum = sum + num;

}

printf("%.2lf",sum);

return 0;

}

 5.打印三位阿姆斯特朗数

#include "stdio.h"
int main(){
    int n;

    for(n=100;n<1000;n++){
        int x=n/100;
        int y=n/10-x*10;
        int z=n-x*100-y*10;
        if(x*x*x+y*y*y+z*z*z==n)
            printf("%d ",n);
    }
    return 0;
}

注意C语言顺序执行,要先初始化变量n才可以定义与n有关的变量x,y,z

6.勒让德多项式

题目描述:

编一个程序,输入x、n,计算勒让德(Legendre)多项式的第 n 项(此题假定n取0时,为勒让德多项式第0项)。

Exp02-Basic11.jpg

输入:一个浮点数和一个整数,分别对应x和n(0<=n<=20)。

输出:一个浮点数,即勒让德多项式第n项的值,注意小数点后保留到第2位。
 

样例1:

输入:3.4 2
输出:16.84

样例2:

输入:3.4 10
输出:30143685.82

样例3:

输入:-3.4 2
输出:16.84
#include "stdio.h"
double f(double x,int n){
    if(n==0)
        return 1.00;
    else if(n==1)
        return x;
    else if(n>1)
        return (2*n-1)*x*f(x,n-1)/n-(n-1)*f(x,n-2)/n;
}
int main(){
    float x;
    int n;
    scanf("%f%d",&x,&n);
    printf("%.2lf",f(x,n));
    return 0;
}

 注意:乘除顺序混杂全部存在时养成好习惯整理成乘在前除在后的形式并且注意要给加减运算加括号避免混淆

7.符合条件自然数

题目描述:编写程序,打印所有小于正整数data且可被11整除的自然数。

输入:从键盘输入一个正整数data

输出:输出所有小于data且可被11整除的自然数,数与数之间以一个空格做间隔,最后一个数后无多余字符。
 

样例1:

输入:50
输出:0 11 22 33 44

样例2:

输入:80
输出:0 11 22 33 44 55 66 77
#include "stdio.h"
int main(){
    int data,n=0;
    scanf("%d",&data);
    while(n<data-11){
        printf("%d ",n);
        n+=11;
    }
    printf("%d",n);
    return 0;
}

一些printf的小技巧(输出无多余字符)

8.括号统计

题目描述:编程序,判断给定以字符‘@’结束的字符序列中‘(’与‘)’、‘[’与‘]’、‘{’与‘}’的个数是否相等。

输入:输入一串以字符‘@’结束的字符序列,其间可能含有若干空白字符。

输出:个数不相等的括号(按花括号、方括号、圆括号的顺序);如果三种括号的个数都相等,输出NULL。


样例1:

输入:{a+b*c+(d/e-f]}}@
输出:{}[]()

样例2:

输入:{a  +  b*c+(d/e-f]}@
输出:[]()
#include<stdio.h>

int main(void){

char c;

int a,b,g,d,e,f;

a=0;b=0;g=0;d=0;e=0;f=0;

scanf("%c",&c);

while(c!='@'){

switch(c){

case'{':a++;break;

case'}':b++;break;

case'[':g++;break;

case']':d++;break;

case'(':e++;break;

case')':f++;break;

default:break;

}

scanf("%c",&c);

}

if(a!=b)printf("{}");

if(g!=d)printf("[]");

if(e!=f)printf("()");

if(a==b&&g==d&&e==f)printf("NULL");

return 0;

}

思路:一个一个输入然后判断

9.数字求和

题目描述:给定一个整数a,以及另外的5个整数,问题是:这5个整数中,可以被a整除的整数和是多少?
 

输入:输入一行只包括6个小于100的整数,其中第一个整数是a,输入保证a不为零。

输出:输出一行,给出一个整数,是5个数中可以被a整除的所有整数的和。


样例1:

输入:10 10 -20 30 40 11
输出:60

样例2:

输入:11 10 20 30 40 12
输出:0
#include<stdio.h>

int main() {

int a[6];

int n,sum = 0;

a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = 0;

scanf("%d %d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5]);

for (n = 1; n <= 5; n++) {

if (a[n] % a[0] == 0) sum += a[n];

}

printf("%d", sum);

return 0;

}

超简单不要想复杂

10.多边形周长

题目描述:编写程序,求由键盘按顺时针方向输入n(0<n<=10)个顶点坐标的多边形周长(测试数据已保证当n>2时,各点按输入方向依次连接可构成封闭的n边形)。

输入:第一行输入一个整数,作为n值;以后每行两个浮点数(double),为多边形各顶点的坐标。

输出:多边形的周长,精确到小数点后2位。
 

样例1:

输入:
4
0  0
0  1
1  1
1  0
输出:4.00

样例2:

输入:
1
2 3
输出:
0.00

样例3:

输入:
2
2 3
2 4
输出:
1.00
#include<stdio.h>

#include<stdlib.h>

#include<math.h>

double d(double x1, double y1, double x2, double y2);

int main() {

int n,j;

double sum=0;

double x[10], y[10];

for (j = 0; j < 10; j++) {

x[j] = y[j] = 0;

}

scanf("%d", &n);

for (j=0; j <n; j++) {

scanf("%lf %lf", &x[j], &y[j]);

}

for (j = 0; j < n - 1; j++) {

sum += d(x[j], y[j], x[j + 1], y[j + 1]);

}

if(n>2)sum += d(x[0], y[0], x[j], y[j]);

printf("%.2lf", sum);

return 0;

}

double d(double x1, double y1, double x2, double y2 ) {

double result;

result = sqrt((x2 - x1)*(x2 - x1) + (y2 - y1)* (y2 - y1));

return result;

}

注意:最后一个循环是最后一组点到第一组点(数学思想)

           用一个函数来求边长相当好用

           开方用sqrt记得用math.h顺便把括号括好(要开方的范围)

11.根据是否是素数输出Y/N

#include "stdio.h"
void f(int n){
    int i;
    for(i=2;i<n;i++)
        if(n%i==0)
            break;
        if(i<n||n==1||n==0)
            printf("N");
        else printf("Y");
}
int main(){
    int n;
    scanf("%d",&n);
    f(n);
    return 0;
}

一个i实现计数+判断

巧妙的i<n||n==0||n==1

12.自守数

题目描述:若一个正整数a满足条件 a^2 的尾数等于a,则称a为自守数,例如:

25^2=625 、76^2=5776 、9376^2=87909376 都是自守数。

编写程序,求小于等于n的所有自守数。

输入:从键盘随机输入一个正整数n(<10000000)。

输出:输出小于等于n的所有自守数,每个数之间以一个西文空格间隔。

#include "stdio.h"
void f(int n){
    int i;
    int b;
    for(i=1;i<n;i++){
        b=(i*i)%10;
        if(b==i)
            printf("%d ",i);
    }
}
int main(){
    int n;
    scanf("%d",&n);
    f(n);
    return 0;
}

写函数yyds

尾数判断:int型变量/10即可

13.

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值