C语言经典题目(24)

简介: C语言经典题目(24)

试验报告(一)

1、本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。有如下函数:
在这里插入图片描述

①写程序,输入x的值,输出y相应的值。用scanf函数输入x的值,求y值。
②运行程序,输入x的值(分别为x<1,1≤x<10,x≥10这3种情况),检查输出的y值是否正确。

程序代码:

#include<stdio.h>
int main()
{
    int x = 0; int y = 0;
    scanf("%d", &x);
    if (x < 1)
        y = x;
    else if (x >= 1 && x < 10)
        y = 2 * x - 1;
    else
        y = 3 * x - 11;
    printf("y=%d", y);
    return 0;
}
1、逻辑与操作符(&&):两个操作数同时为真才为真。

2、if if 和 if else if的区别:前者的两个if判断都会进行,而后者第一个判断为假才会进行第二个判断。

2、从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否小于1000的正数。若不是,则显示“数据不符合要求”。

#include<stdio.h>
#include<math.h>
int main()
{
    float input = 0;
    scanf("%f", &input);
    if (input > 1000 || input < 0)
        printf("数据不符合要求!\n");
    else
        printf("%d", (int)sqrt(input));
    return 0;
}
1、逻辑或操作符(||):一真为真,全假为假。

sqrt函数的返回值默认为浮点型,要在进行强制转换

3.给出一个百分制成绩,要求输出成绩等级A,B,C,D,E 90分以上为A,
80到89分的为B,70到79分的为C,60到69分的为D,60分以下为E。
①事先编好程序,要求分别用if语句和switch语句来实现。运行程序,并检查结果是否正确。
②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级,修改程序,使之能正确处理任何数据,当输入数据大于100和小于0时,通知用户“输入数据错”,程序结束。

#include<stdio.h>
int main()
{
    int score = 0;
    scanf("%d", &score);
    if (score > 100 || score < 0)
        printf("输入数据错");
    else
        switch (score/10)
        {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:printf("E"); break;
        case 6:printf("D"); break;
        case 7:printf("C"); break;
        case 8:printf("B"); break;
        case 9:printf("A"); break;
        case 10:printf("A"); break;
        default:printf("输入数据错");break;
        }
    return 0;
}
1、逻辑或操作符(||):一真为真,全假为假。

2、逻辑与操作符(&&):两个操作数同时为真才为真。

3、遇见break才会跳出当前选择语句

试验报告(二)

分析功能

1.分析下列程序,说出程序的功能

#include <stdio.h> 
int main()
{
    int m = 10, n, i;
    while (m--)
    {
        scanf("%d", &n);
        for (i = 2; i < n; i++)
            if (n % i == 0)
                break;
        if (i == n)
            printf("%d Yes ----Yes\n", n);
        else
            printf("%d   No==No\n", n);
    }
    return 0;
}
判断十次内输入的数是不是素数。

2.分析下列程序,说出程序的功能

#include <stdio.h>
int main()
{
    int m, n, i, j, t;
    scanf("%d %d", &m, &n);    
    if (m > n) { t = m; m = n; n = t; }
    for (i = m; i >= 1; i--)
    {
        if (m % i == 0 && n % i == 0)
        {
            printf("D-MAX GYS=%d\n", i);
            break;
        }
    }
    // 以上程序段的功能?
    for (j = n; 1; j++)
    {
        if (j % m == 0 && j % n == 0)
        {
            printf("x-MIN GBS=%d\n", j);
            break;
        }
    }
    // 第2段程序的功能?
    return 0;
}
** 第一部分的功能是:求输入的两个数的最大约数
第二部分的功能是:求输入的两个数的最小公倍数</font>**

3.分析下列程序,说出程序的功能

#include<stdio.h>
#include<math.h>
int main()
{
    double m, n, i;
    double eps = 1e-6;                       //10-6表示很小的数
    double a, b, c, d;
    double f1, f2, fx;
    printf("请输入a*x^3+b*x^2+c*x+d的系数a b c d:\n");
    scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
    printf("请输入取值区间:\n");
    scanf("%lf%lf", &m, &n);
    f1 = a * pow(m, 3) + b * pow(m, 2) + c * m + d;      //pow(x,y)=xy 幂函数
    f2 = a * pow(n, 3) + b * pow(n, 2) + c * n + d;

    if (f1 * f2 < 0)
    {
        while (fabs(m - n) > eps)
        {
            i = (m + n) / 2;
            fx = a * pow(i, 3) + b * pow(i, 2) + c * i + d;
            if (fabs(fx) < eps)
            {
                printf("方程的一个近似解为x*=%lf\n", i);
                break;
            }
            else if (f1 * fx < 0)  n = i;
            else if (f2 * fx < 0) m = i;
        }
    }
    else if (f1 * f2 == 0)
    {
        if (f1 == 0)  printf("方程的一个解为x*=%lf\n", m);
        if (f2 == 0)  printf("方程的一个解为x*=%lf\n", n);
        else
            printf("方程在该区间内无解!\n");
    }
    return 0;
}
二分法近似求解一元三次方程在某区间内的根

编写程序

1.打印7层杨辉三角形

#include <stdio.h>
int main()
{
    int i = 0;
    int j = 0;
int arr[10][10]={0};
   //赋值
    for (i = 1; i <= 7; i++)
    {
        arr[i][1] = arr[i][i] = 1;
    }
    for (i = 3; i <= 7; i++)
    {
        for (j = 2; j <= i - 1; j++)
        {
            arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
        }
}
    //打印
    for (i = 1; i <= 7; i++)
    {
        for (j = 1; j <= i; j++)
        {
            if(i>=j)
                    printf("%5d", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

详细讲解:杨辉三角详细解析

2.打印5阶魔方阵

#include <stdio.h>
#define N 20
void main()
{
    int a[N][N], n, i, j, k;
    while (1)
    {
        printf("请输入魔方阵的阶数(n<=20,且是奇数):");
        scanf("%d", &n);
        if (n != 0 && n <= 20 && n % 2 != 0)
        {
            printf("%d阶魔方矩阵.\n", n);
            break;
        }
    }
    //根据输入的n,初始化二维数组,使方阵的每个元素初值均为0
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            a[i][j] = 0;

    //构造魔方阵
    i = 0;        //i 指向第1行
    j = n / 2;      //计算出j:第一行中间列数
    a[i][j] = 1;  //放在第一行的中间一列,先定1的位置a[0][j] 
    k = 2;        //后面的数从2开始,按照魔方阵的规律摆放
    while (k <= n * n)   //数的范围从2 至 n*n
    {
        i = i - 1;  //行号减 1 
        j = j + 1;  //列号加 1 
        if (i<0 && j>n - 1)  //如果上一个数位于第1行第n列,则当前的数应在上一个数的下面 
        {
            i = i + 2;    //因为在前面i已经减去1了,所以下一行的行i值应该+2
            j = j - 1;    //因为在前面j已经减去1了,所以下一行的列j值应该+1(同上一列)
        }
        else
        {
            //如果上一个数位于第1行,则当前的数应位与最后一行 
            if (i < 0)
                i = n - 1;
            //如果上一个数位于第n列,则当前的数应位与第1列 
            if (j > n - 1)
                j = 0;   //j=0指向第1列
        }
        if (a[i][j] == 0)  //当前的数保存到数组中 
            a[i][j] = k;
        else //如果已经有数存在你,则放在上一个数的下面
        {
            i = i + 2;
            j = j - 1;
            a[i][j] = k;
        }
        k++;  //k增加1,再接着寻找下一个应该存放k的位置之i、j 
    }

    //输出魔方阵
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            printf("%4d", a[i][j]);
        printf("\n");
    }
}

3.有下面一列数据{0,-7,-9,9,2,51,7,14,35,37,49,43,41,1,3}
编写程序,用冒泡法将其按由小到大的顺序排列进数组ax[15]中

#include<stdio.h>
void bubble_sort(int arr[], int sz)
{
    for (int i = 0; i < sz - 1; i++)
    {
        for (int j = 0; j < sz - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
}
int main()
{
    int arr[15] = { 0,-7,-9,9,2,51,7,14,35,37,49,43,41,1,3 };
    int ax[15] = { 0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    for (int i = 0; i < 15; i++)
    {
        ax[i] = arr[i];
    }
    for (int j = 0; j < 15; j++)
    {
        printf("%d  ", ax[j]);
    }
}
相关文章
|
5月前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
5月前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
42 1
|
10月前
2.C语言题目---字符串左旋
2.C语言题目---字符串左旋
71 1
|
10月前
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
53 1
|
2月前
|
存储 编译器 C语言
【C语言】指针练习题目
【C语言】指针练习题目
|
4月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
41 1
|
5月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
4月前
|
C语言
c语言循环题目
c语言循环题目
|
5月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
|
5月前
|
C语言
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)
C语言 浙大版《C语言程序设计(第3版)》题目集 练习8-8 移动字母 (10分)