C语言编程题目汇总
- 格式:docx
- 大小:47.27 KB
- 文档页数:20
c语言编程面试题目及答案C语言是一种广泛应用于计算机编程领域的编程语言,掌握好C语言编程知识对于求职和面试来说至关重要。
本文将提供一些常见的C语言编程面试题目及其相应的答案,以帮助读者更好地准备面试。
1. 请解释一下C语言的优点和缺点。
答:C语言的优点包括高效性、可移植性、功能丰富、灵活性强、易于学习和使用等。
同时,由于它是一种较底层的语言,可以更好地控制硬件和内存,适用于开发系统软件和嵌入式系统。
然而,C语言也存在一些缺点,比如相对较低的抽象层级、易于出错、不支持面向对象等。
此外,由于C语言没有内置的异常处理机制,错误处理需要手动处理。
2. 请解释什么是指针,并描述它的作用。
答:指针是C语言中一种特殊的数据类型,用于存储变量的内存地址。
通过指针,可以直接访问和修改指向内存位置的值,这对于实现动态内存分配、传递大量数据和操作复杂数据结构非常有用。
3. 请解释C语言中的数组和指针之间的关系。
答:数组和指针在C语言中有着密切的关系。
实际上,数组名可以被看作是一个指向数组第一个元素的指针。
通过指针算术运算,可以访问数组中的每个元素。
此外,数组参数在函数调用时会被自动转换为指针。
4. 请解释什么是函数指针,并说明它的用途。
答:函数指针是指向函数的指针变量。
通过函数指针,可以动态地选择调用不同的函数,实现代码的灵活性和重用性。
函数指针常用于回调函数、实现多态等场景。
5. 请解释C语言中的动态内存分配,并说明如何使用相关函数。
答:动态内存分配是指在程序运行时根据需要动态申请和释放内存。
C语言提供了动态内存分配相关的函数malloc、calloc和realloc,它们分别用于申请内存、申请带初始化的内存和重新分配内存。
使用这些函数时需要注意及时释放已申请的内存,以免造成内存泄漏。
6. 请解释C语言中的结构体,并举例说明其用法。
答:结构体是一种自定义的复合数据类型,可以包含多个不同类型的成员变量。
通过结构体,可以将相关数据组织在一起,方便进行管理和操作。
C语⾔编程菜鸟练习100题(51-60)【练习51】矩阵转置0. 题⽬:矩阵的转置1. 分析:练习使⽤ for 循环嵌套,多维数组的表达。
2. 程序:#include <stdio.h>int main(){int inMatrix[10][10], outMatrix[10][10], rows, cols, i, j;printf("输⼊矩阵的⾏与列(逗号分隔): ");scanf("%d,%d", &rows, &cols);// 存储矩阵的元素printf("\n输⼊矩阵元素:\n");for(i=0; i<rows; ++i)for(j=0; j<cols; ++j){printf("输⼊元素 inMatrix%d%d: ",i+1, j+1);scanf("%d", &inMatrix[i][j]);}// 显⽰矩阵 inMatrix[][] */printf("\n输⼊矩阵是: \n");for(i=0; i<rows; ++i){for(j=0; j<cols; ++j)printf("%d\t", inMatrix[i][j]);printf("\n");}// 转换for(i=0; i<rows; ++i)for(j=0; j<cols; ++j)outMatrix[j][i] = inMatrix[i][j];// 显⽰转换后的矩阵 outMatrixprintf("\n转换后矩阵是:\n");for(i=0; i<cols; ++i){for(j=0; j<rows; ++j)printf("%d ",outMatrix[i][j]);printf("\n");}return 0;}3. 输⼊输出:输⼊矩阵的⾏与列(逗号分隔):2,3输⼊矩阵元素:输⼊元素 inMatrix11: 2输⼊元素 inMatrix12: 3输⼊元素 inMatrix13: 4输⼊元素 inMatrix21: 5输⼊元素 inMatrix22: 6输⼊元素 inMatrix23: 4输⼊矩阵是:2 3 45 6 7转换后矩阵是:2 53 64 7【练习52】使⽤指针访问数组元素0. 题⽬:使⽤指针访问数组元素1. 分析:指针提供⼀种以符号形式使⽤地址的⽅法。
最新C语言编程一百二十道习题【程序1】题目:有1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for (k=1;k<5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k 三位互不相同*/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10 万元时,奖金可提10%;利润高于10 万元,低于20 万元时,低于10 万元的部分按10%提成,高于10 万元的部分,可可提成7.5%;20 万到40 万之间时,高于20 万元的部分,可提成5%;40 万到60 万之间时高于40 万元的部分,可提成3%;60 万到100 万之间时,高于60 万元的部分,可提成1.5%,高于100 万元时,超过100 万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}==============================================================【程序3】题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问该数是多少?1.程序分析:在10 万以内判断,先将该数加上100 后再开方,再将该数加上268 后再开方,如果开方后的结果满足如下条件,即是结果。
C语言程序实例100个(一)【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++) /*以下为三重循环*/for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k)/*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);}}==================================================== ==========【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}==================================================== ==========【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
C笔试题目及答案c语言笔试题目及答案c笔试题目及答案:c语言笔试题目及答案c笔试题目汇总篇11.谋下面函数的返回值(谷歌)intfunc(x){intcountx=0;while(x){countx++;x=x&(x-1);}returncountx;}假定x=。
答案:8思路:将x转变为2十进制,看看所含的1的个数。
2.什么是“引用”?申明和使用“引用”要注意哪些问题?请问:提及就是某个目标变量的“别称”(alias),对应用领域的操作方式与对变量轻易操作方式效果完全相同。
言明一个提及的时候,切勿必须对其展开初始化。
提及声明完后,相等于目标局部变量存有两个名称,即为该目标原名称和提及名,无法再把该提及名做为其他局部变量的别称。
声明一个提及,不是崭新定义了一个变量,它只则表示该提及名就是目标局部变量的一个别称,它本身不是一种数据类型,因此提及本身不占到存储单元,系统也不给提及分配存储单元。
无法创建数组的提及。
3.将“引用”作为函数参数有哪些特点?(1)传达提及给函数与传达指针的效果就是一样的。
这时,被调函数的形参就沦为原来主调函数中的实参变量或对象的一个别称去采用,所以在被调函数中对形参变量的操作方式就是对其适当的目标对象(在主调函数中)的操作方式。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。
因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)采用指针做为函数的参数虽然也能够达至与采用提及的效果,但是,在被调函数中同样必须给形参分配存储单元,且须要重复使用"*指针局部变量"的形式展开运算,这很难产生错误且程序的写作性极差;另一方面,在主调函数的调用点处,必须用变量的地址做为实参。
C语言基础编程题(总16页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除5-1 求幂之和 (15分)本题要求编写程序,计算sum=2^1 + 2^2 + 2^3 + \cdots + 2^n sum=21+22 +23+⋯+2n。
可以调用pow函数求幂。
输入格式:输入在一行中给出正整数n n(\le≤10)。
输出格式:按照格式“result = 计算结果”输出。
输入样例:输出样例:#include<>#include<>int main(){int i,n,sum=0;scanf("%d",&n);for(i=1;i<=n;i++){sum=sum+pow(2,i);}printf("result = %d\n",sum);return 0;}5-2 近似求PI (15分)本题要求编写程序,根据下式求\piπ的近似值,直到最后一项小于给定精度eps。
\frac{\pi}{2}=1+\frac{1!}{3}+\frac{2!}{3\times 5} + \frac{3!}{3\times 5\times 7}+ \cdots +\frac{i!}{3\times 5\times \cdots \times (2\times i+1)}+ \cdots2π=1+31! +3×52!+3×5×73!+⋯+3×5×⋯×(2×i+1)i!+⋯输入格式:输入在一行中给出精度eps,可以使用以下语句来读输入:输出格式:在一行内,按照以下格式输出\piπ的近似值(保留小数点后5位):输入样例:输出样例:#include<>#include<>int main(){double a=1,b=3,i=1,j=3;double eps,m=1,sum=0;scanf("%le", &eps);while(m>eps){m=a/b;sum=sum+m;i=i+1;j=j+2;a=a*i;b=b*j;}printf("PI = %.5lf\n",2+2*sum);return 0;}5-3 判断素数 (15分)输入一个正整数m,如果它是素数,输出"YES",否则,输出"NO"(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。
c语言初学者编程题目
C语言是一门广泛应用于计算机科学领域的编程语言,它的语法简单
易懂,适合初学者学习。
在学习C语言的过程中,编程练习是非常重
要的一部分。
以下是几个适合初学者的C语言编程题目。
1. 计算两个数的和
编写一个程序,要求用户输入两个数,然后计算它们的和并输出结果。
2. 判断一个数是奇数还是偶数
编写一个程序,要求用户输入一个整数,然后判断它是奇数还是偶数,并输出结果。
3. 计算一个数的阶乘
编写一个程序,要求用户输入一个正整数,然后计算它的阶乘并输出
结果。
例如,输入5,输出120。
4. 判断一个数是否为质数
编写一个程序,要求用户输入一个正整数,然后判断它是否为质数,并输出结果。
质数是指只能被1和它本身整除的数,例如2、3、5、7等。
5. 猜数字游戏
编写一个程序,随机生成一个1到100之间的整数,然后要求用户猜这个数是多少。
如果用户猜的数比随机数大,程序会提示用户猜的数太大;如果用户猜的数比随机数小,程序会提示用户猜的数太小。
直到用户猜中这个数为止,程序才会结束。
以上是几个适合初学者的C语言编程题目。
通过编写这些程序,可以帮助初学者熟悉C语言的语法和基本操作,提高编程能力。
同时,这些题目也可以帮助初学者培养逻辑思维和解决问题的能力。
C语言程序实例100个(一)【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf("\n");for(i=1;i<5;i++)/*以下为三重循环*/for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k)/*确保i、j、k三位互不相同*/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000)bonus=i*0.1;else if(i<=200000)bonus=bonus1+(i-100000)*0.075;else if(i<=400000)bonus=bonus2+(i-200000)*0.05;else if(i<=600000)bonus=bonus4+(i-400000)*0.03;else if(i<=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf("bonus=%d",bonus);}==============================================================【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
顺序结构1.编写一个程序,从键盘输入一个三位整数,将它们逆序输出。
例如输入127,输出721。
2.#include<stdio.h>3.main()4.{printf("请输入一个三位数/n");5.Scanf("%d",&a);6.B=a%10;7.C=a/10%10;8.D=a/100;9.F=d*100+c*10+b;10.Printf("%d",f);11.}12.13.选择结构1.编程判断输入的正整数是否既是5又是7的整倍数。
若是,输出yes,否则输出no。
2.#include<stdio.h>3.main()4.{5.Int i;6.Scanf("%d",%d);7.If(i%7==0&&i%5==0)8.Printf("yes");9.Else printf("no");10.}11.编写一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。
设:90分以上为A,12.80~89分为B,70~79分为C,60~69分为D,60分以下为E。
13.#include<stdio.h>14.Main()15.{16.Scandf("'%d",&a);17.If(a>90)18.Printf("A");19.Else if(a<=89&&a<=80)20.Printf("B");21.Else if(a>70&&a<=79)22.Peintf("C");23.Else if(a>60&&a<69)24.Printf("D");25.Else26.Printf("E");27.}28.已知银行整存整取存款不同期限的月息利率分别为:0.315% 期限一年0.330% 期限二年月息利率=0.345% 期限三年0.375% 期限五年0.420% 期限八年要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
1. 通过键盘输入两个整数,对他们实施加减乘除运算,然后按照下面格式显示输出 #include int main() { int a,b; printf("输入两个整数a,b:"); scanf("%d%d",&a,&b); printf("a+b=%d\n",a+b); printf("a-b=%d\n",a-b); printf("a*b=%d\n",a*b); printf("a/b=%d\n",a/b); return 0; } 2. 用switch语句和if语句两种方法编写程序,完成下面公式的计算,输出计算结果。 t2 0<=t<1 y= t2 -1 1<=t<2 t2 -2t+1 2<=t<3 (1)if语句: #include int main() { float t,y; printf("请输入t的值:"); scanf("%f",&t); if(t>=0&&t<1) { y=t*t; } if(t>=1&&t<2) { y=t*t-1; } if(t>=2&&t<3) { y=t*t-2*t+1; } printf("y=%f\n",y); return 0; } (2)switch语句 #include int main() { float t,y; int a; printf("请输入t的值:"); scanf("%f",&t); a=(int)t; switch(a) { case 0: y=t*t; break; case 1: y=t*t-1; break; case 2: y=t*t-2*t+1; break; default: printf("输入不正确"); return 0; } printf("y=%f\n",y); } 3.假设教务分析百分制学生成绩时认为90分以上为优,80~89分为良,70~79分为中,60~69分为及格,60分以下为不及格。输入某学生百分制成绩,将其转换为上述等级评分。要求用if语句和switch语句两种方法编程。 (1) if语句 #include int main() { int x; printf("输入学生成绩"); scanf("%d",&x); if(x>90) printf("优\n"); else if(x>80) printf("良\n"); else if(x>70) printf("中\n"); else if(x>60) printf("及格\n"); else printf("不及格\n"); return 0; } (2) switch语句 #include int main() { int x,a; printf("输入学生成绩"); scanf("%d",&x); a=x/10; switch(a) { case 10: case 9: printf("优\n"); break; case 8: printf("良\n"); break; case 7: printf("中\n"); break; case 6: printf("及格\n"); break; default: printf("不及格\n"); return 0; } } 4. 输入一个000~888之间的正整数,首先提取三位数字,再每位数字加1,合成一个新的三位数字,再强制类型转换为浮点数后输出。 #include int main() { int a,b,c,x,y; float z; printf("输入一个正整数(0~888):"); scanf("%d",&x); a=x/100+1; printf("a=%d\n",a); b=(x/10)%10+1; printf("b=%d\n",b); c=x%10+1; printf("c=%d\n",c); y=a*100+b*10+c; z=float(y); printf("z=%f\n",z); } 5. 输入一个整数,求其立方的绝对值的平方根。输出之。 #include #include int main() { int x; float y; printf("输入一个数:"); scanf("%d",&x); y=sqrt(abs(x*x*x)); printf("y=%f",y); }
/*int 型 int abs(int x);
long 型 long labs(int x);
浮点数 float double double fabs(double x)*/ 6. 菜单放在屏幕中央位置。 必须先运行1输入数据,才能运行2四则运算。 要求依据用户输入的‘+’、‘-’、‘*’、‘、’四个运算符进行相应运算。
#include void caidan() { printf(" 迷你计算器\n"); printf(" 1.数据输入\n"); printf(" 2.四则运算\n"); printf(" 0.退出\n"); } int main() { int a,b,c,d; do { caidan(); scanf("%d",&c);
if(c==2) { printf("请输入要进行的运算(1+,2-,3*,4/):\n"); scanf("%d",&d); switch(d) { case 1: printf("a+b=%d",a+b); break; case 2: printf("a-b=%d",a-b); break; case 3: printf("a*b=%d",a*b); break; case 4: printf("a/b=%d",a/b); break; default: printf("输入错误\n"); } } if (c==1) { printf("请输入两个数字a,b\n"); scanf("%d%d",&a,&b); } } while (c!=0); return 0; } 7.针对题目3,要求针对30人的某班转换所有同学的成绩。键盘输入每个同学的成绩,逐个转换,并输出 #include int main() { int i=0; do { int x,a;
printf("输入学生成绩"); scanf("%d",&x); a=x/10; switch(a) { case 10: case 9: printf("优\n"); break; case 8: printf("良\n"); break; case 7: printf("中\n"); break; case 6: printf("及格\n"); break; default: printf("不及格\n"); } i++; } while (i<=30); } 8. 如果全校有50个班,每个班级的人数有多有少,各班级人数可从键盘上输入。修改上面的程序,针对全校所有的班完成同样的任务。 #include int main() { int i=0,d,no,n; for(d=0;d<=50;d++) {printf("输入班级编号\n"); scanf("%d",&no); printf("第%d班的学生成绩:\n",no); printf("输入学生人数:\n"); scanf("%d",&n); do { int x,a; printf("输入学生成绩"); scanf("%d",&x); a=x/10; switch(a) { case 10: case 9: printf("优\n"); break; case 8: printf("良\n"); break; case 7: printf("中\n"); break; case 6: printf("及格\n"); break; default: printf("不及格\n"); } i++; } while (i} } 9. 请编写程序输出100到999之内的偶数,每行打印10个数。 #include int main() { int i; int n=0; for(i=100;i<=999;i++){ if(i%2==0){ printf("%d ",i); n++;} if(n==10){n=0;printf("\n");}} return 0; } 10.从键盘输入一个年份,判断该年是否为闰年,并输出 #include int main() {