利用指针指向结构体成员的指针,实现输入三个学生的学号,数学期中成绩和期末成绩,然后计算平均值。这个要怎么改?

c语言各章习题-海文库
全站搜索:
您现在的位置:&>&&>&IT认证
c语言各章习题
C语言概述一、选择题1.C语言规定,必须用作为主函数名。A)Function
B)include
D)stdio2.一个C程序可以包含任意多个不同名的函数,但有且仅有一个一个C程序总是从
开始执行。A)过程
D)include3.C程序的基本构成单位。A)函数
B) 函数和过程
C) 超文本过程
D) 子程序4.下列说法正确的是A) 一个函数的函数体必须要有变量定义和执行部分,二者缺一不可B) 一个函数的函数体必须要有执行部分,可以没有变量定义C) 一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数D) 以上都不对5.下列说法正确的是A) main函数必须放在C程序的开头B) main函数必须放在C程序的最后C) main函数可以放在C程序的中间部分,但在执行C程序时是从程序开头执行的D) main函数可以放在C程序的中间部分,但在执行C程序时是从main函数开始的6.下列说法正确的是A) 在执行C程序时不是从mian函数开始的B) C程序书写格式严格限制,一行内必须写一个语句C) C程序书写格式自由,一个语句可以分写在多行上D) C程序书写格式严格限制,一行内必须写一个语句,并要有行号7.在C语言中,每个语句和数据定义是用结束。A)句号
D)括号8.下列字符串是标识符的是。A)_HJ
B)9_student
D)LINE 19.以下说法正确的是A) C语言程序总是从第一个定义的函数开始执行B) 在C语言程序中,要调用的函数必须在main()函数中定义C) C语言程序总是从main()函数开始执行1
D) C语言程序中的main()函数必须放在程序的开始部分
10.C语言提供的合法关键字。
D)default二、填空题1.一个C程序至少包含一个。2.一个函数由两部分组成,它们是和3.函数体的范围是4.函数体一般包括。5.C语言是通过第二章
顺序结构程序设计一、选择题1.C语言中调用printf进行输出时需要注意,在格式控制串中,格式说明与输出项的个数必须相同。如果格式说明的个数小于输出项的个数,多余的输出项将
;如果格式说明的个数多于输出项的个数,则对于多余的格式将输出不定值(或0)。A)不予输出
B)输出空格C)照样输出
D)输出不定值或02.在 scanf函数的格式控制中,格式说明的类型与输入的类型应该一一对应匹配。如果类型不匹配,系统
。A)不予接收B)并不给出出错信息,但不可能得出正确信息数据C)能接受正确输入D)给出出错信息,不予接收输入3.下列说法正确的是A)输入项可以是一个实型常量,如scanf(&%f&,4.8);B)只有格式控制,没有输入项也能进行正确输入,如scanf(&a=%d,b=%d&);C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(&%5.3f&,&f);D)当输入数据时,必须指明变量的地址,如scanf(&%f&,&f);4.根据题目中已给出的数据的输入和输出形式,程序中输入/输出语句的正确是 。main(){2
printf(&input a,x:&);输入语句输出语句}输入形式 input a,x:3
2.1输出形式a+x=5.10A)scanf(&%d,%f&,&a,&x);printf(&\na+x=%4.2f&,a+x);B)scanf(&%d %f&,&a.&x);printf(&\na+x=%4.2f&,a+x);C)scanf(&%d %f&,&a,&x);printf(&\na+x=%6.1f&,a+x);D)scanf(&%d %3.1f&,&a,&x);printf(&\na+x=%4.2f&,a+x);5.以下程序的输出结果是。main(){int i=010,j=10,k=0x10;printf(&%d,%d,%d\n&,i,j,k);A)8,10,16
C)10,10,10
D)10,10,166.以下程序的输出结果是main(){int i=011,j=11,k=0x11;printf(&%d,%d,%d\n&,i,j,k);}A)9,11,17
C)11,11,11
D)11,11,167.以下程序的输出结果是#include&stdio.h&main(){printf(&%d\n&,NULL);}A)不确定的值(因变量无定义)
D)18.以下程序的输出结果是。main(){char c1='6',c2='0';printf(&%c,%c,%d,%d\n&,c1,c2,c1-c2,c1+c2);3
}A)因输出格式不合法,输出出错信息
B)6,0,6,102C)6,0,7,6
D)6,0,5,79.设有如下定义int x=10,y=3,z;则语句printf(&%d\n&,z=(x%y,x/y));的输出结果是
D)110.设有如下定义int x=10,y=5,z;则语句printf(&%d\n&,z=(x+=y,x/y));的输出结果是
D)3二.填空题1.C语言中的语句可分为5类,即、、2.由一次函数调用加一个分号构成一个语句。3.putchar函数的作用是4.printf是C语言提供的标准输出函数,它的作用是5.printf函数的“格式控制”包括两部分,他们是三、编程题1.从键盘上输入一个大写字母,要求改用小写字母输出。2.编写程序,求方程ax2+bx+c=0的解x。3.请编写一个程序,能显示出以下两行文字。I am a student.I love China.4
选择结构程序设计一、选择题1.下列运算符中优先级最高的是。A)&
D)!=2.以下关于运算符优先级的描述中,正确的是A)!(逻辑非)&算术运算&关系运算&&&(逻辑与)&||(逻辑或)&赋值运算B)&&(逻辑与)&算术运算&关系运算&赋值运算C)关系运算&算术运算&&&(逻辑与)&||(逻辑或)&赋值运算D)赋值运算&算术运算&关系运算&&&(逻辑与)&||(逻辑或)3.逻辑运算符的运算对象的数据类型。A)只能是0或1
B)只能是.T.或.F.C)只能是整型或字符型
D)任何类型的数据4.能正确表示x的取值范围在[0,100]和[-10,-5]内的表达式是A)(x&=-10)||(x&=-5)&&(x&=0)||(x&=100)B)(x&=-10)&&(x&=-5)||(x&=0)&&(x&=100)C)(x&=-10)&&(x&=-5)&&(x&=0)&&(x&=100)D)(x&=-10)||(x&=-5)&&(x&=0)||(x&=100)5.以下程序的运行结果是。main( ){int
c,x,y;x=1;y=2;c=0;c=x++||y++;printf(“\n%d%d%d\n”,x,y,c);}A)110
D)0016.以下程序的运行结果是。 main( ){int
c,x,y;x=0;y=0;c=0;5
c=x++&&y++;printf(“\n%d%d%d\n”,x,y,c);}A)100
D)0017.判断字符型变量ch为大写字母的表达式是 A)?A?&=ch&=?Z?B)(ch&=?A?)&(ch&=?Z?)C)(ch&=?A?)&&(ch&=?Z?)
D)(ch&=?A?)AND(ch&=?Z?)8.判断字符型变量ch为小写字母的表达式是。 A)?a?&=ch&=?z?B)(ch&=a)&&(ch&=z)C)(ch&=?a?)||(ch&=?z?)
D)(ch&=?a?)&&(ch&=?z?)9.以下if语句书写正确的是。 A)if(x=0;)
B)if(x&0)printf(”%f”,x);
{x=x+1; printf(”%f”,x);}else
printf(”%f”,-x);
printf(”%f”,-x);C)if(x&0);
D)if(x&0){x=x+1; printf(”%f”,x);}
{x=x+1; printf(”%f”,x) }else
printf(”%f”,-x);
printf(”%f”,-x);10.分析以下程序:main( ){
x=5,a=0,b=0;if(x=a+b)
printf(“** **\n”);else
printf(“## ##\n”);以上程序
。 A)有语法错,不能通过编译
B)通过编译,但不能连接C)输出** **
D)输出## ##二、填空题1.在C语言中,对于if语句,else子句与if子句的配对约定是。2.阅读下面程序,写出它的功能。#include
&stdio.h&main(){printf(&\nPlease enter 1 number:&);c=getchar();while(c!='\n'){if(c= ='.')
label=1;c=getchar();}6
if(label= =1)printf(&\nfloat&);else
printf(&\nint&);}3.以下两条if语句可合并成一条if语句为if(a&=b)
y=2;if(a&b)
printf(&* * * * y=%d\n&,y);else
printf(&# # # # x=%d\n&,x);三、编程题1.编写一个程序,要求有键盘输入三个数,计算以这三个数为边长的三角形的面积。2.输入圆的的半径r和一个整型数k,当k=1时,计算圆的面积;但k=2时,计算圆的周长,当k=3时,既要求求圆的周长也要求出圆的面积。编程实现以上功能。3.编写程序,判断某一年是否是闰年。 4. 有一函数,其函数关系如下,试编程求对应于每一自变量的函数值。x2
(0?x&10)x-x
(x?10)5. 编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为?A?;80~89分为 ?B?;70~79分为?C?;60~69分为?D?;60分以下为 ?E?。第四章
循环结构程序设计一、选择题1.while循环语句中,while后一对圆括号中表达式的值决定了循环体是否进行,因此,进入while循环后,一定有能使此表达式的值变为
的操作,否则,循环将会无限制地进行下去。A)0
D)22.在do-while循环中,循环由do开始,用while结束;必须注意的是:在while表达式后面的
不能丢,它表示do-while语句的结束。A)0
D),3.for语句中的表达式可以部分或全部省略,但两个不可省略。但当三个表达式均省略后,因缺少条件判断,循环会无限制地执行下去,形成死循环。A)0
4.程序段如下int k=-20;while(k=0)
k=k+1;则以下说法中正确的是
。A)while循环执行20次
B)循环是无限循环C)循环体语句一次也不执行
D)循环体语句执行一次5.程序段如下int k=1;while(!k==0)
{k=k+1;printf(&%d\n&,k);}说法正确的是
。A)while循环执行2次
B)循环是无限循环C)循环体语句一次也不执行
D)循环体语句执行一次6.以下for循环是。for(a=0,b=0;(b!=123)&&(a&=4);a++)A)无限循环
B)循环次数不定
C)执行4次
D)执行5次7.在下列程序中,while循环的循环次数是 main( ) { int
i=0;while(i&10){if(i&1)if(i= =5)i++;}......}A)1
D)死循环、不能确定次数8.程序段如下int k=0; while(k++&=2)
printf(&%d\n&,k);则执行结果是
29.程序段如下int k=0;while(k++&=2);
printf(&last=%d\n&,k);则执行结果是last=
D)无结果10.执行下面的程序后,a的值为。main()8
{int a,b;for(a=1,b=1;a&=100;a++){if(b&=20)if(b%3==1){b+=3;}b-=5;}}A)7
二、填空题1.while语句的特点是do-while语句的特点是2.将for(表达式1;表达式2;表达式3)语句改写为while语句是。3.break语句的功能是4.break语句只能用于5.continue语句的作用是,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。三、编程题1.编写程序,求两个整数的最大公约数。2.把输入的整数(最多不超过5位)按输入顺序的反方向输出,例如,输入数是12345,要求输出结果是54321,编程实现此功能。3.中国古代数学家张丘建提出的“百鸡问题”:一只大公鸡值五个钱,一只母鸡值三个钱,三个小鸡值一个钱。现在有100个钱,要买100只鸡,是否可以?若可以,给出一个解,要求三种鸡都有。请写出求解该问题的程序。4.求100~200间的全部素数。法,请编写求解此问题的程序。6.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,...,编写程序求这个数列的前20项之和。7.编写程序,利用公式e=1+1/1!+1/2!+1/3!+....+1/n!求出e的近似值,其中n的值由用户输入(用于控制精确度)。中100由用户输入。9.编一程序,将2000年到3000年中的所有闰年年份输出并统计出闰年的总年数,要求每10个闰年放在一行输出。9
10.请编写一程序,打印出九九乘法口诀表(例:1*1=1)。第五章
数组一、选择题1.在C语言中,引用数组元素时,其数组下标的数据类型允许是A)整型常量
B)整型常量或整型表达式C)整型表达式
D)任何类型的表达式2.以下对一维整型数组a的正确说明是A)int a(10);
B)int n=10,a[n];C) scanf(“%d”,&n); int a[n];D ) #define SIZE 10
int a[SIZE];3.以下能对一维数组a进行正确初始化的语句是A)int a[10]=(0,0,0,0,0);B)int a[10]={
};C)int a[ ]={0};D)int a[10]={10*1};4.不是给数组的第一个元素赋值的语句是A)int a[2]={1};
B) int a[2]={1*2};C) int a[2];scanf (“%d”,a);
D)a[1]=1;5.下面程序的运行结果是。main(){int a[6],i;for(i=1;i&6;i++){ a[i]=9*(i-2+4*(i&3))%5;printf(&%2d&,a[i]);}}A)-4 0 4 0 4
B)-4 0 4 0 3
C)-4 0 4 4 3
D)-4 0 4 4 06.下列定义正确的是。A) static int a[]={1,2,3,4,5}
B) int b[]={2,5}C) int a(10)
D) int 4e[4]7.若有说明int a[][4]={0,0};则下列叙述不正确的是A) 数组a的每个元素都可以得到初值0B) 二维数组a的第一维的大小为1C) 因为对二维数组a的第二维大小的值除以初值个数的商为1,故数组a10
的行数为1D) 只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值8.设有char str[10],下列语句正确的是A) scanf(&%s&,&str);
B) printf(&%c&,str);C) printf(&%s&,str[0]);
D) printf(&%s&,str);9.下列说法正确的是
A) 在C语言中,可以使用动态内存分配技术定义元素个数可变的数组B) 在C语言中,数组元素的个数可以不确定,允许随机变动C) 在C语言中,数组元素的数据类型可以不一致D) 在C语言中,定义了一个数组后,就确定了它所容纳的具有相同数据类型元素的个数10.假设array是一个有10个元素的整型数组,则下列写法中正确的是。A) array[0]=10
B) array=0C) array[10]=0
D) array[-1]=0二、填空题1.数组名定名规则和变量名相同,遵循2.对于一维数组的定义“类型说明符 数组名[常量表达式]”,其中常量表达式可以包括
,不能包含
。3.在C语言中,引用数组只能通过数组元素来实现,而不能通过整体引用
来实现。4.在定义数组时对数组元素赋以初值,需要在数组的类型说明符前加关键字
。5.如果要使一个内部数组在定义时每个元素初始化值为0,但不进行逐个赋值,将其说明成
存储类型即可。三、编程题1.用起泡法对10个数排序。2.编一程序,从键盘输入10个整数并保存到数组,求出该10个整数的最大值、最小值及平均值。3.将一个n*m二维数组的行和列元素互换,存到另一个m*n的二维数组中,并输出其结果。例如:static int a[2][3]={{1,2,3},{4,5,6}}4.编一程序,从键盘输入10个整数并保存到数组,要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。5.编写程序,从键盘输入n个由小到大的顺序排好的数列和一个数insert_value,把insert_value插入到由这n个数组成的数列中,而且仍然保持由小到大的顺序,若insert_value比原有所有的数都大时放在最后,比原有的数都小时放在最前面。6.编程完成下述功能:从键盘输入一个n*n(最大为20*20)矩阵的各元素的值,求出该矩阵两条对角线上各元素值之和并打印出结果。11
函数一、选择题1.以下函数定义正确的是: 。A)
fun(int x, int y)
fun(int x, int y) ;
x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是:
。A)地址传递;
B)单向值传递;C)双向值传递;
D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: 。 A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。4.以下正确的函数形式是:A)double fun(int x,int y)
B)fun (int x,y){z=x+y;}
{}C)fun(x,y)
D)double fun(int x,int y)
z=x+y;}5.以下说法不正确的是:C 语言规定
A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是。A)
C)long 型 D)double 型7.以下错误的描述是。函数调用可以A)出现在执行语句中
B)出现在一个表达式中C)做为一个函数的实参 D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是A)数组的首地址
B)数组第一个元素的值C)数组中全部元素的值
D)数组元素的个数9.以下正确的说法是。12
如果在一个函数中的复合语句中定义了一个变量,则该变量A)只在该复合语句中有效
B)在该函数中有效C)在本程序范围内有效
D)为非法变量10.以下不正确的说法为A)在不同函数中可以使用相同名字的变量B)形式参数是局部变量C)在函数内定义的变量只在本函数范围内有效D)在函数内的复合语句中定义的变量在本函数范围内有效二、填空题1.C语言规定,可执行程序的开始执行点是。2.在C语言中,一个函数一般由两个部分组成,它们是3.函数swap(int x,int y)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1] 的值分别为
。4.函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a[0] 和a[1]的值分别为
。5.设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部
。要求形参名为b。main(){ double s[10][22]; ┆┆fun(s);┆}6.返回语句的功能是从
三、编程题1.有一个数组,内放10个学生的英语成绩,写一个函数,求出平均分,并且打印出高于平均分的英语成绩。2.编写一个函数计算任一输入的整数的各位数字之和。主函数包括输入输出和调用该函数。3.已有函数调用语句c=add (a,b);请编写add函数,计算两个实数a和b的和,并返回和值。double
add (double x, double y){
}4.已有变量定义语句double
a=5.0;int n=5;和函数调用语句mypow (a, n);用以13
求a的n次方。请编写double mypow (double x, int y)函数。double mypow (double x, int y){
n5.已有变量定义和函数调用语句int a, b;b=sum (a);函数sum( )用以求
k=1 和数作为函数值返回。若a的值为10,经函数sum的计算后,b的值是55。请编写sum函数。sum (int n){
}6.已有变量定义和函数调用语句:int a=1, b=5, c;c=fun (a,b);fun函数的作用是计算两个数之差的绝对值,并将差值返回调用函数,请编写fun函数。fun (int x, int y){
}7.已有变量定义和函数调用语句:int x=57;isprime (x);函数isprime ( )用来判断一个整型数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime 函数。
isprime (int a){
}8.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。9.函数的递归调用计算阶乘。10. 输入10个学生的成绩,分别用函数实现:(1)求平均成绩;(2)按分数高低进行排序并输出。 第七章 编译预处理一、选择题1.C语言中,宏定义有效范围从定义处开始,到源文件结束处结束,但可以用
来提前解除宏定义的作用。A)# ifdef
C)# undefine
D)# undef2.以下不正确的叙述是。A) 预处理命令都必须以“#”号开始B) 在程序中凡是以“#”号开始的语句行都是预处理命令行C) C语言在执行过程中对预处理命令行进行处理D) # define
ABCD是正确的宏定义A) 3.以下正确的叙述是。 在程序的一行中可以出现多个有效的预处理命令行B) 使用带参宏时,参数的类型应与宏定义时的一致C) 宏替换不占用运行时间,只占编译时间D) 宏定义不能出现在函数内部A)
4.以下不正确的叙述是 宏替换不占用运行时间14
B) 宏名无类型C) 宏替换只是字符替换D) 宏名必须用大写字母表示A) 5. 以下正确的叙述是。
C语言的预处理功能是指完成宏替换和包含文件的调用B)
预处理命令只能位于C源程序文件的首部C)
凡是C源程序中行首以“#”标识的控制行都是预处理命令D) C语言的编译预处理就是对源程序进行初步的语法检查A)
6.在文件包含预处理语句(# include)的使用形式中,当之后的文件名用“”(双引号)括起时,寻找被包含文件的方式是
。 直接按系统设定的标准方式搜索目录B) 先在源程序所在目录搜索,再按系统设定的标准方式搜索C) 仅仅搜索源程序所在目录D) 仅仅搜索当前目录A)
7.在文件包含预处理语句(# include)的使用形式中,当之后的文件名用&&(尖引号)括起时,寻找被包含文件的方式是
。 直接按系统设定的标准方式搜索目录B) 先在源程序所在目录搜索,再按系统设定的标准方式搜索C) 仅仅搜索源程序所在目录D) 仅仅搜索当前目录A) 8.C语言的编译系统对宏命令的处理。 在程序运行时进行的B) 在程序连接时进行的C) 和C程序中的其它语句同时进行编译的D) 在对源程序中其它语句正式编译之前进行的9.以下程序的输出结果是
(x)&(y) ? (x) : (y)
main( ){ int i,j,k;
k=10*MIN(i,j);
printf(“%d”,k);
D)15010.以下程序的输出结果是# include
&stdio.h&# define
3.54+y# define
printf(“%d”, (int)(a))# define
putchar (?\n?)main( ){ int
PR1(ADD(5)*i);
二、填空题1.C提供的预处理功能主要有三种,分别是和 。2.设有以下宏定义:# define
80# define
WIDTH+40则执行赋值语句:v= LENGTH*20;(v为int型变量)后,v的值是
。 3.设有以下宏定义:# define
80# define
(WIDTH+40)则执行赋值语句:k= LENGTH*20;(k为int型变量)后,k的值是
。 四、编程题1.编写一个宏定义MYALPHA(c),用以判定c是否是字母字符,若是,得1;否则得0。 2.编写一个宏定义用于求一个边长为a、b和c的三角形的面积。其公式为:s=(a+b+c)/2
s(s-a)(s-b)(s-c)3.编写一个程序求三个数中最大者,要求用带参宏实现。 第八章
指针一、选择题1.变量的指针,其含义是指该变量的。A)值
D)一个标志2.设有说明 int (~ptr)[M];其中ptr是。A) M个指向整型变量的指针B) 指向M个整型变量的函数指针C) 一个指向具有M 个整型元素的一维数组的指针D) 具有 M个指针元素的一维指针数组,每个元素都只能指向整型量3.选择出 i的正确结果 char ~s=a\045+045\@b; for ( i=0;s++;i++);A)5
D)124.如下程序的执行结果是。# include &stdio.h&main( ) { char ~s=a\\\\\
for( i=0; s[i]!=?\0?;i++)
printf(%c ,~(s+i)); }A)a
D)a\\\\5.如下程序的执行结果是# include
&stdio.h&main()
{ static int a[ ]={1,2,3,4,5,6};
~(p+3)+=2; printf(%d,%d\n ,~p,~(p+3));
D)1,46.如下程序的执行结果是# include &stdio.h&main( )
{ static int a[ ][4]={1,3,5,7,9,11,13,15,17,19,21,23};int
(~p)[4], i=1,j=2; p=a;printf(%d \n , ~(~(p+i)+j));
D)177.若有以下定义,则对a数组元素的正确引用是int a[5], ~p=a;A)~&a[5]
D)~(a+2)8.若有以下定义,则对a数组元素地址的正确引用是。int a[5], ~p=a;A)p+5
D)&a[0]9.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为
。A)~(~(a +i) +j )
B)(a+i) [j]
C)~(a+i+j)
D)~(a +i)+j10.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为
。A)~(a [i] +j )
D)a[i]+j二、填空题1.若有定义:int a[2][3]={2,4,6,8,10,12};则~(&a[0][0]+2~2+1)的值是,~(a[1] +2)的值是
。2.完成以下有关数组描述的填空。(1) C语言中,数组名是一个不可改变的
,不能对它进行赋值运算。(2) 数组在内存中占用一段连续的存储空间,它的首地址由
表示。3.定义语句int ~f ( );和int (~f) ( );的含义分别为和。4.在C程序中,指针变量能够赋5.若定义char *p=“abcd”;则 printf(“%d”,*(p+4));的结果为
6.以下函数用来求出两整数之和,并通过形参将结果传回,请填空。void func(int x,int y,
){ *z=x+y; }
三、编程题1.编写一个程序计算一个字符串的长度。2.编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入17
整数为1到12时,显示相应的月份名,键入其它整数时显示错误信息。 3.编一程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。请用指针完成。4.编一程序,将字符串中的第m个字符开始的全部字符复制成另一个字符串。要求在主函数中输入字符串及m的值并输出复制结果,在被调函数中完成复制。5.设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。试编程。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)6.通过指针数组p和一维数组a构成一个3×2 的二维数组,并为a数组赋初值2、4、6、8、?。要求先按行的顺序输出此“二维数组”,然后再按列的顺序输出它。试编程。7.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)8.编写一程序,从键盘输入10个数存入数组data[10]中,同时设置一个指针变量 p指向数data,然后通过指针变量p对数组按照从小到大的顺序排序,最后输 出其排序结果。 9. 编一程序,从一个3行4列的二维数组中找出最大数所在的行和列,并将最大值及所在行列值打印出来。要求将查找和打印的功能编一个函数,二维数组的 输入在主函数中进行,并将二维数组通过指针参数传递的方式由主函数传递到 子函数中。 10. 编一程序,首先将一个包含10个数的数组按照升序排列,然后将从一指定位置m开始的n个数按照逆序重新排列,并将新生成的相互组输出。要求使用指 针控制方法实现上述功能。 第九章
结构体与共用体一、选择题1.在说明一个结构体变量时系统分配给它的存储空间是。A) 该结构体中第一个成员所需存储空间B) 该结构体中最后一个成员所需存储空间C) 该结构体中占用最大存储空间的成员所需存储空间D) 该结构体中所有成员所需存储空间的总和18
2.若有以下说明和语句:struct
}work, ~p=&则以下引用方式不正确的是A) work.no
B) (~p).no
D)work-&no3.有如下定义:
year, month,
{ char name[20];st
}对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是
A) year=1958
B) birthday.year=1958C) person.birthday.year=1958
D) person.year=19584.以下对结构体类型变量的定义中不正确的是A) #define
struct student
B) struct studentSTUDENT
D) struct{
struct student std1;5.设有以下说明语句struct stu{ }则下面的叙述不正确的是A) struct是结构体类型的关键字B) struct stu是用户定义的结构体类型C) stutype是用户定义的结构体类型名D) a和b都是结构体成员名6.C语言结构体类型变量在程序执行期间。A) 所有成员一直驻留在内存中B) 只有一个成员主留在内存中C) 部分成员驻留在内存中D) 没有成员驻留在内存中7.以下程序的运行结果是。# include
&stdio.h&main( )19
year, month,
}printf(“%d\n”,sizeof(struct date));
D)128.有如下定义struct person{char name[9];};struct person class[10]={“Johu”, 17,“Paul”, 19“Mary”, 18,“Adam 16,};根据上述定义,能输出字母M的语句是
。A) prinft(“%c\n”,class[3].mane);B) pfintf(“%c\n”,class[3].name[1]);C) prinft(“%c\n”,class[2].name[1]);D) printf(“%^c\n”,class[2].name[0]);9.设有如下定义struct ss{ char name[10];} std[3],* p=下面各输入语句中错误的是
。A) scanf(&%d&,&(*p).age);B) scanf(&%s&,&std.name);C) scanf(&%c&,&std[0].sex);D) scanf(&%c&,&(p-&sex))10.设有以下说明语句,则下面的叙述中不正确的是。struct ex {}A) struct结构体类型的关键字
B) example是结构体类型名C) x,y,z都是结构体成员名
D) struct ex是结构体类型二、填空题1.有如下定义:struct
}s[2]={{1,2},{3,4}}, ~p=s;则:表达式 ++p-&x 的结果是
。表达式 ++p-&x 的结果是。2.若有定义:struct
}n={1, 3, 5.0}};20
num ~pn=&n;则表达式pn-&b/n.a~++pn-&b的值是
,表达式(~pn).a+pn-&f的值是
。3.若要使指针p指向一个double类型的动态存储单元,请填空。p=
malloc(sizeof(double));4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是
。Struct stud{ char num[6];int s[4];} a,*p;
三、编程题1.试利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。2.试利用指向结构体的指针编制一程序,实现输入三个学生的学号、数学期中和期末成绩,然后计算其平均成绩并输出成绩表。3.请编程建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束。(链表头结点的data域不放数据,表空的条件是
ph-&next = =NULL)。第十章
文件一、选择题1.当已存在一个abc.txt文件时,执行函数fopen (“abc.txt”, “r++”)的功能是。A) 打开abc.txt文件,清除原有的内容B) 打开abc.txt文件,只能写入新的内容打开abc.txt文件,只能读取原有内容D) 打开abc.txt文件,可以读取和写入新的内容2.若用fopen( )函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开模式是
。A)“ab+”
B) “wb+”
D)“ab”3.使用fseek函数可以实现的操作是。 改变文件的位置指针的当前位置B) 文件的顺序读写文件的随机读写以上都不对
4.fread(buf,64,2,fp)的功能是
。 从fp文件流中读出整数64,并存放在buf中;B) 从fp文件流中读出整数64和2,并存放在buf中;从fp文件流中读出64个字节的字符,并存放在buf中;
从fp文件流中读出2个6421
个字节的字符,并存放在buf中;5.以下程序的功能是main( ){FILE
char str[ ]=”HELLO”;
fp=fopen(“PRN”,”w”);fpus(str,fp);fclose(fp);
}A) 在屏幕上显示“HELLO”B) 把“HELLO”存入PRN文件中在打印机上打印出“HELLO”以上都不对6.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是。A) EOF
D) NULL7.以下叙述中不正确的是。A) C语言中的文B) C语言中对二进制位的访问速度比文C) C语言中,随机读写方式不使用于文D) C语言中,顺序读写方式不使用于二进制文件8.以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。#include &stdio.h&main(){ FILE *fout=fopen('abc.txt','w');ch=fgetc(stdin);while(ch!='#'){ fputc(ch,fout);ch =fgetc(stdin);}fclose(fout);}出错的原因是
。A) 函数fopen调用形式有误B) 输入文件没有关闭C) 函数fgetc调用形式有误D) 文件指针stdin没有定义9、若fp为文件指针,且文件已正确打开,i为long型变量,以下程序段的输出结果是
。fseek(fp, 0, SEEK_END);i=ftell(fp);printf(&i=%ld\n&, i);22
B) fp所指文件的长度,以字节为单位C) 0
D) 2二、填空题1.C语言中根据数据的组织形式,把文件分为和2.使用fopen(“abc”,”r+”)打开文件时,若abc文件不存在,则。3.使用fopen(“abc”,”w+”)打开文件时,若abc文件已存在,则。4.C语言中文件的格式化输入输出函数对是;文件的数据块输入输出函数对是
;文件的字符串输入输出函数对是
。5.C语言中文件指针设置函数是三、编程题1.编写一个程序,由键盘输入一个文件名,然后把从键盘输入的字符依次存放到该文件中,用‘#’作为结束输入的标志。2.编写一个程序,建立一个abc文后显示该文件的内容。3.编写一程序,查找指定的文4.编写一程序fcat.c,把命令行中指定的多个文它把文
C语言概述一、选择题1~5
B二、填空题1.主函数
main函数2.函数的说明部分
函数体3.最外层的一对大括弧内的部分4.变量定义部分
执行部分5.输入和输出函数三、程序题1. 把“You are welcome to China!”这个句子以每个单词一行的形式显示在屏幕上。
&stdio.h&main( ){ printf(“You\n”);23
printf(“are\n”);printf(“ welcome\n”);printf(“ to China!\n”);}2. 用三个printf语句把“I love Beijing Tiananmen”显示在一行上。#include
&stdio.h&main( ){ printf(“I love
”);printf(“ Beijing”);printf(“Tiananmen \n”);}
数据类型与基本运算一、选择题1~5
A二、填空题1.控制语句
函数调用语句
表达式语句2.函数调用3.向终端输出一个字符4.在终端设备上(或系统隐含的输出设备上)按照指定的格式进行输出5.格式说明
普通字符第3章
顺序结构程序设计编程题1.#include
&stdio.h&main( ){char
c1,c2;c1=getchar( );printf(“%c,%d\n”,c1,c1);c2=c1+?A?-?a?;printf(“%c,%d\n”,c2,c2);24 D
}2.#include
&stdio.h&#include
&math.h&main( ){float
a,b,c,disc,x1,x2,realpart,scanf(“%f%f%f”,&a,&b,&c);printf(“the equation”);if(fabs(a)&=1e-6)printf(“is not quadratic”);else disc=b*b-4*a*c;if(fabs(disc) &=1e-6)printf(“has two equal roots:%8.4f\n”,-b/(2*a));
if (disc&1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf(“has distincr real roots: %8.4f\n”,x1,x2);
}else{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf(“has complex roots:\n”);printf(“%8.4f+%8.4fi\n”,realpart,imagpart);
printf(“%8.4f-%8.4fi\n”,realpart,imagpart);
}}3.mian( ){printf(“I am a student.\n”);printf(“I love China.\n”);}第4章
选择结构程序设计一、选择题1~5
6~10二、填空题1.else与它前面最近的一个if配对25 A
2.由键盘输入一个数,打印出它的类型标识符3.if(a&=b) {x=1; printf(“ * * * * y=%d\n”,y); }else
{ y=2; printf(“ # # # # x=%d\n”,x); }三、编程题1.#include
&math.h&#include
&stido.h&main( ){float a,b,c,s,s1;printf(“Please enter 3 reals:\n”);scanf(“%f%f%f”,&a,&b,&c);if((a+b)&c&&(a+c)&b&&(b+c)&a){s=(a+b+c)*0.5;s1=s*(s-a)*(s-b)*(s-c);s=sqrt(s1);printf(“\nArea of the triangle is %f\n”,s);}elseprintf(“It is not triangle!\n”);}2.#include &stdio.h&#define pi 3.14159main( ){float r,c,a;printf(“input r,k\n”);scanf(“%f%d”,&r,&k);switch(k){case 1: a=pi*r*r; printf(“area=%f\n”,a);case 2: c=2*pi*r;printf(“circle=%f\n”,c);cese 3: a=pi*r*r;c=2*pi*r;printf(“area=%f circle=%f\n”,a,c); }}3. main( ){int year,scanf(“%d”,&year);if(year%4= =0){if(year%100= =0){if(year%400= =0)26
leap=1;else
leap=0;}else
leap=1;}else
leap=0;if(leap)printf(“%d is ”,year);else
printf(“%d is not ”,year);printf(“ a leap year\n”);}4.#include &math.h&main(){float x,y;scanf(“%f”,&x);if(x&0)
y=x*x;else
if(x&=0&&x&10)
y=-0.5*x+10;else
y=x-sqrt(x);printf(“y=%f”,y);}5.main(){scanf(“%f”,&score);if(score&=90)
printf(“A”);else if(score&=80)
printf(“B”);else if(score&=70)
printf(“C”);else if(score&=60)
printf(“D”);else
printf(“E”);}第5章
循环结构程序设计一、选择题1~5
B二、填空题1.(1)先判断条件是否成立(为真),若成立(为真)再执行循环语句27
(2)先执行循环语句,再判断条件是否成立(为真),若成立则继续执行循环,若不成立,则结束循环。do-while至少执行一次循环语句2.表达式1;while(表达式2)表达式3;3.终止包含它的最内层循环的执行。或从switch-case语句中跳出,执行后面的语句4.(1)switch-case语句(2)循环5.结束本次循环执行三、编程题1.mian( ){int n=0,m=0,temp,r;printf(“Please Input m and n value:\n”);scanf(“%d%d”,&m,&n);if(m&n){temp=m;m=n;n=}r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf(“The MAX Factor is %d\n”,n);}2.#include
&stdio.h&main( ){int n=1,m=0,k,mod_mn=1;printf(“Please Input m value:\n”);scanf(“%d”,&m);n=1;for(k=0;;k++){mod_mn=m/(n*10);printf(“%d”,(m-mod_mn*n*10)/n);if(mod_mn= =0)28
n*=10;}}3.#include &stdio.h&main( ){int l,m,n,answer_flag=0;n=1;printf(“Big Rooster,Hen,Chickabiddy\n”);for(l=0;l&=20;l++)for(m=0;m&=(100-l*5)/3;m++){n=(100-l*5-m*3)*3;if(l*m*n&0&&l+m+n= =100&&(l*5+m*3+n/3)= =100)
{printf(“%-4d%-4d%-4d\n”,l,m,n);answer_flag=1;}}if(answer_flag= =0)printf(“Not Answer”);}Big Rooster,Hen,Chickabiddy4
844.#include &stdio.h&#include &math.h&main( ){int k,l,m,n=0;printf(“Please Input n:\n);for(m=101;m&=200;m+=2){if(n%10= =0)
printf(“\n”);k=sqrt(m);for(l=2;l&=k;l++)if(m%l= =0)if(l&=k+1) {printf(“%d”,m); n++; }}}101 103 107 109 113 127 131 137 139 149151 157 163 167 173 179 181 191 193 19729
1995. #include &stdio.h&main( ){int l,m,n,answer_flag=0;n=1;printf(“\n1Cent Coin,2Cent Coin,5Cent Coin\n”);for(l=0;l&=100;l++)for(m=0;m&=(100-l)/2;m++){n=(100-l-m*2)/5;if(l+m*2+n*5= =100){printf(“%-4d%-4d%-4d\n”,l,m,n);answer_flag+=1;}}if(answer_flag= =0)printf(“Not Answer”);else
printf(“Total of Exchange Method is %d”,answer_flag); }共有541种换法。6. #include &stdio.h&main( ){int m1,n1,n,k,float s=0;printf(“Please Input n:\n”);scanf(“%d”,&n);m1=1;n1=2;for(k=0;k&n;k++){s+=(float)n1/m1;temp=m1;m1=n1;n1=temp+n1;}printf(“\ns=%f”,s);}前20项的和为32.6602597. #include &stdio.h&main( )30
{int k,l,n;double e=1,fact_k=1;printf(“Please Input n:”);scanf(“%d”,&n);for(k=1;k&=n;k++){fact_k=1;for(l=1;l&=k;l++)fact_k*=1;e+=1/(double)fact_k;}printf(“e=%lf”,e);}Please Input n:100e=2.7182828. #include &stdio.h&main( ){int k,l,m,n;printf(“Please Input n:\n”);scanf(“%d”,&n);for(k=1;k&=n;k++){for(m=0,l=1;l&=k/2;l++)if(!(k%l))
m+=l;if(m= =k)
printf(“%4d”,k);}}6
28 4969. #include
&stdio.h&main( ){int year=0,number=0;for(year=2000;year&3000;year++){if((year%4= =0&&year%100!=0)||year%400= =0)
{printf(“%d”,year);number++;if(number%10= =0)
printf(“\n”);}}printf(“\ntotal number of leap year is %d”,number); }31
数组一、选择题1~5
C二、填空题1.标识符2.常量
变量3.逐个引用
整个数组4.static5.静态(static)五、编程题1.main( ){ int i,j,m,a[11];for(i=1;i&=10;i++)scanf(“%d”,&a[i]);
for( i=1;i&=9;i++)for(j=1;j&=10-i;j++)if(a[j]&a[j+1]){ m=a[j];
a[j]=a[j+1];a[j+1]=m;
}for(i=1;i&=10;i++)printf(“%d ”,a[i]);}2.#include &stdio.h&#include &math.h&main( ){int i,max,min,data[10];float average=0,sum=0;for(i=0;i&10;i++)scanf(“%d”,&data[i]);max=min=data[0];for(i=0;i&10;i++){if(max&data[i])
max=data[i];32 6~10
if(min&data[i])min=data[i];sum+=data[i];}average=sum/10;printf(“max=%d,min=%d,average=%f”,max,min,average); }3. #include &stdio.h&main( ){int i,j,k,a[2][3],b[3][2];printf(“input 2*3 integer\n”);for(i=0;i&2;i++)for(j=0;j&3;j++)scanf(“%d”,&a[i][j]);for(i=0;i&2;i++)for(j=0;j&3;j++)b[j][i]=a[i][j];printf(“The Original is:\n”);for(i=0;i&2;i++){for(j=0;j&3;j++)printf(“%d”,a[i][j]);printf(“\n”);}printf(“The Result is:\n”);for(i=0;i&3;i++){for(j=0;j&2;j++)printf(“%d”,b[i][j]);printf(“\n”);}}4.main( ){int i,array[10];int min,k=0;printf(“\nPlease input array 10 elements\n”);for(i=0;i&10;i++)scanf(“%d”,&array [i]);printf(“Before exchange:\n”);for(i=0;i&10;i++)33
printf(“%5d”,array[i]);min=array[0];for(i=1;i&10;i++)if(min&array[i]){min= array[i];
k=i; }array[k]=array[0];array[0]=printf(“\nAfter exchange:\n”);for(i=0;i&10;i++)printf(“%5d”,array[i]);printf(“\nk=%d\nmin=%d\n”,k,min);}5.main( ){int i,n;double insert_value,orig_data[20],result_data[21];
printf(“\n Please input N (&=20):\n”);scanf(“%d”,&n);printf(“\nPlease enter %d value(from small to big)\n”,n);
for(i=0;i&n;i++)scanf(“%lf”,&orig_data[i]);printf(“\nInput Insert value:”);scanf(“%lf”,&insert_value);i=0;while(insert_value&orig_data[i]&&i&n){ result_data[i]=orig_data[i];
}result_data[i]=insert_for(i=i+1;i&n+1;i++)result_data[i]= orig_data[i-1];puts(“\n”);for(i=0;i&n+1;i++){printf(“%10.4f”,result_data[i]);if((i+1)%5= =0)
puts(“\n”);}}6.main( ){int mat[20][20];int i,m,sum=0;34
printf(“\n Please input dimension of matrix(&=20)\nm=?”);scanf(“%d”,&m);printf(“Please input element of %d*%d matrix\n”,m,m);for(i=0;i&m;i++)for(j=0;j&m;j++)scanf(“%d”,&mat[i][j]);if(m%2= =1)sum=-mat[m/2][m/2];for(i=0;i&m;i++)sum=sum+mat[i][i]+mat[i][m-1-i];printf(“\nsum=%d\n”,sum);}
函数一、选择题1~5
D二、填空题1. 程序中的main( )函数2. 函数说明部分
函数体3. a[0]=1,a[1]=2
单向值传递,不能返回交换后的值4. a[0]=2,a[1]=1
因实参是地址,已对指定地址中的内容进行了交换5. fun(double
b[][])6. 包含它的函数
调用函数三、编程题1.main( ){float grade[10],i,for(i=0;i&10;i++)scanf(“%f”,grade[i]);aver=fensu(grade,10)for(i=0;i&10;i++)if(grade[i]&aver)
printf(“%f”,grade[i]);}fensu(float a[10],int n){ float sum=0,35for(i=0;i&n;i++)sum=sum+a[i];
pj=sum/n;return(pj);}2.#include &stdio.h&
func(int num){int s=0;num=abs(num);do{s+=num%10;num/=10;}while(num);}main( ){printf(“输入一个整数:”);
scanf(“%d”,&n);printf(“结果:%d”,func(n)); }3.double add(double x,double y)
{return x+y;
}4. double mypow(double x,int y) {p=1.0;for(i=1;i&=y;++i)
p=p*}5.sum(int n){int i,k=0;for(i=0;i&=n;i++)
k+=i;}6.fun(int x,int y){z=fabs(x-y);return(z);}36
7.isprime (int a){for(i=2;i&sqrt((double)a);i++)
if(a%i= =0) return 0; return 1;}8. #include &stdio.h&main(){int i=5;void palin(int n);printf(&\40:&);palin(i);printf(&\n&);}void palin(int n){if(n&=1){next=getchar();printf(&\n\0:&);putchar(next); }else{next=getchar();palin(n-1);putchar(next); }}9. #include &stdio.h&main(){int i,n;int fact();scanf(“%d”,&n);for(i=0;i&n;i++)printf(&%d!=%d\n&,i,fact(i)); }int fact(int j){if(j==0)sum=1;elsesum=j*fact(j-1);37
}10.main( ){float average(float b[]);void sort(float b[]);float a[10],j,for(j=0;j&10;j++)scanf(“%f”,&a[j]);aver=average(a);printf(“aver=%f\n”,aver);sort(a);for(j=0;j&10;j++)printf(“%.2f
”,a[j]);}float average(float b[ ]){
float sum=0,for(j=0;j&10;j++)sum=sum+b[i];aver=sum/10.0;return(aver);}void sort(float b[ ]){int i,j,max,k;for(i=0;i&10;i++){max=b[i]; k=i;for(j=i+1;j&10;j++)if(max&b[j])
{max=b[j]; k=j;}b[k]=b[i];b [i]=}}第8章
指针一、选择题1~5
B二、填空题1.12
122.地址常量
数组名3. 返回一个指向整型值的指针的函数
指向一个返回整型值的函数的指针4. 地址
NULL(或@\0@,或0,或空值)5. 0三、编程题1. #include &stdio.h&main( ){char *printf(“输入一字符串:”);gets(str);printf(“[%s]的长度为:%d\n”,str,string_length(str));}string_length(char *s){int len=0;while(*s++)len++;return(len);}2. #include &stdio.h&main( ){char *months[ ]={“January”,”February”,”March”,”April”,”May”,”June”,”July”,
“August”,”September”,”October”,”November”,”December”};printf(“月份:”);scanf(“%d”,&n);if(n&=12&&n&=1)printf(“%d月的英文名称是%s\n”,n,*(months+n-1));elseprintf(“输入的月份无效!\n”);}3. #include &stdio.h&main( ){static char x[ ]=”computer”;char *p;39
for(p=x;p&x+7;p+=2)putchar(*p);printf(“\n”);}4. #include &stdio.h&#include &string.h&main( ){char
str1[80],str2[80];printf(“Input a string:\n”);gets(str2);printf(“Input m:\n”);scanf(“%d”,&m);if(strlen(str2)&m)printf(“Err input!\n”);else
{copystr(str1,str2,m);printf(“Result is:\n”,str1);}}copystr(char *p1,char *p2,int m){int n=0;while(n&m-1){p2++,n++;
}while(*p2!=?\0?){*p1=*p2;p1++;p2++;
}*p1=?\0?;}5.#include &stdio.h&main( ){int b[10],position,num,k,*q1,*q2,printf(“Input 10 sorted numbers\n”);for(k=0;k&10;k++)scanf(“%d”,&b[k]);printf(“\nInput the position:\n”);scanf(“%d”,& position);printf(“\nInput the number of data that be sorted again:\n”);
scanf(“%d”,&num);printf(“The old array b is:\n”);40
for(k=0;k&10;k++)printf(“%4d”,b[k]);printf(“\n”);q1=&b[position-1];q2=&b[position-2+num];for(;q1&&b[position-1]+num/2;q1++,q2--)
{temp=*q1;
printf(“The new array b is:\n”);for(k=0;k&10;k++)printf(“%4d”,b[k]);}6.main( ){int i,j,a[6]={2,4,6,8,10,12},*p[3];for(i=0;i&3;i++)
p[i]=&a[2*i];for(i=0;i&3;i++){ for(j=0;j&2;j++)
printf(“%4d”,p[i][j]);
printf(“\n”);}for(i=0;i&2;i++){ for(j=0;j&3;j++)
printf(“%4d”,p[j][i]);
printf(“\n”);}}7. #include &stdio.h&main(){float peven(),podd(),dcall();while (1){scanf(&%d&,&n);if(n&1)}if(n%2==0){printf(&Even=&);sum=dcall(peven,n);}else{printf(&Odd=&);sum=dcall(podd,n);}41printf(&%f&,sum);}float peven(int n){s=1;for(i=2;i&=n;i+=2)s+=1/(float)i;return(s);}float podd(int n){s=0;for(i=1;i&=n;i+=2)s+=1/(float)i;return(s);}float dcall(fp,n)float (*fp)();{s=(*fp)(n);return(s);}8. #include &stdio.h&main( ){int i,j,temp,data[10],*p;printf(“\nInput 10 integer\n”);
for(i=0;i&10;i++)scanf(“%d”,&data[i]);
p=printf(“The Old Values are:\n”);
for(i=0;i&10;i++)printf(“%d”,data[i]);
printf(“\n”);for(i=0;i&9;i++)for(j=i+1;j&10;j++)42
if(*(p+i)&*(p+j)){temp=*(p+i);*(p+i)=*(p+j);*(p+j)=}printf(“The New Values are:\n”);for(i=0;i&10;i++)printf(“%d”,data[i]);}9. #include &stdio.h&#include &string.h&void funct(int(*array)[4],int m,int n){int i,j,max,line=0,col=0;int (*p)[4];max=array[0][0];p=for(i=0;i&m;i++)for(j=0;j&n;j++)if(max&p[i][j]){max= p[i][j];line=i;col=j;}printf(“max=%d,line=%d,col=%d”,max,line,col);
}main( ){int data[3][4],i,j;printf(“\nInput 12 integer:\n”);for(i=0;i&3;i++)for(j=0;j&4;j++)scanf(“%d”,&data[i][j]);for(i=0;i&3;i++){for(j=0;j&4;j++)printf(“%4d”,data[i][j]);printf(“\n”);}funct(data,3,4);}43
10. #include &stdio.h&main( ){int data[10],m,n,j,*p1,*p2,
printf(“\nInput 10 integer\n”);
for(j=0;j&10;j++)scanf(“%d”,&data[j]);printf(“Input m and n:\n”);scanf(“%d%d”,&m,&n);if(m&1||m&10||n&1||n&10||(m+n)&11)
{printf(“Input Error!\n”);exit(0);}sort(data,10);printf(“Result of sort is:\n”);for(j=0;j&10;j++)printf(“%d”,data[j]);printf(“\n”);p1=data+m-1;p2=data+m+n-2;for(;p1&data+m-1+n/2;p1++,p2--){temp=*p1;
printf(“Final Result is:\n”);for(j=0;j&10;j++)printf(“%d”,data[j]);}sort(int *p,int n){int i,j,for(i=0;i&n-1;i++)for(j=i+1;j&n;j++)if(*(p+i)&*(p+j)){ temp=*(p+i);*(p+i)=*(p+j);*(p+j)=}}44
结构体与共用体一、选择题1~5
B二、填空题1. 2
6.03. (double *)4. 22三、编程题1.main(){struct study{}scanf(“%d %d”,&math.mid,&math.end);math.average=(math.mid+math.end)/2;printf(“average=%d\n”,math.average);}2.struct stu{}s[3];main( ){struct stu *p;for(p=s;p&s+3;p++){scanf(“%d %d %d”,&(p-&num),&(p-&mid),&(p-&end));p-&ave=(p-&mid+p-&end)/2;}for(p=s;p&s+3;p++)printf(“%d %d %d %d\n”,p-&num,p-&mid,p-&end,p-&ave);
}3. #include &stdio.h&45
struct list {
struct list * };struct list *creatlist( ){struct list *p,*q,*ph=(struct list *)malloc(sizeof(struct list));p=q=printf(“Input an integer number,enter C1 to the end:\n”);scanf(“%d”,&a);while(a!=-1){p=(struct list *)malloc(sizeof(struct list));p-&data=a;q-&next=p;q=p;scanf(“%d”,&a);}p-&next=?\0?;return(ph);}main( ){struct list *head=creatlist();}第10章
预处理命令与位运算一、选择题1~5
B二、填空题1.宏定义
条件编译2.8803.2400三、编程题1.#define MYALPHA(c) (c&=97&&c&=122||c&=65&&c&=90)?1:02.#define S(a,b,c) ((a+b+c)/2)#define AREA(a,b,c) (sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)* (S(a,b,c)-c)))3.#include &stdio.h&46
#define max3(a,b,c) (a&b?a:b)&c?(a&b?a:b):c
main( ){printf(“Max=%d\n”,max3(3+5,4+2,5+1));
} 或者:#include &stdio.h&#define
(a&b?a:b)#define
max3(a,b,c)
max2(a,b)&c?max2(a,b):c
main( ){printf(“Max=%d\n”,max3(3+5,4+2,5+1));
文件一、选择题1~5
C二、填空题1. 文2.出错3.清除abc原有的数据4.fscanf/fprintf
fread/fwrite
fgets/fputs5.
ftell三、编程题1. #include &stdio.h&main( ){FILE *char ch,fname[10];printf(“输入一个文件名:”);gets(fname);if((fp=fopen(fname,”w+”))= =NULL){printf(“不能打开%s文件\n”,fname);exit(1);}printf(“输入数据:\n”);while((ch=getchar())!=?#?)fputc(ch,fp);fclose(fp);}47 D
2. #include &stdio.h&#include &string.h&main( ){FILE *char msg[ ]=”this is a test”;char buf[20];if((fp=fopen(“abc”,”w+”))= =NULL)
{printf(“不能建立abc文件\n”);
exit(1);}fwrite(msg,strlen(msg)+1,1,fp);fseek(fp,SEEK_SET,0);fread(buf,strlen(msg)+1,1,fp);printf(“%s\n”,buf);fclose(fp);}fclose(fp);}3./*filename:findword.c*/#include &stdio.h&main(int argc,char *argv[ ]){char buff[256];FILE *if(argc&3){printf(“Usage findword filename word\n”);
exit(0);}if((fp=fopen(argv[1],”r”))= =NULL) {printf(“不能打开%s文件\n”,argv[1]);
exit(1);}lcnt=1;while(fgets(buff,256,fp)!=NULL) {if(str_index(argv[2],buff)!= -1)printf(“%3d:%s”,lcnt,buff);lcnt++;}48
fclose(fp);}int str_index(char substr[ ],char str[ ]) {int i,j,k;for(i=0;str[i];i++)for(j=i,k=0;str[j]= =substr[k];j++,k++)
if(!substr[k+1])return(i);return(-1);}使用命令:findword findword.c printf执行本程序的结果如下:10:printf(“Usage findword filename word\n”); 15:printf(“不能打开%s文件\n”,argv[1]); 22:printf(“%3d:%s”,lcnt,buff);4. /*filename:fcat.c*/#include &stdio.h&unsigned char *main(int argc,char *argv[ ]){if(argc&=2){printf(“Usage:fcat file1 file2 file3\n”);
exit(1);}buffer=(unsigned char *)malloc(80);for(i=2;i&i++)fcat(argv[1],argv[i]);}fcat(char target[ ],char source[ ]){FILE *fp1,*fp2;if((fp1=fopen(target,”a”))= =NULL)
{printf(“文件%s打开失败!\n”,target);
exit(1);}if((fp2=fopen(source,”r”))= =NULL){printf(“文件%s打开失败!\n”,source);
exit(1);49
}fputs(“\n”,fp1);fputs(“Filename:”,fp1);fputs(source,fp1);fputs(“\n--------------------------------------------------------------\n”,fp1); while(fgets(buffer,80,fp2))fputs(buffer,fp1);fclose(fp1);fclose(fp2);}
实验2 数据类型及基本运算6. 参考程序如下:#include&stdio.h&void main(){char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(&password is %c%c%c%c%c\n&,c1,c2,c3,c4,c5); }运行结果:
实验3 最简单的C程序设计2.参考程序如下:#include&stdio.h&void main(){float h,r,l,s1,s2,v1,v2;float pi=3.14159;printf(&input
r=,h=&);scanf(&%f,%f&,&r,&h);l=2*pi*r;s1=pi*r*r;s2=4*pi*r*r;v1=3.0/4.0*pi*r*r*r;v2=pi*r*r*h;printf(&圆周长为l=
%6.2f\n&,l); printf(&圆面积s1=
%6.2f\n&,s1); printf(&圆球表面积s2=
%6.2f\n&,s2); printf(&圆球的体积v1=
%6.2f\n&,v1); printf(&圆柱的体积v2=
%6.2f\n&,v2); }
运行结果:
3.参考程序如下:#include&stdio.h&void main(){char
ch1,ch2;printf(&请输入两个字符:&);ch1=getchar();ch2=getchar();printf(&用函数putchar输出两个字符:&);51
putchar(ch1);putchar(ch2);putchar('\n');printf(&用函数printf输出两个字符:&);printf(&%c,%c\n&,ch1,ch2);}运行结果:
4. 参考程序如下:#include&stdio.h&void main(){float x1,x2,x3,printf(&请输入3个学生成绩:&);scanf(&%f,%f,%f&,&x1,&x2,&x3);aver=(x1+x2+x3)/3.0;printf(&3个学生的成绩是%6.2f,%6.2f,%6.2f\n&,x1,x2,x3); printf(&平均成绩为%6.2f\n&,aver);}运行结果:
实验4 选择结构程序设计1. 参考程序:#include
&stdio.h&main( ){int x,y;printf(&请输入x的值:&);scanf(&%d&,&x);if(x&1)y=x;else52
if(x&10)y=2*x-1;elsey=3*x-11;printf(&x的值=%d,y的值=%d\n&,x,y);}运行结果:(1)(2)(3)2. 参考程序:(1)使用if语句的main函数结构如下:#include&stdio.h&void main(){printf(&请输入成绩的值:&);scanf(&%f&,&score);if
(score&=90)grade='A';else
(score&=80)grade='B';else
if (score&=70)grade='C';else
if (score&=60)grade='D';else
grade='E';printf(&成绩的值=%6.2f,成绩等级=%c\n&,score,grade);
}运行结果:53
(2)使用switch语句的main函数结构如下:参考程序:#include&stdio.h&void main(){printf(&请输入成绩的值:&);scanf(&%f&,&score);switch(int(score/10)){case
grade='A';case
grade='B';case
grade='C';case
grade='D';default:
grade='E';}printf(&成绩的值=%6.2f,成绩等级=%c\n&,score,grade); }运行结果:
3. 参考程序如下:#include&stdio.h&void main(){int c1,c2,c3,c4,c5,printf(&请输入一个整数(0---99999)&);scanf(&%d&,&num);if (num&99999)printf(&输入的数超过5位\n&);else if(num&0)printf(&输入的数是一个负数\n&);else{54
c1=num/10000;c2=(num-c1*1;c3=(num/100)%10;c4=(num/10)%10;c5=num%10;if(c1&0){printf(&\n%d是一个5位数\n&,num);printf(&其各位分别为:%d,%d,%d,%d,%1d\n&,c1,c2,c3,c4,c5);
printf(&逆序输出为:%d%d%d%d%d\n&,c5,c4,c3,c2,c1);
if(c2&0){printf(&\n%d是一个4位数\n&,num);printf(&其各位分别为:%d,%d,%d,%d\n&,c2,c3,c4,c5);
printf(&逆序输出为:%d%d%d%d\n&,c5,c4,c3,c2);
}else if(c3&0){printf(&\n%d是一个3位数\n&,num);printf(&其各位分别为:%d,%d,%d\n&,c3,c4,c5);
printf(&逆序输出为:%d%d%d\n&,c5,c4,c3);
}else if(c4&0){printf(&\n%d是一个2位数\n&,num);printf(&其各位分别为:%d,%d\n&,c4,c5);
printf(&逆序输出为:%d%d\n&,c5,c4);
}else if(c5&0)printf(&\n%d是一个1位数\n&,num);
}}运行结果:(1)(2)55
(3)4. 参考程序如下:#include&stdio.h&void main(){int a,b,c,d,t;printf(&请输入4个整数&);scanf(&%d,%d,%d,%d&,&a,&b,&c,&d);printf(&输入4个整数为
%4d,%4d,%4d,%4d\n&,a,b,c,d); if (a&b){t=a;a=b;b=t;}if (a&c){t=a;a=c;c=t;}if (a&d){t=a;a=d;d=t;}if (b&c){t=b;b=c;c=t;}if (b&d){t=b;b=d;d=t;}if (c&d){t=c;c=d;d=t;}printf(&输入4个整数排序后为%4d,%4d,%4d,%4d\n&,a,b,c,d); }运行结果:
以上程序按从大到小顺序输出,修改如下:#include&stdio.h&void main(){int a,b,c,d,t;printf(&请输入4个整数&);scanf(&%d,%d,%d,%d&,&a,&b,&c,&d);56
printf(&输入4个整数为
%4d,%4d,%4d,%4d\n&,a,b,c,d); if (a&b){t=a;a=b;b=t;}if (a&c){t=a;a=c;c=t;}if (a&d){t=a;a=d;d=t;}if (b&c){t=b;b=c;c=t;}if (b&d){t=b;b=d;d=t;}if (c&d){t=c;c=d;d=t;}printf(&输入4个整数排序后为%4d,%4d,%4d,%4d\n&,a,b,c,d); }运行结果:
5. 参考程序如下:#include&stdio.h&void main(){int
a=12,b=6,c;printf(&请输入运算符:&);scanf(&%c&,&op);switch(op){case
'+': c=a+b;printf(&a%cb=%d\n&,op,c);case
'-': c=a-b;printf(&a%cb=%d\n&,op,c);case
'*': c=a*b;printf(&a%cb=%d\n&,op,c);case
'/': c=a/b;printf(&a%cb=%d\n&,op,c);default: printf(&操作符输入错误\n&);}}运行结果:57
实验5 循环控制1. 参考程序如下:#include&stdio.h&void main(){int m,n,r,tm,printf(&输入两个正整数:&);scanf(&%d,%d&,&m,&n);tm=m;tn=n;if(m&n){r=m;m=n;n=r;}r=m%n;while(r){m=n;n=r;r=m%n;}printf(&最大公约数为:%d\n&,n);printf(&最小公倍数为:%d\n&,tm*tn/n); }运行结果:
2. 参考程序如下:#include&stdio.h&void main(){int n,i;double e,p,t;printf(&输入n的值:&);58scanf(&%d&,&n);e=1;t=1;p=1;i=1;while(t&=1e-7){e=e+t;i++;p=p*i;t=1.0/p;}printf(&e=%.6f\n&,e);
}运行结果:
3. (1)for循环参考程序如下:#include&stdio.h&void main(){int n,i,sum=0;printf(&输入n的值:&); scanf(&%d&,&n);for(i=1;i&=n;i++)if(i%3==0
|| i%7==0)
sum=sum+i;printf(&sum=%d\n&,sum); }运行结果:
(2)while循环参考程序如下:#include&stdio.h&void main(){int n,i,sum=0;printf(&输入n的值:&); scanf(&%d&,&n);59
i=1;while(i&=n){if(i%3==0 || i%7==0)sum=sum+i;i++;}printf(&sum=%d\n&,sum);}运行结果:
4. 参考程序如下:#include&stdio.h&void main(){int i,x;x=1;for(i=9;i&=1;i--)x=(x+1)*2;printf(&摘的桃子数x=%d\n&,x);}运行结果:
如果每天吃了前一天剩下的一半加二个,则x=2*(x+2)
5. 参考程序如下:#include&stdio.h&void main(){int w,m,c;for(m=1;m&9;m++)for(w=1;w&12;w++)for(c=1;c&36;c++)if(m+c+w==36 && 4*m+3*w+c/2==36) printf(&男=%d,女=%d,小孩=%d\n&,m,w,c);}运行结果:60
实验6 数组1.参考程序如下:#include&stdio.h&void main(){int i,j,t,a[10];printf(&输入10个数:\n&); for(i=0;i&10;i++)scanf(&%d&,&a[i]);putchar('\n');printf(&输入的10个数为\n&); for(i=0;i&10;i++)printf(&%4d&,a[i]);for(i=0;i&10;i++)for(j=i+1;j&10;j++)if(a[i]&a[j]){t=a[i];a[i]=a[j];a[j]=t;} printf(&\n排序后的10个数为\n&); for(i=0;i&10;i++)printf(&%4d&,a[i]);putchar('\n');}运行结果:
2. 参考程序如下:#include &stdio.h&#define
int main(){ int i,number,top,bott,mid,loca,a[N],flag=1,printf(&enter data:\n&);scanf(&%d&,&a[0]);i=1;while(i&N){scanf(&%d&,&a[i]);if (a[i]&=a[i-1])i++;elseprintf(&enter this data again:\n&);}printf(&\n&);for (i=0;i&N;i++)printf(&%5d&,a[i]);printf(&\n&);while(flag){printf(&input number to look for:&);scanf(&%d&,&number);sign=0;top=0;
//top是查找区间的起始位置bott=N-1;
//bott是查找区间的最末位置if ((number&a[0])||(number&a[N-1]))
//要查的数不在查找区间内
// 表示找不到while ((!sign) && (top&=bott)){mid=(bott+top)/2;if (number==a[mid]){loca=printf(&Has found %d, its position is %d\n&,number,loca+1);
sign=1;}else if (number&a[mid])bott=mid-1;elsetop=mid+1;}if(!sign||loca==-1)62
printf(&cannot find %d.\n&,number);;
printf(&continu or not(Y/N)?&);
scanf(& %c&,&c);if (c=='N'||c=='n')flag=0;}return 0;}运行结果:
3. 参考程序如下:#include &stdio.h&int main(){ char s1[80],s2[40];int i=0,j=0;printf(&input string1:&);scanf(&%s&,s1);printf(&input string2:&);scanf(&%s&,s2);while (s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf(&\nThe new string is:%s\n&,s1);
return 0;}
运行结果:63
4.参考程序如下:#include &stdio.h&#define N 4#define M 5
/* 数组为4行5列 */int main(){int i,j,k,a[N][M],max,maxj,printf(&please input matrix:\n&);for (i=0;i&N;i++)
/* 输入数组 */for (j=0;j&M;j++)scanf(&%d&,&a[i][j]);for (i=0;i&N;i++){max=a[i][0];
/* 开始时假设a[i][0]最大 */maxj=0;
/* 将列号0赋给maxj保存 */for (j=0;j&M;j++)
/* 找出第i行中的最大数 */if (a[i][j]&max){max=a[i][j];
/* 将本行的最大数存放在max中 */maxj=j;
/* 将最大数所在的列号存放在maxj中 */
/* 先假设是鞍点,以flag为1代表 */for (k=0;k&N;k++)if (max&a[k][maxj])
/* 将最大数和其同列元素相比 */{flag=0;
/* 如果max不是同列最小,表示不是鞍点令flag1为0 */}if(flag)
/* 如果flag1为1表示是鞍点 */{printf(&a[%d][%d]=%d\n&,i,maxj,max);
/* 输出鞍点的值和所在行列号 */}}if(!flag)
/* 如果flag为0表示鞍点不存在 */printf(&It is not exist!\n&);64
return 0;}运行结果:(1)无鞍点:
(2)有鞍点:
函数1. 参考程序如下:#include &stdio.h&int main(){int prime(int);printf(&input an integer:&);scanf(&%d&,&n);if (prime(n))printf(&%d is a prime.\n&,n);elseprintf(&%d is not a prime.\n&,n);return 0;}
int prime(int n){int flag=1,i;for (i=2;i&n/2 && flag==1;i++)if (n%i==0)flag=0;return(flag);}
程序运行结果:
2. 参考程序如下:#include &stdio.h&#include &string.h&int main(){int alphabetic(char);int longest(char []);char line[100];printf(&input one line:\n&);gets(line);printf(&The longest word is :&);for (i=longest(line);alphabetic(line[i]);i++)
printf(&%c&,line[i]);printf(&\n&);return 0;}
int alphabetic(char c){if ((c&='a' && c&='z')||(c&='A'&&c&='z'))
return(1);elsereturn(0);}
int longest(char string[]){int len=0,i,length=0,flag=1,place=0,
for (i=0;i&=strlen(string);i++)if (alphabetic(string[i]))if (flag){point=i;flag=0;}elselen++;else{flag=1;66
if (len&=length){length=place=len=0;}}return(place);}程序运行结果:
3. 参考程序如下:#include &stdio.h&int main(){ void convert(int n);printf(&input an integer: &);scanf(&%d&,&number);printf(&output: &);if (number&0){putchar('-');putchar(' ');
/* 先输出一个‘-’号和空格 */
number=-}convert(number);printf(&\n&);return 0;}
void convert(int n){if ((i=n/10)!=0)convert(i);putchar(n%10+'0');putchar(32);}程序运行结果:67
4. 参考程序:#include &stdio.h&int main(){int hcf(int,int);int lcd(int,int,int);
int u,v,h,l;printf(&请输入两个数:&);
scanf(&%d,%d&,&u,&v);
h=hcf(u,v);printf(&最大公约数=%d\n&,h);
l=lcd(u,v,h);printf(&最小公倍数=%d\n&,l);
return 0;}
int hcf(int u,int v){int t,r;if (v&u){t=u;u=v;v=t;}while ((r=u%v)!=0)
{u=v;v=r;}return(v);}
int lcd(int u,int v,int h)
{return(u*v/h);}运行结果:
5. 参考程序:#include &stdio.h&#define MAX 1000
int main(){ int htoi(char s[]);int c,i,flag,flag1;char t[MAX];i=0;flag=0;flag1=1;printf(&input a HEX number:&);while((c=getchar())!='\0' && i&MAX&& flag1){if (c&='0' && c&='9'||c&='a' && c&='f'||c&='A' && c&='F')
{flag=1;t[i++]=c;}else if (flag){t[i]='\0';printf(&decimal
number %d\n&,htoi(t));printf(&continue or not?&);c=getchar();if (c=='N'||c=='n')flag1=0;else{flag=0;i=0;printf(&\ninput a HEX number:&);}}}return 0;}
int htoi(char s[]){ int i,n;n=0;for (i=0;s[i]!='\0';i++){if (s[i]&='0'&& s[i]&='9')n=n*16+s[i]-'0';if (s[i]&='a' && s[i]&='f')n=n*16+s[i]-'a'+10;69
if (s[i]&='A' && s[i]&='F')
n=n*16+s[i]-'A'+10;}return(n);}运行结果:
编译预处理1.参考程序如下:#define SWAP(a,b) t=b;b=a;a=t 参考程序如下:#define SWAP(a,b) t=b;b=a;a=t; #include &stdio.h&void main(){int x,y,t;printf(&请输入x=,y=&);scanf(&%d,%d&,&x,&y);printf(&交换前x=%d,y=%d\n&,x,y); SWAP(x,y);printf(&交换后x=%d,y=%d\n&,x,y); }运行结果:
2. 参考程序内容如下#include&stdio.h&void main(){float f1,f2,f3;70
PR(&Input three floating numbers f1,f2,f3:\n&);
scanf(Fs,&f1);scanf(Fs,&f2);scanf(Fs,&f3);PR(NL);PR(&Output one floating number each line:\n&);
PR(F1,f1);PR(F1,f2);PR(F1,f3);PR(NL);PR(&Output two number each line:\n&);PR(F2,f1,f2);PR(NL);PR(&Output three number each line:\n&);PR(F3,f1,f2,f3);}运行结果:
实验9 指针1. 参考程序如下:(1) 输入3个数为整数#include &stdio.h&int main(){ void swap(int *p1,int *p2);int n1,n2,n3;71
int *p1,*p2,*p3;printf(&input three integer n1,n2,n3:&);scanf(&%d,%d,%d&,&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1&n2) swap(p1,p2);if(n1&n3) swap(p1,p3);if(n2&n3) swap(p2,p3);printf(&Now,the order is:%d,%d,%d\n&,n1,n2,n3);
return 0;}
void swap(int *p1,int *p2){p=*p1; *p1=*p2; *p2=p;}程序运行结果:
(2)输入3个数为字符串#include &stdio.h&#include &string.h&int main(){void swap(char *,char *);char str1[20],str2[20],str3[20];printf(&input three line:\n&);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)&0)
swap(str1,str2);
if(strcmp(str1,str3)&0)
swap(str1,str3);
if(strcmp(str2,str3)&0)
swap(str2,str3);
printf(&Now,the order is:\n&);printf(&%s\n%s\n%s\n&,str1,str2,str3);return 0;}void swap(char *p1,char *p2)72
{char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);
运行结果:
2. 参考程序如下:#include &stdio.h&int main(){void move(int *pointer);int a[3][3],*p,i;printf(&input matrix:\n&);for (i=0;i&3;i++)scanf(&%d %d %d&,&a[i][0],&a[i][1],&a[i][2]);
p=&a[0][0];move(p);printf(&Now,matrix:\n&);for (i=0;i&3;i++)printf(&%d %d %d\n&,a[i][0],a[i][1],a[i][2]);
return 0;}
void move(int *pointer){int i,j,t;for (i=0;i&3;i++)for (j=i;j&3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;}}
运行结果:
3. 参考程序如下:#include &stdio.h&int main(){int i,k,m,n,num[50],*p;printf(&\ninput number of person: n=&);
scanf(&%d&,&n);p=for (i=0;i&n;i++)*(p+i)=i+1;i=0;k=0;m=0;while (m&n-1){if (*(p+i)!=0)
k++;if (k==3)
{*(p+i)=0;k=0;m++;}i++;if (i==n) i=0;
}while(*p==0) p++;printf(&The last one is NO.%d\n&,*p);
return 0;}运行结果:
4. 参考程序:#include&stdio.h&int main(){int strcmp(char *p1,char *p2);char str1[20],str2[20],*p1,*p2;printf(&input two strings:\n&);scanf(&%s&,str1);scanf(&%s&,str2);p1=&str1[0];p2=&str2[0];m=strcmp(p1,p2);printf(&result:%d,\n&,m);return 0;}
int strcmp(char *p1,char *p2)
//两个字符串比较函数{i=0;while(*(p1+i)==*(p2+i))if (*(p1+i++)=='\0') return(0);
//相等时返回结果0return(*(p1+i)-*(p2+i));
//不等时返回结果为第一个不等字符ASCII码的差值}运行结果:
5.参考程序:#include&stdio.h&#include&math.h&int main(){float integral(float(*)(float),float,float,int);//对integarl函数的声明 float fsin(float);
//对fsin函数的声明float fcos(float);
//对fcos函数的声明float fexp(float);
//对fexp函数的声明75
float a1,b1,a2,b2,a3,b3,c,(*p)(float);int n=20;printf(&input a1,b1:&);scanf(&%f,%f&,&a1,&b1);printf(&input a2,b2:&);scanf(&%f,%f&,&a2,&b2);printf(&input a3,b3:&);scanf(&%f,%f&,&a3,&b3);p=c=integral(p,a1,b1,n);printf(&The integral of sin(x) is:%f\n&,c);p=c=integral(p,a2,b2,n);printf(&The integral of cos(x) is:%f\n&,c);p=c=integral(p,a3,b3,n);printf(&The integral of exp(x) is:%f\n&,c);return 0;}
float integral(float(*p)(float),float a,float b,int n) {float x,h,s;h=(b-a)/n;x=a;s=0;for(i=1;i&=n;i++){x=x+h;s=s+(*p)(x)*h;}return(s);}float fsin(float x){return sin(x);}float fcos(float x){return cos(x);}float fexp(float x){return exp(x);}76
运行结果:
6. 参考程序:#include&stdio.h&int main(){void sort(int **p,int n);int i,n,data[20],**p,*pstr[20];printf(&input n:\n&);scanf(&%d&,&n);for (i=0;i&n;i++)pstr[i]=&data[i];
//将第i个整数的地址赋予指针数组 pstr 的第i个元素
printf(&input %d integer numbers:&,n);for (i=0;i&n;i++)scanf(&%d&,pstr[i]);p=sort(p,n);printf(&Now,the sequence is:\n&);for (i=0;i&n;i++)printf(&%d
&,*pstr[i]);printf(&\n&);return 0;}void sort(int **p,int n){int i,j,*for (i=0;i&n-1;i++){for (j=i+1;j&n;j++){if (**(p+i)&**(p+j))
//比较后交换整数地址{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=}}77
}}运行结果:
实验10 结构体和共用体1. 参考程序:#include &stdio.h&#define N 5
struct student{ char num[6];char name[8];int score[4];}stu[N];
int main(){void print(struct student stu[6]);int i,j;for (i=0;i&N;i++){printf(&\ninput score of student %d:\n&,i+1);
printf(&NO.: &);scanf(&%s&,stu[i].num);printf(&name: &);scanf(&%s&,stu[i].name);for (j=0;j&3;j++){printf(&score %d:&,j+1);scanf(&%d&,&stu[i].score[j]);}printf(&\n&);}print(stu);return 0;78
void print(struct student stu[6]){int i,j;printf(&\n
score3\n&);
for (i=0;i&N;i++){printf(&%5s%10s&,stu[i].num,stu[i].name);for (j=0;j&3;j++)printf(&%9d&,stu[i].score[j]);printf(&\n&);}}
运行结果:
2. 参考程序:79
#include &stdio.h&#include &malloc.h&#define LEN sizeof(struct student)struct student{struct student *};
int main(){struct student *creat();void print(struct student *);struct student *del(struct student *,long);struct student *insert(struct student *, struct student *);
struct student *head,*long del_printf(&input records:\n&);head=creat();print (head);printf(&input the deleted number:&);scanf(&%ld&,&del_num);while (del_num!=0){head=del(head,del_num);print (head);printf (&input the deleted number:&);scanf(&%ld&,&del_num);}printf(&\ninput the inserted record:&);stu=(struct student *) malloc(LEN);scanf(&%ld,%f&,&stu-&num,&stu-&score);while(stu-&num!=0){head=insert(head,stu);print(head);printf(&input the inserted record:&);stu=(struct student *)malloc(LEN);scanf(&%ld,%f&,&stu-&num,&stu-&score);}return 0;80
struct student *creat(){struct student *struct student *p1,*p2;n=0;p1=p2=( struct student*) malloc(LEN);
scanf(&%ld,%f&,&p1-&num,&p1-&score);head=NULL;while(p1-&num!=0){n=n+1;if(n==1)head=p1;else p2-&next=p1;p2=p1;p1=(struct student*)malloc(LEN);scanf(&%ld,%f&,&p1-&num,&p1-&score);}p2-&next=NULL;return(head);}
struct student *del(struct student *head,long num)
{struct student *p1,*p2;if (head==NULL){printf(&\nlist null!\n&);return(head);}
p1=while(num!=p1-&num && p1-&next!=NULL)
{p2=p1;p1=p1-&}if(num==p1-&num){if(p1==head)head=p1-&else p2-&next=p1-&printf(&delete:%ld\n&,num);n=n-1;}else printf(&%ld not been found!\n&,num);
return(head);}
struct student *insert(struct student *head, struct student *stud)
{struct student *p0,*p1,*p2;p1=p0=if(head==NULL){head=p0; p0-&next=NULL;}else{while((p0-&num&p1-&num) && (p1-&next!=NULL)){p2=p1;p1=p1-&}if(p0-&num&=p1-&num){if(head==p1) head=p0;else p2-&next=p0;p0-&next=p1;}else{p1-&next=p0; p0-&next=NULL;}}n=n+1;return(head);}
void print(struct student *head){struct student *p;printf(&\nNow,These %d records are:\n&,n);p=if(head!=NULL)do{printf(&%ld %5.1f\n&,p-&num,p-&score);p=p-&}while(p!=NULL);}程序运行结果:82
实验11 文件1. 参考程序如下: #include &stdio.h& struct student {char num[10];
char name[8];
int score[3];
int main(){ int i,j,FILE *for(i=0;i&5;i++){printf(&\ninput score of student %d:\n&,i+1);printf(&NO.:&);scanf(&%s&,stu[i].num);printf(&name:&);scanf(&%s&,stu[i].name);sum=0;for (j=0;j&3;j++){printf(&score %d:&,j+1);scanf(&%d&,&stu[i].score[j]);sum+=stu[i].score[j];}stu[i].ave=sum/3.0;}
/*将数据写入文件*/fp=fopen(&stud&,&w&);for (i=0;i&5;i++)if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf(&file write error\n&);fclose(fp);
fp=fopen(&stud&,&r&);for (i=0;i&5;i++){fread(&stu[i],sizeof(struct student),1,fp);
printf(&\n%s,%s,%d,%d,%d,%6.2f\n&,stu[i].num,stu[i].name,stu[i].score[0],
stu[i].score[1],stu[i].score[2],stu[i].ave);}return 0;}运行结果:84
2. 4. /*filename:fcat.c*/#include &stdio.h& unsigned char *
main(int argc,char *argv[ ]){if(argc&=2){printf(“Usage:fcat file1 file2 file3\n”);exit(1);}buffer=(unsigned char *)malloc(80);for(i=2;i&i++)fcat(argv[1],argv[i]);}fcat(char target[ ],char source[ ]){FILE *fp1,*fp2;if((fp1=fopen(target,”a”))= =NULL){printf(“文件%s打开失败!\n”,target);exit(1);}if((fp2=fopen(source,”r”))= =NULL){printf(“文件%s打开失败!\n”,source);exit(1);}fputs(“\n”,fp1);fputs(“Filename:”,fp1);fputs(source,fp1);fputs(“\n--------------------------------------------------------------\n”,fp1); while(fgets(buffer,80,fp2))fputs(buffer,fp1);fclose(fp1);fclose(fp2);}
上一篇: 下一篇:
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。}

我要回帖

更多关于 指向结构体数组的指针 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信