C语言初阶考试

这是自己在哔哩哔哩上听鹏哥C语言视频的一个简单的考试

现在分享给大家

选择题

题目1:求下列程序的运行结果是 67

#include<stdio.h>

int cnt = 0;

int fib(int n)

{

    cnt++;

    if (n == 0)

    {

       return 1;

    }

    else if (n == 1)

    {

       return 2;

    }

    else

       return fib(n - 1) + fib(n - 2);

}

void main()

{

    fib(8);

    printf("%d", cnt);

}

解题思路:传进去一个数字8,只要n>=2,cnt就++一次,进入下面的return fib(n - 1) + fib(n - 2)会产生两种结果,分别是7和6,再继续递归时会7又会产生6和5,6产生5和4,一次下去,直到所有递归都结束

题目2:下列程序运行的结果是 :死循环

#include<stdio.h>

int main()

{

    int x = 1;

    do

    {

       printf("%d", x++);   //这里会先打印一,然后x产生++的效果

    } while (x--);

}

题目3:下列程序执行后i和j的值分别是 2 1

#include<stdio.h>

int main()

{

    int i = 1;

    int j;

    j = i++;

}

题目4:一下程序的k最终值是 90

#include<stdio.h>

int main()

{

    int i = 10;

    int j = 20;

    int k = 3;

    k *= i + j;  //*=的优先级低于+

    printf("%d", k);

}

题目5:下列程序的最终输出结果是 1

#include<stdio.h>

#include<stdlib.h>

int a = 1;

void test()

{

    int a = 2;  //局部变量优先,局部的a只能在test函数内使用

    a += 1;

}

int main()

{

    test();

    printf("%d", a);

    return 0;

}

题目6:下列描述中正确的是  c

A:表示m>n为ture或者m<n为ture的表达式为m>n&&m<n

B:switch语句结构中必须有default语句

C:如果至少有一个操作数为ture,则包含“||”运算符的表达式ture

D:if语句结果中必须有else语句

题目7:C语言规定,在一个源程序中,main函数的位置 c

A:必须在最开始

B:必须在系统调用的库函数的后面

C:可以任意

D:必须在最后

题目8:以下叙述不正确的是   d

A:一个源程序可由一个或多个函数组成

B:一个源程序必须包含一个main函数

C:c程序的基本组成单位是函数

D:在c程序中,注释说明只能位于一条语句的后面

题目9:以下叙述正确的是  c

A:在c程序中,main函数必须位于程序的最前面

B:c程序的每行中只能写一条语句

C:C语言本身没有输入输出语句

D:在对一个c程序进行编译的过程中,可发现注释中的拼写错误

C语言只规定了语法规则,库函数是利用C语言语法规则写出来的

题目10:执行一下程序,c的值是  -1

#include<stdio.h>

int main()

{

    int a = 0;

    int c = 0;

    do

    {

       --c;

       a = a - 1;

    } while (a > 0);

}

题目11:假定x和y为double类型,则执行x=2;y=x+3/2后y的值为 3.000000

3/2是两个整数相处,得到的结果是1,y为double类型

题目12:以下for循环执行的次数是  4次

#include<stdio.h>

int main()

{

    int x = 0;

    int y = 0;

    for (x = 0, y = 0; (y = 123) && (x < 4); x++)//循环4次后,x=4

    {

       ;

    }

}

题目13:若有定义语句,int year=100,*p=&year;以下语句不能使变量year中的值增至1010的语句是

A:*p+=1;           B:(*p)++;

C:++(*p);           D:*p++ //++的优先级高于*,++只作用于p

题目14:选择表达式11|10的结果是(本题数值均为十进制) 11

11      00000000 00000000 00000000 00001010

10      00000000 00000000 00000000 00001000

11|10   00000000 00000000 00000000 00001010

题目15:char a;int b;float c;double d;

则表达式a*b+d-c值的类型为: double

A*b会把字符a变为整型,加上d,转化为double类型,-c还是double类型

编程题

题目1:求最小公倍数,正整数a和正整数b的最小公倍数是指能被a和b整除的最小的正数值,设计一个算法,求a和b的最小公倍数

输入描述:输入两个整数a和b

输出描述:输出a和b 的最小公倍数

第一种方法:

#include<stdio.h>

int main()

{

    int a = 0, b = 0, i = 0;

    printf("请输入两个整数\n");

    scanf_s("%d %d", &a, &b);

    int min = a > b ? a : b;//表示最小公倍数

    while (1)

    {

       if (min % a == 0 && min % b == 0)

       {

           printf("%d", min);

           break;

       }

       min++;

    }

   

}

第二种方法:

#include<stdio.h>

int main()

{

    int a = 0, b = 0;

    scanf_s("%d %d", &a, &b);

    int i = 1;

    for (i = 1;; i++)

    {

       if (a * i % b == 0)

       {

           printf("%d", a * i);

           break;

       }

    }

}

第三种方法:碾转相除法

自己的方法:

#include<stdio.h>

int main()

{

    int a = 0;

    int b = 0;

    int i = 0;

    printf("请输入两个大于0的整数\n");

    scanf_s("%d %d", &a, &b);

    int min = a > b ? a : b;

    for (i = min; i <= a * b; i++)

    {

       if (i % a == 0&& i % b==0)

       {

           printf("%d", i);

           break;

       }

    }

}

题目2:

输入描述:

将一句话的单词倒置,标点不倒置。比如 I like Beijing.经过函数后变为 bejing .like i

输出描述:

每个测试输入包含1个测试用例,输入长度不超过100个单词

上一篇:句柄表篇——总结与提升


下一篇:linux时区不对造成数据库时间混乱