作业一
数组练习
-
选择题
1.1、若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a 数组的第10个元素是
解析:
解答:
B
1.2、有数组 int a[5] = {10,20,30,40,50}, 以下表达式编译错误是____________。
解析:
解答:
A
1.3、以下错误的定义语句是 _______
解析:
解答:
C
1.4、设int i,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句
解析:
解答:
D
1.5、表达式“sizeof(int [1][2])/sizeof(int)”的值为_____。
解析:
解答:
A
1.6有以下程序
解析:
解答:
C
1.7、有以下程序
解析:
解答:
C
1.8 数组 int a[5] = {10, 20, 30, 40,50}, 有以下语句,其输出_______
解析:
解答:
C
1.9 有以下程序
解析:
解答:
A
1.10 有数组 int a[3][4] = {10,20,30,40,50,60,70,80,90,100,110,120},执行以下语句输出的是_______________
解析:
解答:
D
2、填空题
2.1、有以下程序
解析:
解答:
141340
2.2、执行以下程序的输出结果是_ .
解析:
解答:
3715
2.3、下面程序运行的结果为_________。
解析:
解答:
358
2.4、有以下程序
解析:
解答:
1523
2.5下面程序运行的结果为_________。
解析:
解答:
5 4 8 2 0
2.6有以下程序
解析:
解答:
3
3、编程题
3.1、 一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。试编程。(试着用下标法和地址法两种方法表示数组)
代码解答:
下标法:
#include <stdio.h>
int main() {
int scores[10] = {85, 92, 78, 90, 88, 95, 82, 80, 91, 89}; // 假设的成绩
int maxScore = scores[0]; // 假设第一个学生成绩为最高分
int maxIndex = 0; // 最高分的序号(下标)
// 找到最高分和对应的序号
for (int i = 1; i < 10; i++) {
if (scores[i] > maxScore) {
maxScore = scores[i]; // 更新最高分
maxIndex = i; // 更新最高分序号
}
}
// 输出结果
printf("最高成绩: %d\n", maxScore);
printf("该生的序号: %d\n", maxIndex + 1); // 序号从 1 开始
return 0;
}
地址法:
#include <stdio.h>
int main() {
int scores[10] = {85, 92, 78, 90, 88, 95, 82, 80, 91, 89}; // 假设的成绩
int maxScore = *scores; // 假设第一个学生成绩为最高分
int maxIndex = 0; // 最高分的序号(下标)
// 找到最高分和对应的序号
for (int i = 1; i < 10; i++) {
if (*(scores + i) > maxScore) {
maxScore = *(scores + i); // 更新最高分
maxIndex = i; // 更新最高分序号
}
}
// 输出结果
printf("最高成绩: %d\n", maxScore);
printf("该生的序号: %d\n", maxIndex + 1); // 序号从 1 开始
return 0;
}
3.2、有5个学生上4门课程,要求输入全部学生的各门课程成绩,然后输出各门课程的平均成绩,并按照各个学生的平均成绩排序(成绩最高的学生排在数组最前面,最低学生排在数组最后面的行) (试着用下标法和地址法两种方法表示数组)。
代码解答:
下标法:
#include <stdio.h>
#define STUDENTS 5
#define SUBJECTS 4
int main() {
int scores[STUDENTS][SUBJECTS]; // 存储学生成绩
float avgScores[STUDENTS]; // 存储每个学生的平均成绩
float subjectAverages[SUBJECTS] = {0}; // 存储每门课程的平均成绩
// 输入学生的成绩
for (int i = 0; i < STUDENTS; i++) {
printf("输入第 %d 个学生的4门课程成绩:\n", i + 1);
for (int j = 0; j < SUBJECTS; j++) {
printf("课程 %d: ", j + 1);
scanf("%d", &scores[i][j]);
}
}
// 计算每个学生的平均成绩
for (int i = 0; i < STUDENTS; i++) {
float total = 0;
for (int j = 0; j < SUBJECTS; j++) {
total += scores[i][j];
}
avgScores[i] = total / SUBJECTS;
}
// 计算每门课程的平均成绩
for (int j = 0; j < SUBJECTS; j++) {
float total = 0;
for (int i = 0; i < STUDENTS; i++) {
total += scores[i][j];
}
subjectAverages[j] = total / STUDENTS;
}
// 按照学生的平均成绩排序(简单选择排序)
for (int i = 0; i < STUDENTS - 1; i++) {
for (int j = i + 1; j < STUDENTS; j++) {
if (avgScores[i] < avgScores[j]) {
// 交换平均成绩
float temp = avgScores[i];
avgScores[i] = avgScores[j];
avgScores[j] = temp;
// 同时交换对应的成绩
for (int k = 0; k < SUBJECTS; k++) {
int tempScore = scores[i][k];
scores[i][k] = scores[j][k];
scores[j][k] = tempScore;
}
}
}
}
// 输出每门课程的平均成绩
printf("\n各门课程的平均成绩:\n");
for (int j = 0; j < SUBJECTS; j++) {
printf("课程 %d: %.2f\n", j + 1, subjectAverages[j]);
}
// 输出每个学生的成绩和平均成绩
printf("\n学生的成绩及平均成绩:\n");
for (int i = 0; i < STUDENTS; i++) {
printf("第 %d 个学生成绩: ", i + 1);
for (int j = 0; j < SUBJECTS; j++) {
printf("%d ", scores[i][j]);
}
printf(" | 平均成绩: %.2f\n", avgScores[i]);
}
return 0;
}
地址法:
#include <stdio.h>
#define STUDENTS 5
#define SUBJECTS 4
int main() {
int scores[STUDENTS][SUBJECTS]; // 存储学生成绩
float avgScores[STUDENTS]; // 存储每个学生的平均成绩
float subjectAverages[SUBJECTS] = {0}; // 存储每门课程的平均成绩
// 输入学生的成绩
for (int i = 0; i < STUDENTS; i++) {
printf("输入第 %d 个学生的4门课程成绩:\n", i + 1);
for (int j = 0; j < SUBJECTS; j++) {
printf("课程 %d: ", j + 1);
scanf("%d", (*(scores + i) + j)); // 地址法输入
}
}
// 计算每个学生的平均成绩
for (int i = 0; i < STUDENTS; i++) {
float total = 0;
for (int j = 0; j < SUBJECTS; j++) {
total += *(*(scores + i) + j); // 地址法计算
}
avgScores[i] = total / SUBJECTS;
}
// 计算每门课程的平均成绩
for (int j = 0; j < SUBJECTS; j++) {
float total = 0;
for (int i = 0; i < STUDENTS; i++) {
total += *(*(scores + i) + j); // 地址法计算
}
subjectAverages[j] = total / STUDENTS;
}
// 按照学生的平均成绩排序(简单选择排序)
for (int i = 0; i < STUDENTS - 1; i++) {
for (int j = i + 1; j < STUDENTS; j++) {
if (avgScores[i] < avgScores[j]) {
// 交换平均成绩
float temp = avgScores[i];
avgScores[i] = avgScores[j];
avgScores[j] = temp;
// 同时交换对应的成绩
for (int k = 0; k < SUBJECTS; k++) {
int tempScore = *(*(scores + i) + k);
*(*(scores + i) + k) = *(*(scores + j) + k);
*(*(scores + j) + k) = tempScore;
}
}
}
}
// 输出每门课程的平均成绩
printf("\n各门课程的平均成绩:\n");
for (int j = 0; j < SUBJECTS; j++) {
printf("课程 %d: %.2f\n", j + 1, subjectAverages[j]);
}
// 输出每个学生的成绩和平均成绩
printf("\n学生的成绩及平均成绩:\n");
for (int i = 0; i < STUDENTS; i++) {
printf("第 %d 个学生成绩: ", i + 1);
for (int j = 0; j < SUBJECTS; j++) {
printf("%d ", *(*(scores + i) + j)); // 地址法输出
}
printf(" | 平均成绩: %.2f\n", avgScores[i]);
}
return 0;
}
作业二
指针练习
-
选择题
1.1、若有下面的变量定义,以下语句中合法的是( )。
解析:
解答:
A
1.2、有以下程序
解析:
解答:
D
1.3、有以下程序
解析:
解答:
C
1.4、有以下程序
解析:
解答:
A
1.5、有以下程序
解析:
解答:
A
1.6、有以下程序
解析:
解答:
A
1.7、设有如下定义语句 int m[ ]={2,4,6,8}, *k=m;
解析:
解答:
A
1.8、若有定义语句:int year=2009,*p=&year;,以下不能使变量 year 中的值增至 2010 的语 句是( )。
解析:
解答:
D
1.9、设有定义:double x[10],*p=x;,以下能给数组 x 下标为 6 的元素读入数 据的正确语句是
解析:
解答:
C
1.10、若有定义语句:char s[3][10], (*k)[3], *p; ,则以下赋值语句正确的是____
解析:
解答:
B
1.11、有定义语句:int *p[4]; 以下选项中与此语句等价的是
解析:
解答:
C
1.12、若有定义语句:int a[4][10], *p, *q[4]; 且 0≤i<4,则错误的赋值 是
解析:
解答:
A
1.13、若有以下定义
解析:
解答:
B
1.14、有以下程序
解析:
解答:
D
1.15、设char *s = “\ta\017bc”;则指针变量s指向的字符串所占的字节数是_______
解析:
解答:
A
1.16、 若有定义语句:char s[3][10], (*k)[3], *p;,则以下赋值语句正确的是 A)p=s; B)p=k; C)p=s[0]; D)k=s;
解析:
解答:
C
2、填空题
2.1以下程序的输出结果是_______
解析:
解答:
6
2.2、以下程序段的定义语句中,x[1]的初值是_____,程序运行后输出的内容是_______
解析:
解答:
2 2468
2.3 以下程序段的输出结果是( )
解析:
解答:
rgb
2.4、以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。 请在输出语句中填写代表最大值的输出项。
解析:
解答:
*s,s-a
2.5 有以下程序,输出结果为_________
解析:
解答:
2,5
2.6 以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。 请在输出语句中填写代表最大值的输出项。
解析:
解答:
*s,s-a
3、编程题
3.1、 有一个整型数组int [10] = {10,20,30,40,50,60,70,80,90,100};标准输入一个整型数值m(0<m<10) ,使前面10-m个数值向后移动m个位置,最后m个数变成前面的m个数
代码解答:
#include <stdio.h>
int main() {
int arr[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int m;
// 输入m的值,确保0 < m < 10
printf("请输入一个整数 m (0 < m < 10): ");
scanf("%d", &m);
// 检查输入的合法性
if (m <= 0 || m >= 10) {
printf("输入不合法!m的值必须在0到10之间。\n");
return 1; // 结束程序
}
// 移动数组
// 从后往前移动
for (int i = 9; i >= m; i--) {
arr[i] = arr[i - m];
}
// 将最后m个数变成前面的m个数
for (int i = 0; i < m; i++) {
arr[i] = 10 * (i + 1); // 将前m个数设为10, 20, 30, ...
}
// 输出结果
printf("移动后的数组为:");
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
作业三
结构体共用体练习
-
选择题
1.1、设有以下语句:
解析:
解答 :
D
1.2、下列关于结构的说法错误的是______.
解析:
解答 :
D
1.3、以下结构体类型说明和变量定义中,正确的是______。
解析:
解答 :
C
1.4、设有以下说明语句:
解析:
解答 :
C
1.5、根据下面的定义,能打印出字母M的语句是____________。
解析:
解答 :
D
1.6、若有如下定义:
解析:
解答 :
C
1.7、下面程序的运行结构是____________。
解析:
解答 :
D
1.8、若有以下定义和语句:
解析:
解答 :
D
1.9、设有以下定义和语句,以下引用形式不合法的是____________。
解析:
解答 :
D
1.10、设有如下定义:
解析:
解答 :
C
1.11、若有以下程序段:
解析:
此时 p 指向 s[0],(*p).m 是 s[0].m,即 &a,值为 1。
解答 :
AD
1.12、若有以下说明和语句,则对pup中sex域的正确引用方式是____________
解析:
解答 :
D
1.13、以下程序的输出结果是____________。
解析:
解答 :
C
1.14、若有以下说明和语句,则下面表达式中值为1002的是____________。
解析:
解答 :
D
1.15、以下对结构体变量stu1中成员age的非法引用是____________。
解析:
解答 :
B
1.16、 设有以下说明和定义语句,则下面表达式中值为3的是____________
解析:
解答 :
D
1.17、若有以下定义和语句:
解析:
解答 :
B
1.18、以下程序在32位操作系统的运行结果是____________。
解析:
解答 :
B
1.19、以下程序的运行结果是____________
解析:
解答 :
A
1.20、下面对typedef的叙述中不正确的是____________
解析:
解答 :
B
1.21、下面程序在64位操作系统的运行结果是____________。
解析:
解答 :
B
二、填空题
2.1、有结构体
解析:
要定义一个包含结构体 ST
类型元素的数组 s
,需要将结构体 ST
的定义放在数组定义之前
解答 :
struct ST
2.2、 以下程序的运行结果是____________。
解析:
没传地址,所以原变量不变
解答 :
10 x
2.3、以下程序的运行结果是_____
解析:
e.in.x 被赋值为 e.a 和 e.b 的乘积,即 1 * 2 = 2。
e.in.y 被赋值为 e.a 和 e.b 的和,即 1 + 2 = 3。
解答 :
2,3
2.4、 以下程序的输出结果是____________。
解析:
fun1是值传送,原变量不变,fun2是地址传送原变量发生改变
解答 :
B, 98.5
C, 92.5
2.8、若已定义:
解析:
解答 :
16,6.0
2.9、以下程序的运行结果是____________。
解析:
解答 :
5,5
2.10、以下程序的运行结果为____________
解析:
解答 :
19 83.5zhang
19 83.5zhang
yhang
2.11、设有以下定义和语句,请在printf语句的【】中天上能够正确输出的变量及相应的格式说明。
解析:
解答 :
printf("%f", num.x);
2.12、以下程序的运行结果是____________。
解析:
解答 :
3,3
2.13、以下程序的运行结果是____________。
解析:
解答 :
7,11
2.14、以下程序的运行结果是____________
解析:
解答 :
4,8
2.15、以下程序的运行结果为____________。
解析:
解答 :
1234
12
34
12ff
2.16、以下程序的输出结果为____________
解析:
解答 :
2 5
dime dollar
2.17、以下程序的输出结果是____________。
解析:
解答 :
a = 5 b = 6
2*INT = 6.00