《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];