PTA c++ week2

1.定义变量int i; 然后对变量i进行强制类型转换运算:double(i); 运算结束后,变量i的类型转换为double类型.                 (F)

2.对于有返回值的return语句,用它可以返回一个表达式的值,从而实现函数之间的信息传递   (T)

3.如果默认参数的函数声明为“ void fun(int a,int b=1,char c='a',float d=3.2);”, 则下面调用写法正确的是( )。       (B)

A.fun();

B.fun(2,3);

C.fun(2, ,'c',3.14)

D.fun(int a=1);

4.关于函数的返回值的说法,正确的是: (c)

A.函数必须有返回值

B.函数可以有多个返回值

C.函数可以有一个返回值

D.函数的返回值个数不确定

5.以下程序中,new语句干了什么。(c)

int** num;

num = new int* [20];

A.分配了长度为20的整数数组空间,并将首元素的指针返回。

B.分配了一个整数变量的空间,并将其初始化为20。

C.分配了长度为20的整数指针数组空间,并将num[0]的指针返回。

D.存在错误,编译不能通过。

6.以下程序存在的问题是: (c)

void fun()
{
 int *num1, *num2;
 num1 = new int[10];
 num2 = new int[20];
 num1[0] = 100;
 num2[0] = 300;
 num1 = num2;
 delete [] num1;
}

A.num2不能给num1赋值

B.num2最初指向的空间没有释放

C.num1最初指向的空间没有释放

D.程序没有问题

7.一道编程题之优化

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:

输入一个时间数值,再输入秒数 n,输出该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。

输出格式: printf("time: %d:%d:%d\n", );

输入输出示例:括号内为说明,无需输入输出

输入样例:

3 (repeat=3)

0:0:1 59 (秒数n=59)

11:59:40 30 (秒数n=30)

23:59:40 301 (秒数n=301)

输出样例:

time: 0:1:0 (0:0:01加上59秒的新时间)

time: 12:0:10 (11:59:40加上30秒的新时间)

time: 0:4:41 (23:59:40加上301秒的新时间)

我的代码:

#include <iostream>
using namespace std;

int main()
{
    int a,b,c,d,e;
    char f,h;

    cin>>a;
    for(int i=1; i<=a; i++)
    {
        cin>>b>>f>>c>>h>>d>>e;
        if (d+e>=60)
        {
            c=c+(d+e)/60;
            d=d+e-((d+e)/60)*60;//注意这里/与*抵消吗,nono
        }
        else
            d=d+e;
        if(c>=60)
        {
            b=b+(c/60);
            c=c-(c/60)*60;

        }
        if(b>=24)
            b=(b-24)%24;
        cout<<"time: "<<b<<":"<<c<<":"<<d<<endl;
    }


}

标准代码:(我的没有用%处理方式,故更繁琐)

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
    int repeat, hour, minu, sec;
    int n = 0;
	cin >> repeat;
    while (repeat --)
    {
        hour = minu = sec = 0;
        cin >> hour;
		cin.ignore();
		cin >> minu;
		cin.ignore();
		cin >> sec;
        cin >> n; 
        sec += n;
        if (sec >= 60)
        {
            minu += sec / 60;
            sec = sec % 60;
            if (minu >= 60)
            {
                hour += minu / 60;
                minu = minu % 60;
                if (hour >= 24)
                {
                    hour = hour % 24;
                }
            }
        }
        cout << "time: " << hour <<":" << minu << ":" << sec << endl;
    }
    return 0;
}

8.判断邮箱合法性

从键盘输入一个邮箱,判断该邮箱是否合法。合法性判定规则是邮箱中必须包含 @ 和 .,但不能包含空格字符,并且 @ 必须在 . 的前面。 提示:使用string类型存储输入的邮箱

in:                                       out:

输入一行表示邮箱的字符串  如果输入字符串符合邮箱合法性规则,则输出legal,否则输出unlegal

我的代码:

#include <iostream>
#include<string>
using namespace std;
int main()
{
  int d=-1,e=-1,f=-1;
  string c;
  cin>>c;
  d=c.find("@");
  e=c.find(".");
  f=c.find(" ");
  if(d>=0&&e>=0&e-d>0&&f==-1)
    cout<<"legal";
  else
    cout<<"unlegal";


}

标准代码:(首先我没fast这其实不对的,其次我的语法虽然较巧妙但不规范)

#include<iostream>
#include<string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main()
{
	string email;
	cin >> email;
	int dot_pos {-1} , at_pos {-1}, space_at{-1};
	at_pos = email.find_first_of('@');
	dot_pos = email.find_first_of('.');	
	space_at = email.find_first_of(' ');
	if(dot_pos > at_pos && at_pos != string::npos && dot_pos != email.length() - 1 && space_at == string::npos)  
//1、2确保有@与.,3保证.不是最后一位,4即没有空格
		cout << "legal" << endl;	
	else cout << "unlegal" << endl;
	return 0;
}

再接再励,加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值