| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 896 人关注过本帖
标题:《C语言程序设计与大学教程》答案(第七章)
取消只看楼主 加入收藏
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
结帖率:0
收藏
已结贴  问题点数:5 回复次数:1 
《C语言程序设计与大学教程》答案(第七章)
《C语言程序设计与大学教程》我给大家推荐过,真的好书!以下的答案供购买与不购买此书的爱好者共郭

注:以下程序均在Dev C++4.9.9.2中调试通过!

1. 请声明一个10个元素的一维整型数组,并用{1, 2, 4, 5, 6, 7, 8, 9, 10}初始化。
答:int a[10] = {1, 2, 4, 5, 6, 7, 8, 9, 10};

2. 请声明一个10行10列的浮点型二维数组,并用{1, 2, 4, 5, 6, 7, 8, 9, 10}初始化第一行的10个元素。
答:float a[10][10] = {1, 2, 4, 5, 6, 7, 8, 9, 10}

3. 请编程找出一维数组中的最大数。
答:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define SIZE 10

int main(void)
{
    int a[SIZE];
    int i;
    int max = INT_MIN;
   
    for(i = 0; i < SIZE; ++i)
    {
        printf("请输入%d个整数(输完一个回一次车):", i+1);
        scanf("%d", &a[i]);
    }
   
    for(i = 0; i < SIZE; ++i)
    {
        if(max < a[i])
        {
            max = a[i];
        }
    }
   
    printf("数组a中的最大数为:%d\n", max);
    system("PAUSE");
    return 0;
}
 
4. 请编程找出二维数组中的最小数。
答:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
#define ROW 3
#define COL 4

int main(void)
{
    int a[ROW][COL];
    int i;
    int min = INT_MAX;

    printf("请输入%d个数!\n", ROW*COL);
    for(i = 0; i < ROW * COL; ++i)
    {
        printf("请输入%d行第%d列个整数(输完一个回一次车):", i/COL+1, i%COL+1);
        scanf("%d", &a[i/COL][i%COL]);
    }

    for(i = 0; i < ROW * COL; ++i)
    {
        if(min > a[i/COL][i%COL])
        {
            min = a[i/COL][i%COL];
        }
    }
   
    printf("数组a中的最小数为:%d\n", min);
    system("PAUSE");
    return 0;
}

5. 请编程求出二维整型数组中所有元素的平均值。
答:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define ROW 3
#define COL 4

int main(void)
{
    int a[ROW][COL];
    int i;
    int sum = 0;
    float average = 0;
  
    printf("请输入%d个数!\n", ROW*COL);
    for(i = 0; i < ROW * COL; ++i)
    {
        printf("请输入%d行第%d列个整数(输完一个回一次车):", i/COL+1, i%COL+1);
        scanf("%d", &a[i/COL][i%COL]);
    }
   
    for(i = 0; i < ROW * COL; ++i)
    {
        sum += a[i/COL][i%COL];
    }
   
    average = (sum * 1.0) / (ROW * COL);
   
    printf("数组a中的整数的平均值为:%d\n", average);
    system("PAUSE");
    return 0;
}

6. 请编程对一维整型数组中的元素进行排序(从小到大或从大到小)。
答:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
#define SIZE 10
 
int main(void)
{
    int a[SIZE], temp;
    int i = 0, j = 0;
    int max = INT_MIN;
   
    /*输入*/
    for(i = 0; i < SIZE; ++i)
    {
        printf("请输入%d个整数(输完一个回一次车):", i+1);
        scanf("%d", &a[i]);
    }
   
    /*排序*/
    for(i = 0; i < SIZE - 1; ++i)
    {
        for(j = 0; j < SIZE - 1 - i; ++j)
        {
            if(a[j] > a[j+1])
            {
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
   
    /*输出*/
    printf("排序后的结果为:");
    for(i = 0; i < SIZE; ++i)
    {
        printf("%d ", a[i]);
    }
      
    printf("\n");
    system("PAUSE");
    return 0;
}
 
7. 声明一个10个元素的字符型数组(设为s),并用分别用”abcd”、{‘a’, ‘b’, ‘c’, ‘d’, ‘\0’}初始化它。编程将s中的值在屏幕上输出。
答:
#include <stdio.h>
#include <stdlib.h>
 
#define LEN 100
 
int main(void)
{
    char s1[LEN] = "abcd";
    char s2[LEN] = {'a', 'b', 'c', 'd', '\0'};
    printf("%s\n", s1);
    printf("%s\n", s2);

    system("PAUSE");
    return 0;
}
 
8. 编程判断两个存储在字符型数组中的字符串字面值是否相等。
答:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define LEN 100
 
int main(void)
{
    char s1[LEN] = "abce";
    char s2[LEN] = {'a', 'b', 'c', 'd', '\0'};
   
    int s1_Len = strlen(s1);
    int s2_Len = strlen(s2);
   
    int i = 0, count = 0;
 
    if(s1_Len != s2_Len)
    {
        printf("s1和s2不相等!");        
    }
    else  /*s1_Len 等于 s2_Len*/
    {
        for(i = 0; i < s1_Len; ++i)
        {
            if(s1[i] == s2[i])
            {
               count++;  /*count记录相等的字符个数*/      
            }
            else
            {
               break;
            }   
        }
      
        if(count == s1_Len) /*如果相等的字符个数与字符串长度相同*/
        {
            printf("s1和s2相等.\n");   
        }
        else
        {
            printf("s1和s2不相等.\n");
        }
    }
 
    system("PAUSE");
    return 0;
}
 
9. 编程将存储在一个字符型数组中的字符串字面值复制到另一个字符型数组中。注意:’\0’也得复制过去。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define LEN 100
 
int main(void)
{
    char s1[LEN] = "abce";
    char s2[LEN];
   
    int s1_Len = strlen(s1);
    int i = 0;
  
    for(i = 0; i < s1_Len; ++i)
    {
        s2[i] = s1[i];  
    }
    s2[s1_Len] = '\0';
 
    printf("%s\n", s2);
  
    system("PAUSE");
    return 0;
}

10. 编程找出二维整型数组中的鞍点元素(该元素是在所在行是最大的元素,在所在列是最小的的元素)。
答:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
#define ROW 3
#define COL 4

int main(void)
{
    int a[ROW][COL];
    int i = 0, j = 0, k = 0, col = 0;
    int max = 0, min = 0;
    int count = 0; /*鞍点的个数*/
  
    printf("请输入%d个数!\n", ROW*COL);
    for(i = 0; i < ROW * COL; ++i)
    {
        printf("请输入%d行第%d列个整数(输完一个回一次车):", i/COL+1, i%COL+1);
        scanf("%d", &a[i/COL][i%COL]);
    }
   
    for(i = 0; i < ROW; ++i)
    {
        max = INT_MIN;
        for(j = 0; j < COL; ++j) /*寻找第i行的最大数*/
        {
           if(max < a[i][j])
           {
               max = a[i][j];
               col = j;   /*记录max所在的列号*/
           }  
        }
      
        min = INT_MAX;
        for(k = 0; k < ROW; ++k)
        {
            if(min < a[k][col])
            {
                min = a[k][col];  /*在col列中找最小数*/
            }
        }
      
        if(max == min)  /*第i行,第col列的数就是鞍点*/
        {
           printf("元素a[%d][%d]是鞍点,其值为%d.\n", i, col, max);  
           count++;     /*鞍点的个数*/
        }
    }
 
    if(0 == count)
    {
       printf("没有鞍点!\n");
    }   
 
    system("PAUSE");
    return 0;
}
 
11. 编程在二维数组中寻找指定的元素。
 
答:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
#define ROW 3
#define COL 4
 
int main(void)
{
    int a[ROW][COL];
    int x = 0; /*要找的元素*/
    int i = 0;
 
    printf("请输入%d个数!\n", ROW*COL);
    for(i = 0; i < ROW * COL; ++i)
    {
        printf("请输入%d行第%d列个整数(输完一个回一次车):", i/COL+1, i%COL+1);
        scanf("%d", &a[i/COL][i%COL]);
    }
   
    printf("请输入要寻找的元素:");
    scanf("%d", &x);
   
    for(i = 0; i < ROW * COL; ++i)
    {
         if(a[i/COL][i%COL] == x)
         {
             printf("%d所在的行和列为:%d, %d\n", x, i/COL, i%COL);               
             break;
         }
    }
   
    if(i == ROW*COL)
    {
        printf("找不到%d.\n", x);
    }
 
    system("PAUSE");
    return 0;
}
 
12. 编程将两个分别存储在两个一维字符型数组中的字符串字面值进行连接存储在另一个一维字符型数组中。如:char s1[10] = ”abcd”; char s2[10] = “efgh”;,连接起来后存储在s3中,即s3的元素为:”abcdefgh”。
 
答:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define LEN 100
 
int main(void)
{
    char s1[LEN] = "abcd";
    char s2[LEN] = "efgh";
    char s3[LEN];  /*存储连接后的串*/
   
    int s1_Len = strlen(s1);
    int s2_Len = strlen(s2);
   
    int i = 0;
   
    for(i = 0; i < s1_Len; ++i)
    {
        s3[i] = s1[i];  
    }
    for(i = 0; i < s2_Len; ++i)
    {
        s3[i + s1_Len] = s2[i];  
    }
    s3[s1_Len + s2_Len] = '\0';
   
    printf("%s\n", s3);
   
    system("PAUSE");
    return 0;
}

13. 设有int a[10];,请分别声明指针变量,用于存储下述地址:a、&a、&a[0]。
答:
    int a[10];
    int *p1 = &a[0];
    int (*p2)[10] = &a;
    int *p3 = a;
 
14. 设有int a[10][10];,请分别声明指针变量,用于存储下述地址:a、&a、&a[0]、a[0]、&a[0][0]。
答:
    int a[10][10];
    int *p1 = &a[0][0];
    int (*p2)[10] = a;
    int (*p3)[10][10] = &a;
    int *p4 = a[0];
    int (*p5)[10] = &a[0];
 
15. 设有int a[10] = {1, 3, 4, 5, 6}; int *p = &a[0];,编程通过p打印出a中所有元素。
答:
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int a[10] = {1, 3, 4, 5, 6};
    int *p = &a[0];
    int i = 0;
    int count = sizeof(a)/sizeof(int); /*a中元素个数*/
   
    for(i = 0; i < count; ++i)
    {
        printf("第%d个元素为:%d.\n", i+1, *(p+i));
    }
  
    system("PAUSE");
    return 0;
}
 
16. 设有int a[4][3] = {{1, 2, 3}, {4, 5, 6,}, {7, 8, 9}, {10, 11, 12}}; int (*p)[3] = a;,编程通过p打印出a中所有元素。提示:p“捆绑”了数组a的第一行的存储空间,通过“内存截断”技术可访问到p指向的第一行中的每一个元素。具体方法:int *q = (int *)p;,则通过q可以逐个访问第一行中的元素。p + 1指向第二行,通过同样的方法可以逐个访问第二行的元素。
答:
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int a[4][3] = {{1, 2, 3}, {4, 5, 6,}, {7, 8, 9}, {10, 11, 12}};
    int (*p)[3] = a;
    int *q = NULL;
    int i = 0, j = 0;
 
    for(i = 0; i < 4; ++i)
    {
        q = (int*)p;
        for(j = 0; j < 3; j++)
        {
            printf("a[%d][%d]的值为: %d\n", i, j, *q);
            q++; /*指向下一个元素*/
        }
      
        p++; /*p指向下一行*/
    }
  
    system("PAUSE");
    return 0;
}
 
17. 声明一个指针数组,数组中每一个元素指向一个整型变量。
答:int *p[10];
 
18. 声明一个指针数组,数组中每一个元素指向一个10个元素的字符型一维数组。
答:char ((*p)[10])[10];

 

 
搜索更多相关主题的帖子: C语言 程序设计 教程 大学 
2010-06-12 11:01
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
顶起来。
2010-06-14 19:00
快速回复:《C语言程序设计与大学教程》答案(第七章)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043329 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved