谭浩强老师C语言第五版第六章(上)

article/2025/8/20 6:04:20

第3、7题难在了数学思路上(不会或理解不了私信)

仅代表个人看法

如有错误请指正

题目1:用筛选法求100 之内的素数。

代码如下:

#include <stdio.h>
#include <math.h> 
int main()
{
    int i, j, n, a[101];     
    for (i = 1; i <= 100; i++) 
        a[i] = i;               
    a[1] = 0;                   
    for (i = 2; i < sqrt(100); i++)
        for (j = i + 1; j <= 100; j++)
        {
            if (a[i] != 0 && a[j] != 0)
                if (a[j] % a[i] == 0)
                    a[j] = 0; 
        }
    printf("\n");
    for (i = 2, n = 0; i <= 100; i++)
    {
        if (a[i] != 0) 
        {
            printf("%5d", a[i]); 
            n++;                
        }
        if (n == 10)
        {
            printf("\n");
            n = 0;
        }
    }
    printf("\n");
    return 0;
}

复制请说明

数学思路讲解(可能讲的不好,多多包涵)

(1)先将1挖掉(因为1不是素数)。

(2)用2除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

(3)用3除它后面各数,把3 的倍数挖掉。

(4)分别用4,5…各数作为除数除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如在图6.1中找1~50 的素数,要一直进行到除数为 47为止。事实上,可以简化,如果需要找1~n 的素数,只须进行到除数为 n(取其整数)即可,例如对1~50,只须进行到将 7 作为除数即可。

题目2:用选择法对10个整数排序。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int i, j, min, temp, a[11];
    printf("enter data:\n");
    for (i = 1; i <= 10; i++)
    {
        printf("a[%d]=", i);
        scanf("%d", &a[i]); 
    }
    printf("\n");
    printf("The orginal numbers:\n");
    for (i = 1; i <= 10; i++)
        printf("%5d", a[i]); 
    printf("\n");
    for (i = 1; i <= 9; i++) 
    {
        min = i;
        for (j = i + 1; j <= 10; j++)
            if (a[min] > a[j])
                min = j;
        temp = a[i]; 
        a[i] = a[min];
        a[min] = temp;
    }
    printf("\nThe sorted numbers:\n"); 
    for (i = 1; i <= 10; i++)
        printf("%5d", a[i]);
    printf("\n");
    return 0;
}

 

复制请说明

 

数学思路:

设有10个元素 a[1]~a[10],将 a[1] 与 a[2]~a[10] 比较,若 a[1] 比 a[2]~a[10] 都小,则不进行交换,即无任何操作。若 a[2]~a[10] 中有一个以上比 a[1] 小,则将其中最大的一个(假设为 a[i] )与 a[1] 交换,此时 a[1] 中存放了10 个中最小的数。第 2 轮将 a[2] 与 a[3]~a[10] 比较,将剩下 9 个数中的最小者 a[i] 与 a[2] 对换,此时a[2] 中存放的是10 个中第二小的数。依此类推,共进行 9 轮比较,a[1]~a[10] 就已按由小到大的顺序存放了。

(如果还不会,请留言)

题目3:求一个 3×3 的整型矩阵对角线元素之和。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a[3][3], sum = 0;
    int i, j;
    printf("enter data:\n");
    for (i = 0; i < 3; i++)
        for (j = 0; j < 3; j++)
            scanf("%3d", &a[i][j]);
    for (i = 0; i < 3; i++)
        sum = sum + a[i][i];
    printf("sum=%6d\n", sum);
    return 0;
}

复制请说明

 

插几句题外话

我们都知道在程序的 scanf 语句中用"%d"作为输入格式控制,上面输入数据的方式显然是可行的。那么也可以在一行中连续输入9个数据,如:

                           1    2    4    5    24    56    59     28   23    

发现输出结果也一样。在输入完9个数据并按回车键后,这 9个数据被送到内存中的输入缓冲区中,然后逐个送到各个数组元素中,所以输出结果都是一样的。

实验注意(程序中用的是整型数组,运行结果是正确的。如果用的是实型数组,只须将程序第4 行的 int 改为 float 或 double 即可,在输入数据时可输入单精度或双精度的数,程序也可以运行)

题目4:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int a[11] = { 1, 4, 6, 9, 13, 16, 19, 28, 40, 100 };
    int temp1, temp2, number, end, i, j;
    printf("array a:\n");
    for (i = 0; i < 10; i++)
        printf("%5d", a[i]);
    printf("\n");
    printf("insert data:");
    scanf("%d", &number);
    end = a[9];
    if (number > end)
        a[10] = number;
    else
    {
        for (i = 0; i < 10; i++)
        {
            if (a[i] > number)
            {
                temp1 = a[i];
                a[i] = number;
                for (j = i + 1; j < 11; j++)
                {
                    temp2 = a[j];
                    a[j] = temp1;
                    temp1 = temp2;
                }
                break;
            }
        }
    }
    printf("Now aray a:\n");
    for (i = 0; i < 11; i++)
        printf("%5d", a[i]);
    printf("\n");
    return 0;
}

复制请说明

 

题目5:将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。

答案代码

# <stdio.h>
#define N 5
int main()
{
    int a[N], i, temp;
    printf("enter includearray a:\n");
    for (i = 0; i < N; i++)
        scanf("%d", &a[i]);
    printf("array a:\n");
    for (i = 0; i < N; i++)
        printf("%4d", a[i]);
    for (i = 0; i < N / 2; i++) 
    {
        temp = a[i];
        a[i] = a[N - i - 1];
        a[N - i - 1] = temp;
    }
    printf("\nNow,array a:\n");
    for (i = 0; i < N; i++)
        printf("%4d", a[i]);
    printf("\n");
    return 0;
}

结果

复制请说明

 

题目6:输出以下的杨辉三角形(要求输出 10行)

#include <stdio.h>
#define N 10
int main()
{
    int i, j, a[N][N]; 
    for (i = 0; i < N; i++)
    {
        a[i][i] = 1; 
        a[i][0] = 1; 
    }
    for (i = 2; i < N; i++) 
        for (j = 1; j <= i - 1; j++)
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    for (i = 0; i < N; i++)
    {
        for (j = 0; j <= i; j++)
            printf("%6d", a[i][j]); 
        printf("\n");
    }
    printf("\n");
    return 0;
}

题目7:输出"魔方阵"。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
int main()
{
    int a[15][15], i, j, k, p, n;
    p = 1;
    while (p == 1)
    {
        printf("enter n(n= 1--15) : "); 
        scanf("%d", &n);
        if ((n != 0) && (n <= 15) && (n % 2 != 0))
            p = 0;
    }
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            a[i][j] = 0;
    j = n / 2 + 1;
    a[1][j] = 1;
    for (k = 2; k <= n * n; k++)
    {
        i = i - 1;
        j = j + 1;
        if ((i < 1) && (j > n))
        {
            i = i + 2;
            j = j - 1;
        }
        else
        {
            if (i < 1)
                i = n;
            if (j > n)
                j = 1;
        }
        if (a[i][j] == 0)
            a[i][j] = k;
        else
        {
            i = i + 2;
            j = j - 1;
            a[i][j] = k;
        }
    }
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
            printf("%5d", a[i][j]);
        printf("\n");
    }
    return 0;
}

结果如下

 

 

该题想法

(1)将 1 放在第 1 行中间一列。

(2)从 2 开始直到 n×n 止,各数依次按此规则存放:每一个数存放的行比前一个数的行数减 1 ,列数加 1。

(3)如果上一数的行数为 1,则下一个数的行数为 n(指最下一行)。例如,1 在第 1 行,则 2 应放在最下一行,列数同样加 1。

(4)当上一个数的列数为 n 时,下一个数的列数应为 1,行数减 1。例如,2 在第 3 行最后一列,则 3 应放在第 2 行第 1 列。

(5)那么按上面规则确定的位置上已有数,或上一个数是第 1 行第 n 列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4 应该放在第 1 行第 2 列,但该位置已被 1 占据,所以 4 就放在 3 的下面。由于 6 是第 1 行第 3 列(即最后一列),故 7 放在 6 下面。

本文遵守 Creative Commons 协议

如有征用请说明

谢谢点赞与浏览


http://chatgpt.dhexx.cn/article/KR9xmxWt.shtml

相关文章

第1章 引论 - 数据结构与算法分析 c语言描述

前言&#xff1a;此类型的文章皆为本人在阅读此书后给出的关于此书的理解&#xff0c;以及知识的梳理复习。若对文章有不解之处&#xff0c;或者文章有错欢迎评论区留言。 1.1 本书讨论的内容 有一组N个数&#xff0c;要找出其中第k个最大者&#xff0c;我们称之为选择问题(se…

谭浩强老师C语言第五版第五章(上)

本文涉及字符宽度&#xff0c;暂不做讲解&#xff0c;不懂留言 仅代表个人看法 如有侵权请说明 题目1&#xff1a;请画出例 5.6 中给出的3个程序段的流程图。 程序如下1、 #include <stdio.h> int main() { int i, j, n 0; for (i 1; i < 4; i) …

谭浩强C语言程序设计(1-3章代码学习)

谭浩强C语言程序设计 参考书 C语言学习笔记记录&#xff0c;学习为主&#xff0c;新手小白入门 我所用的C语言在线编译器&#xff1a;lightly在线编译工具 可新建工程 谭浩强C语言程序设计书籍所包含的代码示例加注释说明如下&#xff1a; /*笔记记录者&#xff1a;xy;学习教…

谭浩强C语言第九章知识总结

第九章 shyu 结构体&#xff1a;用户自定义的数据类型 如&#xff1a;在描述一个学生的相关信息时&#xff0c;需要整型变量来记录学号&#xff0c;字符数组来记录名字&#xff0c;等等&#xff0c;物品们可以通过定义结构体改变变量的数据类型&#xff0c;把这些信息整成一…

谭浩强C语言第七章知识总结

第七章 定义函数 定义没有参数的函数&#xff0c; 类型名 函数名&#xff08;&#xff09; 类型名 函数名&#xff08;void&#xff09; { { 函数体 或 函数体 } …

C语言 谭浩强 题目 -第六章

文章目录 笔记字符数组字符数组输出字符串处理函数输入字符串的函数 gets&#xff08;&#xff09;字符串连接函数--strcat字符串赋值函数--strcpy字符串比较函数---strcmp测字符串长度的函数--strlen转换为大小写的函数 EG 1EG 2EG 3 排序 冒泡排序 不用函数EG 4EG 5EG 6EG 7E…

C语言 谭浩强 题目 -第八章

文章目录 笔记通过指针引用数组用数组名作函数参数以变量名和数组名作为函数参数的比较 例题【例8.2】【例8.6】【例8.3】【例 8.4】【例 8.5】【例 8.6】【例8.7】【例8.8】【例8.9】【例 8.10】选择法起泡法 【例 8.11】【例 8.12】【例 8.13】【例8.30】 用指向数组的指针作…

C语言 谭浩强 题目 -第七章

文章目录 笔记函数参数函数调用返回值函数的嵌套函数的递归数组作为函数参数多维数组名作函数参数局部变量和全局变量全局变量 变量的存储方式和生存期自动变量(auto变量)static静态局部变量寄存器变量(register变量) 全局变量在一个文件内扩展外部变量的作用域将外部变量的作用…

【C语言】谭浩强

1.分支选择结构 #include<stdio.h> int main(){ char grade; scanf(“%c”,&grade); printf(“Your score:”); switch(grade) { case’A’:printf(“85~100\n”);break; case’B’:printf(“70~84\n”);break; case’C’:printf(“60~69\n”);break; case’D’:prin…

C语言 谭浩强第五版 课后习题解答

第一章 1.什么是程序?什么是程序设计? 程序&#xff1a;就是一组能识别和执行的指令&#xff0c;每一条指令使计算机执行特定的操作 程序设计&#xff1a;是指从确定任务到得到结果、写出文档的全过程 2.为什么需要计算机语言?高级语言有哪些特点? 为什么需要计算机语言&am…

谭浩强c语言课后习题(更新中)

1.第三章 纯代公式题 #include<stdio.h>int main() {float p1.07; //第一年倍数for (int i 1; i < 10; i) //只用循环了9次&#xff0c;因为是从第一年开始{p p * 1.07;}printf("%f%%%",p*100); }第2题也是代进公式即可 其实也是代给出的公式&#xff0…

C语言学习笔记(C程序设计-谭浩强)

入门&#xff1a; 计算机程序&#xff1a; 一组计算机能够识别和执行的指令。计算机的每一个操作都是根据指令进行的&#xff0c;计算机的一切操作都是由程序控制的 计算机指令&#xff1a;指挥机器工作的指示和命令。 指令包含操作码和操作数&#xff0c;操作码决定要完成的…

清风数学建模笔记--熵权法

是一种可以客观赋权的方法&#xff08;我们可以从数据中查看权重&#xff09; 依据的原理&#xff1a;指标的变异程度越小&#xff0c;所反映的信息量也越少&#xff0c;其对应的权值也应该越低。 本文借鉴了数学建模清风老师的课件与视频&#xff0c;如果大家发现文章中有不正…

c语言计算文本信息熵,C语言求信息熵,条件熵,联合熵

C语言求信息熵,条件熵,联合熵 (3页) 本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01; 11.90 积分 #include#include#define u 20int i,j,n,m;float H_X,H_Y,H_XY,H_XpY,Pypx[u][u],Px[u],H_YpX,Py[u],…

谭浩强C语言笔记

文章目录 谭浩强C语言笔记1.C语言基础知识1.常量和变量1.1入门程序1.2 常量1.2.1 整型常量1.2.2 实型&#xff08;浮点型&#xff09;常量1.2.3 字符常量1.2.4 字符串常量1.2.5 符号常量 1.3 变量1.4 常变量 2.标识符和关键字2.1 标识符2.2 关键字2.3 小习题 3. 基本数据类型3.…

天池比赛总结1

这次参加天池的一场比赛 先把数据读取了如下 接下来准备使用YOLO框出图片中的字符&#xff0c;然后进行识别

比赛总结+近期总结

比赛总结&#xff1a; 这次比赛没考好 20(没加高精度)0&#xff08;文件输出写错&#xff09;1000120 T1&#xff1a;这一题的方法是分解质因数高精度 T2&#xff1a;明显就是一道spfa的题嘛 T3&#xff1a;强大的四维DP&#xff08;我的神啊&#xff01;&#xff09; T4&#…

计算机课件比赛总结,课件制作比赛活动总结

【www.gz85.com - 投篮比赛活动工作总结】 课件制作比赛&#xff0c;是对计算机多媒体等辅助手段的一次检阅&#xff0c;也有力地促进了制作多媒体课件技艺的提高。下面是小编为您整理的“课件制作比赛活动总结”&#xff0c;仅供参考&#xff0c;希望您喜欢&#xff01;更多详…

2018年全国邀请赛(江苏) 比赛总结

先吐槽一下中矿大。。。周六在食堂吃的午饭&#xff0c;肉菜一个鱼一个辣土豆炒牛肉&#xff0c;对于对鱼过敏又感冒比较严重的我来说。。。&#xff08;然后再也没去食堂吃饭&#xff09; 南湖校区大是真大&#xff0c;风景也不错&#xff0c;就是门口离体育馆有点远。。。&a…

比赛总结

比赛总结 比赛总结-a5165.png 初赛终于结束了&#xff0c;头一次如此投入去打比赛&#xff0c;这一个多月以来真是痛并快乐着。最大的感悟是&#xff1a;构造线下验证集并没有什么用&#xff0c;做了一堆工作还不如一个leak。首先取得这个成绩算是给自己一个交代了&#xff0c;…