C语言错题笔记
创始人
2024-03-17 08:28:46

文章目录

    • 一、C语言
      • 1、数据类型表达式练习题
      • 2、选择练习
      • 3、循环练习
      • 4、数组练习
      • 5、指针练习

仔细理解

一、C语言

1、数据类型表达式练习题

  1. 表达式 (3== x ==3) 的值恒为0。(T)
  2. C程序中,用一对大括号{}括起来的多条语句称为复合语句,复合语句在语法上被认为是一条语句。(T)
  3. 下列选项中用于判断ch是否是字符的表达式是( D )。 (2分)
    A.( ‘a’ <= ch <= ‘z’ ) || ( ‘A’ <= ch <= ‘Z’ )
    B.( ‘a’ <= ch <= ‘z’ ) && ( ‘A’ <= ch <= ‘Z’ )
    C.( ch >= ‘a’ && ch <= ‘z’ ) && ( ch >= ‘A’ && ch <= ‘Z’ )
    D.( ch >= ‘a’ && ch <= ‘z’ ) || ( ch >= ‘A’ && ch <= ‘Z’ )
  4. 逻辑运算符两侧运算对象的数据类型( D )。 (2分)
    A.只能是 0 或 1
    B.只能是 0 或非 0 正数
    C.只能是整型或字符型的数据
    D.可以是任何类型的数据
  5. 假定x和y为 double型,则表达式x=2,y=x+3/2的值是( C )。 (2分)
    A.3.500000
    B.3
    C.3.000000
    D.2.000000

2、选择练习

  1. if(a=5) 是允许的。(T)

  2. break语句只能用于循环语句中。 (F)可用在switch选择结构中

  3. 如果变量已经正确定义,则执行以下程序段后,x的值不变。(F)

    x = 4; 
    if (x < 0){ y = -1;
    }else if (x = 0){y = 0;
    }else{ y = 1;
    }  
    
  4. 下列程序段的输出结果是( C )。 (2分)
    else总是与离它最近的if配对

    int main(void)
    {   int  a = 2, b = -1, c = 2;if(a < b)if(b < 0)  c = 0;else  c++;printf("%d\n",c);	return 0;
    }
    

    A.0 B.1 C.2 D.3

  5. 下列程序段输出结果为 ( B )。
    注意选择语句或者循环语句后面的;(分号)

    int x = -3, y = 2;
    if(x>y);x = -x;
    if(x

    A.x=3,y=-2
    B.x=3,y=2
    C.x=-3,y=2
    x=-3,y=-2

  6. 若a、b、c1、c2、x、y均是整型变量,以下正确的switch语句是 ( D )
    A.
    ()后面有分号

    switch(a+b);
    {    case 1: y=a+b; break;case 0:y=a-b; break;}
    

    B.

    switch(a*a+b*b)
    {
    case 3:
    case 1: y=a+b; break;
    case 3: y=b-a, break;}
    

    C.

    switch a
    {    case c1: y=a-b; break;
    case c2: x=a*b; break;
    default: x=a+b; }
    

    D.

    switch(a-b)
    {    default: y=a*b; break;
    case 3: case 4: x=a+b; break;
    case 10: case 11: y=a-b; break; }
    
  7. 以下程序统计输入的一行字符中字母、数字、空格、其它字符的个数(行末以换行符结束,最后的换行符不统计在内)。例如,输入的一行字符为aB 3*则字母有2个,数字有1个,空格有1个,其它字符有1个。
    提示:1、填写的代码要确保程序可以正确编译、运行得出结果;2、空格之后的括号里注明了分数,该括号不属于代码部分。

    #include 
    int main(){int letters, digits, spaces, others;(2分);char ch;//(ch=getchar())!=’\n’ putchar(ch)!=’\n’while( (2分) ){if( (2分) )letters++;else if( (2分) )digits++;else if( (2分) )spaces++;elseothers++;}printf("字母、数字、空格、其它字符分别有:%d %d %d %d 个\n",letters,digits,spaces,others);
    }
    letters=0;digits=0;spaces=0;others=0
    (ch=getchar())!=’\n’
    (ch>'a'&&ch<'z')||(ch>'A'&&ch<'Z')
    ch>=0&&ch<=9
    ch==' '
    
  8. 列程序段将输出__*2*#*3*#_。
    注意case 1:后面没有break;所以要执行下面的代码包括default

    unsigned char x=255,y='\1';
    switch(!!x) {case 0: printf("*0*#");break;case 1:switch(y)	{case 0: printf("*1*#");break;case 1: printf("*2*#");break;}default: printf("*3*#");
    }
    

3、循环练习

  1. 在多层循环中, 一个break语句只向外跳一层。(T)

  2. 第一段用for语句实现的循环,一定等价于第二段用while语句实现的循环(两个循环中省略的代码相同)。(F)
    注意当省略的代码中有continue时,while循环中的i++会失效,而for循环中的i++仍然执行

    	for(i=0;i<100;i++)/**此处省略代码若干行**/int i=0;while(i<100){/**此处省略代码若干行**/i++;}
    
  3. 执行以下程序段,sum的值是55。(F)
    注意sum没有初始化,是一个随机数

    int i, sum;
    for (i = 1; i <= 10; i++){sum = sum + i;
    }
    
  4. 以下程序段的功能是计算20的阶乘。(F)
    product = 0

    int i;
    double product;
    product = 0;
    for (i = 1; i <= 20; i++){ product = product * i;
    }
    
  5. 若变量已正确定义,以下while循环结束时,i的值为11。(F)
    注意本函数中没有i++

    i = 1;
    while (i <= 10){printf("%d\n", i);
    }
    
  6. do - while语句的一般形式如下,第一次进入循环时,首先执行循环体语句,然后再检查循环控制条件,即计算表达式,若值为“真”,继续循环,直到表达式的值为“假”,循环结束,执行do - while的下一条语句。(T)

    do{循环体语句
    }while(表达式);
    
  7. 执行以下程序段,将出现死循环。
    注意两个循环中的i相互影响

    for(i = 11; i <= 20; i++){ for(i = 1; i <= 10; i++){printf( "%4d", i );}printf("\n"); 
    }
    
  8. 以下两个程序段等价,其功能是计算 s=1+2+…+10。(T)

    /* 程序段A*/
    s = 0;
    i = 1;
    while(i <= 10){s = s + i;i++;
    }
    /* 程序段B */
    s = 0;
    i = 1;
    while(1){if(i > 10){break;}s = s + i;i++;
    }
    
  9. 以下两个程序段等价,其功能是计算 s=1+3+5+7+9。(T)

    /* 程序段A*/
    s = 0;
    i = 0;
    while(i < 10){i++;if(i % 2 == 0){continue;}s = s + i;
    }
    /* 程序段B */
    s = 0;
    i = 0;
    while(i < 10){i++;if(i % 2 != 0){s = s + i;}
    }
    

4、数组练习

  1. 调用strcmp函数比较字符串大小时,通常较长的字符串会较大。 ( F )
    字符串比较规则是:将两个字符串自左至右逐个字符相比(按照ASCII码值大小比较,小写字母比大写字母大),直到出现不同字符或遇到’\0’为止

  2. 以下定义语句中不正确的是_D_。 (2分)
    注意:可以定义实型数组
    A.double x[5]={2.0, 4.0, 6.0, 8.0, 10.0};
    B.char c2[]={‘\x10’, ‘\xa’, ‘\x8’};
    C.char c1[]={‘1’, ‘2’, ‘3’, ‘4’, ‘5’};
    D.int y[5]={0,1,3,5,7,9};

  3. 有两个字符数组a,b,则以下正确的输入语句是。( B )
    A.gets(a,b);
    B.scanf(“%s%s”,a,b);
    C.scanf(“%s%s”,&a,&b);
    D.gets(“a”),gets(“b”);

  4. 删除字符串中的空格(使用1个数组)。
    以下程序段的功能是:将字符串str中的所有空格都删除。

    int i, j
    char str[81];i = j = 0;
    while (str[i] != '\0') {if(1分){str[j] = str[i];(1分)}i++;
    }
    (1分)
    str[i]!=' '
    j++
    str[j]='\0';
    

5、指针练习

  1. 执行语句int *p=1000;后,指针变量p指向地址为1000的变量。 ( F )

  2. 调用printf函数,%s的格式输出字符串时,字符数组名、字符指针和字符串常量都可以作为输出参数。 ( T )

  3. 下面程序的输出结果是( D )。
    注意:区分形参x,y和实参x,y

    #include
    void fun (int *x, int y){
    printf("%d%d", *x, y);// &2 1
    *x=3;  y=4; //x=3 y=1
    }
    int main(void){
    int x=1,y=2;  // x=1 y=3
    fun(&y, x);//  
    printf("%d%d", x, y);
    return 0;
    }
    

    A.1 2 3 4
    B.1 2 2 1
    C.2 1 3 1
    D.2 1 1 3

  4. 以下程序的运行结果是( D )。

    #include       
    void sub(int x, int y, int *z)
    {  *z = y-x; }
    int main()
    {    int a,b,c;sub(10, 5, &a);//-5sub(7, a, &b);// -12sub(a, b, &c);//-17printf(“%d,%d,%d\n”, a,b,c);return 0;
    }
    

    A.5,2,3
    B.-5,-12,-7
    C.-5,-12,-17
    D.5,-2,-7

  5. 以下程序运行后输入“3,abcde<回车>”,则输出结果是。cedba
    注意调用move函数的次数是3

    #include 
    #include 
    void move(char* str, int n) {char temp;int i;temp = str[n - 1]; //temp=str[4]=efor (i = n - 1; i > 0; i--) //i=4str[i] = str[i - 1];//str[4]=str[3]str[0] = temp; //     eabcd deabc cdeab
    }
    int main()
    {char s[50];int n, i, z;scanf("%d,%s", &n, s);  //n=3 s=abcdez = strlen(s); //z=5for (i = 1; i <= n; i++) //1 2 3move(s, z); //abcde 5printf("%s\n", s);return 0;
    }
    
  6. 写出下列程序的执行结果 (1分) 4 6
    注意在for循环中不满足循环条件时,i的大小

    #include 
    int main(void)
    {int a[10], b[10], *pa, *pb, i;pa = a;pb = b;for( i=0; i<3; i++, pa++, pb++){ *pa = i;//pa[0]=0 pa[1]=1 pa[2]=2*pb = 2*i;//pb[0]=0 pb[1]=2 pb[2]=4}pa = &a[0];//0 1 2pb = &b[0];//0 2 4for ( i=0; i<3; i++,pa++,pb++)//此时pa pb已经+了3次{*pa = *pa + i;//0 2 4*pb = *pb + i;//0 4 6}printf("%d %d\n", *--pa, *--pb);return 0;
    }
    
  7. 下面程序段的运行结果是 (2分) 。6 6 7
    ++*p == >*p=*p+1 所以 *p的值也会改变

      int i,j,k=5, *p;p= &k;i= ++(*p);//6   相当于*p=*p+1  p指向k的值已经改变j=(*p)++;//6printf("%d %d %d",i,j,k) ;
    

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...