IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 谭浩强C语言(第二版)——第六章习题答案 -> 正文阅读

[数据结构与算法]谭浩强C语言(第二版)——第六章习题答案

1. 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 已知一个班10个学生的成绩,要求输入这10个学生的成绩,然后求出它们的平均成绩。
//
#include<stdio.h>

int main()
{
    double score[10], sum=0.0, avg;
    printf("请输入10名学生的成绩\n");
    for (int i = 0; i < 10; ++i) {
        scanf("%lf", &score[i]);
        sum += score[i];
    }
    avg = sum / 10.0;
    printf("该10名学生的平均成绩为: %f\n", avg);
    return 0;
}


2. 已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 已知一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。
//


#include<stdio.h>

int main()
{
    double score[10];
    int max=0;//max记录最高分数的次序
    printf("请输入10名学生的成绩\n");
    for (int i = 0; i < 10; ++i) {//序号从0开始
        scanf("%lf", &score[i]);
        if(score[max] < score[i]){
            max = i;
        }
    }
    printf("该10名学生的最高成绩为: %f,序号为: %d\n", score[max], max);
    return 0;
}

3. 有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。
//

#include<stdio.h>

int main()
{
    double score[3][4], sum[4], avg[4];
    for (int i = 0; i < 3; i++) {
        printf("请输入第%d名学生的成绩\n",i+1);
        for (int j = 0; j < 4; j++) {
            scanf("%lf", &score[i][j]);
            sum[j] += score[i][j];//一列一列加成绩
        }
    }
    printf("平均成绩分别为:");
    for(int i=0; i<4; i++){
        avg[i] = sum[i] / 3.0;
        printf("%f ", avg[i]);
    }
    return 0;
}


4. 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序。
//


#include<stdio.h>

int main()
{
    double score[5][4]; //5个学生4门课
    double avg[5] = {0};
    double temp; //交换变量
    //输入成绩
    for (int i = 0; i < 5; i++) {
        printf("请输入第%d名学生的成绩\n",i+1);
        for (int j = 0; j < 4; j++) {
            scanf("%lf", &score[i][j]);
            avg[i] += score[i][j];//将每个学生的成绩加和
        }
        avg[i] /= 4.0;//算每个学生的平均成绩
    }
    //开始排序---冒泡排序
    for(int i=1; i<=4; i++){//总共比较n-1趟
        for(int j=0; j<=4-i;j++){//参与比较的元素
            if(avg[j] > avg[j+1]){//前比后大,就交换
                temp = avg[j];
                avg[j] = avg[j+1];
                avg[j+1] = temp;
                for (int k = 0; k < 4; ++k) {//交换内容
                    temp = score[j][k];
                    score[j][k] = score[j+1][k];
                    score[j+1][k] = temp;
                }
            }
        }
    }
    //输出
    for (int i = 0; i < 5; i++) {
        printf("第%d名学生的成绩:",i+1);
        for (int j = 0; j < 4; j++) {
            printf("%.2f ",score[i][j]);
        }
        printf("平均成绩为:%.2f \n",avg[i]);
    }

    return 0;
}

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

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 5. 将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8
//


#include<stdio.h>

#define n 5
int main()
{
    int a[n] = {8, 6, 5, 4,1};
    int temp;

    printf("逆序前:");
    for (int i = 0; i < n; i++) {
        printf("%d ",a[i]);

    }
    //交换
    for(int i=0; i< n/2; i++){//前一半后一半进行交换 注意下标之间的关系
        temp = a[i];
        a[i] = a[n-1-i];
        a[n-1-i] = temp;
    }
    printf("\n逆序后:");
    for (int i = 0; i < n; i++) {
        printf("%d ",a[i]);

    }
    return 0;
}


6. 有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 6. 有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。
//



#include<stdio.h>

#define n 15
int main()
{
    int a[n] = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
    int temp;
    printf("请输入你要查找的数:");
    scanf("%d", &temp);
    //折半查找
    int low=0, high= n-1;

    if(temp>a[low] || temp<a[high]) printf("无此数");
    else{
        int mid = (low + high) / 2;
        while(low <= high) {
            if(temp < a[mid]) low = mid + 1;//区别于一般折半查找的地方
            else if(temp > a[mid]) high = mid - 1;//区别于一般折半查找的地方
            else break;
            mid = (low + high) / 2;
        }
        //判断找到与否
        if(low <= high) printf("该数是该数组中第%d个元素的值", mid+1);
        else printf("无此数");
    }
    return 0;
}



7. 输出以下图案:

*****
 *****
  *****
   *****
    *****

解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 
//

#include<stdio.h>
void main()
{
    int i,j,k;char a[5][5];
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            a[i][j]='*';
            printf("%c",a[i][j]);
        }
        printf("\n");
        for(k=1;k<=i+1;k++)
            printf(" ");
    }
    printf("\n");
}

8. 有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。
解:

//
// @Author: Brisa
// @Date: 2021/10/5
// @Description: 有一篇文章,共有3行文字,每行有个80字符。要求分别统计出其中英文大写字母、小写字母、空格以及其它字符的个数。
//


#include<stdio.h>
#include<string.h>

#define n 5
int main()
{
    char text[3][80];
    int num=0, upLetter=0, lowLetter=0, space=0, others=0;
    for(int i=0; i<3; i++){
        printf("请输入一行字符串:");
        gets(text[i]);
        for(int j=0; j<80 && text[i][j]!='\0'; j++){
            if(text[i][j]>='A'&&text[i][j]<='Z') upLetter++;
            else if(text[i][j]>='a'&&text[i][j]<='z') lowLetter++;
            else if(text[i][j]>='0'&&text[i][j]<='9') num++;
            else if(text[i][j]==' ') space++;
            else others++;
        }
    }
    for(int i=0; i<3; i++)
        puts(text[i]);
    printf("英文大写字母有%d个、小写字母有%d个、空格有%d个、数字有%d个、以及其它字符有%d个", upLetter, lowLetter, space,num,others);
    return 0;
}


9. 有一行电文,已按下面规律译成密码:
A->Z a->z
B->Y b->y
C->X c->x

即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。假如已知道密码是Umtorhs,要求编程序将密码译回原文,并输出密码和原文。

解:

#include<stdio.h>
void main()  
{ 
int i;char str1[100],str2[100];  
gets(str1);  
for(i=0;str1[i]!='\0';i++)  
if(str1[i]>=65&&str1[i]<=90)   str2[i]=155-str1[i];  
else if(str1[i]>=97&&str1[i]<=122)  str2[i]=219-str1[i];  
else   str2[i]=str1[i];  
printf("%s\n%s\n",str1,str2);  
}  

10. 编一程序,将两个字符串连接起来,(1)用strcat函数;(2)不用strcat函数。
解:

(1)
#include<stdio.h>
void main()  
{ 
int i,j;char str1[100],str2[100],str3[201];  
gets(str1);  
gets(str2);  
str3=strcat(str1,str2);
printf("%s\n%s\n%s\n",str1,str2,str3);  
}  
(2)
#include<stdio.h>
void main()  
{ 
int i,j;char str1[100],str2[100],str3[201];  
gets(str1);  
gets(str2);  
for(i=0;str1[i]!='\0';i++)  
str3[i]=str1[i];  
for(j=0;str2[j]!='\0';j++)  
 str3[j+i]=str2[j];  
printf("%s\n%s\n%s\n",str1,str2,str3);  
} 

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:28:58  更:2021-10-06 12:29:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:58:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码