sse哈工大C语言编程练习23

2026年2月23日

收获:

1.穷举法确定价格时,须进行n-1层循环,四个判断可使用一个作为循环条件,剩下三个作为判断条件。

2.交换两个数时要用地址传入,才能正确交换。

3.赋值语句的优先级最低,若判断中有赋值语句,要加括号提高优先级。

4.求满足条件的n时,要先使n++,再进行计算。若是do while则需要最后将n--。

5.定积分的计算方法,两端点的函数平均值加上各中间点的函数值,乘以均分宽度即梯形的高,得到定积分的结果。

题目:

1、Q2247.(语言: C)今有五羊四犬三鸡二兔值钱一千四百九十六,四羊二犬六鸡三兔值钱一千一百七十五,三羊一犬七鸡五兔值钱九百五十八,二羊三犬五鸡一兔值钱八百六十一。用穷举法编程计算羊犬鸡兔价各几何。

**输出格式要求:"x=%d,y=%d,z=%d,u=%d\n"

注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程。

c 复制代码
#include <stdio.h>
int main()
{
    int y,q,j,t;
    for(y=1;y<1496/5;y++){
        for(q=1;q<(1496-5*y)/4;q++){
            for(j=1;j<(1496-5*y-4*q)/3;j++){
                t=(1496-5*y-4*q-3*j)/2;
                if(t<0){
                    break;
                }else if( 4*y+2*q+6*j+3*t==1175 && 3*y+q+7*j+5*t==958 && 2*y+3*q+5*j+t==861){
                    printf("x=%d,y=%d,z=%d,u=%d\n",y,q,j,t);
                    return 0;
                }
            }
        }
    }
    return 0;
}

2、Q288.(语言: C)下面程序的功能是从键盘任意输入两个整数,编程实现将其交换后再重新输出。目前程序中存在错误,请修改正确。

复制代码
#include  <stdio.h>
void  Swap(int x, int y)
int main()
{
    int  a, b;
    printf("Please enter a,b:");
    scanf("%d,%d", &a, &b);              
    printf("Before swap: a = %d, b = %d\n", a, b);
    Swap(a,b);       //应传入实参,才能交换                               
    printf("After swap: a = %d, b = %d\n", a, b);
    return 0;
}
void Swap(int x, int y);                
{
    int  temp;
    temp = x;                          
    x = y;              
    y = temp;          
}
[/code]

注意:
(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
(2)对于没有错误的语句,请不要修改。
(3)不要改变代码的输入输出格式。

改后运行成功代码:

c 复制代码
#include  <stdio.h>
void  Swap(int *x, int *y);
int main()
{
    int  a, b;
    printf("Please enter a,b:");
    scanf("%d,%d", &a, &b);              
    printf("Before swap: a = %d, b = %d\n", a, b);
    Swap(&a,&b);                               
    printf("After swap: a = %d, b = %d\n", a, b);
    return 0;
}
void Swap(int *x, int *y)           
{
    int  temp;
    temp = *x;                          
    *x = *y;              
    *y = temp;          
}

3、Q3887.(语言: C)(2017 春 B)

某种细菌(用'*'表示)繁殖遵循一定的规律。按照如下方式繁殖:

第一天: *

第二天: * *** *

第三天: * *** ***** *** *

第四天: * *** ***** ******* ***** *** *

...

你需要计算第x天的细菌数量(x<=10)

复制代码
#include "stdio.h"
 
int function(int x)
{
    if (x == 1)
        return 1;
    else if (x > 1)
        return function(x - 1);
    else
        return -1;
}
int main(void)
{
    int x;
    int cell_num;
 
    do
    {
        scanf("%d", &x);
    } while (x > 0 && x <= 10)
 
    if (cell_num = function (x) > 0)
        printf("%d", cell_num);
    return 0;
}

改后运行成功代码:

c 复制代码
#include<stdio.h>
int function(int x)
{
    if (x == 1)
        return 1;
    else if (x > 1)
        return function(x - 1) + 4*(x-1);
    else
        return -1;
}
int main(void)
{
    int x;
    int cell_num;
    do
    {
        scanf("%d", &x);
    } while (x <= 0 || x > 10);
    if ((cell_num = function (x)) > 0)
        printf("%d", cell_num);
    return 0;
}

4、Q588.(语言: C)编写一个程序,求满足以下条件的最大的n:1^2 + 2^2 + 3^2 + ... + n^2 <= 1000。

x^2表示x的平方。

**输出格式要求:"n=%d\n"

c 复制代码
#include <stdio.h>
int main()
{
    int n=0,sum=0;
    do{
        n++;
        sum+=n*n;
    }while(sum<=1000);
    n--;
    printf("n=%d\n",n);
    return 0;
}

5、Q6381.(语言: C)按如下函数原型,采用梯形法编程实现(分成100个小梯形,再求这100个梯形面积的和)),在积分区间[a,b]内计算函数y1=∫011+x2dxy_1=\int_{0}^{1} 1+x^2 dxy1=∫011+x2dx和y2=∫03x1+x2dxy_2=\int_{0}^{3} \frac{x}{1+x^2} dxy2=∫031+x2xdx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。Integral(float (*f)(float), float a, float b);**输出格式要求:"y1=%f\ny2=%f\n"

c 复制代码
#include <stdio.h>
float fun1(float x);
float fun2(float x);
float Integral(float (*f)(float), float a,float b);
int main()
{
    float y1,y2;
    y1=Integral(fun1,0.0,1.0);
    y2=Integral(fun2,0.0,3.0);
    printf("y1=%.2f\ny2=%.2f\n",y1,y2);
    return 0;
}
float fun1(float x){
    return 1+x*x;
}
float fun2(float x){
    return x/(1+x*x);
}
float Integral(float (*f)(float),float a,float b){
    float s,h;
    s=((*f)(a)+(*f)(b))/2;  //上底加下底/2
    h=(b-a)/100;
    for(int i=1;i<100;i++){
        s+=(*f)(a+i*h);	   //中间点的函数值加了两次,所以不用除以2
    }
    return s*h;
}
相关推荐
ArturiaZ1 小时前
【day36】
数据结构·c++·算法
山河君1 小时前
四麦克风声源定位实战:基于 GCC-PHAT + 最小二乘法实现 DOA
算法·音视频·语音识别·信号处理·最小二乘法·tdoa
额,不知道写啥。2 小时前
P5354 [Ynoi Easy Round 2017] 由乃的 OJ
java·开发语言·算法
代码无bug抓狂人2 小时前
C语言之单词方阵——深搜(很好的深搜例题)
c语言·开发语言·算法·深度优先
im_AMBER2 小时前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
Polaris北2 小时前
第二十九天打卡
算法
CodeJourney_J2 小时前
从“Hello World“ 开始 C++
c语言·c++·学习
样例过了就是过了2 小时前
LeetCode热题100 环形链表 II
数据结构·算法·leetcode·链表
码农幻想梦2 小时前
3472. 八皇后(北京大学考研机试题目)
考研·算法·深度优先