吉林大学超星慕课平台——高级语言程序设计 实验04 数组及其在程序设计中的应用(2022级)
目录
1. (程序题)
2. (程序题)
3. (程序题)
4. (程序题)
5. (程序题)
6. (程序题)
7. (程序题)
8. (程序题)
9. (程序题)
10. (程序题)
11. (程序题)
12. (程序题)
13. (程序题)
1. (程序题)
题目编号:Exp04-Basic01,GJBook3例-06-13
题目名称:括号匹配
题目描述:编写程序,从终端读入以‘@’为结束符的字符序列,检查该字符序列中的 ( 与 )、 [ 与 ] 、{ 与 } 是否匹配(个数相等且位置不相交)。
输入:包含一串以‘@’为结束符的字符串,其间可能包含空白或其它非括号字符。
输出:如果字符串中三类括号匹配,则输出YES;否则输出NO。
样例1:
输入:
{a,a}b{c[cc]c} {a(bb[cc]dd)a}@
输出: YES
样例2:
输入: {a,a}b{c[cc]c] {a(bb[cc]dd)a}@
输出: NO
#include<stdio.h>#include<stdbool.h>#define size 100int top = 0;char a[100];bool push(char x) {if (top > size - 1)return false;else {a[top] = x;top++;return true;}}char pop(void) {if (top == 0) return '\0';else {top--;return a[top];}}int check(char x, char y) {if (x == '\0' || x == '@') { printf("NO"); return 0; }else if (x != y) { printf("NO"); return 0; }else return 1;}int main() {char ch, out;int i = 1;push('@');ch = getchar();while (ch != '@') {switch (ch) {case'[':case'(':case'{':push(ch); break;case']':out = pop(); i = check(out, '['); break;case'}':out = pop(); i = check(out, '{'); break;case')':out = pop(); i = check(out, '('); break;default:break;}ch = getchar();if (i == 0) break;}out = pop();if (i == 1){if (out == '@') {printf("YES");}else {printf("NO");}}return 0;}
2. (程序题)
题目编号:Exp04-Basic02
题目名称:n倍数关系
题目描述:
给定若干不完全相同的正整数(<10000)和n(n<5),计算这些正整数里面有多少数对满足:其中一个是另一个的n倍。例如:1 4 3 2 9 7 18 22,n=3时得到的答案是2;因为3是1的3倍,9是3的3倍。
输入:输入第一行给出正整数n的值,接下来包括多组测试数据。每组数据最多100个整数占用一行,以数字0结束(不计入100个整数里)。测试数据不超过20组,最后一行只包括-1,表示输入数据结束。
输出:对每组输入数据,输出一行,给出有多少数对满足其中一个是另一个n倍。(注:最后一行末尾无换行符等多余字符。)
样例:
输入: 2 1 4 3 2 9 7 18 22 0 2 4 8 10 0 7 5 11 13 1 3 0 -1
输出: 3 2 0
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main() {int n;scanf("%d", &n);int i = 0, j = 0;int a[20][100], b[20];for (int iio = 0; iio < 20; iio++) {b[iio] = 0;}for (int hh = 0; hh < 20; hh++) {for (int ll = 0; ll < 100; ll++) {a[hh][ll] = -2;}}while (1) {scanf("%d", &a[i][j]);if (a[i][j] == -1) {break;}else if (a[i][j] == 0) {i++;j = -1;}j++;}for (int m = 0; m < i; m++) {for (int s = 0; s < 100; s++) {for (int p = 0; p < 100; p++) {if (p == s) { continue; }if (a[m][s] * n == a[m][p]) {b[m]++;}}}}for (int uuu = 0; uuu < i; uuu++) {if (uuu != 0)printf("\n%d", b[uuu]);else {printf("%d", b[uuu]);}}}
3. (程序题)
题目编号: Exp04-Basic03
题目名称: 数组排序
题目描述: 编写函数,分别采用教材给出的“主元选择排序”、“冒泡排序”和“逐步增加递增子序列”排序方法对给定数组进行排序。综合运用调试方法,观察不同排序方法在排序过程中数组元素值的变化情况,如观察递增排序如下序列{9、8、7、6、5、4、3、2、1、0},{0、1、2、3、4、5、6、7、8、9}和{2、9、4、7、6、5、8、3、0、1}时,数组中元素比较次数、移动或交换次数。
说明:
(1)对于“主元选择排序”和“冒泡排序”,执行完3个赋值操作,计为1次交换。
(2)对于“逐步增加递增子序列”排序,每执行一次while循环的循环条件判断,计为1次比较;如果在某轮比较中元素本身的位置没有变化,则本轮移动次数为0。
(3)因本题目的是观察输出数据,深入理解排序算法;所以样例点和实测点一致。
输入:包含10个整数的待排序数组。
输出:在一行内依次输出,递增排序时,主元排序比较次数 和 移动/交换次数、冒泡排序比较次数 和 移动/交换次数和递增子序列排序比较次数 和 移动/交换次数,相邻数字之间以一个西文空格间隔。
样例1:
输入: 9 8 7 6 5 4 3 2 1 0
输出: 45 9 90 45 54 54
样例2:
输入: 0 1 2 3 4 5 6 7 8 9
输出: 45 9 9 0 9 0
样例3:
输入: 2 2 3 3 5 5 4 4 6 6
输出: 45 9 27 4 13 6
样例4:
输入: 1 0 3 2 5 4 7 6 9 8
输出: 45 9 18 5 14 10
样例5:
输入: 1 2 3 4 5 5 4 3 2 1
输出: 45 9 81 20 29 24
#include<stdio.h>int zy1 = 0, zy2 = 0, mp1 = 0, mp2 = 0, cr1 = 0, cr2 = 0;void zy(int b[10]) {int i, j, k, r;for (i = 0; i < 9; i++) {j = i; zy2++;for (k = i + 1; k < 10; k++) {zy1++;if (b[k] < b[j])j = k;r = b[i];b[i] = b[j];b[j] = r;}}}void mp(int b[10]) {int i, r, flag = 1;while (flag) {flag = 0;for (i = 0; i < 9; i++) {mp1++;if (b[i] > b[i + 1]) {mp2++;r = b[i]; b[i] = b[i + 1]; b[i + 1] = r;flag = 1;}}}}void cr(int b[10]) {int i, j, k, r, flag;for (i = 1; i < 10; i++) {cr1++;flag = 0;j = i - 1;while ((b[j] > b[i]) && (j >= 0)) {j--;flag = 1;cr1++;}r = b[i];for (k = i - 1; k >= j + 1; k--) {b[k + 1] = b[k];if (flag)cr2++;}if (flag)cr2++;b[j + 1] = r;}}int main() {int a[10], b[10], c[10];for (int s = 0; s < 10; s++) {scanf("%d", &a[s]);b[s] = a[s]; c[s] = a[s];}zy(a); mp(b); cr(c);printf("%d %d %d %d %d %d", zy1, zy2, mp1, mp2, cr1, cr2);}
4. (程序题)
题目编号:Exp04-Basic04,GJBook3-06-19
题目名称:删除重复元素
题目描述:编写函数,不使用其他辅助数组,把整型数组中重复元素删得只剩一个;所有未被删除元素都保留最先顺序移动到数组前面。
输入:第一行输入数组长度n(≤100),第二行依次从键盘随机输入n个整数作为数组元素值。
输出:已删除重复元素的数组,各元素间以一个西文空格间隔,最后一个元素后无字符。
样例1:
输入: 10 1 1 2 3 3 3 2 1 2 4
输出: 1 2 3 4
样例2:
输入: 10 1 0 2 2 2 2 2 2 2 2
输出: 1 0 2
#include<stdio.h>
int main() {int a[100], n, count = 0;scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);}for (int m = 0; m < n; m++) {if (a[m] < 10492) {for (int ss = m + 1; ss < n; ss++) {if (a[m] == a[ss]) {a[ss] = 10492;}}}}for (int h = 0; h < n; h++) {if (a[h] < 10492) {count++;if (count == 1) { printf("%d", a[h]); }else { printf(" %d", a[h]); }}}}
5. (程序题)
题目编号:Exp04-Basic05,GJBook3-06-06
题目名称:转移0元素
题目描述:编写程序,不使用其他辅助数组,把给定整型数组中所有0元素全部移到后面,且所有非0元素的顺序不变。
输入:第一行输入数组长度n(≤100),第二行依次从键盘随机输入n个整数作为数组元素值。
输出:已将所有0元素串到后面的整数数组,各元素间以一个西文空格间隔,最后一个元素后无字符。
样例1:
输入: 10 0 3 1 0 0 0 1 2 3 0
输出: 3 1 1 2 3 0 0 0 0 0
样例2:
输入: 10 0 0 0 0 0 0 1 2 3 4
输出: 1 2 3 4 0 0 0 0 0 0
#include<stdio.h>int main() {int n, top = 0;long long a[100];scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%lld", &a[i]);}for (int s = 0; s < n; s++) {if (a[s] != 0 && s != top) {a[top] = a[s];top++;a[s] = 0;}else if (a[s] != 0 && s == top) { top++; }}for (int h = 0; h < n; h++) {if (h == 0)printf("%lld", a[h]);else printf(" %lld", a[h]);}}
6. (程序题)
题目编号 :Exp04-Basic06,GJBook3-06-04
题目名称:循环右移
题目描述:编写程序,不使用其它辅助数组,把一维整型数组中的各个元素循环右移j位。
输入:
第一行输入两个整数,n表示数组长度(0<n<=100),j表示循环右移的位数(j>=0);
第二行依次从键盘随机输入n个整数作为数组元素值。
输出:
循环右移后的整数数组,各元素间以一个西文空格间隔,最后一个元素后无字符。
样例1:
输入: 10 2 1 2 3 4 5 6 7 8 9 0
输出: 9 0 1 2 3 4 5 6 7 8
样例2:
输入: 10 23 1 2 3 4 5 6 7 8 9 0
输出: 8 9 0 1 2 3 4 5 6 7
#include<stdio.h>int main() {int n, j, a[100];scanf("%d%d", &n, &j);for (int m = 0; m < n; m++) {scanf("%d", &a[m]);}j = j % n;for (int i = 0; i < n; i++) {if (i == 0)printf("%d", a[(i + n - j) % n]);else printf(" %d", a[(i + n - j) % n]);}}
7. (程序题)
题目编号:Exp04-Basic07,GJBook3-06-01
题目名称:检验矩阵重复元素
题目描述:编写程序判断任意给定n*n的两维整型数组中是否有相同元素。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:如果数组中有相同元素,则输出YES;否则,输出NO。
样例1:
输入: 3 1 2 3 4 5 6 7 8 9
输出: NO
样例2:
输入: 3 1 1 2 3 4 5 6 7 8
输出: YES
#include<stdio.h>#include<stdlib.h>int main() {int n, a[100];scanf("%d", &n);for (int i = 0; i < n * n; i++) {scanf("%d", &a[i]);}for (int s = 0; s < n * n; s++) {for (int m = s + 1; m < n * n; m++) {if (a[s] == a[m]) {printf("YES");exit('0');}}}printf("NO");}
8. (程序题)
题目编号: Exp04-Basic08,GJBook3-06-03
题目名称: 矩阵转置
问题描述: 编写程序,将任意给定n*n的两维整型数组转置。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:按先行后列、从左至右的顺序输出转置后数组内的所有元素,每行n个元素,同一行内的各元素间以一个西文空格间隔;每行最后一个元素除必要的回车换行符外无其它字符。
样例1:
输入: 3 1 2 3 1 2 3 1 2 3
输出: 1 1 1 2 2 2 3 3 3
样例2:
输入: 3 1 1 1 2 2 2 3 3 3
输出: 1 2 3 1 2 3 1 2 3
#include<stdio.h>#include<stdlib.h>int main() {int n, a[10][10], b[10][10];scanf("%d", &n);for (int h = 0; h < n; h++) {for (int l = 0; l < n; l++) {scanf("%d", &a[h][l]);b[l][h] = a[h][l];}}for (int s = 0; s < n; s++) {for (int t = 0; t < n; t++) {if (t == 0)printf("%d", b[s][t]);else printf(" %d", b[s][t]);}printf("\n");}}
9. (程序题)
题目编号:Exp04-Basic09,GJBook3-06-02
题目名称:检验矩阵主对角线对称
题目描述:编写程序,判断任意给定n*n的两维整型数组是否关于主对角线对称。
输入:第一行输入数组行数n(≤10),第二行随机输入n*n个整数作为数组元素值。
输出:如果数组关于主对角线对称,则输出YES;否则输出NO。
样例1:
输入:
3 1 2 3 2 1 2 3 2 1
输出: YES
样例2:
输入:
3 0 0 1 2 1 2 3 2 1
输出: NO
#include<stdio.h>#include<stdlib.h>int main() {int n, a[10][10];scanf("%d", &n);for (int i = 0; i < n; i++) {for (int p = 0; p < n; p++) {scanf("%d", &a[i][p]);}}for (int m = 0; m < n; m++) {for (int b = 0; b < n; b++) {if (a[m][b] != a[b][m]) {printf("NO");exit('0');}}}printf("YES");}
10. (程序题)
题目编号:Exp04-Basic10,GJBook3-06-12
题目名称:字符串反序
问题描述:编写程序,将给定的字符串反序输出。
输入:一个长度不超过255的字符串,字符串中可能含有空白字符。
输出:反序输出的字符串。
样例1:
输入 A 输出 A
样例2:
输入 123 45 输出 54 321
#include<stdio.h>#include<stdlib.h>#include<string.h>int main() {char a[255];int len;gets_s(a);len = strlen(a);for (int i = len - 1; i >= 0; i--) {printf("%c", a[i]);}}
11. (程序题)
题目编号:Exp04-Enhance01,GJBook3-06-25
题目名称:规则形式构建集合
题目描述:
设整数集合 M 定义如下:
(1) 1∈M ;
(2) 若 x ∈M , 则 2x+1 ∈M , 3x+1 ∈M ;
(3) 没有别的整数属于集合 M 。
编程序按递增顺序生成并输出集合 M 的前n项
输入:一个正整数n(≤300)。
输出:按递增序列输出n个属于集合M的整数,各数间以一个西文空格间隔;最后一个数后无字符。
样例1:
输入:10
输出:1 3 4 7 9 10 13 15 19 21
样例2:
输入:1
输出:1
#include<stdio.h>
int main() {int n;scanf("%d", &n);int a[300] = { 1 }, i, j, k;for (i = j = 0,k=1; k < n; k++) {if (3 * a[i] > 2 * a[j]) { a[k] = 2 * a[j] + 1; j++; }else if (3 * a[i] < 2 * a[j]) { a[k] = 3 * a[i] + 1; i++; }else { a[k] = 2 * a[i] + 1; i++; j++; }}for (int s = 0; s < n; s++) { printf("%d ", a[s]); }
}
12. (程序题)
题目编号 :Exp04-Enhance02,GJBook3-06-26
题目名称:约瑟夫问题(Josephus)
题目描述:
古代某法官要判决 n 个犯人死刑, 他有一条荒唐的逻辑, 将犯人首尾相接排成圆圈,所有计数从1开始; 然后从第 s 个人开始数, 每数到第 m 个犯人,则拉出来处决; 然后再数 m 个,数到的犯人再处决;... ; 但剩下的最后一个犯人可以赦免。编程序,给出处决顺序,并告知哪一个人活下来。
输入:三个正整数 n(≤1000),s和m,都可以使用int类型变量表示。
输出:依次输出被处决人员的编号,每个编号之间用一个西文空格间隔,最后一个编号后无字符。
样例:
输入:6 1 5
输出:5 4 6 2 3 1
#include <stdio.h>int main() {int n, s, m, a[1009];scanf_s("%d %d %d", &n, &s, &m);int i, j;int h = s - 1, count = 0;for (i = 0; i <= n - 1; i++) {a[i] = i;}while (count <= n - 1) {h = (h + m - 1) % (n - count);if (count == 0) { printf("%d", a[h] + 1); }else { printf(" %d", a[h] + 1); }a[h] = 114514;j = 0;for (i = 0; i <= n - 1 - count; i++)if (a[i] != 114514) {a[j] = a[i];j++;}count++;}}
13. (程序题)
题目编号 :Exp04-Enhance03,freshman-1006
题目名称:英文翻译自然数
题目描述:按常规英文输出1000以内自然数的英文读法。
输入:每个测试输入包含 1 个测试用例,给出正整数 n(0<= n <1000)
输出:输出占一行:如果 0<= n <1000, 用规定的格式输出 n,所有英文单词小写,最后一个单词后无字符;否则输出ERR。
样例:
输入:123
输出:one hundred and twenty-three
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int main() {int n, g, s, b;scanf("%d", &n);if (n >= 1000 || n < 0) { printf("ERR"); }else {char s1[10][10] = { "","one","two","three","four","five","six","seven","eight","nine" };char s2[10][10] = { "ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen" };char s3[10][10] = { "","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety" };g = n % 10;s = (n / 10) % 10;b = n / 100;if (b != 0) {printf("%s hundred", s1[b]);if (g != 0 || s != 0) {printf(" and");if (s == 1) { printf(" %s", s2[g]); }else if (s == 0) { printf(" %s", s1[g]); }else {printf(" %s", s3[s]);if (g != 0) {printf("-%s", s1[g]);}}}}if (b == 0) {if (g != 0 || s != 0) {if (s == 1) { printf("%s", s2[g]); }else if (s == 0) { printf("%s", s1[g]); }else {printf("%s", s3[s]);if (g != 0) {printf("-%s", s1[g]);}}}else { printf("zero"); }}}}
吉林大学超星慕课平台——高级语言程序设计 实验04 数组及其在程序设计中的应用(2022级)相关推荐
- 吉林大学超星慕课平台——高级语言程序设计 实验01 顺序程序设计(2022级)
实验01 顺序程序设计(2022级) 1. (程序题) 表达式计算. 问题描述:编写程序,计算并输出如下表达式的值: y= 其中a,x,y均为float类型,取值为3.1415926.输出结果要求保留 ...
- 吉林大学超星慕课平台——高级语言程序设计 实验03 模块化程序设计(2022级)
实验03 模块化程序设计(2022级) 一. 单选题(共1题,16.6分) 1. (单选题)有函数定义:int f(int x,int y):则下列函数调用正确的为( ) A.int n; n= ...
- 吉林大学超星慕课平台——高级语言程序设计 实验06 结构体(2022级)
1. (程序题) 题目编号 :Exp07-Basic01 题目名称:复数运算 题目描述:复数可以写成A+Bi的常规形式,其中A是实部,B是虚部,i是虚数单位,满足i^2=-1. 编写程序,分别计算两个 ...
- 吉林大学超星慕课平台——高级语言程序设计 实验02 分支与循环程序设计(2022级)
一. 程序题(共15题,100分) 1. (程序题) 题目编号:Exp02-Basic01,GJBook3-03-03 题目名称:递增排序 题目描述:任意三个实数a.b.c,按照从小到大的顺序输出. ...
- 吉林大学超星慕课平台——高级语言程序设计 实验05 指针及其在程序设计中的应用(2022级)
一. 程序题(共5题,100分) 1. (程序题) 题目编号:Exp05-Basic01,GJBook3-07-06 题目名称:字符串长度 题目描述:编写程序实现:使用自编函数int strlen(c ...
- 吉林大学 超星慕课 高级语言程序设计 实验04 数组及其在程序设计中的应用 (2022级) 程序第04一13题
本人能力有限,发出只为帮助有需要的人. 建议同学们自己写完后再进行讨论. 第三题后难度明显下降,所以后面的就一起发了 4. (程序题) 题目编号:Exp04-Basic04,GJBook3-06-19 ...
- 吉林大学 超星慕课 高级语言程序设计 实验04 数组及其在程序设计中的应用(2022级)程序第01——03题
本人能力有限,发出只为帮助有需要的人. 建议同学们自己写完后再进行讨论. EX04开始难度提升,由于篇幅问题就分开发了. 1.(编程题) 题目编号:Exp04-Basic01,GJBook3例-06- ...
- 超星高级语言程序设计实验作业 (实验04 数组及其在程序设计中的应用)(二)
超星高级语言程序设计实验作业 实验04 数组及其在程序设计中的应用(二) 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流. 7.检验矩阵重复元素 题目描述:编写程序判断任意 ...
- 吉林大学超星慕课高级语言程序设计课后作业(2022版)实验00
1.第一个C程序. 问题描述: 通常学习一门编程语言,开始的第一个程序就是将"Hello World"显示在屏幕上.请大家参照如下代码的样子,写出自己的第一个C语言程序.亲,一定要 ...
最新文章
- 熟练掌握HDFS的Shell访问
- python第三周笔记_Python第三周 学习笔记(1)
- 修理牛棚 Barn Repair
- 解秘 Node.js 单线程实现高并发请求原理,以及串联同步执行并发请求的方案
- Semaphore 源码分析
- 深入理解javascript原型和闭包(10)——this
- html-----020----事件
- Linux底层开发之四书五经
- 用MS SQL Server事件探查器来跟踪数据库的操作
- Pandas知识点-索引和切片操作
- svpwm仿真_【好物推荐】《现代永磁同步电机控制原理及MATLAB仿真》
- boost::asio
- 如何用java实现阶乘倒数求和_JAVA 阶乘 的倒数求和public class Jiecheng {public static void main(...
- RPLIDAR A2 Windows 下开发
- (经典)tcp粘包分析
- unity 物体高亮显示
- 读书笔记 摘自:《为什么精英都是时间控》
- qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库
- 这位程序员的桌面是我见过最漂亮的了
- 上班族的最佳饮食搭配法