单片机C语言作业及上机习题及答案 - 图文
更新时间:2024-03-27 17:35:01 阅读量: 综合文库 文档下载
- 单片机c语言编程推荐度:
- 相关推荐
第一次课
熟悉win-TC编译环境、熟悉C语言程序结构
1.使用C 语言编译环境,输入下面的源程序。将你的程序命名为hello.c,然后编译运 行它。
/* program writes the words \*File : Hello.c * By : NJCIT
* Date : 07-03-09 */#include
printf(\return(0); } 2.
main() /*求两数之和*/ {
int a,b,sum; /* 这是变量定义*/ a=123;b=456; sum=a+b;
printf(“sum is %d\\n”,sum); }
回答下列问题:
1. C语言中的标识由 字母 、 数字 和 下划线 组成,以 字母 和 下划线 开头,不可使用 关键字 。
2. C语言源程序从 main 开始执行?每个C语言程序必须有一个且只能有一个主函数,主函数的名字为 main 。 C程序的函数由 函数头 和 函数体 两部分构成,函数头包括 函数属性 、 函数类型 、 函数名 和 形参表 ;函数体由一系列的语句组成,语句由 分 号结束,函数休包含在一对 花 括号中。程序中的注释内容是用符号 /* */ 界定。
2. 计算机上实现C语言程序要经过 编辑 (产生*. C 文件)、 编译 (产生*. OBJ 文
件)、 链接 (产生*. EXE 文件)和 调试 四个阶段。
第二次课
熟悉printf()函数、常见转义字符及各种数据类型的输出格式 1.
#include
int a=5,b=7,c=-1;
float x=67.8564,y=-789.124; char c=‘A’; long n=1234567; unsigned u=65535;
printf(“%d%d\\n”,a,b); /*57 */ printf(“==\\n”,a,b); /* 5 7 */ printf(“%f,%f\\n”,x,y); /*67.856400,-789.124000*/ printf(“%-10f%-10f\\n”,x,y); /*67.856400 ,-789.124000*/ printf(“%8.2f,%8.2f,%.4f,%.4f,?,?\\n”,x,y,x,y,x,y);
/* 67.85, -789.12,67.8564,-789.1240,67.856400,-789.124000*/
printf(“%e,.2e\\n”,x,y); /*6.78564e+01, -7.9e+02*/ printf(“%c,%d,%o,%x\\n”,c,c,c,c); /*A,65,101,41*/ printf(“%ld,%lo,%x\\n”,n,n,n); /*1234567,4553207,d687*/ printf(“%u,%o,%x,%d\\n”,u,u,u,u); /*65535,177777,ffff,-1*/
printf(“%s,%5.3s\\n”,”COMPUTER”,”COMPUTER”);/*COMPUTER, COM*/ }
3. 假设下面的例子都是完整程序的一部分,那么他们每一个将会输出什么?
a. printf(\b. printf(\c. printf(\d. printf(\e. int num;num = 2; f. printf(\ 4.加载,编译并运行下面的程序。显示输出界面然后回答下面的问题。
#include
(1)C语言的基本数据类型有几种,分别是什么,并指出各种数据类型的关键字? (2)描述C语言中标识符的组成
(3)常量和变量的区别是什么? (4)在程序中如何使用变量?
(5)从下面列出标识符中选出哪些可以用作合法的C用户定义标识符,哪些不能使用。为什么?
(1) a3_b3 (2)void (3) _123 (4)123_ (5) IF (6) INT (7) For (8) printf (9) WORD (10) define (11) _abc (12) sizeof (13) answer (14) to (15)signed (16) Case (17)_if (18) extern (19) putchar (20) _double
(6)请选出正确的数值和字符常量,说明类型;对于不正确的数,说明原因
(1) 0.0 (2) 5L (3) o13 (4) 0Xff (5) oxaa (6) 018 (7) 9861 (8) 011
(9) 3.987E-2 (10) .987 (11) ‘\\0xab? (12) 50. (13) 8.9e1.2 (15)0xFF00 (16) 0.825e2 (17)473 (18) OX4 (19) “c” (20)‘t’ (21) ‘\\?” (22)?0? (23)?\\0? (24) ?A?
4.选择题
(1)合法的字符常量是 。
A) ‘\\t’ B) “A” C) ‘a’ D)’\\x32’
(2) 合法的字符常量是 。
A) ‘\\084’ B) ‘\\84’ C) ‘ab’ D)’\\x43’
(3)是C语言提供的合法的数据类型关键字。
A) Float B) signed C) integer D)Char
(4)在以下各组标识符中,合法的标识符是。
A) A)B01 B)table_1 C) 0_t D) k% B) A)Fast_ B) void C)pbl D)
(5)属于合法的C语言长整型常量的是 。
A)5876273 B)0L C)2E10 D)(long)5876273
(6)下面选项中,不是合法整型常量的是
A)160 B)-0xcdg C)-01 D)-0x48a
1e1 (14) 第三次课
熟悉scanf()函数的使用:
1. 用下面的scanf()函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’;
main() {
int a,b; float x,y; char c1,c2;
scanf(“a=%d b=%d”,&a,&b); scanf(“ x=%f y=%e”,&x,&y);
scanf(“ c1=%c c2=%c”,&c1,&c2); printf(“a=%d b=%d”,a,b); printf(“ x=%f y=%e”,x,y);
printf(“ c1=%c c2=%c”,c1,c2); }
2.加载,编译并运行下面的程序然后回答下面的问题。
2. 改写这个程序使他可以用一个单独的变量以天的形式存储用户的年龄。
#include
3.使用 scanf() 读取多行输入 #include
printf(\’day %s, you are %d days old\\n\return(0); } 1. 当你在回答问题时颠倒了年龄和姓名会出现什么情况? 2. 当你在代码中省去了&时会出现什么情况? 4.编程题
(1) 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序来。
(2)若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
a= 3 b= 4 c= 5
x=1.200000,y=2.400000,z=-3.600000 x+y= 3.60 y+z=-1.20 z+x=-2.40 u= 51274 n= 128765 c1=’a’ or 97(ASCII) c2=’b’ or 98(ASCII)
5(3)输入一个华氏温度,要求输出摄氏温度,公式为:C?(F?32),取两位小数。
95.请判断以下表达式是否正确,若正确,写出表达式的值;若不正确,写出出错原因。 各变量的类型说明如下:
int i=8, j=3, k, a, b; unsigned long w=5, u; double x=1.42 , y=5.2 , t ;
(1) k=i++ 8 (2) (int)x+0.4 1.4 (3) w+=-2 3 (4) y+=x++ ? (5) i/=j+12 0 (6) k=--i 7 (7) f=3/2*(t=30.0-10.0) 30.0 (8) k=(a=2,b=3,a+b) 5 (9) a+=a-=(b=4)*(a=3) -18 (10) a=2*a=3 ?
(11) u=65535, j=-1,u=u+j (12) ++(i+j) ? (13) 2%(-3) 2 (14) -2%(-3) 2
6. 求以下表达式的值,假设所有变量都为整型。 (1) (a=b=4,a+1,b+1,a+b) (2) (a=2,b=5,a>b?a++:b++,a+b) (3) (x=8,x%=x+5) (4) 30 % 6 / 2
7.写出下面各逻辑表达式的值。设:a=3,b=4,c=5. (1)a+b>c&&b==c (2)a ||b+c&&b-c (3)!(a>b) && !c || 1 (4)!(x=a)&&(y==b)&&0 (5)!(a+b) + c –1 && b + c/2 第四次课
1. if语句应用
(1)加载,编译并运行下面的程序,先使用一个正整数,然后再使用一个负数。有什么不同?
#include
(2)使用 if语句避免除0 #include
写一个程序用来计算电阻上的功率。功率大小等于电阻上的电压值乘以流过电阻的电流 值。
完成计算后,使用一个if 语句判断功率是否低于0.5 瓦特。如果低于0.5 瓦特则输 出“Okey to use half watt resistor”,否则输出“haff watt registor will not be okey”。
下面是程序的开始部分,请添加完成if语句。 #include
Enter the voltage : 5 Enter the current : 0.002 okay to use half watt resistor. 如果功率大于0.5瓦特:
Enter the voltage : 5 Enter the current : 200 half watt resisitor will not be okay.
2. 编程练习:
(1) 有三个整数a,b,c,由键盘输入,输出其中最大的数。
(2) 编程输入整数a和b,若 大于100,则输出 百位以上的数字,否则输出两数之和。 (3) 有一函数:
写一个程序,输入x的值,输出y值。
(4)写一段程序计算两个并联电阻的阻值,使你的程序检查是有短路的(0欧姆)将导致0 作为被除数,使用一个if语句或者三目运算避免这种情况(使用三目运算计算及检查是否 除0)。提示: Rt = 1 / (1/R1 + 1/R2); 你的输出应该如下所示:
Enter the value of resistor 1 : 45 Enter the value of resistor 2 : 56 45.0 ohms in parallel with 56.0 ohms gives 24.95 ohms 假如有一个电阻阻值为0的话,结果将如下所示:
Enter the value of resistor 1 : 0 Enter the value of resistor 2 : 45 0.0 ohms in parallel with 45.0 ohms gives 0.00 ohms 第5次课
1. switch语句应用
(1)加载,编译并运行下面的程序,并回答问题。
2. 加载,编译并运行下面的程序,将文件保存为switch-01.c #include
(2)加载,编译并运行下面的程序。
1. 打印 9颗星和8颗星是不同的。描述这两种方法。 2. 编辑这段程序,使之工作在没有break语句的情况下。
#include
任务2:完成下面的程序,使用switch语句,判断输入的数是正数还是负数,并且要处理输入的数越界的情况。
#include
例:若用户输入“H”,则输出这个数的16进制数。 任务1:添加if语句完成程序功能
任务2:添加switch语句完成程序功能,注意对输入无效数制的处理。比如输入:X时,作何处理。
#include
(5) 给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。90分以上
为’A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’。 (6) 从键盘输入三个数,判断这三个数是否能构成三角形,如果是,输出“the three numbers could be the sides of a triangle”,如果不是输出“the three numbers could’t the sides of a triangle”;并判断这个三角形是不是直角三角形,如果是,输出“the numbers could be the sides of a right angle triangle”,如果不是,输出“the numbers could’t the sides of a right angle triangle”。 第6次课 循环
1. 写一个程序让用户输入一个1~12之间的数,程序将会输出这个数的乘法表。 使用一个循环进行计算并输出一行,屏幕输出应该如下所示:
Enter a number between 1 and 12: 5 5 times multiplication table 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 10 x 5 = 50 11 x 5 = 55 12 x 5 = 60
2. 添加循环语句,计算并输出1~20之间的偶数的和。 #include
为程序添加语句,使得输入的数据在1~10之间时,退出循环,否则输出“the number is out of range”
#include
#include
6.计算斐波那契分数序列前n项之和(n是某个常数).( 2/1,3/2,5/3,8/5,13/8,21/13,...... 前一项的分子作为后一项的分母。前一项的分子、分母之和作为后一项的分子。)。 7.问答题
(1) 下面循环错在哪里?
for (i = 1; i > 5; i++) { x /=2; } (2)下面循环错在哪里?
for (i = 10; i > 2; i++) { x *=2; } (3) 这个for循环的输出结果是多少?
for (i = 3; i > -2; i--) { printf(\} (4) 这个while循环的输出结果是多少?
i = 0;
while (i < 5) { i++;
printf(\} (5)while循环错在哪里?
i = 0;
while (i = 10) { i++; x *= 2; }
(6) 完成下面的代码使之可以输出你的名字28次.
for (i = 3; i > ; i--) { printf(\
综合练习一:打印ASC码表
在这个项目中,我们想去打印所有的ASCII码字符及相关联的十进制和二进制值。 关于ASCII
ASCII表示美国信息交换标准码,正如它的名字所暗示的, 它是由美国的一个代码指定的 数字每个信息存储或传输计算机来完成。这里是关于ASCII码的重点:
??每个键盘字符都可以映射到数字从32~127;
??数字从0 到31用于特殊字符,如制表符、铃、换行符等;
??扩展ASCII范围从128 至255,含有专门128 个字符,如边框线等;
??扩展的ASCII字符是非标准化,可能会从一个操作系统类型到另一个(如PC和MAC 与Linux);
??标准的 ASCII是标准化的,同样都可以跨越不同的操作系统类型。
第一步写出程序的基本框架
任何C程序都具有以下的基本框架
/* * Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : Some Student * Version : 1.0 */ #include
我们想去打印所有的标准和扩展ASCII码的值,这就意味着循环从0至255
/* * Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 1.0 */ #include
/* * Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 1.0 - Initial release */ #include
现在,我们将每一个字符打印出来,使它变得整洁些并给每一栏加一个标题,注意如何 选择适当的宽度打印每一栏。
我们也会修改一些在我们试图打印一些如“n/a”的控制符代替一些ASCLL码字符(这些 字符是一些不可打印的字符)出现的问题。
/** Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 1.1 */ #include
/* * Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 2.0 */ #include
现在,假如需要的话,我们有一个可以在一张A4纸上合理的打印ASCII的图表,我们 现在需要做的是给一张表格用一个扩展ASCII特殊字符制作一个边框。 /* * Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 2.1 */ #include
第七步 将一些通用的功能转换成函数(进阶)
最后的阶段是介绍一个简单函数的概念,一个方法一个C源程序的一个模块,这个模块可以在项目的任何地方被调用(包括函数的内部)。
我们从最后一步了解到,一段代码被重复使用了三次,这将是一个方法的理想条件。 /* Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 2.2 */ #include
第八步 扩展打印函数的边界 (进阶)
这一点它看起来不错,为了使用合适的拐角和分隔栏获得一个专业的边框,我们必须去 使用一些扩展字符中的特殊字符。 以下是三种类型的线条是必要的: ??顶线
??标题下的线条 (中间线条) ??底线
一个方法可以有一个通过调用时传入的参数,参数可以是任何类型的(在topic2中讨 论),我们就指派一个整数类型作为第一个参数,调用的线条类型如下: ??0 是顶线 ??1 是中线 ??2 是底线
现在,我们观察每一个线条,除了第一个、最后一个和和分栏符,它们基本相同。 我们将使用一个例子去选择线条的样式,通过一个变量来改变调用的左右中的符号。 最后,我们可以使用嵌套的三个操作打印线条,实际打印的符号是否是根据第一条 (a=0)、是否是最后一条(a=70)或者是否是栏分割位置(a % 14 == 0)。 /* * Title : Print Standard and Extended ASCII chart * Source : print_ascii.c * Author : NJCIT * Version : 3.0 */ #include
left_char = 198; right_char = 181; mid_char = 216; break; case 2: /* Bottom line */ left_char = 212; right_char = 190; mid_char = 207; break; default: /* Invalid argument passed to us. */ left_char = ‘-’; right_char = ‘-’; mid_char = ‘+’; } for (a=0; a<71; a++) { (a==0)? left_char:(a==70)?right_char:(a % 14== 0) ? mid_char : 205; ext_char= printf(\ } printf(\ return; } main() {int i; /* Print the top border line */ pretty_line(0); /* Print the heading */ printf(\ printf(\ /* Print the middle border line */ pretty_line(1); /* Print the ASCII table */ for (i=1; i<=51; i++) { if (i < 32) printf(\ else printf(\= %3x < | = %3x < \i+51, i+51, i+51, i+102, i+102, i+102); printf(\ printf(\= %3x < | = %3x < |\\n\, i+153, i+153, i+153, i+204, i+204, i+204); } /* Print the bottom border line */ pretty_line(2); return(0); }
最终结果
第8次课 1.编程题
(1)将输入数组a[n]中的n个元素,再输入另一个数x,查看a中是否有值为x的元素,若有,则输出其下标,若没有,则输出-1。 #include \#define N 10 int main(void) {
int a[N],x,i,k;
printf(\for(i=0;i scanf(\printf(\scanf(\k=-1; for(i=0;i printf(\ } if(k==-1)printf(\getch(); } (2) 输入10个互不相同的数,将10个整数按升序排列输出,并且奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1 ,则输出:1 3 5 7 8 2 4 6 8 10。(编程提示:可利用2个数组变量,一个用来存放输入的整数,输入后,对这个数组进行排序,然后将数据复制到另一个数组中,先复制奇数再复制偶数)。 #include \#define N 10 main( ) { int f[10],a[10]; int i,j,k; printf(\for(i=0;i scanf(\for(i=0;i<=8;i++) { for(j=i+1;j<10;j++) if(f[i]>f[j]) { k=f[i]; f[i]=f[j]; f[j]=k;} } for(i=0;i<=9;i++) printf(\for(i=0,j=0;i<=9;i++) if(f[i]%2==1)a[j++]=f[i]; for(i=0;i<=9;i++) if(f[i]%2==0)a[j++]=f[i]; for(i=0;i<=9;i++) printf(\getch(); } (3)求数组int a[n]中奇数的个数和平均值,以及偶数个数和平均值。 #include \#define N 10 int main(void) { int a[N],i,num_o=0,num_e=0,sum_o=0,sum_e=0;; printf(\for(i=0;i scanf(\for(i=0;i num_e++; sum_e+=a[i]; } else { num_o++; sum_o+=a[i]; } printf(\)sum_o/num_o); getch(); } (4)编写一个程序,其功能是给一维数组a输入任意6个整数,假设为:5 7 4 8 9 1,然后建立一个具有以下内容的方陈,并打印出来(屏幕输出)。 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7 7 4 8 9 1 5 #include \#define N 6 int main(void) { int a[N],i,j; printf(\for(i=0;i scanf(\for(i=0;i for(j=0;j printf(\ printf(\ } getch(); } (5) 找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 #include \#define M 5 #define N 5 int main(void) { int a[M][N],i,j,k,line,colum; for(i=0;i for(j=0;j printf(\ scanf(\ } for(i=0;i colum=0; for(j=1;j if(a[i][j]>a[i][colum])colum=j; line=i; for(k=0;k if(a[k][colum] if(line==i) printf(\ } getch(); 2.选择题 (1) 在C语言中,引用数组元素时,其数组下标的数据类型允许是 。 A)整型常量 B)整型表达式 C)整形常量或整形表达式 C)任何类型的表达式 (2) 以下对一维整型数组a的正确说明是 。 A)int a(10) ; B)int n=10,a[n]; C)int n; D)#define SIZE 10 scanf(“%d”,&n); int a*SIZE+; int a[n]; ( 3) 若有定义:int a[10],则对数组a元素的正确引用是 。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] (4) 以下能对一维数组a进行正确初始化的语句是 。 A)int a[10]={0,0,0,0,0}; B)int a[10]={} ; C)int a[ ] = {0} ; D)int a[10]={10*1} ; (5) 若有定义:int a[3][4],则对数组a元素的正确引用是 。无 A)a[2][4] B)a[1,3] C)a(5) D)a[10-10] (6) 以下能对二维数组a进行正确初始化的语句是 。 A)int a[2][]={{1,0,1},{5,2,3}} ; B)int a[][3]={{1,2,3},{4,5,6}} ; C)int a[2][4]={{1,2,3},{4,5},{6}} ; D)int a[][3]={{1,0,1},{},{1,1}} ; (7) 若有说明:int a[3][4]={0};则下面正确的叙述是 。 A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 (8) 若有说明:int a[][4]={0,0};则下面不正确的叙述是 。 A)数组a的每个元素都可得到初值0 B)二维数组a的第一维大小为1 C)因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1 D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0 (9) 若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为 。(设a[0][0]位于数组的第一个位置上) A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1 (10) 若有说明:int a[][3]={1,2,3,4,5,6,7};则数组a第一维大小是 。 A)2 B)3 C)4 D)无确定值 (11) 下面程序段的输出结果是 。 int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k<3;k++) printf(“%d”,a*k+*2-k]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7 第9次课 1.编程题 (1)统计输入的一串字符(“假设以‘\\n’结束”)中,大写字母A,B,...,Z各出现的次数。(提示,用一个数组count[26]计数各个字母出现的次数,count[0]表示A出现的次数,count[1]表示B出现的次数,...,count[25]表示字母Z出现的次数。初始时count的各元素值为0。以后,每读入一个字符ch ,若它是一个大写字母,就让相应计数单元count[ch-'A']加1。) #include \int main(void) { int count[26],i; char s[100]; for(i=0;i<26;i++) count[i]=0; printf(\scanf(\ for(i=0;s[i]!=0;i++) { if(s[i]>='A' && s[i]<='Z'); count[s[i]-'A']++; } for(i=0;i<26;i++) { printf(\ } getch(); } (2)编写一个程序将两个字符串连接起来,不要用strcat函数。 #include \#define str1_long 10 #define str2_long 10 int main(void) { int i,j; char str1[str1_long]=\printf(\for(i=0;str1[i]!=0;i++) ; for(j=0;str2[j]!=0;j++,i++)str1[i]=str2[j]; printf(\getch(); } 2.选择题 (1)下面是对s的初始化,其中不正确的是 。 A)char s*5+=,“abc”-; B)char s*5+=,‘a’,’b’,’c’-; C)char s*5+=” ”; D)char s*5+=”abcdef”; (2)下面程序段的输出结果是 。 char c*5+=,‘a’,’b’,’\\0’,’c’,’\\0’} printf(“%s”,c); A)’a’’b’ B)ab C)ab c D)abc (3)若有程序段: int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k<3;k++) printf(“%d”,a*k+*2-k]); 则以下叙述正确的是 。 A)a与b数组完全相同 B)a与b长度相同 C)a和b中都存放字符串 D)a数组比b数组长度长 (4)有两个字符数组a,b,则以下正确的输入语句是 。 A)gets(a,b); B)scanf(“%s%s”,a,b); C)scanf(“%s%s”,&a,&b); D)gets(“a”),gets(“b”); (5)下面程序段的输出结果是 。 char a*7+=”abcdef”; char b*4+=”ABC”; strcpy(a,b); printf(“%c”,a*5+); A) B)\\0 C)e D)f (6)下面程序段的输出结果是 。 char c* +=”\\t\\v\\\\\\0will\\n”; printf(“%d”,strlen(c)); A)14 B)3 C) 9 D)6 (7)判断字符串a和b是否相等,应当使用 。D A)if (a==b) B)if (a=b) C)if (strcpy(a,b)) D) if (strcmp(a,b)) (8)判断字符串a是否大于b,应当使用 。D A)if (a>b) B)if (strcmp(a,b)) C)if (strcmp(b,a)>0) D)if (strcmp(a,b)>0) (9)下面叙述正确的是 。D A)两个字符串所包含的字符个数相同时,才能比较字符串 B)字符个数多的字符串比字符个数少的字符串大 C)字符串”STOP ”与”STOP”相等 D)字符串”That”小于字符串”The” (10)下面有关字符数组的描述中错误的是 。C A)字符数组可以存放字符串 B)字符串可以整体输入,输出 C)可以在赋值语句中通过赋值运算对字符数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进行比较 (11)下面程序的输出结果是 。A main ( ) , char ch*7+=”12ab56”; int i,s=0; for (i=0;ch*i+>’0’&&ch*i+<=’9’;i+=2) s=10*s+ch[i]-‘0’; printf(“%d\\n”,s); } A)1 B)1256 C)12ab56 D)ab (12)下面程序的输出结果是 。 main ( ) { char str* +=”SSWLIA” , C; int k; for (k=2;(c=str*k+)!=’\\0’;k++) , switch (c) { case ‘I’ : ++k; break ; case ‘L’: continue; default : putchar(c) ; continue ; } putchar(‘*’); } } A)SSW B)SW* C)SW*A D)SW 第10、11次课 无,应为W* 1.编程题 (1)编写一个判断一个数是否是素数的函数,若是返回1,否则返回0。 int pn( int n) {int i; int flag; /*素数标志*/ flag=1; for(i=2; i<=n/2; i++) if (n%i==0){flag=0; break; } return(flag); } (2)编写一个函数,计算下面算式前100项之和,并将计算结果返回到主调函数。 1+1/3+1/5+1/7+...... #include \float seri_sum(int a) { int i; float f=0; for(i=1;i<=a;i++) f=f+1.0/(i*2.0-1); return(f); } main() { int i=100; float sum; sum=seri_sum(i); printf(\getch(); } (3)编写一个函数,找出数组a[n]中最大元素和最小元素所在的下标,并返回给主调函数。 #include \#define N 10 void find(int b[N],int *maxip,int *minip) { int max_i,min_i,k,max,min; max_i=0; max_i=0; max=min=b[0]; for(k=1;k if (b[k]>max){max=b[k];max_i=k;} if (b[k] *maxip=max_i; *minip=min_i; return; } main() { int a[N]={23,5,6,33,71,4,76,122,54,24},maxi,mini; find(a,&maxi,&mini); printf(\getch(); } (4)有一个数组,内放10个学生的成绩,写一个函数,求出平均分,并且打印出高于平均分的成绩。 #include \#define N 10 float avr(int b[N]) { int k,sum=0; for(k=1;k return((float)sum/N); } main() { int a[N]={89,65,46,33,71,84,76,82,74,64},i; float av; av=avr(a); printf(\for(i=0;i if(a[i]>av)printf(\getch(); } 2.填空、选择题 (1)C语言函数返回类型的默认定义类型是 整型 。 (2)函数的实参传递到形参有两种方式: 数值 和 地址 。 (3)在一个函数内部调用另一个函数的调用方式称为 函数嵌套 。在一个函数内部直接或 间接调用该函数成为函数 递归 的调用方式。 (4)以下正确的函数定义是。D A)double fun(int x, int y) B)double fun(int x,y) { z=x+y ; return z ; } { int z ; return z ;} C)fun (x,y) D)double fun (int x, int y) { int x, y ; double z ; { double z ; z=x+y ; return z ; } return z ; } (5)以下正确的说法是。A A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用相同的存储单元 D)形参时虚拟的,不占用存储单元 (6)以下正确的函数定义是 。A A)double fun(int x , int y) B)double fun(int x ; int y) C)double fun(int x , int y) ; D)double fun(int x,y) (7)若调用一个函数,且此函数中没有return语句,则正确的说法是 。A A)该函数没有返回值 B)该函数返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值 (8)以下不正确的说法是。B A)实参可以是常量,变量或表达式 B)形参可以是常量,变量或表达式 C)实参可以为任意类型 D)如果形参和实参的类型不一致,以形参类型为准 (9)以下程序由语法错误,有关错误原因的正确说法是。C A)语句void prt_char( );有错,它是函数调用语句,不能用void说明 B)变量名不能使用大写字母 C)函数说明和函数调用语句之间有矛盾 D)函数名不能使用下划线 (10)C语言规定,函数返回值的类型是由 决定的。D A)return语句中的表达式类型 B)调用该函数时的主调函数类型 C)调用该函数时由系统临时 D)在定义函数时所指定的函数类型 (11)以下正确的描述是。 B A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以嵌套 C)函数的定义和函数的调用均不可以嵌套 D)函数的定义和函数的调用均可以嵌套 (12)若用数组名作为函数调用的实参,传递给形参的是。A A)数组的首地址 B)数组中第一个元素的值 C)数组中的全部元素的值 D)数组元素的个数 (13) 假设调用函数有以下定义和函数f调用,则函数f中对形参数组错误定义的是。B char c*5+=,‘a’,’b’,’\\0’,’c’,’\\0’-; printf(“%s”,c); A)f(int array[][6]) B)f(int array[3][]) C)f(itn array[][4]) D)f(int array[2][5]) (14)下面程序的输出是。A int i=2 ; printf(“%d%d%d”,i*=2,++i,i++) ; A) 8,4,2 B)8,4,3 C)4,4,5 D)4,5,6 (15) 已知一个函数的定义如下:D double fun(int x, double y) , …… - 则该函数正确的函数原型声明为: A)double fun (int x,double y) B)fun (int x,double y) C)double fun (int ,double ); D)fun(x,y) ; (16) 关于函数声明,以下不正确的说法是。C A)如果函数定义出现在函数调用之前,可以不必加函数原型声明 B)如果在所有函数定义之前,在函数外部已做了声明,则各个主调函数不必再做函数原型声明 C)函数再调用之前,一定要声明函数原型,保证编译系统进行全面的调用检查 D)标准库不需要函数原型声明 第12、13次课 1.选择、填空题 (1)以下不正确的说法是 。D A)全局变量,静态变量的初值是在编译时指定的 B)静态变量如果没有指定初值,则其初值为0 C)局部变量如果没有指定初值,则其初值不确定 D)函数中的静态变量在函数每次调用时,都会重新设置初值 (2)以下不正确的说法是。C A)register变量可以提高变量使用的执行效率 B)register变量由于使用的是CPU的寄存器,其数目是有限制的 C)extern变量定义的存储空间按变量类型分配 D)全局变量使得函数之间的“耦合性”更加紧密,不利于模块化的要求 (3)变量的指针,其含义是指该变量的__B____. a)值 b)地址 c)名 d)一个标志 2.若有 (4)若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是__D___. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point (5)若有说明;int *p,m=5,n;以下正确的程序段的是__C、D__. a)p=&n; b)p=&n; scanf(\scanf(\ c)scanf(\d)p=&n; *p=n; *p=m; (6)若有以下定义,则对a数组元素的正确引用是___D_____. int a[5],*p=a; a)*&a[5] b)a+2 c)*(p+5) d)*(a+2) (7)若有以下定义,则p+5表示__A___. int a[10],*p=a; a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值 (8)C语言变量按其作用域分为全局变量和 局部变量。按其生存期分为 静态 和 动态 。 (9)C语言变量的存储类别有 auto , register , static 和 extern 。 (10)凡在函数中未指定存储类别的局部变量,其默认的存储类别为 auto 。 (11)在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为 static 。 (12)变量被赋初值可以分为两个阶段:即 和 。 (13)以下程序的输出结果是(x= 93) #define A 3 #define B(a) ((A+1)*a) Main() { int x; x=3*(A+B(7)); printf(“x=M\\n”,x) } (14)以下程序的输出结果是(212) #define power(x) ((x)*(x)) main() { int i=1; while(i<=4) printf(“%d”,power(i++)); } (16)若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__2___. __12_____. *(a+5)的值是 a)元素a[5]的地址 b)元素a[5]的值 c)元素a[6]的地址 d)元素a[6]的值 (8)C语言变量按其作用域分为全局变量和 局部变量。按其生存期分为 静态 和 动态 。 (9)C语言变量的存储类别有 auto , register , static 和 extern 。 (10)凡在函数中未指定存储类别的局部变量,其默认的存储类别为 auto 。 (11)在一个C程序中,若要定义一个只允许本源程序文件中所有函数使用的全局变量,则该变量需要定义的存储类别为 static 。 (12)变量被赋初值可以分为两个阶段:即 和 。 (13)以下程序的输出结果是(x= 93) #define A 3 #define B(a) ((A+1)*a) Main() { int x; x=3*(A+B(7)); printf(“x=M\\n”,x) } (14)以下程序的输出结果是(212) #define power(x) ((x)*(x)) main() { int i=1; while(i<=4) printf(“%d”,power(i++)); } (16)若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是__2___. __12_____. *(a+5)的值是
正在阅读:
九年级数学上册期中测试题03-23
不想长大作文300字07-02
英语荣誉证书内容模板10篇 - 图文11-13
北京公务员考试行测答题技巧:2015京考行测逻辑判断之三段论05-10
群众路线先进典型03-10
高中64篇古诗文名句名篇默写01-29
雨中的暖阳作文700字07-12
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 上机
- 单片机
- 习题
- 作业
- 答案
- 语言
- 图文
- CCRC-QOT-0428-B 4 风险评估
- 冒雨卸车演奏雨中交响曲
- 煤矿粉尘防治技术
- 监狱二级管理模式下警务组工作的认识与思考
- 道路技术标
- 近些年市面上常见卫浴品牌及发展情况
- 公司战略与风险管理模拟试题二
- 基于电子商务平台的小额信贷发展研究 - 以阿里小贷为例 pdf
- 会计电算化教学改革思考
- 2018年曲靖市小升初数学模拟试题(共8套)详细答案
- 成考(专升本)大学语文模拟试题及答案
- 新东方四级词汇乱序版(绿皮)16-20 LIST打印版
- 超声引导区域阻滞专家共识 - 图文
- 如何精确提取revit模型中柱、梁、板的工程量 - 图文
- 第四章:水泥
- RabbitMQ的应用场景以及基本原理介绍
- 考场作文思路
- 2012年选调教师笔试试卷(小学科学)
- 第一临床医学院教学部荣获教学管理工作先进集体、钟远鸣等14名教
- 古代避讳趣谈