赞
踩
第一题 表达式
117 % 16
的结果是( )。A. 0
B. 5
C. 7
D. 10
答案:B
解析:%求的是余数,117除以16的余数是5。
第二题 下列选项中,字符数组定义正确的是( )。
A.
char a[5] = "hello";
B.
char a[ ] = "hello";
C.
char a = "hello";
D.
char a[6] = 'hello';
答案:B
解析:考察字符数组定义与赋值。
定义一个字符数组并且用一个字符串常量初始化它时,数组的大小应该足够包含字符串常量的所有字符,包括结尾的空字符(‘\0’)。
在此题中,有一点需要注意:双引号带着的是字符串,字符串hello带有5个字符,但由于C语言风格的字符串要以空字符(‘\0’)结尾,实际上是需要6个字符空间才能存储整个字符串(包括结尾的 ‘\0’)。
因此A选项错误,正确应该是char a[6]="hello";
C选项是单一的字符,不能用双引号。
D选项的初始化用了单引号,错误。
字符数组的定义示例如下:
(1)char a[10]={‘h’,‘e’,‘l’,‘l’,‘o’}; 表示定义一个字符数组,含有10个元素,前面五个元素分别赋值为字母h,字母e,字母l,字母l和字母o,后面的元素赋值为空值,即null。
(2)char a[10]=“hello”; 和(1)相同,要注意,这里的元素个数一定要在字符串长度的基础上加1。
(3)char a[]=“hello”; 这种写法是没有固定元素个数,单独写是错误的,但如果有初始化,程序就会自动根据字符数组的实际长度进行调整。
第三题 定义
int i = 0, a = 10;
执行表达式a = (i <= 0 ? 1 : 2)
后,a 的值是( )。A. 1
B. 2
C. 10
D. 随机值
答案:A
解析:考察三目运算符
(i <= 0 ? 1 : 2)
转换成 if 语句:
if(i<=0)
a=1;
else
a=2;
定义中,int i = 0, a = 10;
i=0,因此a=1,所以选A。
第四题 十进制数
22.5625
转换成十六进制数是( )。A. 16.7
B. 16.8
C. 16.9
D. 17.1
答案:C
解析:分为两部分
整数部分:
十进制22转换成十六进制使用如下短除法,结果为16。
小数部分:用乘法,乘到整数即可。
结合起来,就是16.9。
第五题 定义
int a[5] = {1, 2, 3, 4, 5}, *p = a, *q = p++;
那么*p
和*q
的值分别是( )。A. 2、3
B. 3、2
C. 1、2
D. 2、1
答案:D
解析:
考查一维数组、指针、自增
*p=a
即取 a 数组的第一个元素的值,即 1。
*q=p++
需要分成两个部分,p++,即1+1=2,所以 *p
的值就是2,而q则是*q=p
,所以*q
的值是2,*p
的值为1。
所以答案选D。
该题和下方类似:
int x=10,c;
c=x++;
cout<<c<<endl<<x;
c的值是10,x的值是11。
题目描述:
给定三个不同的整数,请找出其中第二大的数。例如:三个整数分别为 30、20、25,其中第二大的数是 25。
输入描述:
一行输入三个不同的整数 a,b,c(1≤a,b,c≤1000),整数之间以一个空格隔开。
输出描述:
输出一个整数,表示三个整数中第二大的数。
样例输入:
30 20 25
样例输出:
25
解析:
根据输入描述,确定三个整数a,b,c:int a,b,c;
因为有三个数,所以可以先找最大值,再找最小值,再将三个值相加之后,进行相减,即可得到第二大的值。
定义一个整数,用于计算总和:int sum=0;
最大值:int maxx=max(a,max(b,c));
最小值:int minn=min(a,min(b,c));
用总和减去最大值和最小值,即可得到正确答案。
这里用到了max和min函数,这两个函数只能比较两个值的大小,因此需要嵌套使用,最好用万能头文件或者cmath头文件哦~
参考代码:
#include<iostream>
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
int sum;
sum=a+b+c;
int maxx=max(a,max(b,c));
int minn=min(a,min(b,c));
cout<<sum-maxx-minn;
return 0;
}
说在题外,有同学使用数组的方法,也是可以的。有兴趣的同学可以看看~
数组方法:将数据输入到数组中,再对数组进行排序,输出第二个即可。
#include<iostream>
#include<algorithm>//排序用到的头文件
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[4];
for(int i=1;i<=3;i++)
{
cin>>a[i];
}
sort(a+1,a+1+3); //从小到大进行排序
cout<<a[2]; //输出第二个
return 0;
}
提示信息:
如果一个整数能够被它的各位上的非零数字整除,则称该数为奇妙数。
例如:
整数 102,它的各位上的非零数字为 1 和 2,102 既能被 1 整除,也能被 2 整除,所以 102 是奇妙数;
整数 456,它的各位上的非零数字为 4、5 和 6,456 能被 4 和 6 整除,但不能被 5 整除,所以 456 不是奇妙数。
题目描述:
给定两个整数 n 和 m,请输出 n 到 m 之间(包含 n 和 m)所有的奇妙数;若不存在奇妙数,则输出 -1。
输入描述:
一行输入两个整数 n 和 m(1≤n≤m≤100000),整数之间以一个空格隔开。
输出描述:
按照从小到大的顺序输出 n 到 m 之间(包含 n 和 m)所有的奇妙数,整数之间以一个空格隔开;若不存在奇妙数,则输出 -1。
样例输入:
10 20
样例输出:
10 11 12 15 20
解析:
根据输入描述,确定输入两个整数:int m,n; cin>>n>>m;
在 n 和 m 中找奇妙数,所以需要使用 for 循环进行遍历:for(int i=n;i<=m;i++)
根据题目中奇妙数的描述,可以对用一个函数实现奇妙数的判断,假设函数名为qm,判断输入的参数 x 是否为奇妙数。
需要做到对数值每一位进行拆分,方法使用 while 循环。
bool qm(int x)
{
int y=x; //单独将x提取出来
while(y) //拆分y的每一位
{
if(y%10!=0&&(x%(y%10)!=0)) return false;//不整除,则返回false
y/=10; //缩小
}
return true;//其他情况,返回true
}
结合在一起,得到以下代码。
参考代码:
#include<iostream> #include<bits/stdc++.h> using namespace std; bool qm(int x) { int y=x; //单独将x提取出来 while(y) //拆分y的每一位 { if(y%10!=0&&(x%(y%10)!=0)) return false;//不整除,则返回false y/=10; //缩小 } return true;//其他情况,返回true } int main() { int n,m; int flag=0; //用于判断是否输出-1 cin>>n>>m; for(int i=n;i<=m;i++) { if(qm(i)==true) { cout<<i<<" "; flag=1; //有奇妙数,将标记转为1 } } if(flag==1) cout<<-1; //如果标记还是等于0,证明没有奇妙数,直接输出-1 return 0; }
题目描述:
给定一个仅包含小写字母的字符串 S,用这些字符恰好排成一个 n 行 m
列的矩阵(m≥n),请找出所有符合要求的矩阵中最接近于正方形的那个矩阵。然后从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符。例如:
S = “abcdefgh”。按要求 m≥n 有如下两种矩阵:
最接近正方形的矩阵是第一种。从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符,结果为:aebfcgdh。
输入描述:
输入一个字符串,仅包含小写字母且长度不超过 200。
输出描述:
请找出符合题目要求的最接近正方形的字符矩阵,从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符。
样例输入:
abcdefgh
样例输出:
aebfcgdh
解析:
根据输入描述,输入一个字符串,所以:string s; cin>>s;
根据题目的意思,需要将字符排成 n 行 m 列的矩阵,要接近于正方形,首先要做的就是计算字符串的长度:int len=s.length()
长度计算完成之后,我们需要确认,是否能够形成正方形,如果刚好能够形成,就是两条边相等,需要对len开平方。
举个例子,如果长度为 9 时,sqrt(9)=3,则刚好是 3 行 3 列的二维数组。
假如不是,那么就需要 m>=n,所以,需要将边长从开平方数往下遍历:for(int n=sqrt(len);n>=1;n--)
为 n 列的遍历情况,m 直接用 len/n,直到两个n*m==len 即可跳出。
int n,m;
for(n=sqrt(len);n>=1;n--)
{
m=len/n;
if(n*m==len) break;
}
确认好 m 和 n 之后,就可以将字符串存入到二维数组中。
int k=0; //字符串下标从0开始
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
a[i][j]=s[k];
k++; //递增放入
}
}
之后按要求:从第一列开始,逐列按照从上到下的顺序输出矩阵中的字符,直接将二维数组中的位置替换即可。
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
cout<<a[i][j];
}
}
以上,即可完成!
参考代码:
#include<iostream> #include <bits/stdc++.h> using namespace std; string s; char a[210][210];//长度不超过200 int main() { string s; cin>>s; int len=s.length(); //确认 n 和 m int n,m; for(n=sqrt(len);n>=1;n--) { m=len/n; if(n*m==len) break; } cout<<len<<" "<<m<<" "<<n; int k=0; //字符串下标从0开始 for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { a[i][j]=s[k]; k++; //递增放入 } } for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { cout<<a[i][j]; } } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。