本文主要是介绍上海海事大学C语言程序设计上机实验代码参考【第十三周实验】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
C语言学习系列课程之练习专项(第十三周)
本周主要考察数组的使用使用,本周是练习题的最后一周,后续指针与结构体以及文件的练习我会在未来继续更新以及对其他内容进行扩展,C语言零基础的教学工作正在筹备中,还请大家敬请期待
文章目录
- C语言学习系列课程之练习专项(第十三周)
- 一、本系列教程的使用方法
- 二、习题部分
- 1、统计字符出现次数 (20分)
- 2、字符串逆序 (15分)
- 3、字符串逆序 (15分)
- 4、矩阵各行元素之和 (15分)
- 5、阵运算 (20分)
- 6、找鞍点 (20分)
- 7、找鞍点 (20分)
- 8、选择法排序 (20分)
- 9、找出不是两个数组共有的元素 (20分)
- 10、印杨辉三角 (20分)
- 三、经验分享
- 1、对于本校生
- 2、对于非本校的同学
- 3、对于期末考试
- 4、对于额外资料
- 总结
注意:建议大家先自己做一遍,如果实在解决不了在对照答案找问题
一、本系列教程的使用方法
对于上海海事大学的同学,C语言程序设计课程中的实验课程环节的作业基本与本课程的题目相同或类似,可以先自行查找题目,本校使用的编译软件为 Visual C++ 6.0 ,建议有条件的同学使用较新的编译软件,大家可以自行选择比较顺手的编译软件。
对于刚入门的同学,我推荐使用 VS 2022 ,并附上入门教程:教程链接
对于非本校的同学,可以通过本教程自行练习,在吃透本课程后,我相信期末考试取得高分也不是很大的问题,如果只是自学,也可以参考我校的学习进度,自行调整学习计划。
VC 6.0 是1998年所诞生的软件,目前早已停止更新,并且只支持32位的电脑,现如今大家所使用的电脑一般都是64位,大部分人会无法正常使用,并且报错也不智能,所以对于初学者没必要浪费太多的时间在不必要的麻烦上
二、习题部分
1、统计字符出现次数 (20分)
输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
programming is More fun!
m
输出样例:
2
代码展示:
#include <stdio.h>
int main()
{char serious[80];char same;int i;int x=0,y=0;//for(i = 0;i < 80;i++){scanf("%c",&serious[i]);if(serious[i] == '\n')break;elsex++;} //scanf(" %c",&same);for(i = 0;i < x;i++){if(serious[i] == same)y++;}//printf("%d\n",y);return 0;
}
2、字符串逆序 (15分)
本题要求编写程序,输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
输出格式:
在一行中输出逆序后的字符串。
输入样例:
Hello World!
输出样例:
!dlroWolleH
代码展示:
#include <stdio.h>
int main()
{char a[100];int i,x;for(i = 0,x = 0;i < 100;i++){scanf("%c",&a[i]);if(a[i] == '\n')break;elsex++;}for(i = --x; i >= 0;i--)printf("%c", a[i]);printf("\n");return 0;
}
3、字符串逆序 (15分)
本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。
输入格式:
输入为一个以“#”结束的字符串(不超过50个字符)。
输出格式:
在一行中输出大小写转换后的结果字符串。
输入样例:
Hello World! 123#
输出样例:
hELLOwORLD! 123
代码展示:
#include <stdio.h>
#include <string.h>int main()
{char a[100];int i;gets(a);for (i = 0; i < strlen(a) && a[i] != '#'; i++){if (a[i] >= 'a' && a[i] <= 'z')printf("%c", a[i] - 32);else if (a[i] >= 'A' && a[i] <= 'Z')printf("%c", a[i] + 32);elseprintf("%c", a[i]);}printf("\n");return 0;
}
4、矩阵各行元素之和 (15分)
本题要求编写程序,求一个给定的m×n矩阵各行元素之和。
输入格式:
输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间以空格分隔。
输出格式:
每行输出对应矩阵行元素之和。
输入样例:
3 2
6 3
1 -8
3 12
输出样例:
9
-7
15
代码展示:
#include <stdio.h>int main()
{int m, n, i, j, a[10][10], sum;scanf("%d%d", &m, &n);for (i = 0; i < m; i++){sum = 0;for (j = 0; j < n; j++){scanf("%d", &a[i][j]);sum = sum + a[i][j];}printf(" %d ", sum);}printf("\n");return 0;
}
5、阵运算 (20分)
本题要求编写程序,给定一个n×n的方阵,计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
输入样例:
4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1
输出样例:
35
代码展示:
#include <stdio.h>
int main()
{int a[11][11], n, i, j, sum = 0;scanf("%d", &n);for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)scanf("%d", &a[i][j]);for (i = 1; i <= n; i++)for (j = 1; j <= n; j++){if (i != n && j != n && j != n - i + 1)sum += a[i][j];}printf("%d", sum);printf("\n");return 0;
}
6、找鞍点 (20分)
本题要求编写程序,求一个给定的n阶方阵的鞍点。一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
输出在一行中按照“行下标列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
输入样例1:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例1:
2 1
输入样例2:
2
1 7
4 1
输出样例2:
NONE
代码展示:
#include <stdio.h>int main()
{int a[10][10], n, i, j, max, k, flag = 0;//scanf("%d", &n);for (i = 0; i < n; i++)for (j = 0; j < n; j++)scanf("%d", &a[i][j]);//for (i = 0; i < n; i++){max = a[i][0];k = 0;for (j = 1; j < n; j++)if (a[i][j] > max){max = a[i][j];k = j;}for (j = 0; j < n; j++)if (a[j][k] < max)break;if (j == n){printf("%d %d", i, k);flag = 1;break;}}//if (flag == 0)printf("NONE");printf("\n");return 0;
}
7、找鞍点 (20分)
本题要求编写程序,考试结束了,全班同学的分数都出来了。老师需要对分数做一次排序,看看从高到低,分数的排列是怎样的。
输入格式:
第一行是一个n,表示班级同学的人数,1<=n<=5000。第二行开始有n个分数,0<=分数<=100,分数都是整数,没有零点五分。
输出格式:
输出排序后的分数,按照从大到小排列,相同的分数排在一起,每两个分数之间间隔一个空格。
输入样例:
10
0 60 73 60 82 90 100 18 55 84
输出样例:
100 90 84 82 73 60 60 55 18 0
代码展示:
冒泡排序是个非常重要的算法思想,大家一定要理解透
#include <stdio.h>#define SWAP(a, b) \do { \int temp = a; \a = b; \b = temp; \} while(0)int main() {int a[5000], n, i, j;scanf("%d", &n);for (i = 1; i <= n; i++)scanf("%d", &a[i]);//-------------------------------------------------//冒泡排序本体for (i = 1; i <= n; i++)for (j = 1; j <= n - i; j++)if (a[j] < a[j + 1])SWAP(a[j], a[j + 1]);
//--------------------------------------------------//冒泡排序本体for (i = 1; i <= n; i++)printf("%d%c", a[i], i == n ? '\n' : ' ');return 0;
}
8、选择法排序 (20分)
本题要求编写程序,将给定的n个整数从大到小排序后输出。
输入格式:
输入第一行给出一个不超过100的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4
5 1 7 6
输出样例:
7 6 5 1
代码展示:
#include <stdio.h>#define SWAP(a, b) \{ \int temp = a; \a = b; \b = temp; \}int main()
{int a[100], n, i, j, k;scanf("%d", &n);for (i = 0; i < n; i++)scanf("%d", &a[i]);for (i = 0; i < n; i++){k = i;for (j = i; j < n; j++)if (a[j] > a[k])k = j;//找出最大的SWAP(a[i], a[k]);}for (i = 0; i < n; i++)printf("%d%c", a[i], i == n ? '\n' : ' ');printf("\n");return 0;
}
9、找出不是两个数组共有的元素 (20分)
本题要求编写程序,给定两个整型数组,找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
代码展示:
#include <stdio.h>
int main()
{int a[20],b[20],c[40],i,j,k,n,m,num=0,f=0;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);scanf("%d",&m);for(i=0;i<m;i++)scanf("%d",&b[i]);for(i=0;i<n;i++)//找出数组a在在数组b中不存在的 { for(j=0;j<m;j++)if(a[i]==b[j])break;if (j==m)c[num++]=a[i];//存储在数组c }for(i=0;i<m;i++){ //找出数组b在在数组a中不存在的 for(j=0;j<n;j++)if(b[i]==a[j])break;if (j==n)c[num++]=b[i];}f=0;for(i=0;i<num;i++){ //排除相同的数值 for(j=0;j<i;j++)if(c[i]==c[j]) break;if(j==i){if(f!=0) printf(" ");printf("%d",c[i]);f++;}}printf("\n");return 0;
}
10、印杨辉三角 (20分)
本题要求编写程序,按照规定格式打印前n行杨辉三角。
输入格式:
输入在一行中给出n(1≤n≤10)。
输出格式:
以正三角形的格式输出前n行杨辉三角。每个数字占固定4位。
输入样例:
6
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
代码展示:
#include <stdio.h>int main()
{int n, a[10][10];int i,j,k;scanf("%d", &n);a[0][0] = 1;for (i = 1; i < n; i++){a[i][0] = 1;for (j = 1; j < i; j++){a[i][j] = a[i - 1][j] + a[i - 1][j - 1];}a[i][i] = 1;}for (i = 0; i < n; i++){for (j = 0; j <= i; j++){printf("%d ", a[i][j]);}printf("\n");}return 0;
}
//上方代码为三角形
//下方为金字塔型
/*#include <stdio.h>int main()
{int n, a[10][10];int i,j,k;scanf("%d", &n);a[0][0] = 1;for (i = 1; i < n; i++){a[i][0] = 1;for (j = 1; j < i; j++){a[i][j] = a[i - 1][j] + a[i - 1][j - 1];}a[i][i] = 1;}for (i = 0; i < n; i++){for (k = 0; k < n - i - 1; k++){printf(" ");}for (j = 0; j <= i; j++){printf("%4d", a[i][j]);}printf("\n");}return 0;
}*/
后面注释掉的是另外一种写法
三、经验分享
1、对于本校生
本课程为64学时的课程,其中包括32学时的课堂教学和32学时的实验课程,并且本教程为2023年后半学期的经验分享(即最新课程),课堂教学环节为学习,老师一般会教新课和复习,实验课程则为实践,老师会布置练习题,题目一般与本课程题目相同或类似,但还是建议大家自行完成练习题,在参考我的代码找错。
一般一周会有两节课,第一节是课堂教学,第二节为实验课程,共有16周,课后练习一般只持续至14周,最后两周的实验课程会设置成自行练习。前14周的实验课程包括:自行完成作业、测试题以及期中考试,一般内容与期末考试有关,大家可以自己归纳,我也会在最后发布上海海事大学C语言题库(基本为原题),期末考试为机考,所以大家一定要提前熟悉环境。
老师一般会将本周的其中两道题作为课后作业,其要求为:完成题目并且在作业后写100字左右的学习心得,题目只需将自己的程序抄在本子上即可,对于小结,大家可以写学习的体会(例如:在本周遇到什么错误等等),也可以是学习总结(例如:当作每周的学习归纳写)。
我会在每周附上我自己的作业照片,以供大家参考
期末考试内容主要是C语言的基础,例如:数据类型、条件语句(if 与 switch)、循环语句(while、for、do-while以及goto等)、数组(一维数组与多维数组)。而其他篇章考题比例极少,一般每章最少会有一道题,大家要自行把握,不要做无意义的复习。
期末考试的体型包括填空、选择、判断、程序改错(2题)、程序补写(2题)和程序写作题(1题)。
2、对于非本校的同学
本课程的题目主要是基础知识内容,对于进阶指针、结构体和文件的知识较少,并且指针和结构体是较难的内容,所以希望大家可以自己专门去学习这些内容,一般学校也不会着重考察这部分内容,本人后续也会更新C语言的入门教程,敬请期待。
3、对于期末考试
如果只是应付期末考试,这里我推荐一位 b站UP主的期末速通课程【C语言】c程序设计3小时期末考试不挂科,赠资料!
对于期末考试我建议在考试前两周开始复习计划,可以通过速通课程来查漏补缺,但是如果你想要学习C语言并且希望在未来用来找工作,那么这点基础还是远远不够的,需要更多的练习和训练,并且我也不建议使用速通课程来学习,因为考试毕竟是考试,应试技巧还是大于大量知识积累的,C语言在大学课程中一般会叫做C语言程序设计,这个性质也明确了在大学不会讲的太深奥 (此观点仅代表个人看法,并不起决定性作用)
4、对于额外资料
我会在发布一个资源,其中包括上海海事大学的题库以及代码的汇总版(只需批量重命名将ID改为自己的学号就可以直接上交)
本文上方资源绑定的文件夹内包括本周的作业参考以及题目的word文件
如果是手机用户或者无法看到此绑定文件,可以进入我的主页自行寻找
总结
C语言的学习是循序渐进的,只有不断积累才能提高,而只学习概念不去动手实践是无法学好C语言的,学好一门程序语言最重要的便是多动手实践,不断地实现新的功能,其所带来的正反馈会让大家逐渐爱上编程,喜欢编程。在学习并完成本课程后,大家基本也就入门了C语言,未来可期,也请大家继续努力。
感谢大家的观看,如果对本系列文章感兴趣的朋友也请多多点赞分享,收藏关注不迷路,如有疑问可以在文章下方评论或者直接私聊我,我会在第一时间回复大家,如果出现题目或程序出错,我会第一时间更改,大家的支持也是我第一动力,谢谢大家。
这篇关于上海海事大学C语言程序设计上机实验代码参考【第十三周实验】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!