此题是2013年9月14日本人参加上机考试的题目
1、第一题的题目大概是输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50
以下答案是本人写的,已经在vs2008上测试通过,如果有更简便的方法还请提出来。
()先贴一个错误的做法:
#include<iostream>
using namespace std;
int main()
{
int n;
cout<<"请输入数组的长度:"<<endl;
cin>>n;
int *p=new int[n];
for(int i=0;i<n;i++){
cin>>p[i];
//cin>>
}
int max_num=p[0],min_num=p[0];
cout<<"数组的输出: "<<endl;
for(int i=0;i<n;i++){
//cout<<p[i]<<endl;
if(max_num<=p[i]){
max_num=p[i];
}
if(min_num>=p[i]){
min_num=p[i];
}
if(i==n-1){
cout<<max_num+min_num<<endl;
}
}
delete[]p;
return 0;
}
(2)比较正确的做法
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
int temp=0; //将字符转换成数字
int num[50]={0};
int i=0;
char *p;
cin>>s; //输入字符串
//p=s;
cout<<s<<endl;
for(string::size_type ix=0;ix!=s.size();++ix){
if(s[ix]!=','){
temp=temp*10+s[ix]-'0';
}
else{
num[i]=temp;
temp=0;
cout<<num[i]<<endl;
i++;
}
}
//最后一个没有逗号的数字
num[i]=temp;
cout<<num[i]<<endl;
//计算数组中的最大,最小数之和
int min_num=num[0];
int max_num=num[0];
for(int j=0;j<=i;j++){
if(num[j]>=max_num)
max_num=num[j];
if(num[j]<=min_num)
min_num=num[j];
}
cout<<min_num+max_num;
return 0;
}
需要指出的是,输入的控制,这里面第一眼大家都会想到用数组,但是数组的长度是不知道的,无法控制输入,所以很容易陷进去,而用字符串则直接回车后便退出控制台。
2 求两个长长整型的数据的和并输出,例如输入1233333333333333 。。。 3111111111111111111111111.。。。,则输出。。。。
此题同样是采用字符串类似的方法,本文此处用的是char 型指针,用纯C做的,代码不够简洁,还请大家多批评指正。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main()
{
char *p; //输入数字字符串1
char *q; //输入数字字符串2
char *sum; //求和的字符串
int p_len; //数字字符串1的长度
int q_len; //数字字符串2的长度
//int len;
int len;
int len_temp; //两个字串的最大长度
int xunhuan; //相加循环的次数
int index=0; //求和之后的进位
int d; //求和
int bit;
int i;
int p_bit; //p的每位
int q_bit; //q的每位
//char *temp;
p=(char*)malloc(sizeof(char));
q=(char*)malloc(sizeof(char));
sum=(char*)malloc(sizeof(char));
sum[0]='0'; //初始化进位
scanf("%s",p);
scanf("%s",q);
p_len=strlen(p);
q_len=strlen(q);
if(p_len==q_len){
len=p_len;
for(i=len;i>0;i--){
p_bit=p[i-1]-'0';
q_bit=q[i-1]-'0';
d=(q_bit+p_bit+index)%10;
index=(q_bit+p_bit+index)/10;
sum[i]=d+'0';
}
if(index!=0){
sum[0]=index+'0';
}
sum[len+1]='\0';
if(sum[0]=='0')
printf("%s",sum+1);
else
printf("%s",sum);
}
if(p_len!=q_len)
{
len_temp=(p_len>q_len)?p_len:q_len;
xunhuan=(p_len>q_len)?q_len:p_len;
if(len_temp==p_len){
strcpy(sum+1,p);
}
else{
strcpy(sum+1,q);
}
len=len_temp+1;
for(i=xunhuan;i>=1;i--){
if(p_len>q_len){
p_bit=p[len_temp-1]-'0';
q_bit=q[i-1]-'0';
}
else{
p_bit=p[i-1]-'0';
q_bit=q[len_temp-1]-'0';
}
d=(q_bit+p_bit+index)%10;
index=(q_bit+p_bit+index)/10;
sum[len_temp--]=d+'0';
}
while(index==1){
bit=sum[len_temp]-'0';
d=(bit+index)%10;
index=(bit+index)/10;
// sum[len_temp]=(((sum[len_temp]-'0')+index)/10)+'0';
// index=(index+(sum[len_temp]-'0'))%10;
sum[len_temp]=d+'0';
len_temp--;
}
sum[len]='\0';
if(sum[0]=='0')
printf("%s",sum+1);
else
printf("%s",sum);
}
}