第一篇:上海海事大学C语言程序设计练习题全(题库)
试卷编号:9049 所属语言:Turbo C 试卷方案:09(2)模拟试卷总分:100分 共有题型:5种
一、填空 共15题(共计15分)第1题(1.0分)
C语言表达式!(3<6)||(4<9)的值是【1】.答案: 1).1 逻辑“或” 第2题(1.0分)
int a=1,b=2,c=3;执行语句a=b=c;后a的值是【1】.答案: 1).3 第3题(1.0分)
以下程序的输出结果为【1】, #include “stdio.h” main(){int a=010,j=10;printf(“%d,%dn”,++a,j--);} 答案: 1).9,10 第4题(1.0分)
执行下列语句的结果是【1】,a=3;printf(“%d,”,++a);printf(“%d”,a++);答案: 1).4,4 第5题(1.0分)
当a=1,b=2,c=3时,执行以下程序段后b=【1】.if(a>c)b=a;a=c;c=b;答案: 1).2 第6题(1.0分)
假设有条件 int x=1,y=2,z=3;则表达式z+=x>y?++x:++y的值是【1】.答案: 1).6 第7题(1.0分)
执行下列语句后,b 的十进制值是【1】.int x=240,y=15,b;char z='A';b=((x && y)&&(z < 'a'));答案: 1).1 第8题(1.0分)
当a=3,b=2,c=1;时,执行以下程序段后 a=【1】.if(a>b)a=b;if(b>c)b=c;else c=b;c=a;
答案: 1).2 第9题(1.0分)
以下程序的输出结果为【1】, #include “stdio.h” main(){int a;for(a=0;a<10;a++);printf(“%d”,a);} 答案: 1).10 第10题(1.0分)
程序段int k=10;while(k=0)k=k-1循环体语句执行【1】次.答案: 1).0 第11题(1.0分)
以下程序段要求从键盘输入字符,当输入字母为'Y' 时,执行循环体,则括号内应填写【1】.ch=getchar();while(ch ____ 'Y')/*在括号中填写*/ ch=getchar();答案: 1).== 第12题(1.0分)
以下do-while语句中循环体的执行次数是【1】.a=10;b=0;do { b+=2;a-=2+b;} while(a>=0);答案: 1).3 第13题(1.0分)
C语言中,数组元素的下标下限为【1】.答案: 1).0 第14题(1.0分)
如果函数不要求带回值,可用【1】来定义函数返回值为空.答案: 1).void 第15题(1.0分)
C语言源程序的基本单位是【1】.答案: 1).函数
二、判断 共15题(共计15分)第1题(1.0分)
a=(b=4)+(c=6)是一个合法的赋值表达式.答案:Y 第2题(1.0分)
在C语言中,变量必需先定义后使用 答案:Y 第3题(1.0分)
语句 printf(“%f%%”,1.0/3);输出为 0.333333.答案:N 第4题(1.0分)
语句scanf(“%7.2f”,&a);是一个合法的scanf函数.答案:N 第5题(1.0分)
在switch-case语句中,必须使用default语句.答案:N 第6题(1.0分)
关系运算符(大于、小于)的优先级高于(低于加减乘除)算术运算符并且低于(高于)赋值运算符.答案:N 第7题(1.0分)
C语言中的for语句可以用于循环次数已经确定的情况,但是不能用于循环次数不确定而只给出循环结束条件的情况.答案:N 第8题(1.0分)
do-while循环是先判断循环条件表达式,后执行循环体;while循环是先执行循环体,后判断循环条件表达式.答案:N 第 9题(1.0分)在定义二维数组时,可以将该数组的两个维数全部省略答案:N 第10题(1.0分)
任何数组的下标都是从0开始;答案:Y 第11题(1.0分)
C语言中只能逐个引用数组元素而不能一次引用整个数组.答案:Y 第12题(1.0分)
数组中的元素类型不能不同答案:Y 第13题(1.0分)
通过return语句,函数可以带回一个或一个以上的返回值.答案:N 第14题(1.0分)
如果函数值的类型和return语句中表达式的值不一致,则以 函数类型为准.答案:Y 第15题(1.0分)
C程序中有调用关系的所有函数必须放在同一个源程序文件中.答案:N
三、单项选择 共20题(共计40分)第1题(2.0分)下列程序的输出结果是().main(){ printf(“%dn”,null);} A:0 B:变量无定义 C:-1 D:1 答案:B 第2题(2.0分)
用下列语句定义a,b,c,然后执行b=a、c='b'+b,则b,c的值是().long a=0xffffff;int b;char c;A:0ffffff 和0x61 B:-1和98 C:-1和97 D:指向同一地址 答案:C 第3题(2.0分)
已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用 八进制表示的字符常量'101'是().A:字符A B:字符a C:字符e D:非法的常量 答案:A 第4题(2.0分)若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97), 则以下程序段的执行结果是().进制整数)
A:因变量类型与格式描述符的类型不匹配,输出无定值 B:输出项与格式描述符个数不符,输出为零值或不定值 C:61,141,k=%12 D:61,141,k=%d 答案:C 第5题(2.0分)
若a是float型变量,b是unsigned型变量,以下输入语句中合法的是().A:scanf(“%6.2f%d”,&a,&b);B:scanf(“%f%n”,&a,&b);C:scanf(“%f%3o”,&a,&b);D:scanf(“%f%f”,&a,&b);答案:C 第6题(2.0分)以下程序的输出结果为().main(){int i=010,j=10;printf(“%d,%dn”,++i,j--);} A:11,10 B:9,10 C:010,9 D:10,9 答案:B 第7题(2.0分)int a=1,b=2,c=3;if(a>c)b=a;a=c;c=b;则c的值为().A:1 B:2 C:3 D:不一定 答案:B 第8题(2.0分)
下列各m的值中,能使m%3==2&&m%5==3&&m%7==2为真的是().A:8 B:23 C:17 D:6 答案:B 第9题(2.0分)
以下运算符中,优先级最高的运算符是().A:?:
ch='a';k=12;printf(“%x,%o,”,ch,ch);printf(“k=%%%dn”,k);(x十六进制整数,o八B:++ C:&& D:, 答案:B 第10题(2.0分)
设j和k都是int类型,则for循环语句
for(j=0,k=0;j<=9&&k!=876;j++)(j<=9,k!=876)scanf(“%d”,&k)循环;().A:最多执行10次 B:最多执行9次 C:是无限循环
D:循环体一次也不执行 答案:A 第11题(2.0分)
下面有关 for 循环的正确描述是().A:for 循环只能用于循环次数已经确定的情况 B:for 循环是先执行循环循环体语句,后判断表达式 C:在 for 循环中,不能用 break 语句跳出循环体
D:for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 答案:D 第12题(2.0分)以下程序的运行结果是().main(){ int n;for(n=1;n<=10;n++){ if(n%3==0)continue;printf(“%d”,n);} } A:12457810 B:369 C:12 D:1234567890 答案:A 第13题(2.0分)以下程序段的输出结果为().for(i=4;i>1;i--)for(j=1;j
设j和k都是int类型,则for循环语句().for(j=0,k=0;j<=9&&k!=876;j++)scanf(“%d”,&k);A:最多执行10次 B:最多执行9次 C:是无限循环
D:循环体一次也不执行 答案:A 第15题(2.0分)
在C语言中,为了结束由while语句构成的循环,while后一对圆括号 中表达式的值应该为().A:0 B:1 C:True D:非0 答案:A 第16题(2.0分)
以下对一维整型数组a的正确说明是().A:int a(10);B:int n=10,a[n];C:int n;scanf(“%d”,&n);int a[n];D:#define SIZE 10(换行)int a[SIZE];答案:D 第17题(2.0分)
在C语言中,引用数组元素时,其数组下标的数据类型允许是().A:整型常量 B:整型表达式
C:整型常量或整型表达式 D:任何类型的表达式 答案:C 第18题(2.0分)
以下不能正确定义二维数组的选项是().A:int a[2][2]={{1},{2}};B:int a[][2]={1,2,3,4};C:int a[2][2]={{1},2,3};D:int a[2][]={{1,2},{3,4}};答案:D 第19题(2.0分)
若有说明: int a[3][4]={0};则下面正确的叙述是().A:只有元素a[0][0]可得到初值0 B:此说明语句不正确
C:数组a中各元素都可得到初值,但其值不一定为0 D:数组a中每个元素均可得到初值0 答案:D 第20题(2.0分)以下数组定义中不正确的是().A:int a[2][3];B:int b[][3]={0,1,2,3};C:int c[100][100]={0};D:int d[3][]={{1,2},{1,2,3},{1,2,3,4}};答案:D
四、程序填空 共2题(共计12分)第1题(6.0分)
/*------------------------【程序填空】
--------------------------
题目:从读入的整数数据中,统计大于零的整数个数和小于零的整数个数。用输入零来结束输入,程序中用变量i统计大于
零的整数个数,用变量j统计小于零的整数个数。------------------------*/ #include
/*------------------------【程序填空】
--------------------------
题目:以下程序是用选择法对10个整数按升序排序,程序中有4个空,填空使程序完整。------------------------*/
/***********SPACE***********/ 【?】 main(){ int i,j,k,t,a[N];for(i=0;i<=N-1;i++)scanf(“%d”,&a[i]);for(i=0;i /***********SPACE***********/ for(j=i+1;【?】;j++)if(a[j] 答案: 1).#define N 10 2).k=i;3).j 五、程序设计 共3题(共计18分)第1题(6.0分) /*-----------------【程序设计】 ------------------- 题目:编写函数fun求1!+2!+3!+ „„ +n!的和,在 main函数中由键盘输入n值,并输出运算结果。请 编写fun函数。 例如:若n值为20,则结果为268040729。 -------------------注意:部分源程序给出如下。请勿改动主函数main和其 它函数中的任何内容,仅在函数fun的花括号中填 入所编写的若干语句。 -----------------*/ #include /**********Program**********/ /********** End **********/ } main(){ int i,n;long int result;scanf(“%d”,&n);result=fun(n);printf(“%ldn”,result);yzj();} yzj(){ FILE *IN,*OUT;int i;int iIN;long int iOUT;IN=fopen(“1.in”,“r”);if(IN==NULL){printf(“Please Verify The Currernt Dir..It May Be Changed”);} OUT=fopen(“1.out”,“w”);if(OUT==NULL){printf(“Please Verify The Current Dir..It May Be Changed”);} for(i=0;i<10;i++){ fscanf(IN,“%d”,&iIN);iOUT=fun(iIN);fprintf(OUT,“%ldn”,iOUT);} fclose(IN);fclose(OUT);} 答案:----------------------int i;float f=1,s=0;for(i=1;i<=n;i++){f=f*i;s=s+f;} return s;---------------------- 第2题(6.0分) /*-----------------【程序设计】 ------------------- 题目:编写函数fun其功能是:根据整型形参m,计算如下公式的值: y=1/5+1/6+1/7+1/8+1/9+1/10...+1/(m+5)例如:若m=9,则应输出:1.168229-------------------注意:部分源程序给出如下。请勿改动主函数main 和其它函数中的任何内容,仅在函数fun的花 括号中填入所编写的若干语句。 -----------------*/ #include “stdio.h” double fun(int m){ /**********Program**********/ /********** End **********/ } main(){int n;clrscr();printf(“Enter n: ”);scanf(“%d”, &n);printf(“nThe result is %1fn”, fun(n));getch();yzj();} yzj(){ 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,“%fn”,o);} fclose(IN);fclose(OUT);} 答案:----------------------double y=0;int i;for(i=0;i<=m;i++){y+=1.0/(i+5);} return(y);---------------------- 第3题(6.0分) /*-----------------【程序设计】 -------------------题目:编写函数fun,函数的功能是:求给定正整数m以 内的素数之和。例如:当m=20时,函数值为77。-------------------注意:部分源程序给出如下。请勿改动主函数main和其 它函数中的任何内容,仅在函数fun的花括号中填 入所编写的若干语句。 -----------------*/ #include “stdio.h” int fun(int m){ /**********Program**********/ /********** End **********/ } main(){ int y;y=fun(20);printf(“y=%dn”,y);yzj();} yzj(){ FILE *IN,*OUT;int iIN,iOUT,i;IN=fopen(“20.in”,“r”);if(IN==NULL){printf(“Please Verify The Currernt Dir..It May Be Changed”);} OUT=fopen(“20.out”,“w”);if(OUT==NULL){printf(“Please Verify The Current Dir..It May Be Changed”);} for(i=0;i<10;i++){ fscanf(IN,“%d”,&iIN);iOUT=fun(iIN);fprintf(OUT,“%dn”,iOUT);} fclose(IN);fclose(OUT);} 答案:----------------------int i,k,s=0;for(i=2;i<=m;i++){for(k=2;k 试卷总分:100分 共有题型:6种 一、填空 共15题(共计15分)第1题(1.0分) 若有以下数组a,数组元素:a[0]~a[9],其值为 9 4 12 8 2 10 7 5 1 3 该数组中下标最大的元素的值是【1】.答案:3 第2题(1.0分) 表达式18 && 53 的值是【1】.答案:1 第3题(1.0分) c语言程序的三种基本结构是:顺序结构,选择结构,【1】结构.答案:循环 第4题(1.0分) 预处理命令行都必须以【1】号开始.答案:# 第5题(1.0分) 设i,j,k均为int型变量,则执行完for循环 for(i=0,j=10;i<=j;i++,j--)k=i+j;后,k的值为【1】.答案:10 第6题(1.0分) 程序段int k=10;while(k=0)k=k-1循环体语句执行【1】次.答案:0 第7题(1.0分) 执行下列语句后,*(p+1)的值是【1】.char s[3]=“ab”,*p;p=s;答案:b 第8题(1.0分) 若输入字符串:abcde<回车>,则以下while循环体将执行 【1】 次.While((ch=getchar())=='e')printf(“*”);答案:0 第9题(1.0分) 如果函数不要求带回值,可用【1】来定义函数返回值为空.答案:void 第10题(1.0分) C语言中,数组元素的下标下限为【1】.答案:0 第11题(1.0分) int a=1,b=2,c=3;执行语句a=b=c;后a的值是【1】.答案:3 第12题(1.0分) 若有以下数组a,数组元素:a[0]~a[9],其值为 9 4 12 8 2 10 7 5 1 3 该数组可用的最小下标值是【1】.答案:0 第13题(1.0分) 将数组a的首地址赋给指针变量p的语句是【1】.答案:p=a;第14题(1.0分) 以下程序的输出结果为【1】, #include “stdio.h” main(){int a=010,j=10;printf(“%d,%dn”,++a,j--);} 答案:9,10 第15题(1.0分) 假设有条件 int x=1,y=2,z=3;则表达式z+=x>y?++x:++y的值是【1】.答案:6 二、判断 共15题(共计15分)第1题(1.0分) do-while循环是先判断循环条件表达式,后执行循环体;while循环是先执行循环体,后判断循环条件表达式.答案:N 第2题(1.0分) 关系运算符的优先级高于算术运算符并且低于赋值运算符.答案:N 第3题(1.0分)C程序中的关键字必须小写.答案:Y 第4题(1.0分)若有说明int c;则while(c=getchar());是正确的C语句.答案:Y 第5题(1.0分)数组中的元素类型不能不同 答案:Y 第6题(1.0分)a=(b=4)+(c=6)是一个合法的赋值表达式.答案:Y 第7题(1.0分)int a[3][4]={{1},{5},{9}};它的作用是将数组各行第一列 的元素赋初值,其余元素值为0.答案:Y 第8题(1.0分)若 a=3,b=2,c=1 则关系表达式“(a>b)==c” 的值为“真”.答案:Y 第9题(1.0分)int i,*p=&i;是正确的C说明语句.答案:Y 第10题(1.0分)语句“int *pi,pj”定义了两个指针变量答案:N 第11题(1.0分)如果函数值的类型和return语句中表达式的值不一致,则以 函数类型为准.答案:Y 第12题(1.0分) C语言中的for语句可以用于循环次数已经确定的情况,但是不能用于循环次数不确定而只给出循环结束条件的情况.答案:N 第13题(1.0分)在执行switch语句时,default和各个case的出现次序不影响执行结果.答案:Y 第14题(1.0分) 语句 printf(“%f%%”,1.0/3);输出为 0.333333.答案:N 第15题(1.0分) 若i =3,则printf(“%d”,-i++);输出的值为-4.答案:N 三、单项选择 共17题(共计34分)第1题(2.0分)下列程序段的输出结果为().float x=213.82631;printf(“%3d”,(int)x);A:213.82 B:213.83 C:213 D:3.8 答案:C 第2题(2.0分)下列定义不正确的是().A:#define PI 3.141592 B:#define S345 C:int max(x,y);int x,y;{ } D:static char c;答案:C 第3题(2.0分)以下程序段的输出结果为().char c[]=“abc”;int i=0;do while(c[i++]!=' ');printf(“%d”,i-1);A:abc B:ab C:2 D:3 答案:D 第4题(2.0分)若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97), 则以下程序段的执行结果是().ch='a';k=12;printf(“%x,%o,”,ch,ch);printf(“k=%%%dn”,k);A:因变量类型与格式描述符的类型不匹配,输出无定值 B:输出项与格式描述符个数不符,输出为零值或不定值 C:61,141,k=%12 D:61,141,k=%d 答案:C 第5题(2.0分)对 for(表达式1;;表达式3)可理解为().A:for(表达式1;0;表达式3)B:for(表达式1;1;表达式3)C:for(表达式1;表达式1;表达式3)D:for(表达式1;表达式3;表达式3)答案:B 第6题(2.0分)以下程序段的输出结果为().for(i=4;i>1;i--)for(j=1;j 第8题(2.0分)设a=12,且a定义为整型变量.执行语句a+=a-=a*=a;后a的值为().A:12 B:144 C:0 D:132 答案:C 第9题(2.0分)执行语句 for(i=1;i++<4;);后变量 i 的值是().A:3 B:4 C:5 D:不定答案:C 第10题(2.0分)若有char a[80],*s=a;正确的输入语句是().(s输入字符串)A:scanf(“%s”,s);B:gets(*s);C:scanf(“%c”,s);D:getchar(s,80);答案:A 第11题(2.0分)以下函数调用语句中实参的个数是().func((e1,e2),(e3,e4,e5));A:2 B:3 C:5 D:语法错误 答案:A 第12题(2.0分)下列运算符中优先级最高的是().A:< B:+ C:&& D:!=答案:B 第13题(2.0分)int a[10]; 给数组a的所有元素分别赋值为1、2、3、„„的语句是().A:for(i=1;i<11;i++)a[i]=i;B:for(i=1;i<11;i++)a[i-1]=i;C:for(i=1;i<11;i++)a[i+1]=i;D:for(i=1;i<11;i++)a[0]=1;答案:B 第14题(2.0分)若k为int型变量,则以下程序段的执行结果是().k=-8567;printf(“k=|%06D|n”);A:格式描述符不合法,输出无定值 B:输出为k=|%06D| C:输出为|0-8567| D:输出为|-8567|答案:B 第15题(2.0分)在C语言中,要求运算数必须是整型的运算符是().A:^ B:% C:!D:> 答案:B 第16题(2.0分)下列运算符中是C语言关系运算符的是().A:~ B:!C:& D:!= 答案:D 第17题(2.0分)若有说明:int a[][3]={1,2,3,4,5,6,7,8,9};则a数组第一维的大小是().A:2 B:3 C:4 D:无确定值 答案:B 四、程序填空 共2题(共计12分)第1题(6.0分)/*------------------------【程序填空】 --------------------------题目:以下程序的功能如(图1)。 ------------------------*/ #include main(){ clrscr();printf(“%fn”, f(f(-1.0)+f(5.0)));} 答案: =======(答案1)======= float x =========或========= double x =======(答案2)======= double y =======(答案3)======= x<=2 =========或========= 2>=x =======(答案4)======= return y =========或========= return(y)第2题(6.0分) /*------------------------【程序填空】 --------------------------题目:已定义一个含有30个元素的数组s,函数fun1的功能是按 顺序分别赋予各元素从2开始的偶数,函数fun2则按顺序 每五个元素求一个平均值, 并将该值存放在数组w中。 程序中有4个空,填空使程序完整。 ------------------------*/ float s[30],w[6];fun1(float s[]){ int k,i;for(k=2,i=0;i<30;i++){ /***********SPACE***********/ 【?】 k+=2;} } fun2(float s[],float w[]){ float sum=0.0;int k,i;for(k=0,i=0;i<30;i++){ sum+=s[i];/***********SPACE***********/ 【?】 { w[k]=sum/5;/***********SPACE***********/ 【?】 k++;} } } main(){int i;fun1(s);/***********SPACE***********/ 【?】 for(i=0;i<30;i++){ if(i%5==0)printf(“n”);printf(“%8.2f”,s[i]);} printf(“n”);for(i=0;i<6;i++)printf(“%8.2f”,w[i]);} 答案: =======(答案1)======= s[i]=k;=========或========= s[i]=(i+1)*2 =======(答案2)======= if((i + 1)%5 == 0)=========或========= if((i + 1)/5*5 ==i+1)=======(答案3)======= sum=0;=========或========= sum=0.0;=======(答案4)======= fun2(s,w); 五、程序改错 共1题(共计6分)第1题(6.0分) /*-----------------------【程序改错】 -------------------------题目:函数fun的功能是:输出Fabonacci数列的前20项,要求变 量类型定义成浮点型,输出时只输出整数部分,输出项 数不得多于或少于20。请改正程序中的4个错误,使它能得出正确的结果。-------------------------注意:不可以增加或删除程序行,也不可以更改程序的结构。-----------------------*/ fun(){ int i;float f1=1,f2=1,f3;/**********FOUND**********/ printf(“%8d”,f1);/**********FOUND**********/ for(i=1;i<=20;i++){ f3=f1+f2;/**********FOUND**********/ f2=f1;/**********FOUND**********/ f3=f2;printf(“%8.0f”,f1);} printf(“n”);} main(){ fun();} 答案: =======(答案1)======= printf(“%8.0f”,f1);=========或========= printf(“%f”,f1);=========或========= printf(“%8f”,f1);=======(答案2)======= for(i=1;i<20;i++)=========或========= for(i=1;20>i;i++)=========或========= for(i=2;i<=20;i++)=========或========= for(i=2;20>=i;i++)=========或========= for(i=1;i<=19;i++)=========或========= for(i=1;19>=i;i++)=======(答案3)======= f1=f2;=======(答案4)======= f2=f3; 六、程序设计 共3题(共计18分)第1题(6.0分) /*-----------------【程序设计】 -------------------题目:编写函数求1~100中奇数的平方和。 结果为166650。 -------------------注意:部分源程序给出如下。请勿改动主函数 main和其它函数中的任何内容,仅在函 数的花括号中填入所编写的若干语句。 -----------------*/ #include “stdio.h” float sum(int n){ /**********Program**********/ /********** End **********/ } main(){ printf(“sum=%fn”,sum(100));yzj();getch();} yzj(){ FILE *IN,*OUT;int n;int i;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”);} fscanf(IN,“%d”,&i);o=sum(i);fprintf(OUT,“%fn”,o);fclose(IN);fclose(OUT);} 答案:----------------------float s=0;int i,j;for(i=1;i<=n;i=i+2)s=s+i*i;return(s);----------------------第2题(6.0分) /*-----------------【程序设计】 -------------------题目:编写函数fun,函数的功能是:找出一批 正整数中的最大的偶数。 -------------------注意:部分源程序给出如下。请勿改动主函数 main和其函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 -----------------*/ #include “stdio.h” int fun(int a[],int n){ /**********Program**********/ /********** End **********/ } main(){ int a[]={1,2,9,24,35,18},k;k=fun(a,6);printf(“max=%dn”,k);yzj();getch();} yzj(){ FILE *IN,*OUT;int iIN[10],iOUT,i,j;IN=fopen(“in.dat”,“r”);if(IN==NULL){printf(“Please Verify The Currernt Dir..It May Be Changed”);} OUT=fopen(“out.dat”,“w”);if(OUT==NULL){printf(“Please Verify The Current Dir..It May Be Changed”);} for(j=0;j<10;j++){ for(i=0;i<10;i++)fscanf(IN,“%d”,&iIN[i]);iOUT=fun(iIN,10);} fprintf(OUT,“%dn”,iOUT);fclose(IN);fclose(OUT);} 答案:----------------------int i,amax=-1;for(i=0;i /*-----------------【程序设计】 -------------------题目:编写函数fun其功能是:根据整型形参m,计算如下公式的值: y=1+1/3+1/5+1/7+...+1/(2m+1)例如:若m=9,则应输出:2.133256-------------------注意:部分源程序给出如下。请勿改动主函数main 和其它函数中的任何内容,仅在函数fun的花 括号中填入所编写的若干语句。 -----------------*/ #include “stdio.h” double fun(int m){ /**********Program**********/ /********** End **********/ } main(){int n;clrscr();printf(“Enter n: ”);scanf(“%d”, &n);printf(“nThe result is %1fn”, fun(n));yzj();getch();} yzj(){ 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,“%fn”,o);} fclose(IN);fclose(OUT);} 答案:----------------------double y=1;int i;for(i=1;i<=m;i++){y+=1.0/(2*i+1);} return(y);----------------------试卷编号:9690 所属语言:C语言 试卷方案:期中考试 试卷总分:100分 共有题型:5种 一、填空 共15题(共计15分)第1题(1.0分)题号:528 设a、b、c为整型数, 且a= 2、b= 3、c=4, 则执行完以下语句: a*=16+(b++)-(++c); 后,a的值是 【1】.答案: =======(答案1)======= 28 第2题(1.0分)题号:77 已知 i=5;写出语句 a=--i;执行后整型变量 a 的值是【1】.答案: =======(答案1)======= 4 第3题(1.0分)题号:433 已知x=3,y=2,则表达式x*=y+8的值为【1】.答案: =======(答案1)======= 30 第4题(1.0分)题号:437 以下程序的输出结果为【1】,#include “stdio.h” main(){int a=010,j=10;printf(“%d,%dn”,++a,j--);} 答案: =======(答案1)======= 9,10 第5题(1.0分)题号:436 下列程序的输出是【1】,main(){int a=011;printf(“%dn”,++a);} 答案: =======(答案1)======= 10 第6题(1.0分)题号:293 getchar()函数只能接收一个【1】.答案: =======(答案1)======= 字符 第7题(1.0分)题号:98 已知a=13,b=6,!a的十进制数值为【1】.答案: =======(答案1)======= 0 第8题(1.0分)题号:255 表达式18 && 53 的值是【1】.答案: =======(答案1)======= 1 第9题(1.0分)题号:86 写出表达式 1.234&&5.982 的值是【1】.答案: =======(答案1)======= 1 第10题(1.0分)题号:438 以下程序的输出结果为【1】,#include “stdio.h” main(){int a;for(a=0;a<10;a++);printf(“%d”,a);} 答案: =======(答案1)======= 10 第11题(1.0分)题号:594 若所用变量都已正确定义,请填写以下程序段的输出结果【1】.for(i=1;i<=5;i++); printf(“OKn”);答案: =======(答案1)======= OK 第12题(1.0分)题号:532 以下do-while语句中循环体的执行次数是【1】.a=10; b=0; do { b+=2;a-=2+b;} while(a>=0); 答案: =======(答案1)======= 3 第13题(1.0分)题号:340 C语言中,二维数组在内存中的存放方式为按【1】优先存放.答案: =======(答案1)======= 行 第14题(1.0分)题号:331 C程序在执行过程中,不检查数组下标是否【1】.答案: =======(答案1)======= 越界 第15题(1.0分)题号:332 若有以下数组a,数组元素:a[0]~a[9],其值为 4 12 8 2 10 7 5 1 3 该数组可用的最小下标值是【1】.答案: =======(答案1)======= 0 二、判断 共15题(共计15分)第1题(1.0分)题号:933 在C语言中,变量必需先定义后使用 答案:Y 第2题(1.0分)题号:717 x*=y+8 等价于 x=x*(y+8).答案:Y 第3题(1.0分)题号:878 若有 int i=10,j=2;则执行完i*=j+8;后ⅰ的值为28.答案:N 第4题(1.0分)题号:943 使用putchar函数时,必须在之前包含头文件stdio.h 答案:Y 第5题(1.0分)题号:720 语句 printf(“%f%%”,1.0/3);输出为 0.333333.答案:N 第6题(1.0分)题号:716 若i =3,则printf(“%d”,-i++);输出的值为-4.答案:N 第7题(1.0分)题号:930 关于if语句中,条件表达式只能是关系表达式或逻辑表达式 答案:N 第8题(1.0分)题号:956 在switch-case语句中,必须使用default语句.答案:N 第9题(1.0分)题号:951 在执行switch语句时,default和各个case的出现次序不影响执行结果.答案:Y 第10题(1.0分)题号:952 do-while循环是先判断循环条件表达式,后执行循环体;while循环是先执行循环体,后判断循环条件表达式.答案:N 第11题(1.0分)题号:953 C语言中的for语句可以用于循环次数已经确定的情况,但是不能用于循环次数不确定而只给出循环结束条件的情况.答案:N 第12题(1.0分)题号:954 continue语句只结束本次循环,而不是终止整个循环的执行.break语句则是结束整个循环过程,不再判断执行循环的条件是否成立.答案:Y 第13题(1.0分)题号:736 int a[3][4]={{1},{5},{9}};它的作用是将数组各行第一列 的元素赋初值,其余元素值为0.答案:Y 第14题(1.0分)题号:926 任何数组的下标都是从0开始;答案:Y 第15题(1.0分)题号:735 如果想使一个数组中全部元素的值为0,可以写成 int a[10]={0*10};答案:N 三、单项选择 共20题(共计40分)第1题(2.0分)题号:2219 设有说明:char w;int x;float y;double z;则表达式w*x+z-y 值的数据类型为().A:float B:char C:int D:double 答案:D 第2题(2.0分)题号:2005 以下不正确的叙述是().A:在C程序中所用的变量必须先定义后使用 B:程序中,APH和aph是两个不同的变量 C:若a和b类型相同,在执行了赋值语句a=b;后b中的值将放入a中,b中的值不变 D:当输入数值数据时,对于整型变量只能输入整型值;对于实型变量只能输入实型值 答案:D 第3题(2.0分)题号:2194 C语言表达式a=15,a%6的值是 A:15 B:3 C:2 D:非法表达式 答案:B 第4题(2.0分)题号:2039 若k为int型变量,则以下程序段的执行结果是().k=-8567;printf(“k=|%06D|n”);A:格式描述符不合法,输出无定值 B:输出为k=|%06D| C:输出为|0-8567| D:输出为|-8567| 答案:B 第5题(2.0分)题号:2044 下列程序的输出结果为().main(){int m=7,n=4;float a=38.4,b=6.4,x;x=m/2+n*a/b+1/2;printf(“%fn”,x);} A:27.000000 B:27.500000 C:28.000000 D:28.500000 答案:A 第6题(2.0分)题号:2042 若a是float型变量,b是unsigned型变量,以下输入语句中合法的是().A:scanf(“%6.2f%d”,&a,&b);B:scanf(“%f%n”,&a,&b);C:scanf(“%f%3o”,&a,&b);D:scanf(“%f%f”,&a,&b); 答案:C 第7题(2.0分)题号:2143 int a=1,b=2,c=3; if(a>c)b=a;a=c;c=b;则c的值为().A:1 B:2 C:3 D:不一定 答案:B 第8题(2.0分)题号:2046 以下程序的输出结果是().main(){int i,j,k,a=3,b=2;i=(--a==b++)?--a:++b;j=a++;k=b;printf(“i=%d,j=%d,k=%dn”,i,j,k);} A:i=2,j=1,k=3 B:i=1,j=1,k=2 C:i=4,j=2,k=4 D:i=1,j=1,k=3 答案:D 第9题(2.0分)题号:2210 若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于 表达式(exp)的是().A:(exp==0)B:(exp!=0)C:(exp==1)D:(exp!=1) 答案:B 第10题(2.0分)题号:2062 假定所有变量均已正确定义,下列程序段运行后x的值是().k1=1;k2=2;k3=3;x=15;if(!k1)x--;else if(k2)x=4;else x=3;A:14 B:4 C:15 D:3 答案:B 第11题(2.0分)题号:2144 int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为().A:1 B:2 C:3 D:不一定 答案:A 第12题(2.0分)题号:2248 下面有关 for 循环的正确描述是().A:for 循环只能用于循环次数已经确定的情况 B:for 循环是先执行循环循环体语句,后判断表达式 C:在 for 循环中,不能用 break 语句跳出循环体 D:for 循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 答案:D 第13题(2.0分)题号:2246 以下for循环的执行次数是 for(x=0,y=0;(y=123)&&(x<4);x++);().A:是无限循环 B:循环次数不定 C:4次 D:3次 答案:C 第14题(2.0分)题号:2251 以下不是无限循环的语句为().A:for(y=0,x=1;x>++y;x=i++)i=x;B:for(;;x++=i);C:while(1){x++;} D:for(i=10;;i--)sum+=i; 答案:A 第15题(2.0分)题号:2061 在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的 表达式是().A:(!E==0)B:(E>0||E<0)C:(E==0)D:(E!=0) 答案:C 第16题(2.0分)题号:2123 设j和k都是int类型,则for循环语句().for(j=0,k=0;j<=9&&k!=876;j++)scanf(“%d”,&k);A:最多执行10次 B:最多执行9次 C:是无限循环 D:循环体一次也不执行 答案:A 第17题(2.0分)题号:2273 设有数组定义: char array [ ]=“China”;则数组 array所占的 空间为().A:4个字节 B:5个字节 C:6个字节 D:7个字节 答案:C 第18题(2.0分)题号:2275 以下对二维数组a的正确说明是().A:int a[3][] B:float a(3,4)C:double a[1][4] D:float a(3)(4) 答案:C 第19题(2.0分)题号:2282 以下能对二维数组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}}; 答案:B 第20题(2.0分)题号:2152 若char a[10];已正确定义,以下语句中不能从键盘上给a数组的 所有元素输入值的语句是().A:gets(a);B:scanf(“%s”,a);C:for(i=0;i<10;i++)a[i]=getchar();D:a=getchar(); 答案:D 四、程序填空 共4题(共计24分)第1题(6.0分)题号:11 /*------------------------【程序填空】 -------------------------- 题目:以下程序的功能是求100-999之间的水仙花数(水仙花数 是指一个三位数的各位数字的立方和是这个数本身,如:153=1^3+5^3+3^3)。 ------------------------*/ int fun(int n){ int i,j,k,m;m=n;/***********SPACE***********/ 【?】 for(i=1;i<4;i++){ /***********SPACE***********/ 【?】 m=(m-j)/10;k=k+j*j*j;} /***********SPACE***********/ if(k==n)【?】 else return(0);} main(){ int i;for(i=100;i<1000;i++)/***********SPACE***********/ if(【?】==1)printf(“%d is ok!n” ,i);} 答案: =======(答案1)======= k=0; =======(答案2)======= j=m%10;=========或========= j=m-m/10*10 =========或========= j=m-10*(m/10) =======(答案3)======= return(1); =======(答案4)======= fun(i) 第2题(6.0分)题号:429 /*------------------------【程序填空】 -------------------------- 题目:从读入的整数数据中,统计大于零的整数个数和小于零的整数个数。用输入零来结束输入,程序中用变量i统计大于 零的整数个数,用变量j统计小于零的整数个数。------------------------*/ #include =======(答案1)======= i + 1 =======(答案2)======= j + 1 =======(答案3)======= &n 第3题(6.0分)题号:423 /*------------------------【程序填空】 -------------------------- 题目:考查字符串数组的应用。输出26个英文字母。 ------------------------*/ #include =======(答案1)======= i++ =========或========= ++i =========或========= i=i+1 =========或========= i+=1 =======(答案2)======= 'A' + i =========或========= i+'A' =========或========= 65 + i =========或========= i+65 =======(答案3)======= string 第4题(6.0分)题号:4 /*------------------------【程序填空】 -------------------------- 题目:下面的程序是求1!+3!+5!+„„+n!的和,程序中有4个 空,填空使程序完整。 ------------------------*/ main(){ long int f,s;int i,j,n;/***********SPACE***********/ 【?】 scanf(“%d”,&n);/***********SPACE***********/ for(i=1;i<=n;【?】){ f=1;/***********SPACE***********/ for(j=1;【?】;j++)/***********SPACE***********/ 【?】 s=s+f;} printf(“n=%d,s=%ldn”,n,s);} 答案: =======(答案1)======= s=0; =======(答案2)======= i+=2 =========或========= i=i+2 =========或========= i++,i++ =======(答案3)======= j<=i =========或========= i>=j =========或========= jj =======(答案4)======= f= f * j;=========或========= f*=j; 五、程序设计 共1题(共计6分)第1题(6.0分)题号:325 /*-----------------【程序设计】 ------------------- 题目:编写函数fun其功能是:能计算从1开始到n的自然数中偶数的平方的和,n由键盘输入,并在main()函数中输出。(n是偶数)-------------------注意:部分源程序给出如下。请勿改动主函数main 和其它函数中的任何内容,仅在函数fun的花 括号中填入所编写的若干语句。 -----------------*/ #include “stdio.h” int fun(int n){ /**********Program**********/ /********** End **********/ } main(){int m; printf(“Enter m: ”);scanf(“%d”, &m);printf(“nThe result is %dn”, fun(m));yzj();getch(); } yzj(){ FILE *IN,*OUT;int t;int o;int c;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(c=1;c<=5;c++){ fscanf(IN,“%d”,&t);o=fun(t);fprintf(OUT,“%dn”,o);} fclose(IN);fclose(OUT);} 答案:----------------------int sum,i;sum =0;for(i=2;i<=n;i=i+2){ sum=sum+i*i;} return(sum);---------------------- 试卷编号:9689 所属语言:C语言 试卷方案:期中考试 试卷总分:100分 共有题型:5种 一、填空 共15题(共计15分)第1题(1.0分)题号:92 C语言中的字符变量用保留字【1】来说明.答案: =======(答案1)======= char 第2题(1.0分)题号:433 已知x=3,y=2,则表达式x*=y+8的值为【1】.答案: =======(答案1)======= 30 第3题(1.0分)题号:388 设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为【1】.答案: =======(答案1)======= 1.0 =========或========= 1 第4题(1.0分)题号:293 getchar()函数只能接收一个【1】.答案: =======(答案1)======= 字符 第5题(1.0分)题号:437 以下程序的输出结果为【1】,#include “stdio.h” main(){int a=010,j=10;printf(“%d,%dn”,++a,j--);} 答案: =======(答案1)======= 9,10 第6题(1.0分)题号:498 c语言程序的三种基本结构是:顺序结构,选择结构,【1】结构.答案: =======(答案1)======= 循环 第7题(1.0分)题号:100 已知a=13,b=6, a||b的十进制数值为【1】.答案: =======(答案1)======= 1 第8题(1.0分)题号:441 设a=3,b=4,c=4,则表达式a+b>c&&b==c&&a||b+c&&b==c的值为【1】.答案: =======(答案1)======= 1 第9题(1.0分)题号:457 设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2 后,t的值是【1】.答案: =======(答案1)======= 1 第10题(1.0分)题号:389 设i,j,k均为int型变量,则执行完for循环 for(i=0,j=10;i<=j;i++,j--)k=i+j; 后,k的值为【1】.答案: =======(答案1)======= 10 第11题(1.0分)题号:421 若输入字符串:abcde<回车>,则以下while循环体将执行 【1】 次.While((ch=getchar())=='e')printf(“*”);答案: =======(答案1)======= 0 第12题(1.0分)题号:533 设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是【1】.for(x=0,y=0;y!=123&&x<3;x++) scanf(“%d”,&y);答案: =======(答案1)======= 3 第13题(1.0分)题号:328 C语言中,数组元素的下标下限为【1】.答案: =======(答案1)======= 0 第14题(1.0分)题号:346 合并字符串的库函数是【1】,只写函数名即可.答案: =======(答案1)======= strcat 第15题(1.0分)题号:341 定义int a[2][3];表示数组a中的元素个数是【1】个.答案: =======(答案1)======= 6 二、判断 共15题(共计15分)第1题(1.0分)题号:715 整数-32100可以赋值给int型和long int型变量.答案:Y 第2题(1.0分)题号:929 在C语言中,5种基本数据类型的存储空间长度的排列顺序为:char 第3题(1.0分)题号:928 C程序中的关键字必须小写.答案:Y 第4题(1.0分)题号:194 若有定义和语句: int a;char c;float f;scanf(“%d,%c,%f”,&a,&c,&f);若通过键盘输入: 10,A,12.5,则a=10,c='A',f=12.5.答案:Y 第5题(1.0分)题号:944 C语言中,赋值表达式加上分号就构成了赋值语句.答案:Y 第6题(1.0分)题号:716 若i =3,则printf(“%d”,-i++);输出的值为-4.答案:N 第7题(1.0分)题号:950 逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符.答案:Y 第8题(1.0分)题号:951 在执行switch语句时,default和各个case的出现次序不影响执行结果.答案:Y 第9题(1.0分)题号:869 若有int i=10, j=0;则执行完语句 if(j=0)i++;else i--;i的值为11.答案:N 第10题(1.0分)题号:953 C语言中的for语句可以用于循环次数已经确定的情况,但是不能用于循环次数不确定而只给出循环结束条件的情况.答案:N 第11题(1.0分)题号:742 若有说明int c;则while(c=getchar());是正确的C语句.答案:Y 第12题(1.0分)题号:954 continue语句只结束本次循环,而不是终止整个循环的执行.break语句则是结束整个循环过程,不再判断执行循环的条件是否成立.答案:Y 第13题(1.0分)题号:736 int a[3][4]={{1},{5},{9}};它的作用是将数组各行第一列 的元素赋初值,其余元素值为0.答案:Y 第14题(1.0分)题号:735 如果想使一个数组中全部元素的值为0,可以写成 int a[10]={0*10};答案:N 第15题(1.0分)题号:926 任何数组的下标都是从0开始;答案:Y 三、单项选择 共20题(共计40分)第1题(2.0分)题号:2004 下列字符序列中,不可用作C语言标识符的是().A:b70 B:#ab C:symbol D:a_1 答案:B 第2题(2.0分)题号:2137 下列表达式中,可作为C合法表达式的是().A:[3,2,1,0] B:(3,2,1,0)C:3=2=1=0 D:3/2/1/0 答案:B 第3题(2.0分)题号:2037 若k,g均为int型变量,则下列语句的输出为().k=017;g=111;printf(“%dt”,++k);printf(“%xn”,g++);A:15 6f B:16 70 C:15 71 D:16 6f 答案:D 第4题(2.0分)题号:2043 已知字母a的ASCII十进制代码为97,则执行下列语句后的输出结果为().char a='a';a--;printf(“%d,%cn”,a+'2'-'0',a+'3'-'0');A:b,c B:a--运算不合法,故有语法错 C:98,c D:格式描述和输出项不匹配,输出无定值 答案:C 第5题(2.0分)题号:2128 下列程序段的输出结果为().float x=213.82631; printf(“%3d”,(int)x);A:213.82 B:213.83 C:213 D:3.8 答案:C 第6题(2.0分)题号:2222 语句printf(“abre'hi'yboun”);的输出结果是(说明:'b'是退格符)().A:abre'hi'ybou B:abre'hi'ybou C:re'hi'you D:abre'hi'ybou 答案:C 第7题(2.0分)题号:2028 假设所有变量均为整型,表达式:a=2,b=5,a>b?a++:b++,a+b的值 是().A:7 B:8 C:9 D:2 答案:B 第8题(2.0分)题号:2145 int a=3,b=2,c=1; if(a>b>c)a=b; else a=c; 则a的值为().A:3 B:2 C:1 D:0 答案:C 第9题(2.0分)题号:2062 假定所有变量均已正确定义,下列程序段运行后x的值是().k1=1;k2=2;k3=3;x=15;if(!k1)x--;else if(k2)x=4;else x=3;A:14 B:4 C:15 D:3 答案:B 第10题(2.0分)题号:2136 下列程序段的输出结果为().int a=7,b=9,t; t=a*=a>b?a:b; printf(“%d”,t);A:7 B:9 C:63 D:49 答案:C 第11题(2.0分)题号:2319 在C语言中,要求运算数必须是整型的运算符是().A:^ B:% C:!D:> 答案:B 第12题(2.0分)题号:2251 以下不是无限循环的语句为().A:for(y=0,x=1;x>++y;x=i++)i=x;B:for(;;x++=i);C:while(1){x++;} D:for(i=10;;i--)sum+=i; 答案:A 第13题(2.0分)题号:2123 设j和k都是int类型,则for循环语句().for(j=0,k=0;j<=9&&k!=876;j++)scanf(“%d”,&k);A:最多执行10次 B:最多执行9次 C:是无限循环 D:循环体一次也不执行 答案:A 第14题(2.0分)题号:2141 以下程序段的输出结果为().for(i=4;i>1;i--) for(j=1;j putchar('#');A:无 B:###### C:# D:### 郑州大学现代远程教育 《C语言程序设计》课程 学习指导书 柳宏川 编 第1章 绪论 (一)本章学习目标 掌握结构化程序设计的思想,结构化流程图描述,算法设计基础和良好程序设计风格。 (二)本章重点、要点 C语言特点,算法概念及NS图形描述,结构化程序设计思想,三种基本结构:顺序结构、选择结构和循环结构,使用良好的程序设计风格。 (三)练习题 1_1.什么是低级语言? 1_2.什么是高级语言? 1_3.面向过程语言的特点是什么? 1_4.什么是算法? 1_5.算法有什么特点? 1_6.结构化算法的基本结构有哪些? 1_7.结构化程序设计的标准有哪些? 第2章 C语言程序的开发过程 (一)本章学习目标 熟悉C程序开发环境,熟练掌握调试工具的使用,掌握C语言程序结构与语法规则。 (二)本章重点、要点 C程序开发环境工具的使用,C语言程序结构与语法规则。 (三)Turbo C 的操作指南 开发一个C语言程序一般包括3个主要步骤:编辑,编译和连接。掌握调试C语言程序的全过程。 编辑:根据求解算法,开发人员使用文本编辑器编辑代码,生成源程序代码,扩展 1)2) 名为.C。 编译:编译时,编译器首先检查源程序中每条语句的词法和语法。当发现错误时,在屏幕上显示错误的位置、错误类型等相关信息。根据错误信息,重新使用编辑器进行查错并修改,然后重新编译直到所有的词法和语法错误都被排除。正确编译后产生二进制目标文件,扩展名为.OBJ。 连接:编译后产生的目标文件是可重定位的程序模块,但不能直接运行。连接是将目标程序、库函数和其它目标程序连接到一起,生成可执行的程序。扩展名为.EXE。运行:源代码经过编译、连接,生成可执行程序后,就可以进行程序的运行了。编译过程发现的错误可分为两类。 一类是局部语法错误。例如,缺失了分号、逗号,或者引用了错误的数据对象。另一类是程序内部上下文关系方面的错误。例如,需要使用的数据对象没有定义。连接时,也可能产生错误。例如,连接文件找不到等,具体不再叙述。 源代码经过编译、连接,生成可执行程序后,还需要进行测试。测试的目的是发现程序的错误。一般通过输入一些实际数据来验证程序执行结果的正确性。如果程序执行中出现问题,或发现程序的输出结果不正确,需要设法找到出错的原因,并修改源程序,重新进行编译、连接,再测试和调试,不断反复,直到程序正确无误。 第3章 基本数据类型 (一)本章学习目标 熟练掌握标识符的概念,基本数据(整型、实型、字符型等),常量,转义符,变量,变量的赋值。 (二)本章重点、要点 标识符的组成规则,基本数据类型及对应的名称(整型、实型、字符型等),常量,转义符,变量,变量名,变量的赋值等。 (三)练习题 3_1.基本整型数据的输出。3_2.实型数据的输出。3_3.字符型数据的输出。 3_4.C语言标识符的命名规则如何? 3_5.C语言的基本数据类型有哪些? 3_6.什么是常量? 3_7.什么是变量? 3_8.转义字符有什么作用?举例说明。 3_9.字符串常量与字符常量的表示有什么不同? (二)本章重点、要点 循环控制语句:while语句,do…while语句,for语句,循环初始条件、循环终止条件、循环体和循环变量,循环的嵌套,辅助控制语句,continue语句,break语句,goto语句。 (三)练习题 7_1.用while语句,求连加式1 + 2 +...+ n(n > 2)的值。7_2.用do…while语句,求连加式1 + 2 +...+ n(n > 2)的值。7_3.求解奇数的连加式1 + 3 + 5 +...+ n(n > 10)的值。7_4.将如图所示的三角形图案显示到屏幕上。 7_5.判断一个整数是否为素数。 第8章 函数 (一)(一)本章学习目标 熟知函数的结构,正确进行函数定义,掌握函数头部,函数体,函数的返回值等概念,理解函数的功能,理解函数参数的意义,掌握有参函数的调用和无参函数的调用,掌握运用函数调用的方式,掌握函数的声明方法,理解函数的原型的概念。 (二)本章重点、要点 函数的定义,函数头部,函数体,函数的值,返回语句,函数的功能,函数的调用,有参函数的调用,无参函数的调用,函数调用的方式,函数的声明与函数的原型。 (三)练习题 8_1.编写程序,通过调用函数imin,求两个表达式的最小值。 8_2.编写程序,通过调用PtrStar函数,输出4行“@”号,每行10个。 8_3.编写程序,输入一个年份,通过调用函数判断其是否为闰年。 8_4.编写程序,输入两个数,输出其中绝对值最大的数。要求:求绝对值和求最大值分别使用函数完成,在求最大值的函数中调用求绝对值的函数。8_5.编写函数,完成显示下列所示的三角形图案,行数由函数参数决定。 8_6.编写程序,通过调用【实例8_5】中的函数,输出三个三角形的图案。 第9章 数组 (一)本章学习目标 张确使用一维数组和二维数组去解决问题。学会使用数组作为函数参数、数组元素作为函数的参数和数组名作为函数参数的方法。 (二)本章重点、要点 一维数组,一维数组的定义,一维数组元素的引用,一维数组在内存中的存储,一维字符数组的说明。二维数组,维数组的定义,二维数组元素的引用,二维数组在内存中的存储。数组作为函数参数,数组元素作为函数的参数,数组名作为函数参数。 (三)练习题 9_1.用随机函数产生15个100以内的随机整数存入一维数组,然后分三行输出,每行5个数 9_2.将一个一维数组a[9]中各元素值按行的顺序放入二维数组b[3][3]中。9_3.将一个二维数组b[5][5]中各元素值列优先的顺序放入一维数组a[25]中。9_4.有一个m×n矩阵,各元素值由随机数产生,求其转置矩阵并输出。 9_5.有一个m×n矩阵,找出最大元素值及其最大元素值所在的行、列位置。9_6.将矩阵M(n,n)对角线上的元素置为1,其余元素置为0。 第10章 结构体与共用体 (一)本章学习目标 掌握并正确使用结构体类型、结构体与数组,共用体,共用体类型。 (二)本章重点、要点 结构体类型的定义,结构体变量的定义,结构体变量的引用,结构体成员变量的引用,结构体变量的初始化。结构体与数组,共用体,共用体类型和共用体变量的定义,共用体变量的引用。 (三)练习题 10_1.设有学生信息如下:学号(长整型)、姓名(字符串型)、年龄(整型)、课程1成绩(实型)、课程2成绩(实型)、课程3成绩(实型)、课程4成绩(实型)、课程5-6 读写。 (三)练习题 12_1.利用文本编辑软件在磁盘上建立一个有n个学生的学号、姓名及英语、数学和计算机三门课程成绩的数据文件。编写程序将建立的数据文件读出且求出每个学生的平均成绩。12_2用定义结构类型的方法,编写程序建立一个具有学生学号、姓名、总分和联系电话的记录文件。12_3编写程序,利用第12_2建立的记录文件,从键盘上输入一个学号,查寻该位同学信息。12_4编写程序,将第12_3题建立的文件复制到另一个文件。 第13章 运算符与表达式 (一)本章学习目标 深入理解运算符和表达式,掌握位运算方法。 (二)本章重点、要点 运算符与表达式,赋值运算符,复合赋值运算符,赋值表达式,赋值运算符的优先级和结合方向。逗号运算符与逗号表达式,逗号表达式的求解顺序,逗号运算符的优先级,逗号运算符的扩展形式。条件运算符与条件表达式,条件运算符的求解顺序,条件运算符的优先级,条件运算符的结合方向,条件表达式的其它形式。自增自减运算符,前置运算,后置运算,自增自减运算符的优先级与结合方向,位运算,位运算符,位运算的功能,与位运算有关的复合赋值运算符,不同长度的数据的位运算,表达式的求解。 (三)练习题 13_1.利用条件运算符实现大小写字母的转换。 13_2.使用for循环求1至100的和。要求将所有的命令放入一个for循环结构。13_3.将下列符号函数使用一个条件表达式完成。 13_4.若int a=0,b=1,c=2,判断下列表达式执行后a,b,c及表达式的值(1)逻辑表达式 a++&&b++&&c++(2)逻辑表达式 ++a&&b++&&c++(3)逻辑表达式 ++a&&--b&&c++(4)逻辑表达式 a++||b++||c++(5)逻辑表达式 ++a||b++||c++(6)逻辑表达式 a++||--b||c++(7)逻辑表达式 a++||b++&&(c-=2)(8)逻辑表达式 a++&&b++||(c-=2)(9)逻辑表达式 ++a&&b++||(c-=2) 13_5.若a=1,b=2,c=3,d=4,m=1,n=3,则逻辑表达式(m=a>b)&&(n=c>d)13_6.解释x!= 0.0 && y/x > 1.0的功能。 第14章 变量的存储 (一)本章学习目标 掌握变量的存储概念,理解变量的类别和作用域。 (二)本章重点、要点 变量的存储单元,整型变量在内存中的存储,字符型变量在内存中的存储,实型变量在内存中的存储。变量的作用域,内部变量,外部变量,变量的生存期,auto变量,全局变量,static变量,register变量。 (三)练习题 14_1.在C语言中,变量的存储类别有哪4种? 14_2.什么是外部变量?其特点有哪些? 14_3.寄存器变量有什么特点? 14_4.什么是变量的作用域? 14_5.什么是变量的生存期? 第15章 指针 (二)(一)本章学习目标 深入理解指针,掌握高层次指针应用,掌握链表的使用。 (二)本章重点、要点 指针与数组,一维数组与一维数组指针,二维数组的指针及数组元素的访问,字符串指针。指针数组,指针数组,指向指针的指针,main函数的参数,函数指针。结构体指针,指向结构体的指针,指向结构体数组的指针,存储管理函数。链表,链表的概念,单链表的基本操作。 (三)练习题 15_1.编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12 时,显示相应的月份名,键入其他整数时显示错误信息。15_2.调用MaxMin函数,返回数组的最大值和最小值。 第16章 函数 (二)(一)本章学习目标 深入理解函数,从存储方面解释函数的调用。 (二)本章重点、要点 函数调用时的内存,函数的活动,程序运行时存储空间的划分,函数的活动记录。参数的传递机制,C语言参数传递,指针参数,数组参数。递归函数,直接递归与间接递归,递归函数的调用过程。 (三)练习题 16_1.设计一个函数把两个整数形参中较大的那个数的地址作为函数值返回,并编写主函数实现调用。 16_2.编写函数,比较两个字符串大小。若相等返回0,大于时返回1,否则返回-1。 第17章 预处理命令 (一)本章学习目标 正确理解预处理命令的概念,掌握预处理命令的使用方法。 (二)本章重点、要点 宏定义,无参宏定义,带参宏定义,宏的作用域。带参的宏与函数的区别,文件包含,条件编译,“# ifdef”命令,“# ifndef”命令,“# if”命令,条件编译和条件语句的比较。 (三)练习题 17_1.C语言的预处理有哪些? 17_2.预处理命令在书写格式上有什么要求? 17_3.#include <文件名>和#include “文件名”有什么不同? 17_4. 条件编译和条件语句有什么区别? 参考答案 第1章 绪论 1_1.什么是低级语言? 答:低级语言较依赖于所在的计算机系统,也称为面向机器的语言。使用低级语言编写的程序,移植性较差。低级语言主要包括机器语言和汇编语言。 机器语言是由二进制代码“0”和“1”组成的若干个数字串。用机器语言编写的程序,称为机器语言程序。机器语言程序能够被计算机直接识别并执行。但是,程序员直接编写或维护机器语言程序是很难完成的。 汇编语言是一种借用助记符表示的程序设计语言。汇编语言的每条指令都对应着一条机器语言代码。汇编语言也是面向机器的,即不同类型的计算机系统使用的汇编语言也不同。1_2.什么是高级语言? 答:高级语言编写的程序易读,易修改,移植性好。但使用高级语言编写的程序不能直接在机器上运行,必须经过语言处理程序的转换,才能被机器识别。按照转换方式的不同,可将高级语言分为解释型和编译型两大类。1_3.面向过程语言的特点是什么? 答:(1)采用模块分解与功能抽象的方法,自顶向下,逐步求精。(2)按功能划分为若干个基本的功能模块,形成一个树状结构。各模块间的关系尽可能简单,功能上相对独立。每一个功能模块内部都是由顺序、选择或循环三种基本结构组成。1_4.什么是算法? 答:问题的求解过程,是对数据对象的加工过程。问题的求解过程包括两个方面的内容,即对问题涉及的“数据”进行描述和对“加工过程”进行描述。对“数据”的描述,称为“数据结构”,对“加工过程”的描述,称为算法。1_5.算法有什么特点? 答:算法具有以下特点: (1)有穷性。一个算法包含的操作步骤是有穷的,而不能是无穷的,并且操作时一般还要求是合理可行的。 (2)确定性。算法的每个操作都是确定的,而不应该具有二义性。 (3)有零个或多个输入。“输入”指的是执行算法时,需要从外界获取的必要信息。 (4)有一个或多个输出。算法的目的是为了得到计算的结果。一般地,计算结果即为输出。没有输出的算法是没有意义的。 (5)有效性。算法的每一个操作都应能有效地执行,并得到确定的结果。1_6.结构化算法的基本结构有哪些? 答:(1)顺序结构。(2)选择结构。(3)循环结构。 1121314num2 * num2;printf(“%d ^ 2 + %d ^ 2 = %dn”, num1, num2, SquareSum);printf(“%d ^ 264)% 26 + 65;printf(”%c's back is %cn“, ch, BackCh);return 0;} 第5章 C语言程序的输出与输入 325_1.编写程序求多项式 ax+bx+c的值(键盘输入a=2, b=3, c=4, x=1.414)。# include y = a*x*x+b*x*c;printf(”%fx^2+%fx+%f=%fn“, a,b,c,y);getchar();getchar();return 0;} 变化二: # include # include 5_2.已知华氏温度,根据公式:C = 5/9(F-32),求摄氏温度C(结果保留两位小数)。#include #include 5_4.用getchar()分别输入‘A’,‘B’,‘C’,并赋值给a,b,c, 然后将其转换成对应的小写字母,用putchar()将其输出。#include x1=a+b+c= 3+ 4+ 5= 12 x2=a-b-c= 3-4-5=-6 #include printf(”b=“);scanf(”%d“,&b);printf(”c=“);scanf(”%d“,&c);printf(”x1=a+b+c=%d+%d+%d=%dn“,a,b,c,a+b+c);printf(”x1=a-b-c=%d-%d-%d=%dn“,a,b,c,a-b-c);return 0;} 第6章 流程控制—选择控制结构 6_1.使用if语句,求解两个数中的最大值。/*程序功能:输入两个数,输出其中的大者*/ # include break;/*求和完毕,退出当前switch语句*/ case '-': result = num1181932; break; } break;case 1: /*是大写英文字母*/ ch2 = ch1 + 32;break;} printf(”Input: %cnOutput: %cn“, ch1, ch2);return 0;} 6_6.编写程序,输入一个年份,判断其是否为闰年。 分析:一个年份,当且仅当符合下列两个条件之一的,即是闰年。能被4整除,但不能被100整除的年份。例如,1992年、2008年。能被400整除的年份。例如,2000年、2400年。 用flag的值,表示是否为闰年。如果flag的值为1,表示闰年;如果是0,表示非闰年。# include int main(){ int year, flag;printf(”Input a year: “);scanf(”%d“, &year);if(year % 4 == 0){ if(year % 100!= 0)flag = 1;else { if(year % 400 == 0)flag = 1;else flag = 0;} } else flag = 0;if(flag)printf(”%d is a leap yearn“, year);else printf(”%d is not a leap yearn“, year);return 0;} 第7章 流程控制—循环控制结构 7_1.用while语句,求解连加式1 + 2 + „+ n(n > 2)的值。# include printf(“Input a number: ”); scanf(“%d”,&n); while(i <= n){ sum = sum + i;i=i+1;} printf(“1 + 2 +...+ %d = %dn”,n,sum); return 0; } 7_2.用do„while语句,求连加式1 + 2 +...+ n(n > 2)的值。# include scanf(”%d“, &n);do { product = product * i;i = i + 1;} while(i <= n);/*累乘i,直到i超过n为止*/ printf(”1 * 2 *...* %d = %ldn“, n, product);return 0;} 7_3.求解奇数的连加式1 + 3 + 5 +...+ n(n > 10)的值。# include { printf(”*“);j = j + 1;} /*第i行输出2 * i23242526i;){ printf(” “);j = j + 1;} /*第i行输出n1){ printf(”*“);j = j + 1;} /*第i行输出2 * ii;){ printf(” “);j = j + 1;} /*第i行输出n271){ printf(”*");j = j + 1;} /*第i行输出2 * i2829303******4 若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是()。(注:└┘代表空格) A.10A└┘20B B.10└┘A20B C.10 └┘A└┘20└┘ B D.10A20└┘B 43.若变量已正确说明为float类型,要通过语句scanf(”%f %f%f”, &a, &b, &c);给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式为()。 A.10<回车> B.10.0,22.0,33.0<回车> 22<回车> C.10.0<回车> D.10 22<回车> 22.0 33.0<回车> 33<回车> 44.有如下程序,若要求x1、x2、y1、y2的值分别为10、20、A、B,正确的数据输入是()。(注:└┘代表空格)int x1,x2; char y1,y2; scanf(”%d%d”,&x1,&x2);scanf(”%c%c”, &y1,&y2);A.1020AB B.10└┘20└┘ABC C.10└┘20 D.10└┘20AB AB 45.已有定义int a=-2;和输出语句:printf(”%8lx”,a);以下正确的叙述是()。A.整型变量的输出格式符只有%d一种 B.%x是格式符的一种,它可以适用于任何一种类型的数据 C.%x是格式符 D.%8lx不是错误的格式符,其中数字8规定了输出字段的宽度 46.有如下程序段,对应正确的数据输入是()。float x,y;scanf(”%f%f”, &x,&y);printf(”a=%f,b=%f”, x,y);A.2.04<回车> B.2.04,5.67<回车> 5.67<回车> C.A=2.04,B=5.67<回车> D.2.055.67<回车> 47.有如下程序段,从键盘输入数据的正确形式应是()。(注:└┘代表空格)float x,y,z;scanf(“x=%d,y=%d,z=%d”,&a,&y,&z);A.123 B.x=1,y=2,z=3 C.1,2,3 D.x=1└┘ y=2└┘ z=3 48.以下说法正确的是()。 A.输入项可以为一个实型常量,如scanf(”%f”,3.5);B.只有格式控制,没有输入项,也能进行正确输入,如scanf(”a=%d,b=5d”);C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(”%4.2f”,&f);D.当输入数据时,必须指明变量的地址,如scanf(”%f”,&f);49.根据定义和数据的输入方式,输入语句的正确形式为:()。(注:└┘代表空格)已有定义:float x,y; 数据的输入方式:1.23<回车> 4.5<回车> A.scan(”%f,%f”,&x,&y); B.scanf(”%f%f”,&x,&y);C.scanf(”%3.2f└┘%2.1f”,&x,&y); D.scanf(”%3.2f%2.1f”,&x,&y);50.根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为()。#include ”stdio.h” main(){char s1,s2,s3;输入语句; printf(”%c%c%c”,s1,s2,s3);} 输入形式:A└┘B└┘C<回车> (注:└┘代表空格)输出形式:A└┘B A.scanf(”%c%c%c”,&s1,&s2,&s3);B.scanf(”%c└┘%└┘c%c”,&s1, &s2,&s3);C.scanf(”%c,%c,%c”,&s1,&s2,&s3);D.scanf(”%c%c”, &s1, &s2,&s3);51.以下程序的执行结果是:()。#include ”stdio.h” main(){ int x=2,y=3;printf(”x=%%d,y=%%dn”,x,y);} A.x=%2,y=%3 B.x=%%d,y=%%d C.x=2,y=3 D.x=%d,y=%d 52.以下程序的输出结果是()。(注:└┘代表空格)#include ”stdio.h” main(){ printf(”nstring1=%15s*”, ”programming”);printf(”nstring2=%-5s*”, ”boy”);printf(”string3=%2s*”, ”girl”);} A.string1=programming└┘└┘└┘└┘* B.string1=└┘└┘└┘└┘programming* string2=boy* string2=boy└┘└┘*string3=gi* string3=gi* C.string1=programming└┘└┘└┘└┘* D.string1=└┘└┘└┘└┘programming* string2=└┘└┘boy*string3=girl* string2=boy└┘└┘*string3=girl* 53.根据题目中已给出的数据的输入和输出形式,程序中输入输出语句的正确内容是()。#include ”stdio.h” main(){ int a; float b; 748 1.Problem A: Hello world!Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。 Input 无 Output 请输出: Hello Da_min, Hello Er_min, Hello Xiao_ming! Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming! HINT 请注意换行符 Append Code #include printf(“Hello Da_min,n”); printf(“Hello Er_min,n”); printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圆的面积和周长 Description 从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。 Input 输入一个浮点型数据,有效数字不会超过十进制的6位。 Output 输出为两行。 第一行为圆的面积,第二行为圆的周长,格式见sample。 Sample Input 3 Sample Output Area: 28.260000 Perimeter: 18.840000 HINT 了解浮点类型的输入、输出和算术运算符 Append Code 法一 #include #include double r; scanf(“%d”,&r); printf(“Area: %lfn”,pi*r*r); printf(“Perimeter: %lfn”,2*pi*r); } 3.Problem C:平均值 Description 求3个数的平均值。 Input 输入只有一行,为3个较小的整数。 Output 输出为这3个整数的平均值,保留3位小数。 Sample Input 1 2 3 Sample Output 2.000 HINT 注意除法运算对整型数据和浮点型数据是不一样的。 Append Code #include 4.Problem D: 求字符的值 Description 从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。 Input 输入为3个字符。 Output 输出为3行。 每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。 Sample Input 0 A Sample Output 048 060 030 032 040 020 065 101 041 HINT 了解字符值的存储和整型的关系。 Append Code #include 5.Problem A: 最简单的程序 Description 输出一行“Hello world!”。 Input 无 Output Hello world! Sample Input Sample Output Hello world! HINT Append Code #include printf(“Hello world!”);} 6.Problem B: 算术基本运算 Description 计算两整数x和y(0 Input 输入只有一行,格式见sample。 Output 输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自减运算 Description C语言中有自增运算++、自减运算--,并且可以前置和后置。 编写一个程序:对输入的一个整数a,输出a++、a--、++a、--a的值。 Input 一个整数a,a是很小的整数。 Output 输出为5行,第一行为a的值,后面依次为--a、a--、a++、++a的值。 5行输出纵向a要对齐,“:”对齐,“:”前后各一个空格,后面的数值不用对齐。每行行尾都有回车。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 绝对值 Description 求整型数据和浮点型数据的绝对值。 Input 输入两个数,第一个是整数,第二个是浮点数。 Output 输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。 Sample Input-1 1 Sample Output 1 1 HINT 求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇数还是偶数? Description 输入一个整数,判读它是奇数还是偶数。 Input 输入只有一行,为一个100以内的正整数。 Output 输出为一行。 若输入为偶数则输出“even”,奇数输出“odd”。Sample Input 30 Sample Output even HINT 用整数运算可以解决,练习“?:”表达式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 简单的打折计算 Description 商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。 Input 输入只有一行,三个整数m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判断闰年 Description 输入一个正整数的年份,判断是否为闰年。 Input 输入只有一行,为一个10000以内的正整数。 Output 输出为一行。 若输入为闰年偶数则输出“Yes”,否则输出“No”。 Sample Input 2010 Sample Output No HINT 了解逻辑运算符和关系运算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。 Input 一个整数x,100<=x<=999。 Output x是水仙花数,则输出“YES”,否则为“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三个数比较大小 Description 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。 Input 输入只有一行,为三个整数。 Output 按从小到大输出这三个数。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if语句判断各种情况可以解决这个问题。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 给定3个正整数a、b和c,按照如下规则求和: 如果这个数字是偶数,则累加到和中; 如果这个数字是奇数,则将大于该数的最小偶数累加到和中。 Input 三个正整数,均在100以内。 Output 一个和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不会使用分支语句,可使用条件运算符判断到底将哪个数累积到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你过线了吗? Description 经过四年的学习,你决定报考我国著名的“285”高校之一的北青大学,经过认真的复习,残酷的考试,终于知晓了自己的考试成绩,也知道了北青大学的录取分数线,请你编程判断,自己过线了吗? Input 输入有2行,第一行有4个正整数,分别表示三门课程的分数线以及总分分数线。第二行有3个非负整数,分别表示你考的三门课程的成绩。 Output 如果你的三门课程成绩都不低于相应课程的分数线,且你的考试总分也不低于北青大学的总分分数线要求,则输出“congratulations”,否则输出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的和,顺序与输入对应。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N给出了测试样例数,用for循环处理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判断是否是元音字母 Description 输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 输入一个英文字母 Output 是元音字母,输出“yes”,否则输出“no”,行尾没有回车。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按顺序输出三个数 Description 对于输入的3个整数,按照从小到大的顺序输出。 Input 输入3个int类型内的整数,两两之间用一个空格隔开。 Output 按照从小到大的顺序输出上述三个数,两两之间用一个空格隔开。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判断输入整数的奇偶性。 判断奇偶数 Input 输入为一个整数。 Output 输出只有一行,代表判断结果。如果输入的整数n是一个偶数,输出: n is an even number.否则输出: n is an odd number.见样例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判断两个整数的大小关系 Description 输入2个整数a和b,如果a>b,则输出1,否则输出0。 Input 两个整数a和b,均不超过int类型的表示范围。 Output 表示a>b的结果:如果a>b,则输出1,否则输出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成绩的等级 Description 把百分制的考试成绩转换成五级制的成绩: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之间的输入是非法数据,输出“Error”。 Input 输入多行,每行一个整数。 Output 输入所对应的成绩等级。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch语句解决这个问题比较方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 输出是m的倍数或n的倍数、但不是 m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n Input 输入三个整数,依次为k、m、n。 Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 两整数相加减 Description 计算a+b和a-b。 Input 输入为一对整数a和b。a,b用空格分开。 Output 输出a+b和a-b的计算结果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它满足条件吗? Description 需要判断给定的一个整数是否同时满足如下三个条件: 1.它是一个完全平方数。2.它是一个偶数。3.它是一个正数。 注:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一个int范围内的整数。 Output 如果输入的数字满足条件,则输出yes,否则输出no。 Sample Input 100 Sample Output yes HINT 注意逻辑表达式判断三个条件的顺序。如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 库函数sqrt()可以用于求一个数的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 编写一个完整的程序,运行时向用户提问”你考试考了多少分?(0-100)“接受输入后判断其等级并显示出来等级: 优:90<=分数<=100 良:80<=分数<90 中:60<=分数<80 差:0<=分数<60 Input 输入任意一个整数分数值,显示等级;再输入任意一个整数分数值,显示等级;....直到测试数据较充分,可输入-1止。 Output 对任意输入的分数值,输出对应的等级,直到输入的数为-1时才退出运行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 优 优 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”优n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 学校举行运动会,如果全体学生按照3人一队列队,则多了1个人;如果按照4人一队列队,则多了2个人;如果按照5人一队排队,则多了3个人。请问这个学校有多少学生? Input 一个int类型的正整数N,是学生人数的上界,即:该校学生数不超过N。 Output 所有可能的学生数,每个数占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正负数各有几个? Description 输入若干个整数,求其中正数、负数的个数。 Input 输入分为2行:第一行是一个数字N>0,表示下面有N个整数。第2行是N个整数,都是int类型的。 Output 输出所输入的N个整数的正数个数和负数个数,并用空格分开2个输出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似还有一种叫做0的数。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 练习break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。 Input 输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。 Output 输出为两行,格式见sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格还是回车都是空白符,对scanf(”%d“)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n]; for(i=0;i scanf(”%d“,&a[i]); max=a[0]; min=a[0]; for(i=0;i { if(max max=a[i]; if(min>a[i]) min=a[i]; } printf(”The maximum number is %d.n“,max); printf(”The minimum number is %d.“,min); return 0;} 32.Problem D: 求100以内的素数 Description 素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。 Input 输入为两个整数m和n,满足0<=m<=n<=100。 Output 从大到小输出m~n之间的所有素数,一个素数一行。如果m~n之间没有素数,则不输出任何数。 输出的所有数在两行“=====”之间。 Sample Input 2 12 Sample Output ===== 11 7 5 3 2 ===== HINT 利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关键。 Append Code #include t=0; for(j=2;j<=sqrt(i);j++) if(i%j==0) t=1; if(t==0&&i>1) printf(”%dn“,i);} printf(”=====“);return 0;} 33.Problem E: 是否构成三角形? Description 给出三个整数,代表三条边的长度,判断这三条边的长度是否能构成一个三角形? Input 第一行是n(1<=n<=100),表示有n组测试数据 接下来有n行,每一行包含三个整数,表示三个边长(1<=边长<=100) Output 如果三条边能构成三角形,输出YES,否则输出NO Sample Input 3 1 2 3 2 8 7 20 20 1 Sample Output NO YES YES HINT Append Code #include {scanf(”%d%d%d“,&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) printf(”YESn“);else printf(”NOn“);} return 0;} 34.Problem C: 简单的整数排序 Description 对给出的若干整数按从小到大排序。 Input 输入的第一个数为n(n<=1000),后接n个整数。 Output 按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。 Sample Input 10 3 9 1 5 2 8 5 6 7 3 Sample Output 1 2 3 3 5 5 6 7 8 9 HINT 排序前必须把所有的整数都存储下来。因为只有最多1000个数,1秒的时间足够任何排序算法运行处结果来。 Append Code #include int c,i,n,j; int a[1000]; scanf(”%d“,&n); for(i=0;i scanf(”%d“,&a[i]); for(i=1;i<=n-1;i++) { for(j=0;j { if(a[j]>a[j+1]) { c=a[j]; a[j]=a[j+1]; a[j+1]=c; } } } printf(”%d“,a[0]); for(i=1;i printf(” %d“,a[i]); return 0;} 35.Problem A: Description 购物的路程 Saya和Kudo一起去购物。假定她们逛的街是一条直线,而商铺是这条直线上的一些点。她们将车停在该直线最左端的店铺处,然后从左向右开始逛每一个店铺,然后从最右边的店铺再返回到停车处。你的任务是计算她们走了多少路。 Input 输入有多组。每一组的第一行是N(0 Output 对每组输入,输出她们走的路长。 Sample Input 4 13 89 37 6 7 30 41 14 39 42 0 Sample Output 152 70 HINT Append Code #include int n,i,max,min,a[100001]; while(scanf(”%d“,&n)&&n!=0) { scanf(”%d“,&a[0]); min=max=a[0]; for(i=1;i { scanf(”%d“,&a[i]); if(a[i]>max) max=a[i]; if(a[i] min=a[i]; } printf(”%dn“,(max-min)*2); } return 0;} 36.Problem B: 求累加和 Description 编程求min~max的累加和(含min和max),其中max>=min>0。部分程序已经给出,请填充其中的空白语句,并提交填充后的完整程序。 Input 输入为多行。第一行是一个整数N>0,表示后面有N个测试用例。后面有N行,每行包含2个整数,分别是min和max。 Output 输出为N行,每个测试用例的计算结果占据一行。每行的格式为: case i:sum=s.其中i表示测试用例的编号(从1开始),s是该测试用例对应的累加和(设不超过int的表示范围)。 Sample Input 3 1 10 1 100 1 1 Sample Output case 1:sum=55.case 2:sum=5050.case 3:sum=1.HINT Append Code #include int n,i,j,max,min,sum; scanf(”%d“,&n); for(i=0;i { sum=0; scanf(”%d%d“,&min,&max); if(max==min) printf(”case %d:sum=%d.n“,i+1,min); else { for(j=min;j<=max;j++) sum=sum+j; printf(”case %d:sum=%d.n“,i+1,sum); } } return 0;} 37.Problem G: 顺序输出字母 Description 按字母顺序输出两个字母st和ed之间的所有字母,但不包括st和ed。不输出逆序。 Input 两个字母st和ed,都是大写字母,用一个空格分开。 Output 在一行内按顺序输出st和ed之间的所有字母,但不包括st和ed。例如: 输入为A和E,则输出为BCD; 输入为A和B,则什么字母也不输出,只有一个空行; 输入为E和A,也是什么字母也不输出,只有一个空行。最后要输出一行(行尾不回车): ***END*** Sample Input A C Sample Output B ***END*** HINT Append Code #include char st,ed,a; int i; scanf(”%c%c%c“,&st,&a,&ed); { for(i=st+1;i printf(”%c“,i); printf(”n***END***“); } return 0;} 38.Problem F: 单字母变换 Description Tom和Jack是密码学爱好者,他们在聊天时经常使用一些暗语。他们使用的一种最简单的暗语是:将要说的每句话里面的英文字母变成这个字母之后的某个字母。现在要求你写一个程序,将一个字母变成它之后的某个字母。 Input 输入有2个:一个大写字母c和一个正整数d(0 Output 输出字母c之后的第d个字母。大小写与c一致。如果c之后的某个字母已经超出'Z',则再从字母'A'开始计数。 如:c='A',d=3,则输出应为:D。若:c='Y',d=3,则输出应为:B。 Sample Input A 3 Sample Output D HINT Append Code #include char c; int d; scanf(”%c%d“,&c,&d); if(c+d<='Z') printf(”%c“,c+d); else printf(”%c“,c+d-26); return 0;} 39.Problem B: 登录密码验证 Description 编写一个程序,模拟用户登录系统的密码验证过程。系统提供给用户的密码长度最长为20个字符,若密码输入错误可以再次输入。但为了保证用户密码安全,若连续输入密码错误超过5次就会锁定账号一段时间。 Input 输入为若干个串,至EOF结束。输入的第一个串是用户的正确密码,后面的串为模拟用户登录时的输入的密码。 Output 每次输入错误的密码,输出一个“Wrong!”,若输入的密码为正确的,输出一个“Welcome!”,并结束密码测试。若前5次输入的密码都是错误的,则后面的输入中不管是否有正确的密码都输出“Out of limited!”。 Sample Input abcdefg 123456 kkkkkkkk abcdefg Sample Output Wrong!Wrong!Welcome! HINT 输入可以用scanf(”%s“)处理,密码比较用字符串的比较可以完成。 Append Code #include char a[20],b[20]; int i,j=1; scanf(”%s“,a); while(scanf(”%s“,b)!=EOF) { if(j<=5) { if((strcmp(a,b)==0)) { printf(”Welcome!n“); break; } else printf(”Wrong!n“); j++; } else printf(”Out of limited!n"); } } 40.Problem C: 兔子的繁殖问题 Description 假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)? 这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的《算盘全书》中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。 Input 输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。 Output 输出为n行,每行为第m个月后的兔子总数。 《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业的重要专业基础课。 本校从2001至今,每年都开设《C语言程序设计》课程,由于,我校最开始时的特殊情况,主要把重点放在C语言中的各类重点、难点的语法、语义上,使得学生经过比较复杂和痛苦的过程后,对C语言在使用上很难做到自己编写程序。而且很多学生产生了畏惧心理。 2004年,学院成立计算机科学与技术系,为了更好学习和掌握C语言,计算机科学与技术专业和计算机维护专业(计算机应用技术前身)除了开设《C语言程序设计》课程外,在后续一学期还开设了《C语言程序设计课程设计》,使得计算机专业学生编程思想和能力得到了极大提高。 2005年,为了让我院工科学生更好的掌握C语言编程以及通过四川省计算机二级考试,在《C语言程序设计》课程后设置《C语言程序设计课程设计》,极大地提高了学生的动手机会和能力,过级率显著提高! 2007年,依托我校建设精品课程的契机,我们将C语言中的各个知识点进行重新规整,提出适用于三本院校学生的语言设计学习的方法。我们提出,先了解C语言,再学习C语言,再用C语言的思想。即在开始时让学生初步知道C语言,然后引入比较简单的运算符以及基本输入、输出和简单的顺序结构程序设计。通过这样的方式,我们发现,学生在C语言的学习就不会从开始的时候陷入大量难懂的语法、语义和数据结构中。有了以上铺垫再层层进入,最终进入复杂的各类数据结构以及指针等学习。通过以上的内容规整后,教学效果有明显提高。 第一章 基础知识 一.填空 1.每个C程序都必须有且仅有一个________ 函数。 2.C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载 和执行。 3.软件是程序,以及______、使用和维护所需要的所有文档。4.国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5.程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。6.C语言是由________组成的。 7.C语言的函数可分为主函数main、标准库函数和_________。8.一个函数是由两部分组成的,即:________和 函数体。 9..编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。10.程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动 化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11.机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。12.与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13.在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。14.C程序的执行均是由执行_________开始。 15.函数体即为包含在{ }内的部分。它分为________和为完成功能任务由若干个C语句 组成的执行部分。 16.C语言程序中一条简单语句是以________字符作为结束符的。17.C语言是结构化、________的程序设计语言。 18.由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19.用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。20.第一个系统体现结构化程序设计思想的教学工具语言是_______语言。解答: 1.main()2.编译 3.开发 4.指令序列 5.高级语言 6.函数 7.自定义函数 8.函数首部 9.翻译 10.应用软件 11.二进制代码 12.助记符 13.# 14.main函数 15.声明部分 16.;(或分号) 17.模块化 18.翻译 19.执行速度 20.PASCAL 二.阅读程序写结果;三.补充程序;四.改错题;五.编程一;六.编程二; 第二章 常量、变量和表达式 一.填空 1.以16位计算机为例,若定义long int a;则变量a占______个字节的内存空间。2.以16位计算机为例,若定义double a;则变量a占______个字节的内存空间。3.以16位计算机为例,若定义long double;则变量a占______个字节的内存空间。4.在______位机,int型占4个字节。 5.C语言的数据类型有:基本数据类型、构造数据类型、枚举类型、______、空类型。6.在C语言中,基本数据类型有:______。 7.整型常量046转换为十进制数等于______。 8.整型常量054转换为十进制数等于______ 。9.整型常量0x125转换为十进制数等于_____。 10.整型常量0x7C转换为十进制数等于______。 11.整型常量39转换为八进制等于______。 12.实数473.468写成规范化指数形式,则应为______。 13.实数0.0453写成规范化指数形式,则应为_____。 14.将0x123转换为二进制等于______。 15.字符’A’表示成十六进制等于_____。 16.在C语言中,称代表常量的标识符为______。 17.C语言中是用编译预处理命令______来定义符号常量 18.在C语言中,以反斜杠符()开头,后跟字符的字符序列,称之为_____,主要用来表示控制及不可见的字符或者一些图形符号。 19.语句printf(“106”)执行的结果输出是______。 20.语句printf(“b”)执行的结果输出是______。 21.语句printf(“b”)执行的结果输出是______。 22.语句printf(“102”)执行的结果输出是______。 23.若有char ch1;ch1='a'+4;则语句printf(“%c”,x)的输出结果为______。 24.字符串常量“Hello, everyone!”占据的内存空间为______个字节 25.字符串常量“Hello,Bob!”占据的内存空间为 ______个字节。 26.十进制整型常量由0~9个数据组成,但不能以______开始,没有小数部分 27.十六进制常量由0~9和______组成 28.unsigned long类型常量通常以______为后缀 29.实型常量通常有小数形式和______两种表达方式 30.C语言中是用编译预处理命令______来包含其他源文件 31.为了表示字符串的结束,系统自动在字符串的最后加一个______,但不被输出 32.C语言中,其值可被改变的量称为变量,它具有三个基本要素:变量名、______和变量值。33.C语言规定,变量的标识符只能由字母、数字和下划线组成,且不能以______开头。34.在16位机中,sizeof(“hellon”)等于______。 35.在16位机中,printf(““hello””)等于_____。 36.字符变量在内存中占用______个字节的存储空间。37.若有定义int x=27, y=6;则表达式 x/y的值为______。38.若有定义int x=47, y=8;则表达式 x%y的值为______。 39.若有定义char ch1='A',ch2,ch3;执行ch2=ch1++;ch3=++ch1;printf(“ch1=%c, ch2=% c”,ch1,ch2);则输出为______。 40.若有定义char ch1='A',ch2,ch3;执行ch2=ch1++;ch3=++ch1;printf(“ch2=%c, ch3=% c”,ch2,ch3);则输出为______。 41.若有定义int i=5, j, k;执行j=i--;k=--i;printf(“i=%d, j=%dn”, i, j);则输 出为______。 42.表达式(int)(13.7+25.6)/4%5的值是______。 43.表达式 3.6-5/2+1.2+5%3的值是______。 44.表达式54%10/2+4.0*(8/5)的值是______。 45.若定义int x;double b=5.45;执行x=b后,则x的值为______。 46.若定义int y;char c='A';执行y=c后,则y的值为______。 47.若定义 int a=8;float b=2.5;则a/(int)(b)的值为______。 48.若a=5,则执行a*=7-3语句后,a的值是______。 49.若int a=1,b=0,c=4,d=2;则表达式(a>b ? a:b)&&(c-d)的值为______。 50.已知a = 0,表达式 a = 1?b = 1:b = 0;执行后,b的值是_____。 51.若定义int m=7,n=12;则表达式n%=m-m%5的值是______。 52.若定义int a=8;float b=4.5;执行a*=a/=a-b后,a的值为______。 53.int a=2;!a++的值为_____。 54.int a=0;!++a的值为______。 55.int a=7;float b=4.5;则printf(“%d”,a*=a/=a-b)的值为______。 56.int k=7;float a=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值为______。 57.#define MM(a,b)(a-b)?a:b int a=2,b=6;printf(“%dn”,MM(a,b))的值为______。 58.在32位机中,int a=4,b=7;printf(“%0x”,a-b)的值为:______。 59.int x,y,z;x=y=2;z=3;y=x++-1;printf(“%d,%d”,x,y)的值为: ______。 60.int i=2,j;printf(“%d”,j=i<1)的值为:______。 解答: 1.4;2.4;3.10;4.32;5.指针类型;6.int、float、double、char;7.38;8.44;9.293; 10.124;11.047;12.4.734680e+002;13.4.530000e-002;14.100100011;15.x41/41H; 16.符号常量;17.#define;18.转义字符常量;19.F;20.b;21.b;22.B;23.e;24.16; 25.11;26.0;27.A~F;28.U;29.指数形式;30.#include;31.“ ”;32.变量类型; 33.数字;34.7;35.“hello”;36.1;37.4;38.7;39.ch1=C, ch2=A;40.ch2=A, ch3=C; 41.i=3, j=5;42.4;43.4.800000;44.6.000000;45.5;46.65;47.4;48.20;49.1; 50.1;51.2;52.4;53.0;54.0;55.4;56.2.500000;57.2;58.fffffffd;59.3,1; 60.0 二.阅读程序写结果;三.补充程序;四.改错题;五.编程一;六.编程二; 第三章 顺序结构; 一.填空 1.C语言的语句可分为5类,它们是:控制语句、____________、函数语句、符合语句和空 语句。 2.常用于字符输入的函数为:________________。3.常用于字符输出的函数为:________________。4.常用于字符串输入的函数为:________________。5.常用于字符串输出的函数为:________________。6.格式输入函数的一般形式为:________________。7.格式输出函数的一般形式为:________________。 8.printf和scanf是标准的库函数,它们的函数原型在头文件________________中。9.有char ch,则从键盘给ch赋值的格式输入语句为:________________。10.如果要输出字符串常量“HelloWord!”,则格式输出语句为:________________。11.设有定义:long x=-123456L;,请写出能够正确输出变量x值的语句________________。12.若有int a,b;,想通过scanf(“%d%d”,&a,&b);输入语句给a赋于1,给b赋于2,则从键盘输入数据的形式是________________。 13.若有int i,j;scanf(“i=%d,j=%d”;&i,&j);,要求给i赋10,给j赋20,则应该从键盘 输入_______。 14.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为 1、j的值为 2、k的值为3,请写出正确的输入语句________________。 15.有int m,n,p;scanf(“m=%dn=%dp=%d”,&m,&n,&p);printf(“%d%d%dn”,m,n,p);若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是___________。 16.有 int a;float b, c;scanf(“%2d%3f%4f”,&a,&b,&c);printf(“na=%d, b=%f, c=%fn”, a, b, c);,若运行时从键盘上输入9876543210<回车>,则程序的输出结果是_____________。17.有 int m=0256,n=256;则 printf(“%o %on”,m,n);的输出结果是__________________。18.有int x=102,y=012;,则printf(“%2d,%2dn”,x,y);的输出结果是____________。 19.有定义和语句:int a;char c=10;float f=100.0;double x;a=f/=c*=(x=6.5);则printf(“%d %d %3.1f %3.1fn”,a,c,f,x);的输出结果是_____________________。 20.若有定义和语句:int m=0xabc,n=0xabc;m-=n;则printf(“%on”,m);的输出结果是___。21.若有int m=32,n=032;,则printf(“%d,%xn”,m,n);执行后输出结果是______________。22.若有 int a=1234;,则 printf(“%2dn”,a);的输出结果是_________________。 23.若变量已正确说明为float类型,要通过语句scanf(“%f %f %f ”,&a,&b,&c);给a赋于1 0.0,b赋予22.0,c赋予33.0,不正确的输入形式是_____________________。 A)10 <回车>22<回车>33<回车> B)10.0,22.0,33.0<回车> C)10.0<回车> 22.0 33.0<回车> D)10 22<回车> 33<回车> 24.若有 int x=3,y=1;则printf(“%d %dn”,x++,y+2);的输出结果是________________。 25.若有定义和语句:double d;float f;long l;int i;i=f=l=d=20/3;则 printf(“%d %ld %f %f n”, i,l,f,d);的输出结果是(小数点后只写一位)_____________________。26.以下说法中正确的是 _____________________。 A)#define和printf都是C语句;B)#define是C语句,而printf不是; C)printf是C语句,但#define不是;D)#define和printf都不是C语句 27.若有 int k=17;,则 printf(“%d,%o,%x n”,k,k,k);的输出结果是________________。28.以下叙述中正确的是_____________________。 A)输入项可以是一个实型常量,如:scanf(“%f”,3.5);B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:scakf(“a=%d,b=%d”);C)当输入数据时,必须指明变量地址,例如:scanf(“%f”,&f);29.若有定义和语句:int u=010,v=0x10,w=10;则printf(“%d,%d,%dn”,u,v,w);输出结果是_____________________。 30.若有int a=1,b=4,c=2;float x=10.5, y=4.0, z;z=(a+b)/c+sqrt((double)y)*1.2/c+ x;,则printf(“%fn”,z);的输出结果是_____________________。 31.若有int a=2,c=5;,则printf(“a=%%d,b=%%dn”,a,c);的输出结果是________________。32.有char c;int n=100;float f=10;double x;x=f*=n/=(c=50);则printf(“%d %f n”,n,x);的输出结果是_____________________。 33.有int i=0,j=0,k=0;scanf(“%d%*d%d”,&i,&j,&k);printf(“%d%d%dn”,i,j,k);若 从键盘输入:10 20 30<回车>。输出结果是_____________________。 34.若有int a,b,c;a=25;b=025;c=0x25;,则printf(“%d %d %dn”,a,b,c);的输出结果 是___________。35.有以下语句段 int n1=10,n2=20; printf(“________________”,n1,n2); 要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20 36.若有语句int i=-19,j=i%4;则printf(“%dn”,j);的输出结果是_____________________。37.有int a=0;a+=(a=8);则printf(“%dn”,a);的输出结果是_____________________。 38.有int a=1, b=2;a=a+b;b=a-b;a=a-b;则printf(“%d,%dn”, a, b);的输出结果是__________。39.有unsigned short a=65536;int b;,则printf(“%dn”,b=a);的输出结果是________。40.语句printf(“10289n”);的数据结果为:__________________。解答: 1.表达式语句;2.getchar();3.putchar();4.gets();5.puts(); 6.scanf(“格式控制字符串”,地址表列);7.printf(“格式控制字符串”,输出表列);8.stdio.h;9.scanf(“%c”,&ch);10.printf(“%s”,HelloWord!);或者:printf(“HelloWord!”);11.printf(“x=%1dn”,x);12.1 2;13.i=10,j=20;14.scanf(“%d,%d,%d”,&i,&j,&k);15.m=123n=456p=789; 16.a=98, b=765.000000, c=4321.000000;17.256 400;18.102,10;19.1 65 1.5 6.5;20.0;21.32,1a;22.1234;23.B;24.3 3;25.6 6 6.0 6.0;26.D;27.17,21,11;28.C;29.8,16,10;30.13.700000;31.a=%d,b=%d;32.2 20.000000;33.10300;34.25 21 37;35.n1=%dnn2=%d;36.-3;37.16;38.2,1;39.0;40.B89; 二.阅读程序写结果;三.补充程序;四.改错题;五.编程一;六.编程二; 第四章 选择结构 一.填空 1.在if, while, case, do, else 等关键字中,用于选择结构的有().2.已知 a = 1;那么 if(a = 2)printf(“%d”, 2);else printf(“%d”, 1);的输出结 果是().3.已知 char a = 'A';那么 if(a > 65)printf(“%s”, “bigger”);else printf(“%s” , “smaller”);的输出结果是().4.表示“x≥ y≥ z”的C语言表达式是()。 5.在C语言中,用于实现选择结构的语句有()语句和()语句。6.判断两个浮点型变量x和y是否相等一般用:if(<1e-6)„。7.设有程序段: t=6;a=7;b=8;if(a=b)t=a;,这段程序执行后,t的结果是()。8.设a=1,b=2,c=3,d=4,则表达式:a>b?a:c>d?a:d的结果为()。9.表达式98 && 8 && 31 &&(9812; printf(“%dn”, y); return 0;} 输入:12<回车> 17.#include float x, y; char op; double r; scanf(“%c%f%f”,&op,&x,&y); switch(op) { case '+': r = x + y;break; case '-': r = x1); t = *(s + i); *(s + i)= *(s + j); *(s + j)= t; } } void main(){ int a[6] = {10, 6, 23,-90, 0, 3}, i; invert(a, 0, 5); for(i = 0;i < 6;i++)printf(“%d, ”, a[i]); printf(“n”); } 32.int func(int a[][3]){ int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++){ a[i][j]=i+j; if(i==j; sum = sum+a[i][j]; } return sum;} int main(){ int a[3][3]={1,3,5,7,9,11,13,15,17}; int sum; sum=func(a); printf(“sum=%d”,sum); return 0;} 33.# include int i=10;void fun();void main(){ int i; for(i=2;i>0;i--) fun();} void fun(){ i*=2; printf(“i=%dn”, i);} 34.#include int fun(int n) { if(n<=1) return 1; else return fun(n-1)*n; } void main() { int i,j=0; for(i=1;i<=3;i++) j+=fun(i); printf(“j=%dn”,j); } 35.#include int funa(int a, int b) { int t; if(a > b) t = a/b else t = a%22; return t; } void main(){ int a=33, b=22,c; c=funa(a,b); printf(“c=%dn”, c); } 36.# include int i; for(i=2;i>0;i--) fun(i);} void fun(int i){ i*=2; printf(“+%d+”, i);} 37.# include int x=879; fun(x);} void fun(int n){ int a,b,c,t; a = n % 10; b =(n/10)% 10;t;} if(b < c){ t = b;b = c;c = t;} if(a < b){ t = a;a = b;b = t;} printf(“%d”, b);} 38.#include int t; c =(n/100)% 10;if(a < b){ t = a;a = b;b = if(a > b) { t = a; a = b; b = t; } return t;} void main(){ int a=33, b=22,c; c=funa(a,b); printf(“c=%dn”, c);} 39.#include int swap(int x, int y) { int z; z=x%10; x=y%10; y=z; z=x; return z; } void main() { int a=38, b=29,c; c=swap(a,b); printf(“%d%dn”, a,c);} 40.#include if(n==1) printf(“*n”); else { printf(“-”); fun(n-1); } } void main(){ int i,j=0; for(i=1;i<4;i++) fun(i); printf(“XiaoXin!”);} 解答: 1.p=27;2.运行结果:12345;3.3 5;4.5 3,3 2;5.2;6.11 21 31;7.3 7; 8.6 5;9.012345;10.a1=1,a2=3,a3=2;11.10,20,30; 12.a=2,b=3;a=2,b=3;13.10,20,30;14.a=1.0000;15.567;16.4;17.3.000000;18.80,-20;19.-1;20.j=12;21.4,3,5;22.18; 23.Hello, world!Hello, world!Hello, world!;24.x=3;25.x=22; 26.i = 7;j = 6;x = 7 i = 2;j = 7;x = 5;27.7; 28.(1)x = 2 y = 3 z = 0(2)x = 4 y = 9 z = 5(3)x = 2 y = 3 z = 0 29.10, 20, 40, 40;30.125;31.3,0,-90,23,6,10;32.sum=6;33.i=20 i=40;34.j=9;35.c=1 36.+4++2+;37.8;38.c=33;39.389; 40.* -* --* XiaoXin!三.补充程序 1.定义了一个max 函数,找两个整数的最大值,其位置在main之后.#include “stdio.h” ________________________ int main(){ int x,y,z;printf(“input two numbers:n”);scanf(“%d%d”,&x,&y);________________________;printf(“maxmum=%d”,z);return 0;} int max(int a,int b){ ________________________;if(a>b)w=a;else w= b;________________________;} 2.用函数nzp判别一个整数a的值,若大于0 则输出该值,若小于等于0则输出0值。 #include “stdio.h” ________________________nzp(________________________){ if(v>0)________________________ else printf(“%d ”,0); } int main(){ int a;printf(“input number a:n”);scanf(“%d”,&a);________________________ return 0;} 3.主函数调f1计算n阶乘.#include “stdio.h” ________________________ int main(){ int n;long s;scanf(“%d”,&n); ________________________ printf(“ns=%ldn”,s);return 0;} long f2(int n){ ________________________ int i;for(i=1;i<=n;i++)c=c*i;________________________ } 4.主函数调fun计算1+1/2!+1/3!+...+1/30!的和.#include “stdio.h” ________________________ int main(){ int n;float s;________________________ printf(“1+1/2!+1/3!...+1/30!=%fn”,s);return 0;} float fun(){ int n;float t=1;________________________ for(n=1;n<=30;n++){ t*=1/n;s+=t;} ________________________ } 5.数组a中存放了一个学生5门课程的成绩,求平均成绩。 #include “stdio.h” ________________________ int main(){ float sco[5],av;int i;printf(“ninput 5 scores:n”);for(i=0;i<5;i++)scanf(“%f”,&sco[i]);________________________ printf(“average score is %5.2f”,av);return 0;} float aver(float a[]){ int i;float s=a[0];________________________ for(i=1;i<5;i++)s=s+a[i];av=s/5;________________________ } 6.用递归法计算n!#include “stdio.h” ________________________ int main(){ int n;long y;printf(“ninput a inteager number:n”);scanf(“%d”,&n);________________________ printf(“%d!=%ld”,n,y);return 0;} ________________________ff(int n) { long f; if(n<0)printf(“n<0,input error”); else if(n==0||n==1)f=1;else f=ff(n-1)*n; ________________________ } 7.输入正方体的长宽高l,w,h。求体积及三个面x*y,x*z,y*z的面积。 #include “stdio.h” int s1;________________________ int vs(int a,int b,int c){ ________________________ v=a*b*c;s1=a*b;s2=b*c;s3=a*c;________________________ } int main(){ int v,l,w,h;printf(“ninput length,width and heightn”);scanf(“%d%d%d”,&l,&w,&h);________________________ printf(“v=%d s1=%d s2=%d s3=%dn”,v,s1,s2,s3);return 0;} 8.输入两个正整数num1,num2,求其最大公约数.#include “stdio.h” ________________________ int main(){ int d;int num1,num2;printf(“please input two numbers:n”);scanf(“%d,%d”,&num1,&num2);________________________ printf(“gongyueshu:%dn”,d);return 0;} int gongyue(int a,int b){ ________________________ while(b){ temp=a%b;a=b;b=temp;} ________________________ } 9.利用递归函数调用方式,输出6个数字。 #include “stdio.h” ________________________ int main(){ int w=5;fun(w);printf(“n”);return 0;} ________________________fun(________________________){ if(k>0)________________________;printf(“%d”,k); } 10.主函数调printstar打印一串星形图案.#include “stdio.h” ________________________ int main() { ________________________; return 0;} ________________________printstar(________________________) { printf(“*************n”); } 解答: 1.int max(int a,int b);z=max(x,y);int w;return w; 2.void;int v;printf(“%d”,v);nzp(a); 3.long f2(int n);s=f2(n);long c=1;return c;4.float fun(void);s=fun();float s=0;return s;5.float aver(float a[]);av=aver(sco);float av;return av;6.long ff(int n);y=ff(n);longreturn f;7.int s2,s3;int v;return v;v=vs(l,w,h);8.int gongyue(int a,int b);d=gongyue(num1,num2);int temp;return a;9.void fun(int k);voidint k;fun(k-1);10.void printstar(void);printstar();voidvoid 四.改错题(解答)五.编程一(解答)六.编程二 1.编程实现:任意输入两个正整数,求它们的最大公约数和最小公倍数。要求最大公约数 通过自定义函数来输出。 2.编程实现:求出10~10000之内的所有素数。要求素数判断通过自定义函数来实现。3.编程实现:输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立 方和等于该数本身。例如:153是一个“水仙花数”,因为。要求水仙花数的判断通过自定 义函数来实现。4.编程实现:打印出2~1000之间的所有完数。所谓完数,是指这样的数,该数的各因子之和正好等于该数本身,例如:6=1+2+3;28=1+2+4+7+14;因此,6、28都是完数。要求完数的判断通过自定义函数来实现。 5.编程实现:打印出10~9999之间的所有回文数,要求每10个数一行输出。要求回文数的判断通过自定义函数来实现。 6.编程实现:打印出1~9999之间的所有同构数,所谓同构数是指一个数如果出现在该数平方的右端,该数就是同构数。如5,25都是同构数。要求同构数的判断通过自定义函数来实现。 7.给定一5*5的整型矩阵,求所有正对角线元素之和,并以矩阵的形式输出矩阵的值。要求:对角线元素之和及矩阵输出分别通过两个自定义函数来实现。 8.编程实现:输入一4*4的矩阵的值,求出每行的最大值并输出其所在列号。要求:通过通过自定义函数实现矩阵的输入输出。 9.编程实现:任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中,然后输出,要求数制转换通过自定义函数来实现。 10.编程实现:任意输入一个正整数,编程求出它是几位数并将其逆序输出。要求通过自定 义函数实现求是几位数,该函数原形为:int ni(int x,int a[]);函数返回值是该数是几位数,x为给定的数,a中存放该数的各个位。 11.编写程序从键盘输入x和n的值,求xn(n为大于等于零的整数),要求用 递归函数求xn。 12.编写实现:输入两个正整数m,n(m>n),计算从m个元素中任意取n个元素的组合,计算机公式为:。要求通过递归函数求阶乘。 13.编程实现:从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。要求通过自定义函数实现查找功能。 14.从键盘输入某班20个学生的成绩和学号,然后从键盘任意输入一个学生的学号,查找出他的成绩并输出,若未找到,给出相应提示。要求通过自定义函数实现查找功能。 15.编程实现:从键盘任意输入某班20个学生的姓名和成绩,输出最高分及不及格学生的人数。要求分别用两个自定义函数求最高分和不及格人数。 16.编程实现:输入2个降序排列的整数数列,将这两个数列合并存放到另一个数组中,要求每个数都一次到位,不得在新数组中重新排序。要求数列合并通过自定义函数来实现。17.编程实现:输入N名职工的姓名及计算机水平考试的成绩,输出及格人数和及格的职工信息。要求:职工信息的输入和输出分别通过自定义函数来实现。 18.编程实现:从键盘输入10名学生的信息,包括学号、姓名、成绩,用一个排序函数sort 完成学生成绩降序排列,并输出学生排序后的结果。 19.编程实现:任意输入一组不多于20个的升序排列的若干个整数,任意输入不多于10个的整数(-1作为输入结束标志),将其插入到该序列中,使其依然有序。要求:通过自定义函数实现将一个整数插入到一个有序序列中,使其依然有序。 20.一个班级有30个学生,每个学生有学号、姓名及数学、语文、计算机成绩、平均成绩。要求编程实现以下功能: 1)从键盘上输入30个学生的信息,平均成绩通过公式:平均成第二篇:C语言程序设计题库
第三篇:C语言程序设计
第四篇:C 语言程序设计
第五篇:C语言程序设计试题题库