C语言习题9
- 格式:doc
- 大小:40.50 KB
- 文档页数:8
第9章结构【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个部分。
解答:struct complex{float real;float imaginary;};【练习9-2】人的出生日期由年、月、日组成,请在例 9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。
解答:struct date{int year;int month;int day;};struct student{int num;char name[10];struct date birthday;int computer,english,math;double average;};【练习9-3】例 9-1 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序?解答:#include<>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i, n;double math_sum,english_sum,computer_sum;struct student s1;printf("Input n:");scanf("%d", &n);printf("Input the student's number, name and course scores:\n"); math_sum=english_sum=computer_sum=0;for(i=1;i<=n;i++){printf("No.%d:",i); scanf("%d%s%d%d%d",&,,&,&,&;math_sum+=;english_sum+=;computer_sum+=;}printf("math_ave:%.2lf\nenglish_ave:%.2lf\ncomputer_ave:%.2lf\n", math_sum/n,english_sum/n,computer_sum/n);return 0;}【练习9-4】定义一个包含 5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
C语言习题(一) 一、判断题()1、开发C语言程序通常要经过编辑、预处理、编译、连接、装入和执行6个阶段。
()2、C语言程序由一个或多个函数组成,其中有且只有一个main函数。
()3、C语言中,所有标识符必须由一个字母 ( a ~ z , A ~ Z ) 或下划线 ( _ )开头。
()4、同一程序的各函数中定义的局部变量不可以同名。
()5、C语言中,主函数main中定义的变量称为全局变量,在整个文件中有效。
()6、C语言中,函数重载常用于设计多个进行类似任务而处理不同数据类型的同名函数。
()7、C语言中,数组名的值就是数组中第一个元素的值。
()8、在C++中,指针的作用是用来表示一个变量指向另一个变量这样的指向关系。
()9、C语言中,定义结构时,结构体中的成员名不能与程序中的其它变量重名。
()10、C语言中,声明一个结构并不分配内存,只有在定义结构变量时,才分配内存。
二、填空题1、在C语言中,定义double类型数组arr, 数组大小为20, 应写为()。
222、写出公式S=a+b+2ab的C语言赋值语句:()。
3、定义a为长度为10的字符串、并为字符串赋初值\的语句为()。
4、设ch是字符变量,则判断ch是小写英文字母的逻辑表达式为()。
5、函数的返回值也叫函数值,函数值是通过函数中的()语句获得的。
6、链表是一种非常有用的动态数据结构,只有一个指针链的链表称为()。
7、对数组a[]进行初始化的数据为{2,4,6,8,10,12,14},则a[3]被初始化为()。
8、对于 int *p, i = 5, j = 6; 执行 p = &i; p = &j; 后(*p)的值为()。
9、执行完下列语句段后, i的值为:()。
int a[3][4]={{1,2,3},{4,5,6}}, i; i= a[1][2];10、有语句struct point{int x;int y;}; point pExample; 则将pExample的成员x初始化为8的语句是()。
测试题91.设有说明int (*ptr)[M];其中标识符ptr是(C)。
A、M个指向整型变量的指针B、具有M个指针元素的一维指针数组,每个元素都只能指向整型量C、一个指向具有M个整型元素的一维数组的指针D、指向M个整型变量的函数指针2.若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum的值为(A)。
A、8B、7C、10D、93.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是(C)。
A、6B、-3C、-12D、94.当调用函数时,实参是一个数组名,则向函数传送的是(B)。
A、数组每一个元素的地址B、数组的首地址C、数组每个元素中的值D、数组的长度5.以下叙述不正确的是(B)。
A、C程序的基本组成单位是函数B、在C程序中,注释说明只能位于一条语句的后面C、一个C源程序必须包含一个main函数D、一个C源程序可由一个或多个函数组成对于基本类型相同的两个指针变量之间,不能进行的运算是(A)。
A、+B、<C、=D、-fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是(D)。
A、答案B和C都正确B、只写C、追加D、读或读写以下叙述正确的是(B)。
A、do-while语句构成的循环不能用其它语句构成的循环来代替.B、用do-while语句构成的循环,在while后的表达式为零时结束循环C、用do-while语句构成的循环,在while后的表达式为非零时结束循环.D、do-while语句构成的循环只能用break语句退出.C语言程序中必须有的函数是(C)A、#include "stdio.h"B、#include <string.h>C、mainD、printf以下不正确的说法是:C语言规定(B)。
A、实参可以为任何类型B、形参可以是常量,变量或表达式C、实参可以是常量,变量或表达式D、形参应与其对应的实参类型匹配一致11.已知int k=67; 则表达式k/10的值为; CA、6.70B、6.7C、6D、7static struct {int a1;float a2;char a3;}a[10]={1,3.5,'A'}; 说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存储方式,其中被初始化的下标变量是(B)。
C语言习题(8-9)一.填空题1.C语言中,将一个变量的地址称为______________,存放变量地址的变量称为______________。
2.设int a[10]={1,2,3}; 则*(a+3)的值是________________。
3.若使表达式p=”jiangsu”无任何错误(包括语法错误和警告),则p的定义语句为_____________。
4.若有下列定义和语句:int a[4]={0,1,2,3}, *p; p=&a[2];则*--p的值是_____________。
5.执行下列程序段后,变量a的值为_____________。
int *p,a,b=1; p=&a; *p=10; a=*p+b;6.设一个C程序中有如下定义:char line[]=”china”;char *ptr=line;则ptr中为_____________的地址,line[5]中为_____________,*(ptr+2)的值为_____________。
7.假定int型指针p所指对象的值为25,p+1所指对象的值为46,则执行”(*p)++;”语句后,p所指对象的值为_____________。
8.若要使指针p指向一个double型的动态存储单元,请在空白处填上适当的内容:p=____________malloc(sizeof(double));9.若有定义:int (*p)[4];则标识符p是_____________________________________________________。
10.struct student{ int num;char name[20];float score;}stu[3], *p; p=stu;写出通过p访问stu[0]中score成员的两种表达式___________________________________________。
二.选择题1.已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是_____________。
一、单选题:(1)在C语言提供的合法的关键字是( )A)swicth B) cher C)Case D)default(2)在C语言中,合法的字符常量是()A)’\084’ B) ’\x43’C)’ab’D) "\0”(3)若有定义和语句:char s[10]: s="abcd”;printf(”%s\n",s);则结果是(以下u代表空格)()A)输出abcd B)输出aC)输出abcduuuuu D)编译不通过(4) 若有定义和语句:int **pp, *p,a=10, b=20;pp=&p;p=&a; p=&b; printf("%d,%d\n",*p,**pp);则输出结果是:()A)10,20 B)10,10 C)20,10 D)20,20(5)若有以下定义和语句:int u=010,v=0x10,w=10;printf("%d,%d,%d\n”,u, v, w);则输出结果是()A) 8,16,10B)10,10,10 C)8,8,10 D) 8,10,10 (6) 若有以下定义和语句char c1=' b', c2='e’;printf(”%d,%c\n", c2-c1,c2—'a’+”A");则输出结果是( )A)2,M B)3,EC)2,E ?D)输出项与对应的格式控制不一致,输出结果不确定(7)若有以下定义:char s[20]=”programming”,*ps=s;则不能代表字符o的表达式是( )A)ps+2 B) s[2]C) ps[2]D) ps+=2,*ps(8)若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是() for (i=5; i; i—-)for(j=0;j<4; j++){。
}A) 20B) 25 C)24 D) 30(9)若有以下定义和语句:char *s1=”12345",*s2="1234";printf("%d\n",strlen(strcpy(s1,s2)));则输出结果是()A)4B)5 C)9 D)10(10)若有以下定义和语句:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示a数组元素的表达式是()A) *p B) a[10]C)*a D)a[p-a](11)下面程序的输出是()main(){char *s=”121";int k=0,a=0,b=0;do{k++;if(k%2==0) {a=a+s[k]—’0’;continue;}b=b+s[k]—’0';a=a+s[k]—'0';}while (s[k+1]);printf("k=%d a=%d b=%d\n",k,a,b);A) k=3 a=2 b=3 B) k=3 a=3 b=2C)k=2 a=3 b=2D) k=2 a=2 b=3(12) 下面程序的输出是( )main(){ unsigned a=32768;printf("a=%d\n”,a);}运行结果: —32768A)a=—32768 B)a=32767C)a=-32767 D)a=—1(13) 若有以下定义:float x; int a,b; 则正确的switch 语句是( )A)switch(x) B) switch(x){case1.0:printf("*\n”);{case1, 2:printf(”*\n”);case2。
C语言练习题(带详解答案)一单项选择题1.(A)是构成C语言程序的基本单位。
A、函数B、过程C、子程序D、子例程2.C语言程序从C开始执行。
A)程序中第一条可执行语句B)程序中第一个函数C)程序中的main函数D)包含文件中的第一个函数3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main()函数中定义C、C语言程序总是从main()函数开始执行D、C语言程序中的main()函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)A)C程序的工作过程是编辑、编译、连接、运行B)C语言不区分大小写。
C)C程序的三种基本结构是顺序、选择、循环D)C程序从main函数开始执行5.下列正确的标识符是(C)。
A.-a1B.a[i]C.a2_iD.intt5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的-,选项B中[与]不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是(B)。
A)3a某B)某C)caeD)-e2E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的-不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。
A)%某B)a+bC)a123D)123选项A中的%,选项B中+不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print_3ddb8aBcB、I\\amone_halftart$it3paiC、tr_1CpppowwhileD、P某qMy->bookline#Hi.age选项B中的\\,$,选项D中>,#,.,-不满足(1);选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。
习题九数组的定义和使用1. 有以下程序void f (int b[]){ int i;for(i=2;i<6;i++) b[i]* =2;}main(){ int a[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10;i++) printf("%d,",a[i]);}程序运行后的输出结果是______。
A、1,2,3,4,5,6,7,8,9,10,B、1,2,6,8,10,12,7,8,9,10,C、1,2,3,4,10,12,14,16,9,10,D、1,2,6,8,10,12,14,16,9,10,解析:本题在调用函数时,实参是&a[0]的地址,即把a[0]的地址传给形参,由条件i=2且i<6得出函数将对a[2]开始的4个元素(3,4,5,6)进行乘以2操作,结果分别为:a[2]=6,a[3]=8,a[4]=10,a[5]=12。
a[0]、a[1]、a[6]、a[7]、a[8]、a[9]的值并没有发生变化,所以最后的输出结果为:1,2,6,8,10,12,7,8,9,10,。
故本题答案选B。
2. 有以下程序main(){ int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*按列排序*/for(i=0;i<4;i++) printf("%d,",a[i][i]);}程序运行后的输出结果是______。
A、1,6,5,7,B、8,7,3,1,C、4,7,5,2,D、1,6,2,1,解析:本题首先定义了一个4行4列的二维数组a,并用了三层循环来进行按列由小到大排序操作。
综合强化练习一一、选择题(每题1分,共40分)1、以下叙述正确的是( )A)C语言总是从第一个定义的函数开始执行B)在C程序中,要调用的函数必须在main函数中定义C)C程序的执行总是从main函数开始执行的D)C程序中的main函数必须放在程序的开始部分2、下列合法的用户标识符为( )A)_4sum B) static C) 1max D) #dtotal3、ch为字符型变量,则下面赋值语句正确的为( )。
A)ch="ABC" B) ch="A" C) ch= a D) ch=674、C语言中整形常量有哪几种形式( )A) 十进制、八进制、十六进制B) 二进制、十进制、八进制、十六进制C) 二进制、八进制、十六进制D) 二进制、十进制5、字符串" China "在内存中占用的字节数是( )A) 1 B) 2 C) 5 D) 66、int x,y; x=7/2;y=7/2.0;则x的值为( )A) 3.500000 3D)3 37、下面程序int x=0x2B; printf("%d",x);的输出结果为( )A) 2B B) 0x2B C) 43 D) 448、实型常量用指数形式表示,下列哪一项不是合法的( )A)C)356e39、设有语句int a=3;则执行了语句a-= a+=a*a;后变量a的值是( )A)0 B)3 C) -9 D) -310、下列字符中,错误的转义字符是( )A)'\085' B) '\\' C) '\0' D) '\n '11、下面程序的输出结果是( )int a=2;if(a=5) a=a+2;printf("%d ",a);A) 2 B) 4 C) 5 D)712、下列程序段的循环次数是( )int k=0;while(k= =0) printf("%d",k);k--; printf ("\n");A) 无限次B) 0 次C) 1次D)2次13、下列说法正确的是( )A) 在循环体中可以用break语句结束本次循环B) 在循环体中可以用continue语句结束本次循环C) break语句仅能使用在switch结构中D) 可以使用continue语句跳出switch结构14、以下正确的函数形式是()。
C语言程序设计课堂练习题第7章指针一、选择题1.已知p是一个整型指针变量,且p指向的是整型变量a的地址,则下列哪个语句是错误的?()A.*p=a;B. p=&a;C.p=&*p;D.p=*&p;2.下列哪一项是不正确的字符串赋值或不正确的赋初值的方式?()A. char *str;str=“string“;B.char str[7]={‟s‟, ‟t‟, ‟r‟, ‟i‟, ‟n‟, ‟g‟ };C. char str1[10];str1= “string“;D.char str1[]=“string“,*str2=”1234567”;3.对于类型相同的指针变量,不能进行()运算。
A. +B. -C. =D.==4.已知p是一个整型指针变量,a为一个一维整型数组,且p=a;则下列哪个语句是错误的?()A.*p=a[0];B. *p=*a;C. p=a+1;D.p=*a;5.若有以下说明语句,则p2-p1的值为()int a[10],*p1,*p2;p1=a;p2=&a[5];A. 5B. 6C. 10D.没有指针与指针的减法6.下列定义中不正确的是()A.int *p;B. int p[10];C.int (*p)()D.int *(p(n));7.以下程序的输出结果是()main(){int a[]={1,2,3,4,5,6},*p;p=a;printf(“%d,%d\n”,*p,*(p+4));}A. 0,5B.1,5C.0,6D.1,68.若有以下说明和语句,且0<=i<10,则下面哪个不是对数组元素地址的正确表示()。
int a[]={1,2,3,4,5,6,7,8,9,10},*p,i;p=a;A.&(a+1)B.a++C. &pD.&p[i]二、写出程序的输出结果1.main(){int a=10,b=20,s,t,m,*pa,*pb;pa=&a;pb=&b;s=*pa+*pb;t=*pa-*pb;m=*pa**pb;printf“s=%d\nt=%d\nm=%d\n“,s,t,m);}2.int a[][3]={9,7,5,3,1,2,4,6,8};int i,j,s1=0,s2=0;for(i=0;i<3;i++)for(j=0;j<3;j++){if (i==j) s1=s1+a[i][j];if(i+j==2) s2=s2+a[i][j];}printf(“%d\n%d\n”,s1,s2);}3.main(){int a[5]={1,3,5,7,9},*p,**k;p=a;k=&p;printf(“%d”,*(p+2));printf(“%d”,**k);}4.main(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int (*p)[4],i=2,j=2;p=a;printf(“%d”,*(*(p+i)+j)+*((a+i)+j)+**(p+i)+**p);}三、填空1.在空格地方填上语句,以实现字符串复制的功能。
1.以下程序段的输出是Dprintf(“|%10.5f|\n”, 12345.678);A、|12345.6780|B、|12345.678|C、|2345.67800|D、|12345.67800|2.运行以下程序后,输出的结果是Bmain(){ int k = -3;if(k <= 0)printf("****\n"),else printf("&&&&\n");}A、****B、有语法错误不能通过编译C、&&&&D、****&&&&3.以下程序段中,能够正确地执行循环的是(B)。
A、static int a; while(a)B、int s=6; do s-=2; while(s);C、for(i=1;i>10;i++)D、int s=6; m:if(s<100) exit(0); else s-=2; goto m:4.下列数组说明中,正确的是(B)。
A、static char str[]; str="China";B、static char str[]="China";C、static char str1[5],str2[]={"China"}; str1=str2;D、static char str1[],str2[];str2={"China"}; strcpy(str1,str2);5.下列定义数组的语句中正确的是(A)。
A、#define size 10 char str1[size],str2[size+2];B、int num['10'];C、char str[];D、int n=5; int a[n][n+2];6.宏定义#define PI 3.14中的宏名PI代替CA、不确定类型的数B、一个单精度实数C、一个字符串D、一个双精度实数7.若有double *p,x[10];int i=5;使指针变量p指向元素x[5]的语句为(D)。
A、p=x;B、p=x[i];C、p=&(x+i)D、p=&x[i];8.已知p,p1为指针变量,a为数组名,j为整型变量,下列赋值语句中不正确的是(B)。
A、p=&a[j];B、p=10;C、p=a;D、p=&j,p=p1;9.以下叙述中不正确的是(D)。
A、以下是正确的宏定义 #define IBM_PC 5B、预处理命令行都必须以#号开始C、在程序中凡是以#号开始的语句行都是预处理命令行D、C程序在执行过程中对预处理命令行进行处理1.若表达式(a+b)>c*2 && b != 5 || !(1/2)中,a、b、c的定义和赋值为int a=3,b=4,c=2;则表达式的值为__1___。
2.程序段int k=10; while(k=0) k=k-1;循环体语句执行__0___次.3.字符串的结束标志是_____. \0 '\0' 04.若有定义: char ch;定义指针p,并使其指向变量ch的定义语句是__char *p=&ch; char *p=&ch___。
(必须使用一条语句)5. 以下程序由终端键盘输入一个文件名,然后把终端键盘输入的字符依次存放到该文件中,用#号作为结束输入的标志。
请填空。
#include <stdio.h>main(){ FILE *fp;char ch, fname[10];printf("Enter the name of file\n");gets(fname);if( ( fp = __fopen___(fname,"w") ) == NULL ){ printf("Open error!\n");exit(0);}printf("Enter data: );while(( ch = getchar() ) != '#' )fputc(ch , fp);fclose( fp );}6. a为任意整数,能将变量a清零的表达式是__a=a^a___。
/*------------------------------------------------【程序设计】-------------------------------------------------- 功能:根据整型形参m,计算如下公式的值:y=1/2+1/4+ 1/6+...+1/2m 。
程序中如果用到循环,必须使用 for循环。
例如:若m=9,则应输出:1.414484------------------------------------------------*/#include "stdio.h"void TestFunc();double fun(int m){/**********Begin**********//********** End **********/}void main(){int n;printf("Enter n: ");scanf("%d", &n);printf("\nThe result is %1f\n", fun(n));TestFunc();}void TestFunc(){FILE *IN,*OUT;int s,i ;int t;float o;IN=fopen("in.dat","r");if(IN==NULL){printf("Read File Error");}OUT=fopen("out.dat","w");if(OUT==NULL){printf("Write File Error");}for(i=0;i<5;i++){fscanf(IN,"%d",&t);o=fun(t);fprintf(OUT,"%f\n",o);}fclose(IN);fclose(OUT);}【参考代码】double y=0;int i;for(i=1; i<=m; i++){y+=1.0/(2*i); }return(y);===============【考生代码】/*------------------------------------------------------ 【程序改错】:只允许修改错误代码,其他代码不允许修改!--------------------------------------------------------功能:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A, z转换为a),其它字符不变。
------------------------------------------------------*/#include <stdio.h>#include <ctype.h>#include <conio.h>void fun (char *s){/**********ERROR**********/while(*s!="\\0"){if(*s>='A' && *s <= 'Z' || *s >= 'a' && *s<='z'){if(*s=='Z')*s='A';else if(*s=='z')*s='a';else/**********ERROR**********/s += 1;}/**********ERROR**********/s++}}void main(){char s[80];printf("\n Enter a string with length < 80. :\n\n ");gets(s);printf("\n The string : \n\n ");puts(s);fun ( s );printf ("\n\n The Cords :\n\n ");puts(s);}【改错1】错误【学生答案】while(*s!="\\0")【参考答案】while(*s!='\0')============================================================【改错2】错误【学生答案】s += 1;【参考答案】*s += 1;*s = *s+1;*s = 1+*s;============================================================【改错3】错误【学生答案】s++【参考答案】s++;++s;============================================================/*------------------------------------------------------- 【程序填空】---------------------------------------------------------功能:识别输入的字符串,每个单词输出一行-------------------------------------------------------*/#include <stdio.h>#include <string.h>void main(){int c;int inspace=0;/**********FILL**********/ while((c = _____) != '\n'){if(c == ' ' || c == '\t' || c == '\n'){/**********FILL**********/if(_____){inspace = 1;putchar('\n');}}else{inspace = 0;/**********FILL**********/_____; }}}【空 1 】错误【学生答案】while((c=_____)!='\n')【参考答案】getchar()============================================================【空 2 】错误【学生答案】if(_____)【参考答案】inspace==0============================================================【空 3 】错误【学生答案】_____;【参考答案】putchar(c)printf("%c",c);============================================================。