内容正文:
《C语言程序设计》
期末复习卷(七)
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一.程序设计题(本大题共10小题,每小题10分,共100分)
1.给定一个整数数组nums和一个整数目标值target,请找出该数组中和为目标值target的两个整数,并返回他们在该数组中的下标
#include<stdio.h>
void twoSum(int *nums, int numsSize, int target, int *result)
{
/*******space*******/
/*******space*******/
}
int main(){
int nums[]={2,7,11,15};
int target=9;
int result[2];
int size = sizeof(nums) / sizeof(nums[0]);
twoSum(nums, size, target, result);
printf("[%d, %d]
", result[0], result[1]);
return 0;
}
2.编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""
#include<stdio.h>
#include<string.h>
char* longestCommonPrefix(char** strs, int strsSize){
/*******space*******/
/*******space*******/
}
int main(){
char* strs1[] = {"flower", "flow", "flight"};
int size1 = 3;
printf("最长公共前缀: \"%s\"
",longestCommonPrefix(strs1, size1)); char* strs2[] = {"dog", "racecar", "car"};
int size2 = 3;
printf("最长公共前缀: \"%s\"
", longestCommonPrefix(strs2, size2)); return 0;
}
3.编写程序输入一个秒数,将其转换为HH:MM:SS形式的格式并输出
#include<stdio.h>
int main()
{
int sec,h,m,s;
scanf("%d",&sec);
/*******space*******/
/*******space*******/
printf("%02d:%02d:%02d
", h, m, s);
return 0;
}
4.给定一个整数数组a,向其中输入20个整数,判断找出出现次数大于3次的元素
#include<stdio.h>
int main(){
int a[20],n,i,candidate,count = 0;
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%d", &a[i]);
/*******space*******/
/*******space*******/
printf("%d
", candidate);
return 0;
}
5.输入一串字符串,该字符串中包含()、[]、{}等字符,判断字符串中的括号()、[]、{}是否匹配,并输出结果
#include <stdio.h>
int main(){
char s[200], stack[200];
int top = -1,i;
gets(s);
/*******space*******/
/*******space*******/
if (top == -1) printf("YES
");
else printf("NO
");
return 0;
}
6.输入一串字符串,删除字符串中重复出现的字符(只保留第一次出现的字符),例如"abcaabcd" → "abcd"
#include<stdio.h>
#include<string.h>
void remove_duplicates(char s[])
{
/*******space*******/
/*******space*******/
}
int main(){
char s[100];
gets(s);
remove_duplicates(s);
puts(s);
return 0;
}
7.输入一个十进制正整数,将其转换成二进制字符串并输出
#include<stdio.h>
void dec2bin(int n, char bin[]){
/*******space*******/
/*******space*******/
}
int main(){
int n;
char bin[100];
scanf("%d",&n);
dec2bin(n,bin);
puts(bin);
return 0;
}
8.输入两个升序排列的数组,要求输出它们的交集(不重复)
#include<stdio.h>
int main(){
int a[5], b[5],n,m,i=0,j=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]);
i = 0; j = 0;
/*******space*******/
/*******space*******/
return 0;
}
9.输入n个整数,判断它们是否能构成等差数列。能则输出"YES",否则输出 "NO"
#include<stdio.h>
int main(){
int n,a[100],i,diff;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
/*******space*******/
/*******space*******/
return 0;
}
10.输入一个字符串,将字符串中每个单词的字母顺序反转,单词之间保持原顺序
#include<stdio.h>
#include<string.h>
void reverse_words(char s[])
{
/*******space*******/
/*******space*******/
}
int main(){
char s[100] = "hello world";
reverse_words(s);
puts(s);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
《C语言程序设计》
期末复习卷(七)
时间:90分钟 总分:100分
班级 姓名 学号 成绩
一.程序设计题(本大题共10小题,每小题10分,共100分)
1.给定一个整数数组nums和一个整数目标值target,请找出该数组中和为目标值target的两个整数,并返回他们在该数组中的下标
#include<stdio.h>
void twoSum(int *nums, int numsSize, int target, int *result)
{
/*******space*******/
for(int i = 0; i < numsSize - 1; i++){
for(int j = i + 1; j < numsSize; j++){
if(nums[i] + nums[j] == target){
result[0] = i;
result[1] = j;
return;
}
}
}
/*******space*******/
}
int main(){
int nums[]={2,7,11,15};
int target=9;
int result[2];
int size = sizeof(nums) / sizeof(nums[0]);
twoSum(nums, size, target, result);
printf("[%d, %d]
", result[0], result[1]);
return 0;
}
2.编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""
#include<stdio.h>
#include<string.h>
char* longestCommonPrefix(char** strs, int strsSize){
/*******space*******/
if(strsSize == 0) return "";
static char result[1000];
int i, j;
for(j = 0; strs[0][j] != '\0'; j++){
char current = strs[0][j];
for(i = 1; i < strsSize; i++){
if(strs[i][j] == '\0' || strs[i][j] != current){ result[j] = '\0';
return result;
}
}
result[j] = current;
}
result[j] = '\0';
return result;
/*******space*******/
}
int main(){
char* strs1[] = {"flower", "flow", "flight"};
int size1 = 3;
printf("最长公共前缀: \"%s\"
",longestCommonPrefix(strs1, size1)); char* strs2[] = {"dog", "racecar", "car"};
int size2 = 3;
printf("最长公共前缀: \"%s\"
", longestCommonPrefix(strs2, size2)); return 0;
}
3.编写程序输入一个秒数,将其转换为HH:MM:SS形式的格式并输出
#include<stdio.h>
int main()
{
int sec,h,m,s;
scanf("%d",&sec);
/*******space*******/
h = sec / 3600;
m = (sec % 3600) / 60;
s = sec % 60;
/*******space*******/
printf("%02d:%02d:%02d
", h, m, s);
return 0;
}
4.给定一个整数数组a,向其中输入20个整数,判断找出出现次数大于3次的元素
#include<stdio.h>
int main(){
int a[20],n,i,candidate,count = 0;
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%d", &a[i]);
/*******space*******/
for(i = 0; i < n; i++){
int freq = 0;
for(int j = 0; j < n; j++){
if(a[j] == a[i]) freq++;
}
if(freq > 3){
candidate = a[i];
count++;
break;
}
}
/*******space*******/
printf("%d
", candidate);
return 0;
}
5.输入一串字符串,该字符串中包含()、[]、{}等字符,判断字符串中的括号()、[]、{}是否匹配,并输出结果
#include <stdio.h>
int main(){
char s[200], stack[200];
int top = -1,i;
gets(s);
/*******space*******/
for(i = 0; s[i] != '\0'; i++){
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
stack[++top] = s[i];
}
else if(s[i] == ')'){
if(top >= 0 && stack[top] == '(') top--;
else{ top = 0; break; }
}
else if(s[i] == ']'){
if(top >= 0 && stack[top] == '[') top--;
else { top = 0; break; }
}
else if(s[i] == '}') {
if(top >= 0 && stack[top] == '{') top--;
else { top = 0; break; }
}
}
/*******space*******/
if (top == -1) printf("YES
");
else printf("NO
");
return 0;
}
6.输入一串字符串,删除字符串中重复出现的字符(只保留第一次出现的字符),例如"abcaabcd" → "abcd"
#include<stdio.h>
#include<string.h>
void remove_duplicates(char s[])
{
/*******space*******/
int len = strlen(s);
if(len == 0) return;
int index = 1;
for(int i = 1; i<len;i++){
int j;
for(j = 0;j<index;j++){
if(s[i] == s[j]) break;
}
if(j == index){
s[index++] = s[i];
}
}
s[index] = '\0';
/*******space*******/
}
int main(){
char s[100];
gets(s);
remove_duplicates(s);
puts(s);
return 0;
}
7.输入一个十进制正整数,将其转换成二进制字符串并输出
#include<stdio.h>
void dec2bin(int n, char bin[]){
/*******space*******/
if(n == 0){
bin[0] = '0';
bin[1] = '\0';
return;
}
int index = 0;
char temp[100];
while(n > 0){
temp[index++] = (n % 2) + '0';
n /= 2;
}
for(int i = 0; i < index; i++) {
bin[i] = temp[index - 1 - i];
}
bin[index] = '\0';
/*******space*******/
}
int main(){
int n;
char bin[100];
scanf("%d",&n);
dec2bin(n,bin);
puts(bin);
return 0;
}
8.输入两个升序排列的数组,要求输出它们的交集(不重复)
#include<stdio.h>
int main(){
int a[5], b[5],n,m,i=0,j=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]);
i = 0; j = 0;
/*******space*******/
int first = 1;
while(i < n && j < m){
if(a[i] < b[j]) i++;
else if(a[i] > b[j]) j++;
else{
if(first){
printf("%d", a[i]);
first = 0;
}else{
printf(" %d", a[i]);
}
i++;j++;
while(i<n&& a[i]==a[i-1]) i++;
while(j<m&&b[j]==b[j-1]) j++;
}
}
printf("
");
/*******space*******/
return 0;
}
9.输入n个整数,判断它们是否能构成等差数列。能则输出"YES",否则输出 "NO"
#include<stdio.h>
int main(){
int n,a[100],i,diff;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
/*******space*******/
if(n <= 2){
printf("YES
");
return 0;
}
diff = a[1] - a[0];
for(i=2;i<n;i++){
if(a[i]-a[i-1]!=diff){
printf("NO
");
return 0;
}
}
printf("YES
");
/*******space*******/
return 0;
}
10.输入一个字符串,将字符串中每个单词的字母顺序反转,单词之间保持原顺序
#include<stdio.h>
#include<string.h>
void reverse_words(char s[])
{
/*******space*******/
int len = strlen(s);
int start = 0;
for(int i = 0; i <= len; i++){
if(s[i]==' '||s[i]=='\0'){
int end=i-1;
while(start < end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
start = i + 1;
}
}
/*******space*******/
}
int main(){
char s[100] = "hello world";
reverse_words(s);
puts(s);
return 0;
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$