C语言练习题

更新时间:2023-05-14 02:13:45 阅读: 评论:0

练习一
1、把十进制数56,-74转化为对应的二进制数,并分别写出它们的8位原码和补码。
2、什么是浮点数?计算机内部是如何存储浮点数的?
3、什么是ASCII码?ASCII码编码方案有何特点?试述常用字符的大致编码顺序。
4、什么是汉字的机内码?在计算机的内存中如何区分机内码与ASCII码?
5、试述计算机内部采用二进制工作的原因,以及计算机的工作原理。
6、试述程序设计的概念,以及程序设计的基本过程。
7、什么是算法?算法有哪些特性和描述方法?算法与程序的关系如何?
8、什么是高级语言?有哪些主要的高级语言?
9、什么是标识符和关键字?它们分别有什么作用?
10、标识符是如何构成的?使用标识符时应注意哪些问题?
11、下列字符序列中,哪些可以构成合法的标识符?
signed a-1 x_y_1 $u π
0x56 sum num# _1234 age
12、试述C程序的基本结构。
13、试述C程序上机的全过程,并解释这过程中产生的各类错误的含义。
练习二
1、C语言的基本数据类型有哪些?数据类型对数据的表示和运算有什么约束?
2、什么是常量?数值常量和符号常量有何区别?使用符号常量有什么好处?
3、什么是变量?变量的名字、地址、值、类型有什么关系?
4、如何定义变量?C语言中为什么规定变量必须先定义,后使用?
5、常量也有数据类型,请问如何区分整型常量和实型常量的数据类型?
6、字符常量与字符串常量的表示形式有何区别?'a'和"a"有什么不同?
7、字符串常量"\\\34ab\n"中有多少个字符?
王朝干红葡萄酒价格表8、下列表达式计算时,哪些地方会发生类型转换?从什么类型转换到什么类型?表达式计
算的结果是什么类型?值多少?
网线四根线接法(1)    2.5+2*7%2/4 (2) 4*(2L+6.5)-12
杀死病毒
(3) 10/(5*3)  (4) 2*10.0/(5*3)
9、设有变量定义:float x=2.7,y=4.5; int a=8; 求表达式y+a%5*(int)(x+y)/2%4 的值。
10、执行下列程序,解释程序的运行结果,并修改程序使得它能输出正确的结果。
#include <stdio.h>
int main()
{ float x;
x=45678*56789;
printf("45678*56789=%f\n", x);
}
答:程序运行结果为:45678*56789=-1700959360.000000 。由于45678*56789=2594007942,已经超出了long类型的取值范围,所以结果为负数。修改后的程序如下:
#include <stdio.h>
int main()
{ double x;
x=45678.0*56789;
printf("45678*56789=%f\n", x);
}
修改后的程序运行结果为:45678*56789=2594007942.000000
11、执行下列程序,解释程序的运行结果,从中体会常用转义字符的含义。
#include <stdio.h>
int main()
{ printf("_ab_c\t_de\rf\tg\n");
printf("h\ti\b\bj_k\n");
}
程序运行结果:
第一个printf由于输出\r光标又回到了最左边,原来屏幕上的_ab_c□□□_(□表示空格)都被接下来输出的f\tg(实际上是输出了字符f、7个空格和字符g),而第二个printf 由于输出\b\b删除了字符i和它前面的1个空格,所以得到以上运行结果。
12、执行下列程序,解释程序的运行结果,从中体会字符和数的区别和联系。
#include <stdio.h>
int main()
{ int m,n,k;
m='5'*'6'; n=5*6;
k=('5'-'0')*('6'-'0');
printf("m,n,k=%d, %d, %d\n", m,n,k);
}
程序运行结果为:m,n,k=2862, 30, 30 。由于('5'-'0')起到了将字符5转换为数5的功能,('6'-'0')起到类似作用,所以变量n和k的值一样。而'5'*'6'实际上是字符5的ASCII码(53)乘以字符6的ASCII码(54),所以变量m的值为2862 。
13、执行下列程序,解释程序的运行结果,从中体会前置和后置运算的区别。
#include <stdio.h>
int main()
{ int x=5,y,z;
y=8-x++;
printf("%d %d\n", x,y);
z=++x*2;
printf("%d %d\n", x,z);
}
程序运行结果:
由于第一个赋值语句中是后置运算,所以y的值=8-5=3,x的值加了1为6,而第一个赋值语句中是前置运算,x的值首先加了1为7,再乘以2,所以z的值为14 。
练习三
1、什么是结构化程序设计方法?结构化程序设计应遵循哪些原则?
答:结构化程序设计方法是基于模块化、自顶向下、逐步求精和结构化程序设计等程序设计技术的总称。结构化程序设计方法应遵循:(1) 在总体设计阶段采用“自顶向下,逐步求精”的模块化设计方法;(2) 在详细设计阶段采用“基本结构,组合而成”的方法,就是程序不论大小,简单还是复杂,程序由三种基本结构(即顺序结构、选择结构和循环结构)组合而成;(3) 在最后的编码阶段应做到“清晰第一,效率第二”,并采用良好的程序设计风格,从而提高程序的可读性,便于调试时改正错误,也便于程序的维护。
2、C语言的语句有哪几类?为什么说C语言是表达式语言?
答:C语言中语句可分为:表达式语句、函数调用语句、控制语句、复合语句和空语句五类。
由于任何表达式加上分号“;”就能构成语句,所以称C语言是表达式语言。
3、C语言中如何表示逻辑值“真”和“假”?一个值参加逻辑运算时又如何判断它是“真”
还是“假”?
答:C语言中逻辑值“真”和“假”分别用数“1”和“0”来表示,一个值参加逻辑运算时非0就认为是“真”,0才认为是“假”。
4、设有变量定义:int a=3, b=8; 表达式(a<5) || (b=5) 求值后,b的值是多少?
答:由于(a<5)为“真”,根据“短路求值法”,表达式(b=5)不求值,所以b的值仍然为8。.
5、设有n(n>0)个学生要分班,每班k(k>0)个学生,最后不足k个学生也编一班,试用条件
表达式表示班级数。
答:(n%k==0) ? n/k : n/k+1
6、设有整型变量n,以下选项中,构成死循环的是哪一个?
A. n=100; do { n++; }while (n>100);女生可爱动漫头像
B. for (n=100 ; ; n=n%100+1) if (n>100) break;
C. n=100; while (n) --n;
D. n=100; while (n--) ;
答:B。注意A不构成死循环,因为n最终会溢出而成为负数。
火和土相生还是相克7、请消除下列程序中的2个语法错误。
#include <stdio.h>
int main()
{ int a,b; float x=5.7;
a=10;
scanf("%d", b); // 应改为:scanf("%d", &b);
printf("a+b=%d\n", a+b);
printf("x=%d\n", x); // 应改为:printf("x=%f\n", x);
}
8、如果执行下列程序时,数据的输入格式如下,请解释程序的运行结果。为了使得c1='A'
和c2='a',假定程序不做修改,应如何修改数据的输入格式?假定数据的输入格式不变,又应如何修
改程序?从中体会一般情况下scanf的格式控制字符串中的普通字符不但起不到提示的作用,反而给用户的输入制造了麻烦。
#include <stdio.h>
int main()
怎样画房子{ int a, b; float x,y; char c1,c2;
scanf("a=%d b=%d", &a,&b);
scanf("%f%f", &x,&y);
scanf("%c%c", &c1,&c2);
printf("a=%d b=%d\n", a,b);
printf("x=%0.1f y=%0.1f\n", x,y);
printf("c1=%c c2=%c\n", c1,c2);
}
南极与北极输入为:
a=3□b=7↙/* ↙表示回车,□表示空格*/
8.5□6.1↙
A□a↙
输出为:
a=3 b=7
x=8.5 y=6.1
c1=
c2=A
答:程序不做修改,数据的输入格式应修改为:
a=3□b=7↙
8.5□6.1Aa↙
数据的输入格式不变,程序中最后一句输入语句应修改为:
scanf("%*c%c%*c%c", &c1,&c2); // 当然还有其它修改方法
9、编写一个程序,输入一个华氏温度f,输出对应的摄氏温度c。计算公式是:c=5/9*(f-32) 。
#include <stdio.h>
int main()
{ float f, c;
printf("请输入华氏温度: ");
scanf("%f", &f);
c=5.0/9*(f-32);
printf("对应的摄氏温度: %.2f\n", c);
return 0;
}
10、假定某种手机套餐规定:月租费10元,可免费发送短信60条,超出部分每条0.10元;
可免费与本地手机通话20分钟(包括打入与打出),超出部分每分钟0.15元;与本地固
定电话通话可享受每分钟0.2元的优惠(没有免费通话时间)。在不考虑长途通话的情况下,输入某用户一个月发送短信的条数、与本地手机通话的分钟数和与本地固定电话通话的分钟数,程序计算并输出该用户这个月的手机通信费用。
#include <stdio.h>
int main()
{ int message, mobilecall, phonecall; float money;
printf("请输入发送短信的条数、与本地手机通话的分钟数和与本地固定电话通话的分钟数: ");
scanf("%d%d%d", &message, &mobilecall, &phonecall);
money=10;
if (message>60) money += 0.1*(message-60);
if (mobilecall>20) money += 0.15*(mobilecall-20);
if (phonecall>0) money += 0.2*phonecall;
Page什么意思printf("手机通信费用: %.2f\n", money);
return 0;
}
11、编写一个程序,输入某乘客先后两次乘坐公交车的上车时间(假定在同一天内),程序
判断时间间隔是否大于2小时并输出相应的信息。输入格式以及输出信息的格式如下所示,程序不考虑输入时间错误(如8:68:72)。提示:可将时间转换为秒为单位后再做减法。
输入为:
9:31:4□11:8:25↙/* ↙表示回车,□表示空格*/
输出为:
时间间隔=01:37:21 你能享受公交优惠1元。
输入为:
12:58:37□15:2:49↙
输出为:
时间间隔=02:04:12 对不起,你不能享受公交优惠。
#include <stdio.h>
int main()
{ int h1,m1,s1,h2,m2,s2,h,m,s;
long diff;
printf("请输入先后两次乘坐公交车的上车时间(hh:mm:ss hh:mm:ss) ");
scanf("%d:%d:%d %d:%d:%d", &h1,&m1,&s1,&h2,&m2,&s2);
diff=(h2*3600L+m2*60+s2)-(h1*3600L+m1*60+s1);
h=diff/3600; m=diff%3600/60; s=diff%60;
printf("时间间隔=%02d:%02d:%02d ", h,m,s);
if (diff<=7200) printf("你能享受公交优惠1元。\n");
el printf("对不起,你不能享受公交优惠。\n");
return 0;
}

本文发布于:2023-05-14 02:13:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/621370.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   输入   语句   常量   字符   结果   格式
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图