image

编辑人: 流年絮语

calendar2025-12-14

message7

visits194

2023年05月C语言二级参考答案

一、编程题

1、数字放大
给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。
时间限制:1000
内存限制:65536
输入
包含三行: 第一行为N,表示整数序列的长度(N ≤ 100); 第二行为N个整数(不超过整型范围),整数之间以一个空格分开; 第三行包含一个整数(不超过整型范围),为指定的整数x。
输出
N个整数,为原序列放大之后的序列,整数之间以一个空格分开。
样例输入

3
1 5 7
2

样例输出

2 10 14

提示
注意答案的数据范围

参考答案:

include <bits/stdc++.h>

using namespace std;

int main()

{

int a[100],n,i,x;

cin>>n;

for(i=1;i<=n;i++)

cin>>a[i];

cin>>x;

for(i=1;i<=n;i++)

cout<<a[i]*x<<" ";

}


2、单词倒排
编写程序,读入一行英文(只包含字母和空格,单词间以单个空格分隔),将所有单词的顺序倒排并输出,依然以单个空格分隔。
时间限制:10000
内存限制:65536
输入
输入为一个字符串(字符串长度至多为100)。
输出
输出为按要求排序后的字符串。
样例输入

I am a student

样例输出

student a am I

参考答案:

include <bits/stdc++.h>

void flashback(char a[], int j, int p); //倒序函数

int main(void)

{

char a[10000];

int j, i, k, end;

char temp;

gets(a);

end = strlen(a)-1 ;

for (i = 0; i < end+1; i++) //先处理特殊符号

if (!isalpha(a[i])) //非字母将第一个符号替换为’ ’

{

a[i]=’ ’;

j=0; //j用来记录连续特殊带符号的个数

if(i==0) //如果是首字符 删除他

{

for(k=1;k<=end-1;k++)

a[k]=a[k+1];

a[k]=‘\0’;

}

else k=i+1; //k为特殊符号后的下一字符

while (!isalpha(a[i])&&i<(end+1))

{

i++;

j++;

}

j–;

if(i==(end+1) ) //如果特殊字符结尾,截断字符串

a[k-1]=‘\0’;

else {

for(k=1;k<=end-j;k++) //通过搬移数组去除掉连续的特殊字符

a[k] = a[k + j];

a[k] = ‘\0’;

}

end=strlen(a)-1;

}

flashback(a, 0, end); //句子倒序

for (i = 0; i < end; i++)

if (!isspace(a[i]) && i < end) {

j = i++;

while (!isspace(a[i]) && i < end)

i++;

if (i < end) k = –i;

else k = end;

flashback(a, j, k);

}

puts(a);

}

void flashback(char a[], int j, int p)

{

int i;

char temp;

for (i = j; i < p; i++, p–)

{

temp = a[p];

a[p] = a[i];

a[i] = temp;

}

}


3、

计算矩阵边缘元素之和

输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。

时间限制:10000
内存限制:65536
输入
第一行分别为矩阵的行数m和列数n(m < 100,n < 100),两者之间以一个空格分开。 接下来输入的m行数据中,每行包含n个整数,整数之间以一个空格分开。
输出
输出对应矩阵的边缘元素和
样例输入

3 3
3 4 1
3 7 1
2 0 1

样例输出

15

参考答案:

include<stdio.h>

include<stdlib.h>

int main()

{

int m,n;//矩阵的长和宽

int sum = 0;

printf(“输入矩阵的长和宽\n”);

scanf(“%d%d”,&m,&n);

int a[m][n];//存储矩阵的值

//为矩阵赋值

for(int i=0;i<m;i++)

{

for(int j=0;j<n;j++)

{

scanf(“%d”,&a[i][j]);

}

}

//打印矩阵

for(int i=0;i<m;i++)

{

for(int j=0;j<n;j++)

{

printf(“%d\t”,a[i][j]);

}

printf(“\n”);

}

//计算首尾两行:行的话就是第一行a[0][?],最后一行a[m-1][?] ,然后以列循环求和0-n

for(int i=0;i<n;i++)

{

sum = sum+a[0][i]+a[m-1][i];

}

//计算首尾两列:列的话就是第一列a[?][0],最后一列a[?][n-1],然后以行循环求和1-n-1,注意要去掉第一行和最后以行,不然重计算

for(int j=1;j<m-1;j++)

{

sum = sum+a[j][0]+a[j][n-1];

}

printf(“矩阵边缘元素之和sum=%d\n”,sum);

return 0;

}


4、奇数单增序列
给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。
时间限制:1000
内存限制:65536
输入
共2行: 第1行为 N; 第2行为 N 个正整数,其间用空格间隔。
输出
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
样例输入

10
1 3 2 6 5 4 9 8 7 10

样例输出

1,3,5,7,9

参考答案:

include<stdio.h>

int main()

{

int n,i,f,t,m,j=0,a[500];

scanf(“%d”,&n);

for(int i=0;i<n;i++)

{

scanf(“%d”,&m);

if(m%2==1) //判断所输入的数据是否为奇数,若为奇数就把数存入到一维数组a[]中;

{

a[j]=m;

j++; //用j来判断数组内的元素个数。

}

}

for(i=0;i<j-1;i++) //使用冒泡排序的方法对一维数组进行排序

{

int q=0;

for(f=0;f<j-i-1;f++)

{

if(a[f]>a[f+1])

{

t=a[f];

a[f]=a[f+1];

a[f+1]=t;

}

}

}

if(j==1) //需要考虑数组内数据只有一个数据时的情况。

printf(“%d”,a[0]);

else //数组内的数据大于一时。

{

for(i=0;i<j-1;i++)

{

printf(“%d,”,a[i]);

}

if(j>=2)

{

printf(“%d”,a[j-1]);

}

}

//在刚开始没有考虑数组数值为一的情况;造成一直显示结果错误!

return 0;

}


5、实数加法
求两个实数相加的和。

题目中输入输出里出现的浮点数都有如下的形式: P1P2…Pi.Q1Q2…Qj。对于整数部分,P1P2…Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。
时间限制:1000
内存限制:65536
输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入

0.111111111111111111111111111111
0.111111111111111111111111111111

样例输出

0.222222222222222222222222222222

参考答案:

include<iostream>

include<string>

include<algorithm>

using namespace std;

int main()

{

string a,b;

int j=0;

int m,n;

string ax,ay,bx,by;

cin>>a;

cin>>b;

int x=a.find(“.”);

int y=b.find(“.”);

ax=a.substr(0,x);

ay=a.substr(x+1);

bx=b.substr(0,y);

by=b.substr(y+1);//将整数小数分离开

if(ax.size()>bx.size())

m=ax.size();//找到最大位数

else

m=bx.size();

if(by.size()>ay.size())

n=by.size();

else

n=ay.size();

while(ax.size()!=m)

ax=“0”+ax;//整数部分补0(在前面补)

while(bx.size()!=m)

bx=“0”+bx;

while(ay.size()!=n)

ay+=“0”;//小数补0(在后面补)

while(by.size()!=n)

by+=“0”;

int k=0;

string zheng=““,xiao=””;

for(int i=n-1;i>=0;i–)//注意要倒序

{

xiao+=((k+(ay[i]-‘0’)+(by[i]-‘0’))%10+‘0’);//k起到进位的作用

k=(k+(ay[i]-‘0’)+(by[i]-‘0’))/10;//进几

}

for(int i=m-1;i>=0;i–)

{

zheng+=((k+(ax[i]-‘0’)+(bx[i]-‘0’))%10+‘0’);

k=(k+(ax[i]-‘0’)+(bx[i]-‘0’))/10;

}

if(k!=0)

zheng+=k+‘0’;

int c;

for (c=0;c<xiao.length();c++)

if (xiao[c] != ‘0’)

break;//去掉小数部分0

reverse(zheng.begin(), zheng.end());//将整数部分倒序

cout << zheng << “.”;

for (int i = xiao.length() - 1; i>=c; i–)//也可以用reverse

cout << xiao[i];

cout << endl;

}


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023年05月C语言二级参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share