my self-examination about Miss.Yu's question(2017-1-(24-25))

本文介绍了C语言编程中常见的几个要点,包括输入输出格式控制、函数参数类型匹配、条件语句的正确使用、成绩等级转换、数组操作注意事项、特定输入处理方式、字符数组处理技巧以及合法标识符验证等。

1,牢记在C语言输入输出时,double对应的是lf,float对应的是f。

2,牢记很多函数比如pow之类的形参都是double,如果定义实参为整型,运算结果会出错。

3,对于三目运算符a?b:c;输出时不能写cout<<a?b:c<<endl;也不能写cout<<a?b<<endl:c<<endl.(具体常用函数见收藏)。

4:对于成绩转换题目:输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;

应记住if和else if编译过程是先审查if,if条件过了,则else if的条件就默认带了if的对立事件条件,所以if条件的语法顺序很重要。

5,注意在scanf中,scanf(“%d”,&a【i】(或a+i)),不能直接写scanf(“%d”,a【i】)

6,给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。

     对于这种题,要考虑输入的两个数是否是第二个大于第一个,要学会swap两个数。

7,当遇到输入0结束的题目时,注意:

scanf()函数返回的值为:正确按指定格式输入变量的个数;
也即能正确接收到值的变量个数。 

while(scanf("%d",&n)!=0) 输入0后还能继续输入

while(scanf("%d",&n),n)输入0后不能继续输入

scanf函数返回的是输入值的个数,
(1)中输入0后返回的是1(因为1个值)肯定不和0相等了,
因此可以继续向下执行,
(2)中时逗号表达式,不管你scanf语句是什么结果,
最后while判读的是后面的n值,
你输入0,结果当然是while语句不成立了!


8.注意在C++中,定义char a【100】;cin>>a ;n=strlen(a);如果输入中带着空格,比如“

ff  ai_2”,则n = 2;
要想把两个空格记录到字符数组中,需要用gets函数。
即如果char a【100】;gets(a); n=strlen(a);
则n = 8.

9.注意有用的算法:

isalpha

一种函数:判断字符ch是否为英文字母,

若为英文字母,返回非0(小写字母为2,大写字母为1)。

若不是字母,返回0。

在标准c中相当于使用“ isupper( ch ) || islower( ch ) ”做测试,

isupper
原型:extern int isupper(int c);
头文件:<cctype>(旧版本的编译器使用<ctype.h>)
功能:判断字符c是否为大写英文字母
说明:当参数c为大写英文字母(A-Z)时,返回非零值,否则返回零。
附加说明: 此为宏定义,非真正函数。
islower
islower(测试字符是否为小写字母)
相关函数
isalpha,isupper
表头文件
#include<cctype>(旧版本的编译器使用<ctype.h>)
定义函数
int islower(int c)
函数说明
检查参数c是否为小写英文字母。
返回值
若参数c为小写英文字母,则返回TRUE,否则返回NULL(0)。
附加说明:此为宏定义,非真正函数。

isalnum

判断字符变量c是否为字母或数字,若是则返回非零,否则返回零。

10.
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff  ai_2
Sample Output
no
yes
no
我的代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<string.h>
using namespace std;
int main()
{
    int n,i;
    char r[100];
    scanf("%d", &n);
    getchar();//如果没有这个getchar,后面的gets会把回车读进去,产生错误,getchar先把回车读了,就不会产生错误。
    while(n--)
    {
        int num;
        gets(r);
        num = strlen(r);
         if (r[0] >= '0' && r[0] <= '9')
            {
                cout<<"no"<<endl;
                continue;
            }
        for (i = 0; i < num; i++)
        {
             if (((r[i] >= 'A' && r[i] <= 'Z')||(r[i] >= 'a' && r[i] <= 'z')||(r[i] >= '0' && r[i] <= '9'))||r[i] == '_')
                continue;
                else
                break;
        }
        if (i == num)
            cout<<"yes"<<endl;
        else cout<<"no"<<endl;
    }
    return 0;
}
注意getchar的用法!!!!

gets函数调用时,如果之前有输入变量的值,要注意用一个getchar()来消去回车。

否则 像代码#include<iostream>
#include<cstring>
#include<cctype>
#include<stdio.h>
using namespace std;
int main()
{
    char r[100];
   int a,b[100];
   scanf("%d",&a);
       while (a--)
       {
           gets(r);
           puts(r);
       }
    return 0;
}

就会多读入一个回车。

多输出一个回车。

10.
strupr ()
      原型:extern char *strupr(char *s); 
   用法:#include <string.h>  
  功能:将字符串s转换为大写形式 
   说明:只转换s中出现的小写字母,不改变其它字符。返回指向s的指针。
 
         strlwr ()
      原型:extern char *strlwr(char *s);  
  用法:#include <string.h>   
 功能:将字符串s转换为小写形式   
 说明:只转换s中出现的大写字母,不改变其它字符。返回指向s的指针。
 注意事项:在Linux的编译器中,有可能会编译不通过。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值