1、下面的一段程序的输出结果为( ) (鲁科安全)
#include <stdio.h>
int main()
{
if(-1)
printf("1");
else
printf("2");
if(0)
printf("3");
else
printf("4");
return 0;
}
A. 23 B. 24 C. 13 D. 14
答案:D
分析:
//第一个if-else
if(-1) //-1为真,所以执行下面的语句,结果为1
printf("1");
else //已经执行了if,后面不执行了
printf("2");
//第二个if-else
if(0) //0为假,不执行下面的语句
printf("3");
else //执行else,结果为4
printf("4");
//所以最后打印的结果为D.14
2、( )设int s = 100,要输出字符串"s的值是100"应使用下列哪个语句?(山东精电电气)
A. printf("s 的值是%d", s); B. printf("s 的值是%s", s)
C. printf("s 的值是%x", s): D. printf("s 的值是%i", s)
答案:A
分析:首先输出字符串"s的值是100"使用printf标准输出函数,int s = 100,int是一个整型数据,其格式控制符是%d、%i,所以排除B、C;C语言中的语句以;结束,所以排除D,正确答案为A。
3、if(n==8)和if(8== n)两种判断方式,哪一种更好,为什么?(泰华智)
if(8==n)更好,因为当不小心将“==”写成"="的时候,编译时if(8=n)会自动报错,而if(n=8)不会报错,这将会影响计算结果,增加调试的难度。
4、if-elseif-else结构和switch-case结构,哪个效率高,为什么?(泰华智慧)
switch-case效率更高,因为switch-case结构通过使用跳转表的数据结构,能够直接跳转到相应的代码块,而不需要像if-else结构那样逐个比较条件,从而大大提高了执行效率。
5、结构化程序设计所规定的三种基本控制结构是:( ) (易购软件)
A. 输入、处理、输出 B. 形、网形、环形
C. 顺序、选择、循环 D. 主程序、子程序、函数
答案:C
6、C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符:_________ (智洋)
A. 必须为字母 B. 必须为下划线
C. 必须为字母或下划线 D. 可以是字母,数字和下划线中任一字符
答案:C
分析:标识符命名规范:
标识符必须以字母或下划线开始,后面可以跟任意数量的字母、数字或下划线。
标识符区分大小写。
不能使用C语言的关键字作为标识符。
7、若执行下面的程序时,从键盘上输入 5,则输出是 ( ) (智洋创新)
int main(int argc, char **argv)
{
int x;
scanf("%d", &x);
if(x++ > 5)
printf("%d\n", x);
else
printf("%d\n", x--);
return 0;
}
A. 7 B. 4 C. 6 D. 5
答案:C
分析:
int x; //定义一个整型变量x
scanf("%d", &x); //从输入设备输入一个x值,输入x=5
if(x++ > 5) //x++先计算再自加1,即5>5为假,x=6,执行else下的语句
printf("%d\n", x);
else
printf("%d\n", x--); //x--先计算再自减1,即输出x=6之后再自减1,所以输出结果为6
8、以下语句中,能够判断uiNum(unsigned int)可以被16整除的有()(H3C)
A. if (((uiNum / 16) * 16) == uiNum)
B. if ((uiNum % 16) == 0)
C. if ((uiNum & 0x0F) == 0)
D. if (((uiNum >> 4) << 4) == uiNum)
答案:ABCD
分析:uiNum(unsigned int) //uiNum为无符号整型
A、((uiNum / 16) * 16) == uiNum,uiNum除以16如果没有余数,再乘以16就能得到uiNum本身,如果有余数,再乘以16就不能得到uiNum。所以A能够判断uiNum(unsigned int)可以被16整除。
B、(uiNum % 16) == 0,uiNum除以16如果余数等于0,说明能除尽,所以B能够判断uiNum(unsigned int)可以被16整除。
C、(uiNum & 0x0F) == 0,0x0F是一个十六进制数,转换成二进制是0000 1111,位&运算,有0位0,全1为1,所以uiNum & 0x0F的前四位一定为0,所以剩下的结果不大于16,且不等于0,所以uiNum & 0x0F的值不等于0,uiNum(unsigned int)不可以被16整除。但能够判断uiNum(unsigned int)是否可以被16整除。
128 64 32 16 8 4 2 1 0x0F 0 0 0 0 1 1 1 1 uiNum uiNum & 0x0F 0 0 0 0 D、((uiNum >> 4) << 4) == uiNum,uiNum为无符号整型,uiNum(二进制)使用了右移操作符(>>)和左移操作符(<<)来判断一个数是否为16的倍数。具体来说,如果
uiNum
是16的倍数,那么(uiNum >> 4)
的结果应该为0,因为右移4位后,原来的每一位都会左移12位,对于任何16的倍数来说,这会导致最低的4位都变为0。然后,通过左移操作符将这4个0左移4位,再与原数进行位与操作,如果结果为0,则说明原数是16的倍数。这是因为任何数与0进行位与操作都会得到0,除非该数的某一位是1,但这在原数是16的倍数的情况下是不会发生的。
9、编写一个程序。实现输入一个小写字母,程序输出它对应的大写字母。(提示:小写字母的ASCII码值比大写宇母大32) (中科四平)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char ch;//定义一个字符型变量ch
printf("input ch:");//提示输入字符ch
scanf(" %c",&ch);//从输入设备输入一个字符ch
if(ch >= 'a' && ch <= 'z'){ //if条件语句()内是条件
ch -= 32;
}
printf("%c\n",ch);//输出ch的值
return 0;
}
结果如下:
10、已知学生成绩(100分为满分)与等级的对应关系为: (中科四平)
成绩(grade) | 等级 |
90<=grade<=1000 | A |
80<=grade<90 | B |
70<=grade<80 | C |
60<=grade<70 | D |
grade<60 | E |
请你编写一个程序,要求:输入学生成绩,输出学生成绩对应的等级。(提示:使用switch....case 语句)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//定义一个变量grade
int grade;
//提示输入成绩,并从键盘输入
printf("input grade:");
scanf("%d",&grade);
//先判断输入的成绩是否有效
if(grade >= 0 && grade <= 100){
//判断输入的分数属于哪个等级
switch(grade / 10){
case 10: case 9: printf("A\n"); break;
case 8: printf("B\n"); break;
case 7: printf("C\n"); break;
case 6: printf("D\n"); break;
default : printf("E\n"); break;
}
}else{
printf("输入成绩无效,请重新输入:\n");
}
return 0;
}
结果如下:
11、编写一个程序。a=3,b=5,对a和b的值进行交换。 (北京君正集成电路)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
//定义变量a,初始化为3;变量b,初始化为5,变量n
int a = 3, b = 5, n;
n = a;//将a的值赋值给n,n=3
a = b;//将b的值赋值给a,a=5
b = n;//将n的值赋值给b,b=3
printf("a=%d b=%d\n",a,b);//输出a,b的值
return 0;
}
结果如下:
12、编写一个程序。实现输入一个三位数,判断是否是水仙花数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int num,a,b,c;
printf("input num:");
scanf("%d",&num);
//判断输入的num是否为一个三位数
if(num > 99 && num < 1000){
a = num / 100; //a存储num的百位数
b = num / 10 % 10; //b存储num的十位数
c = num % 10; //c存储num的个位数
//判断a,b,c的三次方之和是否等于num,如果等于输出是水仙花数,如果不等于输出不是水仙花数
if( a*a*a + b*b*b + c*c*c == num){
printf("是水仙花数\n");
} else{
printf("不是水仙花数\n");
}
} else{
printf("请重新输入一个三位数:");
}
return 0;
}
结果如下:
13、编写一个程序。实现输入一个年份,判断是不是闰年。
#include <stdio.h>
int main()
{
//定义整型变量year
int year;
//提示输入年份,并输入
printf("input year:");
scanf("%d",&year);
//判断是否为闰年
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
printf("%d is leap year\n",year);
}
else{
printf("%d is common year\n",year);
}
return 0;
}
结果如下:
14、编写一个程序。请实现以下功能:(威海精讯畅通)
输入三个数,分别为年、月、日,输出此日是该年的第几天。
输入:
XXX XXX XXX
输出:
此日是该年的第XXX 天
示例:
输入 2020 2 20
程序输出 此日是该年的第51 天
#include <stdio.h>
int main()
{
int year,month,day,sum = 0;
printf("input year , month and day:");
scanf("%d%d%d",&year,&month,&day);
//判断输入日期是有有误
if(day > 0 && day < 31){
//判断月份,并计算总天数
switch(month){
case 1: sum = 0; break;
case 2: sum += 31; break;
case 3: sum += 59; break;
case 4: sum += 90; break;
case 5: sum += 120;break;
case 6: sum += 151;break;
case 7: sum += 181;break;
case 8: sum += 212;break;
case 9: sum += 243;break;
case 10:sum += 273;break;
case 11:sum += 304;break;
case 12:sum += 334;break;
default:printf("输入月份有误,请重新输入:\n");
}
sum += day;
//判断闰年,如果为闰年且月份过了二月就多加一天
if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && (month >= 2)){
sum += 1;
}
printf("%d-%02d-%02d sum=%d \n",year,month,day,sum);
} else{
printf("输入日期有误,请重新输入:\n");
}
return 0;
}
结果如下:
15、编写一个程序。输入三角形的 三个边长
判断能否构成三角形,如果能
输出能构成三角形
再输出是什么三角形
等边
等腰
直角(勾股定理)
普通
如果不能
输出不能构成三角形
#include <stdio.h>
int main()
{
int a,b,c;
printf("input 三角形的三边 a b c:");
scanf("%d%d%d",&a,&b,&c);
//判断是否能构成三角形
if ((a + b) > c && (b + c) > a && (c + a) > b){
//判断三边是否相等,等边三角形
if (a == b && a == c){
printf("This is an equilateral triangle\n");
}
//判断任意两边相等,等腰三角形
else if (a == b || b == c || c == a) {
//判断任意两边的平方和是否等于第三边的平方,等腰直角
if (c * c == a * a + b * b || a * a == b * b + c * c || b * b == a * a + c * c) {
printf("This is a isosceles right triangle\n");
}
//如果上一条件不成立,则为普通等腰三角形
else {
printf("This is an isosceles triangle\n");
}
}
//如果不是的等腰三角形,判断是否为普通直角三角形
else if (c * c == a * a + b * b || a * a == b * b + c * c || b * b == a * a + c * c){
printf("This is a right triangle\n");
}
//如果都不是,就是普通三角形
else {
printf("This is an ordinary triangle\n");
}
}
//不能构成三角形,重新输入
else{
printf("Fail to triangle.Please enter again:\n");
}
return 0;
}
结果如下:
16、编写一个程序。有 4 个变量 a,b,c,d,我们提前并不知道他们的值,请用你的方式将他们从大到小排序。算法任意。(山东丁一)
#include <stdio.h>
int main()
{
//定义5个变量
int a ,b ,c ,d , n;
//提示输入4个值,并从键盘输入
printf("input a b c d:");
scanf("%d%d%d%d",&a,&b,&c,&d);
//判断a,b的大小,如果a<b就执行交换值
if(a < b){
n = a;
a = b;
b = n;
}
//判断a,c的大小,如果a<c就执行交换值
if(a < c){
n = a;
a = c;
c = n;
}
//判断a,d的大小,如果a<d就执行交换值
if(a < d){
n = a;
a = d;
d = n;
}
//判断b,c的大小,如果b<c就执行交换值
if(b < c){
n = b;
b = c;
c = n;
}
//判断b,d的大小,如果b<d就执行交换值
if(b < d){
n = b;
b = d;
d = n;
}
//判断c,d的大小,如果c<d就执行交换值
if(c < d){
n = c;
c = d;
d = n;
}
//输出结果
printf("%d>%d>%d>%d\n",a,b,c,d);
return 0;
}
结果如下: