C语言阶段性测试题

这篇具有很好参考价值的文章主要介绍了C语言阶段性测试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是深鱼~

【前言】:本部分是C语言初阶学完阶段性测试题,最后一道编程题有一定的难度,需要多去揣摩,代码敲多了,自然就感觉不难了,加油,铁汁们!!!

一、选择题

1.下面程序执行后,输出的结果为()

#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);
}

【解答】:67

函数递归的问题:进入一次fib函数,cnt++,要算cnt的值也就是算进入了多少次fib函数,那就列树状图:直到列到1和0就不会再进入fib函数为止,然后列出来的每一个数都会进入函数使cnt++,算一共列有多少数,对于的也就是cnt的值:1+2+4+8+16+22+12+2=67

C语言阶段性测试题,c语言,算法,开发语言


2.以下程序k的最终值是()

    int i = 10;
	int j = 20;
	int k = 3;
	k *= i + j;

【解答】:90

本题考察的是操作符优先级的问题

赋值操作符(*=,/=,+=,-=)的优先级很低,所以肯定是i+j先算,然后再*k,也就是k*=30,也就是90


3.判断正误:C语言本身没有输入输出语句

【解答】:正确

C语言是给定了语法,输入输出是库函数提供的

C语言约定了一些函数,规定了函数的名字,功能,参数,返回类型

这些规定的函数是由编译器的厂商实现的,msvc,gcc,clang的厂商在实现编译器的时候提供实现的,这些函数是放在标准库中,称为库函数


 4.若有定义语句int year=1009,*p=&year,以下不能使变量year中的值增至1010的语句是()

A.*p+=1                         B.(*p)++                                C.++(*p)                  D.*p++

【解答】:D

其实上面的代码就相当于int year=1009;int *p=&year

A.*(解引用操作符)的优先级高于+=(赋值操作符),p解引用指向year,然后year++

B.有括号先算*p,然后year++

C.也有括号,只要对(*p)也就是year++就可以

D.*p++,++优先级高于*,++先执行,p++后置++,值先为p,然后p++,这里就是地址++,而不是地址指向的元素++


5.char a;int b;float c;double d;

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

【解答】:double类型

首先a*b(char*int),char类型整形提升变成int类型,int *int类型结果是int类型

然后int+double类型,这个时候int类型就算术转化为double类型,double+double类型结果是double类型

最后double-float类型,这个时候float类型就算术转化为double类型,double-double类型结果是double类型

【注意】:这个过程发生了整形提升和算术转化,是先变类型再进行运算

二、编程题

1.求最小公倍数

【题目】:C语言阶段性测试题,c语言,算法,开发语言

 【题解1】:常规做法

最小公倍数一定是大于等于输入的两个数的,所以可以从两个数的较大数开始加,看加到哪个数可以同时将两个数整除

#include <stdio.h>
int main() 
{
   int a=0;
   int b=0;
   //输入
   scanf("%d %d",&a,&b);
   //求较大值
   int m=a>b?a:b;
   //从较大者开始求最小公倍数
   while(1)
   {
    if(m%a==0&&m%b==0)
    break;
    m++;
   }
   //输出
   printf("%d\n",m);
    return 0;
}

【题解2】:最小公倍数=输入的两个数的积 / 最大公约数(辗转相除法)

#include <stdio.h>
int main() 
{
   int a=0;
   int b=0;
   int c=0;
   //输入
   scanf("%d %d",&a,&b);
   int n=a*b;
   //求最大公约数
   while(c=a%b)
   {
    a=b;
    b=c;
   }
   //输出
   printf("%d\n",n/b);
    return 0;
}

【题解3】:效率最高

假设m是a和b的最小公倍数,那么m既能被a整除,又能被b整除,m/a=i,m/b=j,那么我们就看a*i能否将b整除,eg:求3和5的最小公倍数,首先看3*1能否整除5,再看3*2是否能整除5,以此类推,直到找到3*i可以整除5,那么这时3*i就是最小公倍数

#include <stdio.h>
int main() 
{
   int a=0;
   int b=0;
   //输入
   scanf("%d %d",&a,&b);
   int i=1;
   while(a*i%b)
   {
    i++;
   }
   //输出
   printf("%d\n",a*i);
    return 0;
}

【注意】:我们最好把int类型都写成long long类型,因为a和b最大可以到达100000,他们相乘是很大的,long long类型的输入输出都是%lld

2.字符串的倒置 

【题目】:

C语言阶段性测试题,c语言,算法,开发语言

【题解】:

思路:逆序整个字符串,再逆序每个单词(或者先逆序每个单词,再逆序整个字符串)

#include <stdio.h>
#include<string.h>
void reverse(char* left, char* right) 
{
    while (left < right) 
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main() 
{
    char arr[101] = {0};
    gets(arr);
    int len=strlen(arr);
    //1.逆序整个字符串
    reverse(arr,arr+len-1);
    //2.逆序每个单词
    char*cur=arr;
    while(*cur!='\0')
    {
        char*start=cur;
        while(*cur!=' '&&*cur!='\0')
        {
            cur++;
        }
        char*end=cur-1;
        reverse(start,end);
        if(*cur==' ')
        cur++;
    }
    printf("%s\n",arr);
    return 0;
}

【注意事项】:

(1)输入字符串:不能正常用scanf函数输入,因为它一遇到空格就停止读取了,gets(arr)

要用也得这样写scanf("%[^\n]s",arr);意思就是scanf函数直到读到\n才停止

也可以用getchar:

int ch=0;

int i=0;

while(   (ch=getchar(  ) )!='\n')

{
    arr[i++]=ch;
}

(2)逆序整个字符串:思路是将左右字符一个一个交换,直到 left>right停止交换

还有就是reverse自定义函数传参的时候最后字符的地址怎么传:首字符地址+字符串的长度-1

 (3)逆序输出:首先定义一个cur指针指向字符串的最前面,然后开始遍历,以一个单词为一个循环,当指针指向的不是空格或者\0时cur继续向下遍历,直到遇到了,就倒置这个单词,我们就用start和end指针分别来指向一个单词的首尾,然后单词也可以当字符串倒置

当一个单词结束,就需要进入下一个单词,这个时候就要将cur++,但是如果这是最后一个单词,就不需要cur++,因为再++就会造成数组越界

这次内容就到此啦,有什么问题欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 !

C语言阶段性测试题,c语言,算法,开发语言文章来源地址https://www.toymoban.com/news/detail-629211.html

到了这里,关于C语言阶段性测试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单晶高温合金收获阶段性应用成果,科研人员已开展定向凝固实验

    根据央视报道,中国科学院金属研究所的科研人员对从太空带回的铝硅合金样品进行了初步的解剖分析工作,并计划用不同的实验方法和合金材料继续开展相关实验工作,以进一步探索重力在单晶高温合金凝固过程中的具体作用及相关机理。 值得关注的是,单晶高温合金作为

    2024年02月12日
    浏览(37)
  • 【郭东白架构课 模块二:创造价值】30|节点六:如何保障高质量的阶段性交付?

    你好,我是郭东白。从这节课开始,我们就进入到架构活动的第六个环节——阶段性价值交付。 对于企业来说,这是成本花费最多的节点了,因为大量的研发人力资源开始投入到架构活动中去。 有的架构师认为,到了这个节点,自己似乎已经完成了主要任务。接下来,就主

    2024年02月09日
    浏览(36)
  • 在 Web3 里如何寻找靠谱的创新路径——Solv V3 阶段性复盘(上)

    作者:Solv 核心团队 Solv V3 是 3 月 21 日发布的,到这周一整整三个星期。三周时间产生的实际交易额超过 6,000 万美元,预计在本月内能够破亿。而且从我们手上的 pipeline 来看,这个增长的势头还将持续下去。在几个月内,Solv V3 将产生数亿美元的实际交易量。 在 crypto 市场上

    2024年02月07日
    浏览(51)
  • Gbase8a第一阶段测试-试题整理

    1、GBase 8a集群数据库安装成功后,数据库的初始管理员为root,密码为空。( 正确) 正确 2、有关gcluster_services all stop命令,描述正确的是(B )? A. 关闭的集群进程会自动被gcmonitor拉起 B. 仅关闭当前节点的集群进程 C. 只有操作系统管理员root可以使用 D. 关闭整个集群服务 3、监

    2024年02月03日
    浏览(35)
  • c语言经典测试题2

    1.题1 我们来思考一下它的结果是什么? 我们来分析一下:\\\\是转义为字符\\\'\\\',123表示的是一个八进制,算一个字符,t算一个字符,加上\\0,应该有13个,但是strlen只计算\\0前的字符个数。所以结果应该是12.我们来看看:  2.题2 大家来思考一下结果是什么呢? 我们来分析一下

    2024年02月22日
    浏览(36)
  • C语言测试题(附有详细解析)

    1.运行结果是啥? fib函数每递归一次cnt就+1 fib就是把大于等于1的数拆成两个数之和,也就说只要fib的变量不是0或1,他就要拆一次,挨着数出来就行了 结果是67 2.这个代码的运行结果是? x后置++,第一次先打印1 然后x变成了2进入判断语句进行判断,判断的时候用的是2 后置

    2024年01月22日
    浏览(41)
  • 【C语言】指针数组测试题(1万字长文)

    江南可采莲,莲叶何田田。鱼戏莲叶间。鱼戏莲叶东,鱼戏莲叶西,鱼戏莲叶南,鱼戏莲叶北。 — 两汉·汉乐府《江南》 这篇博客我们将会讲解一些习题,习题是有关于数组和指针的,数组方面的习题也能帮助我们更好的理解sizeof和strlen,指针的习题也全方位锻炼我们对指

    2024年02月16日
    浏览(47)
  • 密码算法测试题解析之单选题(一)

    哈哈,上场先来点废话,本人是软件工程专业,对密码从未接触过,也是一窍不通,因为工作的原因接触到了密码学的知识,也在大佬的带领下较为系统的浅学了一点,一直想从头开始来着,苦于没有时间,今天就先从密码算法测试题和解析开始吧,稍后会把系统的内容上传

    2024年02月07日
    浏览(40)
  • 【华为OD机试真题】1186 - 微服务的集成测试(JAVA C++ Python JS) | 机试题+算法思路+考点+代码分析

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包