期末复习卷《C语言程序设计》(上海科学普及出版社)(四)

2026-06-14
| 2份
| 12页
| 9人阅读
| 0人下载

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 -
年级 -
章节 -
类型 题集-专项训练
知识点 数据类型和简单程序设计,分支结构,循环结构,数组,函数
使用场景 同步教学-期末
学年 2026-2027
地区(省份) 湖北省
地区(市) -
地区(区县) -
文件格式 ZIP
文件大小 196 KB
发布时间 2026-06-14
更新时间 2026-06-14
作者 源栈
品牌系列 学易金卷·期末模拟卷
审核时间 2026-06-14
下载链接 https://m.zxxk.com/soft/58340291.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

《C语言程序设计》 期末复习卷(四) 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一.程序设计题(本大题共10小题,每小题10分,共100分) 1.编写程序,使用指针将数组arr中前n个元素循环右移k个位置。例如arr=[1,2,3,4,5], n=5, k=2 → 输出结果 [4,5,1,2,3] #include <stdio.h> /*******space*******/ void reverse(int *a, int start, int end) { int temp; while(start < end) { temp = a[start]; a[start] = a[end]; a[end] = temp; start++; end--; } } /*******space*******/ void rightShift(int *arr, int n, int k){ /*******space*******/ k = k % n; if(k == 0) return; reverse(arr, 0, n-1); reverse(arr, 0, k-1); reverse(arr, k, n-1); /*******space*******/ }int main(){ int arr[] = {1,2,3,4,5}; rightShift(arr, 5, 2); for(int i=0;i<5;i++) printf("%d ", arr[i]); return 0; } 2.编写函数,使用递归函数gcd(a,b)求两个整数的最大公约数 #include <stdio.h> int gcd(int a, int b){ /*******space*******/ if(b == 0) return a; return gcd(b, a % b); /*******space*******/ } int main(){ int a,b; scanf("%d%d",&a,&b); printf("%d ", gcd(a,b)); return 0; } 3.编写程序删除字符串 str 中所有字符 ch,返回删除后的新字符串。例如:输入str="hello world", 输入ch='l' → 输出"heo word" #include <stdio.h> void delChar(char *str, char ch){ /*******space*******/ char *p = str; while(*str) { if(*str != ch) { *p = *str; p++; } str++; } *p = '\0'; /*******space*******/ }int main(){ char str[100] = "hello world"; delChar(str, 'l'); puts(str); return 0; } 4.编写程序:输入一个正整数n,输出它的所有质因子(重复的也要输出)。 例如:n=12 → 2 3 #include<stdio.h> void primeFactors(int n){ /*******space*******/ int i; for(i=2;i<=n;i++){ while(n%i==0){ printf("%d ",i); n/=i; } } /*******space*******/ } int main(){ int n; scanf("%d", &n); primeFactors(n); return 0; } 5.编写程序,输入一串字符串,找出该字符串中最长的回文子串,若有多个输出第一个。 #include<stdio.h> #include<string.h> void longestPalindrome(char *s, char *result){ /*******space*******/ int len = strlen(s); int start = 0, maxLen = 1; for(int i = 0; i < len; i++) { int l = i, r = i; while(l >= 0 && r < len && s[l] == s[r]) { if(r - l + 1 > maxLen) { maxLen = r - l + 1; start = l; } l--; r++; } l = i; r = i + 1; while(l >= 0 && r < len && s[l] == s[r]) { if(r - l + 1 > maxLen){ maxLen = r - l + 1; start = l; } l--; r++; } } strncpy(result, s + start, maxLen); result[maxLen] = '\0'; /*******space*******/ } int main(){ char s[1000], res[1000]; scanf("%s", s); longestPalindrome(s, res); puts(res); return 0; } 6.编写程序,输入一个字符串,将该字符串中连续重复的字符压缩成“字符+次数”的形式。 #include<stdio.h> void compress(char *s, char *t){ /*******space*******/ int i = 0, j = 0, count; while(s[i]){ t[j++] = s[i]; count = 1; while(s[i] == s[i+1]){ count++; i++; } if(count>1){ t[j++]=count+'0'; } i++; } t[j] = '\0'; /*******space*******/ } int main(){ char s[100],t[200]; scanf("%s", s); compress(s,t); puts(t); return 0; } 7.编写程序在升序数组arr中使用递归二分法查找目标值target,并返回下标,若不存在时则返回-1 /#include<stdio.h> int binarySearch(int arr[], int left, int right, int target) { /*******space*******/ if(left > right) return -1; int mid = (left + right) / 2; if(arr[mid] == target) return mid; if(arr[mid] > target) return binarySearch(arr, left, mid-1, target); return binarySearch(arr, mid+1, right, target); /*******space*******/ } int main(){ int arr[] = {1,3,5,7,9,11}; printf("%d ", binarySearch(arr,0,5,7)); return 0; } 8.编写程序,输入一串字符串,统计字符串中每个单词出现的次数,按单词首次出现顺序输出。例如输入i want python want.0 #include<stdio.h> #include<string.h> void wordCount(char *s) { /*******space*******/ char words[100][50]; int count[100] = {0}, wordNum = 0; char *token = strtok(s, " "); while(token){ int found = 0; for(int i = 0; i<wordNum; i++){ if(strcmp(words[i],token)==0){ count[i]++; found = 1; break; } } if(!found){ strcpy(words[wordNum], token); count[wordNum++] = 1; } token = strtok(NULL, " "); } for(int i=0;i<wordNum;i++){ printf("%s:%d ",words[i],count[i]); } /*******space*******/ } int main(){ char s[1000]; gets(s); wordCount(s); return 0; } 9.编写程序,输入两串字符串,判断第二个字符串是否为第一个字符串的循环移位后的结果,例如:s1="abcde", s2="cdeab" → 是 #include<stdio.h> #include<string.h> int isRotation(char *s1, char *s2){ /*******space*******/ int len1 = strlen(s1), len2 = strlen(s2); if(len1 != len2) return 0; char temp[200]; strcpy(temp, s1); strcat(temp, s1); return strstr(temp, s2)!= NULL; /*******space*******/ } int main(){ char s1[100], s2[100]; scanf("%s%s", s1, s2); printf("%d ", isRotation(s1,s2)); return 0; } 10.背包问题:有n个物品,重量 w[i],价值 v[i],背包容量 W,求能装的最大价值 #include<stdio.h> int knapSack(int W, int w[], int v[], int n) { /*******space*******/ int dp[100][100] = {0}; for(int i = 1; i <= n; i++){ for(int j = 1; j <= W; j++) { if(w[i-1] <= j) { int take = v[i-1] + dp[i-1][j - w[i-1]]; int notTake = dp[i-1][j]; dp[i][j] = (take > notTake) ? take : notTake; }else{ dp[i][j] = dp[i-1][j]; } } } return dp[n][W]; /*******space*******/ } int main(){ int w[] = {2,3,4,5}; int v[] = {3,4,5,6}; printf("%d ", knapSack(8, w, v, 4)); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $ 《C语言程序设计》 期末复习卷(四) 时间:90分钟 总分:100分 班级 姓名 学号 成绩 一.程序设计题(本大题共10小题,每小题10分,共100分) 1.编写程序,使用指针将数组arr中前n个元素循环右移k个位置。例如arr=[1,2,3,4,5], n=5, k=2 → 输出结果 [4,5,1,2,3] #include <stdio.h> /*******space*******/ /*******space*******/ void rightShift(int *arr, int n, int k){ /*******space*******/ /*******space*******/ }int main(){ int arr[] = {1,2,3,4,5}; rightShift(arr, 5, 2); for(int i=0;i<5;i++) printf("%d ", arr[i]); return 0; } 2.编写函数,使用递归函数gcd(a,b)求两个整数的最大公约数 #include <stdio.h> int gcd(int a, int b){ /*******space*******/ /*******space*******/ } int main(){ int a,b; scanf("%d%d",&a,&b); printf("%d ", gcd(a,b)); return 0; } 3.编写程序删除字符串 str 中所有字符 ch,返回删除后的新字符串。例如:输入str="hello world", 输入ch='l' → 输出"heo word" #include <stdio.h> void delChar(char *str, char ch){ /*******space*******/ /*******space*******/ }int main(){ char str[100] = "hello world"; delChar(str, 'l'); puts(str); return 0; } 4.编写程序:输入一个正整数n,输出它的所有质因子(重复的也要输出)。 例如:n=12 → 2 3 #include<stdio.h> void primeFactors(int n){ /*******space*******/ /*******space*******/ } int main(){ int n; scanf("%d", &n); primeFactors(n); return 0; } 5.编写程序,输入一串字符串,找出该字符串中最长的回文子串,若有多个输出第一个。 #include<stdio.h> #include<string.h> void longestPalindrome(char *s, char *result){ /*******space*******/ /*******space*******/ } int main(){ char s[1000], res[1000]; scanf("%s", s); longestPalindrome(s, res); puts(res); return 0; } 6.编写程序,输入一个字符串,将该字符串中连续重复的字符压缩成“字符+次数”的形式。 #include<stdio.h> void compress(char *s, char *t){ /*******space*******/ /*******space*******/ } int main(){ char s[100],t[200]; scanf("%s", s); compress(s,t); puts(t); return 0; } 7.编写程序在升序数组arr中使用递归二分法查找目标值target,并返回下标,若不存在时则返回-1 /#include<stdio.h> int binarySearch(int arr[], int left, int right, int target) { /*******space*******/ /*******space*******/ } int main(){ int arr[] = {1,3,5,7,9,11}; printf("%d ", binarySearch(arr,0,5,7)); return 0; } 8.编写程序,输入一串字符串,统计字符串中每个单词出现的次数,按单词首次出现顺序输出。例如输入i want python want.0 #include<stdio.h> #include<string.h> void wordCount(char *s) { /*******space*******/ /*******space*******/ } int main(){ char s[1000]; gets(s); wordCount(s); return 0; } 9.编写程序,输入两串字符串,判断第二个字符串是否为第一个字符串的循环移位后的结果,例如:s1="abcde", s2="cdeab" → 是 #include<stdio.h> #include<string.h> int isRotation(char *s1, char *s2){ /*******space*******/ /*******space*******/ } int main(){ char s1[100], s2[100]; scanf("%s%s", s1, s2); printf("%d ", isRotation(s1,s2)); return 0; } 10.背包问题:有n个物品,重量 w[i],价值 v[i],背包容量 W,求能装的最大价值 #include<stdio.h> int knapSack(int W, int w[], int v[], int n) { /*******space*******/ /*******space*******/ } int main(){ int w[] = {2,3,4,5}; int v[] = {3,4,5,6}; printf("%d ", knapSack(8, w, v, 4)); return 0; } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 学科网(北京)股份有限公司 $

资源预览图

期末复习卷《C语言程序设计》(上海科学普及出版社)(四)
1
期末复习卷《C语言程序设计》(上海科学普及出版社)(四)
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。