C语言程序设计题

时间:2019-05-12 18:33:21下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言程序设计题》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言程序设计题》。

第一篇:C语言程序设计题

【第1题】题目:请编写函数fun,对长度为7的字符串,除首、尾字符外,将其余5个字符按将序排列。例如,雨来的字符串为CEAedca,排序后输出为CedcEAa。Int fun(char *s,int num){ Int i,j;chat t;for(i=1;i=2)&&(b<10)){k--;if((k%13= =0)| |(k%17= =0)){a=a+k;b++;} } Return a;} 【第3题】题目:产生15个[20,80]上的随机整数:用顺序法(比较法)按从小到大排序输出。

void fun(int a[], int n){ int I,j,t;for(i=0;i[j]){t=a[i];a[i]=a[j];a[j]=t;} } 【第4题】题目:请编写函数fun,它的功能是:判断m是否为素数。主函数的功能是:求出100到200之间的素数的个数。int fun(int m){int i,j;int k=1;if(m<=1)k=0;for(i=2;is[k])k=I;return(k=1);{ 【第7题】题目;编写函数fun其功能是:判断一个整数w的各位数字平方之和能否被5整除,可以被5整除则返货1,否则返回0。int fun(int w){ int k,s=0;do {s=s+(w%10)*(w%10);w=w/10;}while(w!=0);if(s%5= =0)k=1;else k=0;return(k);} 【第8题】题目:编写函数fun其功能是:求给定正整数n以内的素数之积。(n<28)long fun(int n){ long i,k;long s=1;for(i=2;i<=n;i++){for(k=2;ka[i])k++;return(k);} 【第13题】题目:用函数将第2个字符串连接到第1个字符串之后,不允许使用strcat函数。

void len_cat(char cl[],char c2[]){ int i,j;for(i=0;c1[i]!=’’;i++);

for(i=0;c2[i]!=’’;i++)cl[i+j]=c2[j];cl[i+j]=’’;} 【第14题】题目:编写函数fun,函数的功能是:找出一批正整数中的最大的偶数。int fun(int a[],int n){ int i,amax=-1;for(i=0;iamax)amax=a[i];return amax;} 【第15题】题目:编写函数fum,函数的功能是:求一个给定字符串中的字母的个数。

int fun(char s[]){ int i,k=o;for(i=0;s[i]!=’’;i++)

if(s[i]>=’a’&&s[i]<=’z’||s[i]>=’A’&&s[i]<=’Z’)k++;return k;} 【第16题】题目:从键盘输入一个大于3的整数,调用函数fun判断其是否素数,然后再mian函数中输出相应的结论信息。int fun(int n){int i;int j;j=1; if(i<0)j=0;for(i=2;i

int fun(char*str,char*substr){ int I,n=0;for(i=0;i<=strlen(str)-2;i++)if((str[i]=substr[0]&&9str[i+1]==substr[1]))n++;return n;} [第24题]题目: 编写函数fun求1!+2!+3!+……+n!的和,在main函数中由键盘输入n值,并输出运算结果.long fun(int n){ int i;long f=1,s=0;for(i=1;i<=n;i++){f=f*i;s=s+f;} return s;} [第25题]题目:从键盘为一维整型数组输入10个整数,调用fun函数找出其中最小的数,并在main函数中输出.int fun(int x[],int n){ int min,i;min=x[0];for(i=1;i

int i, k=1; if(m<=1)k=0;for(i=2;i

【第28题】题目:程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最大值。其中确定最大值的下标的操作在fun函数中实现,请给出该函数的定义。int fun(int list[],int size){ int i ,max=0;

for(i=1;i

【第29题】题目:函数fun的功能是:求图1所示数列的第n项。数列为:l/a,l/(l+a),l/(l+(1+a)),l/(l+(l+(l+a))),…… float fun(int n){ float a=1;int i;for(i=1;i

if(year%400==0||&&(year%100!=0))flag=1;else flag=0;return(flag);} 【第33题】题目:编写函数fun,函数的功能是:求一个四位数的各位数字的立方和。int fun(int n){ Int d,k,s=0;While(n>0){d=n%10;s+=d*d*d;n/=10;} return s;} 【第34题】题目:求一批数中最大值和最小值的差。Int max_min(int a[],int n){ int i,max,min;max=min=a[0];for(i=1;imax)max=a[i];else if(a[i]a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;} } 【第37题】题目:请编写一个函数fun,函数的功能是:统计出若干个学生的平均成绩,最高分一级最高分的人数。例如,输入10名学生的成绩分别为92.87.68.56.92.84.67.75.92.66.则输出平均成绩77.9。最高92.最高分人数3人。float Max=0;int J=0;float fun(float array[],int n){int i.j=0;float sum=0,ave;max=array[0];for(i=0;i,n;i++){if(Max,array[i])Max=array[i];Sum=sum+array[i];} ave=sum/n;for(i=0;I,n;i++)if(array[i]==max)J++;return(ave);} [第38题]编写函数fun,函数功能是:计算n门功课的平均值,计算结果作为换数值返回。5门成绩92.76.69.58.88,函数的值72..599998。float fun(int a[]int n){ int i; float y=0;

for(i=0;ia[j])k=j;if(k!=i){t=a[i];a[i]=a[k];a[k]=t;} } } 【第42题】 题目:从键盘为一维整型数组输入10个整数,调用fun函数找出其中最小的数,并在main函数中输出。int fun(int x[],int n){int min,I;min=x[0];for(i=1;i

Int fun(char s[]){ int ik=0;for(i=0;s[i]!=’’;i++)

if(s[i]>=’a&&s[i]<=’z’||s[i]>=’A’&&s[i]<=’Z’)k==;return k;} 【第44题】 题目:编写函数fun,函数的功能是:从字符串s中删除指定的字符c。fun(char s[],char c){int I,k=0;for(i=0;s[i]!=’’;i++)if(s[i]!=c)s[k++]=s[i] s[k]=’’;} 【第45题】题目:函数fun主要功能是:从一个数组中查找出最大值在数组中的位置(从0开始),并把其内存地址返回。

说明:pos保存最大值在数组中的位置:p保存最大值内存地址。int*fun(int *s,int t,int *pos){int I,*p;p=s;for(i=1;i

[第47题目]题目: 编写函数fun,函数的功能是:求1到100之间的偶数之积.double fun(int m){ double y=1;int i;for(i=1;i<=m;i++)if(i%2==0)y*=i;return y;} [第48题]题目: 请编写一个函数fun,函数的功能是:输入一个字符串,过滤此串,只保留串中的字母字符,并统计新生成串中包含的字母个数.例如:输入的字符串为ab234sdf4,新生成的串为abdf.fun(char*ptr){int i,j;for(i=0,j=0;*(ptr+i)!=’’;i++)

if(*(ptr+i)<=’z’&&*(ptr+i)>=’a’||*(ptr+i)<’Z’&&*(ptr+i)>=’A’ {*(ptr+j)=*(ptr+1);j++;} *(ptr+j)=’’;return(j);} [第49题]题目:从键盘输入任意实数,求出其所对应的函数值 z=e的x次幂(x>10)答案: double z;if(x>10)z=exp(x);else if(x>-3)z=log(x+3);else z=sin(x)/(cos(x)+4);return(z);[第50题]题目:功能:在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的积,并在答案:----------------------int sum;int i,j;sum=1;for(i=0;i<3;i++)sum=sum*a[i][i];return sum;[第51题]题目:功能:求1到100之间的偶数之积。答案:----------------------double y=1;int i;for(i=1;i<=m;i++)if(i%2==0)y*=i;return y;[第52题]题目:功能:求出N×M整型数组的最大元素及其所在的行坐标及列坐标(如果最大元素不唯一,选择位置在最答案:----------------------int max,i,j;max=array [0][0];Row=0;Col=0;for(i=0;i='0'&&s[i]<='9'')k++;return k;[第55题]题目:功能:对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。

答案:----------------------int i,j;char t;for(i=1;i0){d=n%10;s+=d*d*d;n/=10;} return s;[第59题]题目:功能:从低位开始取出长整型变量s奇数位上的数,依次构成一个新数放在t中。

答案:----------------------long sl=10;t = s % 10;while(s > 0){ s = s/100;t = s%10*sl + t;sl = sl * 10;[第60题]题目:功能:计算并输出给定整数n的所有因子之和(不包括1与自身)。答案:----------------------int s=0,i;for(i=2;i='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')k++;return k;[第62题]题目:功能:能计算从1开始到n的自然数的和,n由键盘输入,并在main()函数中输出。

答案:----------------------int sum,i;sum =0;for(i=1;i<=n;i++){sum=sum+i;} return(sum);[第63题]题目:功能:请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二答案:----------------------int i,j;for(j=0;jpp[j])pp[j]=tt[i][j];[第64题]题目:功能:求一组数中大于平均值的数的个数。答案:----------------------int i,k=0;float s=0,ave;for(i=0;iave)k++;return k;[第65题]题目:功能:求大于lim(lim小于100的整数)并且小于100的所有素数并放在aa数组中,该函数返回所求 答案:----------------------int n=0;int i,j;for(i=lim;i<=100;i++){for(j=2;j='A' && str[i]<='Z')str[i]=str[i]+32;[第67题]题目:功能:从键盘输入一个大于3的整数,调用函数fun判断其是否素数,然后在main函数中输出相应的答案:----------------------int i;int j;j= 1;for(i=2;i

答案:----------------------char *q=s;for(;*q;q++)if(*q!= c)*(s++)=*q;*s=0;[第69题]题目:功能:对长度为8个字符的字符串,将8个字符按降序排列。答案:----------------------int i,j;char t;for(i=0;i

int i;float sum=0,ave;Max=array[0];for(i=0;i='a'||*(ptr+i)<='Z' && *(ptr+i)>='A'){*(ptr+j)=*(ptr+i);j++;} *(ptr+j)='';return(j);[第77题]题目:.功能:找出一批正整数中的最大的偶数。答案: int i,amax=-1;for(i=0;iamax)amax=a[i];return amax;[第78题]题目:.功能:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是: 将a数的十位和个位

答案:*c=a/10+a%10*100+b/10*10+b%10*1000;

第二篇:C语言程序设计

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 int main(){

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 int main(){ double r,p,s;scanf(“%lf”,&r);p=2*3.14*r;s=3.14*r*r;printf(“Area: %lfn”,s);printf(“Perimeter: %lfn”,p);} 法二

#include #define pi 3.14 int main(){

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 int main(){ int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%.3lf”,(a+b+c)/3.0);}

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 int main(){ char a,b,c;scanf(“%c%c%c”,&a,&b,&c);printf(“%.3d %.3o %.3xn”,a,a,a);printf(“%.3d %.3o %.3xn”,b,b,b);printf(“%.3d %.3o %.3xn”,c,c,c);}

5.Problem A: 最简单的程序 Description 输出一行“Hello world!”。

Input 无

Output Hello world!

Sample Input Sample Output Hello world!

HINT Append Code #include int main(){

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 int main(){ int a,x;scanf(”%dn“,&x);a=x;printf(” a

: %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 //#include int main(){

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 main(){

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 main(){

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 main(){

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 main(){

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 main(){

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 main(){

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 main(){

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 main(){

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 main(){

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 void main(){

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 void main(){

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 main(){

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 int main(){ int a,b;scanf(”%d %d“,&a,&b);if(a>b)

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 main(){

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 int main(){ int k,m,n,a,i=1;scanf(”%d %d %d“,&k,&m,&n);if(m

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 int main(){ int a,b;scanf(”%d %d“,&a,&b);

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 #include int main(){ int a;scanf(”%d“,&a);

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 main(){

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 #include int main(){

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 main(){

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 int main(){ int a,b;while(scanf(”%d %d“,&a,&b)!=EOF)

{

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 int main(){ int a,b,n=0;while(scanf(”%d %d“,&a,&b)!=EOF){

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 main(){

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 #include int main(){ int m,n,i,j,k,t;scanf(”%d %d“,&m,&n);printf(”=====n“);for(i=n;i>=m;i--){

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 int main(){ int a,b,c,n,i;scanf(”%d“,&n);for(i=0;i

{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 main(){

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 main(){

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 main(){

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 int main(){

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 int main(){

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 #include int main(){

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 语言程序设计

《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业的重要专业基础课。

本校从2001至今,每年都开设《C语言程序设计》课程,由于,我校最开始时的特殊情况,主要把重点放在C语言中的各类重点、难点的语法、语义上,使得学生经过比较复杂和痛苦的过程后,对C语言在使用上很难做到自己编写程序。而且很多学生产生了畏惧心理。

2004年,学院成立计算机科学与技术系,为了更好学习和掌握C语言,计算机科学与技术专业和计算机维护专业(计算机应用技术前身)除了开设《C语言程序设计》课程外,在后续一学期还开设了《C语言程序设计课程设计》,使得计算机专业学生编程思想和能力得到了极大提高。

2005年,为了让我院工科学生更好的掌握C语言编程以及通过四川省计算机二级考试,在《C语言程序设计》课程后设置《C语言程序设计课程设计》,极大地提高了学生的动手机会和能力,过级率显著提高!

2007年,依托我校建设精品课程的契机,我们将C语言中的各个知识点进行重新规整,提出适用于三本院校学生的语言设计学习的方法。我们提出,先了解C语言,再学习C语言,再用C语言的思想。即在开始时让学生初步知道C语言,然后引入比较简单的运算符以及基本输入、输出和简单的顺序结构程序设计。通过这样的方式,我们发现,学生在C语言的学习就不会从开始的时候陷入大量难懂的语法、语义和数据结构中。有了以上铺垫再层层进入,最终进入复杂的各类数据结构以及指针等学习。通过以上的内容规整后,教学效果有明显提高。

第四篇:C语言程序设计习题试题(编程题)

C语言程序设计习题(编程类)

1、从键盘输入任意的字符,按下列规则进行分类计数。

第一类 '0','1','2','3','4','5','6','7','8','9'

第二类 '+','-','*','/','%','='

第三类 其它字符

当输入字符''时先计数,然后停止接收输入,打印计数的结果。参考答案:

#include void main(){ int class1, class2, class3; char ch;

class1=class2=class3=0; /* 初始化分类计数器 */ do { ch=getch(); switch(ch){ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': class1++; break; /* 对分类1计数 */ case '+': case '-': case '*': case '/': case '%': case '=': class2++; break; /* 对分类2计数 */ default: class3++; break; /* 对分类3计数 */ } }while(ch!= ''); /* 字符''在C程序中要使用转义符'' */ printf(“class1=%d, class2=%d, class3=%dn”, class1, class2, class3); }

2、从键盘输入十个整数,用插入法对输入的数据按照从小到大的顺序进行排序,将排序后的结果输出。参考答案: void main(){ int i,j,num,a[10]; for(i=0;i<10;i++){ printf(“Enter No.%d:”, i+1); scanf(“%d”,&num);

for(j=i-1;j>=0&&a[j]>num;j--)a[j+1]=a[j]; a[j+1]=num; } for(i=0;i<10;i++)printf(“No.%d=%dn”, i+1, a[i]); }

3、输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321。参考答案: void main(){ int n;

printf(“Please enter n:”); scanf(“%d”,&n); while(n>0){ printf(“%d”,n%10); n=n/10; } }

4、编写程序,读入一个整数N;若N为非负数,则计算N到2×N之间的整数和;若N为一个负数,则求2×N到N之间的整数和。分别利用for和while写出两个程序。参考答案: void main(){ int i,n;

long s1=0,s2=0;

printf(“Please enter N:”); scanf(“%d”,&n); if(n>=0)for(i=n;i<=2*n;i++)s1=s1+i; else for(i=n;i>=2*n;i--)s1=s1+i; i=n; if(i>=0)while(i<=2*n)s2=s2+i++; else while(i>=2*n)s2=s2+i--;

printf(“Result1=%ld result2=%ldn”,s1,s2); }

5、一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,•所得的商被17除余15,最后得到一个商是a的2倍。编写程序求这个自然数。参考答案: void main(){ int i,n,a;

for(i=0; ;i++){ if(i%8==1){ n=i/8; if(n%8==1){ n=n/8;

if(n%8==7)a=n/8; } } if(i%17==4){ n=i/17;

if(n%17==15)n=n/17; } if(2*a==n){ printf(“result=%dn”,i); break; } } }

6、编写程序,输出用一元人民币兑换成1分、2分和5分硬币的不同兑换方法。参考答案: void main(){ int f1,f2,f5,count=0; for(f5=0;f5<=20;f5++)for(f2=0;f2<=(100-f5*5)/2;f2++){ f1=100-f5*5-f2*2; if(f5*5+f2*2+f1==100)printf(“No.%2d >> 5: %4d 2: %2d 1: %2dn”,++count,f5,f2,f1); } }

7、将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。参考答案: void main(){ int i,j,n,k,a[16]={0}; for(i=1;i<=1993;i++){ n=i;k=0;

while(n>0)/* 将十进制数转变为二进制数 */ { a[k++]=n%2; n=n/2; } for(j=0;j=k){ printf(“ %d: ”,i); for(j=0;j

8、十个小孩围成一圈分糖果,老师分给第一个小孩10块,第二个小孩2块,第三个小孩8块,第四个小孩22块,第五个小孩16块,第六个小孩4块,第七个小孩10块,第八个小孩6块,第九个小孩14 块,第十个小孩20块。然后所有的小孩同时将自己手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次调整后大家手中的糖的块数都一样?每人各有多少块糖? 参考答案: void main(){ int i,count=0,a[11]={0,10,2,8,22,16,4,10,6,14,20}; while(1){ for(i=1;i<=10;i++)a[i-1]=a[i-1]/2+a[i]/2; a[10]=a[10]/2+a[0]; for(i=1;i<=10;i++)if(a[i]%2==1)a[i]++; for(i=1;i<10;i++)if(a[i]!=a[i+1])break; if(i==10)break; else { a[0]=0; count++; } } printf(“count=%d number=%dn”,count,a[1]); }

9、输入5×5的数组,编写程序实现:(1)求出对角线上各元素的和;

(2)求出对角线上行、列下标均为偶数的各元素的积;(3)找出对角线上其值最大的元素和它在数组中的位置。参考答案: void main(){ int i,j,s1=0,s2=1,a[5][5]; for(i=0;i<5;i++)for(j=0;j<5;j++){ printf(“%d %d: ”,i,j); scanf(“%d”,&a[i][j]); } for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%5d”,a[i][j]); printf(“n”); } j=0;

for(i=0;i<5;i++){ s1=s1+a[i][i];

if(i%2==0)s2=s2*a[i][i]; if(a[i][i]>a[j][j])j=i; } printf(“SUN=%dnACCOM=%dna[%d]=%dn”,s1,s2,j,a[j][j]); }

10、编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。参考答案:

#include “stdio.h” void main(){ int i,n=0,a[4]={0};

printf(“Please enter a digit:”);

for(i=0;i<4 &&(a[i]=getchar())!='n';i++); for(i=0;i<4;i++)if(a[i]>=48&&a[i]<=57)a[i]=a[i]-48; else if(a[i]>=65&&a[i]<=69)a[i]=a[i]-55; else if(a[i]>=97&&a[i]<=102)a[i]=a[i]-87; else printf(“input Error!”); for(i=0;i<4;i++)n=n*16+a[i]; printf(“%d”,n); }

11、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。参考答案: void main(){ int i,n,k=16,a[16]={0}; printf(“Please enter a digit:”); scanf(“%d”,&n);

while(n>0)/* 将十进制数转变为二进制数 */ { a[--k]=n%2; n=n/2; } for(i=0;i<16;i++)printf(“%2d”,a[i]); }

12、对数组A中的N(0<N<100=个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A=(5,3,4,7,3,5,6)则输出为:(3,1,2,5,1,3,4)参考答案: void main(){ int i,j,k,n,m=1,r=1,a[2][100]={0}; printf(“Please enter n:”); scanf(“%d”,&n); for(i=0;i

for(j=i;j

13、求这样一个三位数,该三位数等于其每位数字的阶乘之和。

即: abc = a!+ b!+ c!参考答案: void main(){ int a[5],i,t,k;

for(i=100;i<1000;i++){ for(t=0,k=1000;k>=10;t++){ a[t]=(i%k)/(k/10); k/=10; } if(f(a[0])+f(a[1])+f(a[2])==i)printf(“%d ”,i); } } f(m)int m;

{ int i=0,t=1;

while(++i<=m)t*=i; return(t); }

14、编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。参考答案:

#include “string.h” strcmbn(a,b,c)/* 数组合并函数:将数组a、b合并到 */ char a[],b[],c[]; { char tmp; int i,j,k,m,n; m=strlen(a); n=strlen(b);

for(i=0;i

tmp=a[i]; a[i]=a[k]; a[k]=tmp; } for(i=0;i

tmp=b[i]; b[i]=b[k]; b[k]=tmp; } i=0;j=0;k=0;

while(ib[j])c[k++]=b[j++]; /* 将a[i]、b[j]中的小者存入c[k] */ else { c[k++]=a[i++]; if(a[i-1]==b[j])j++; /* 如果a、b当前元素相等,删掉一个 */ } while(i

15、编写函数,采用递归方法实现将输入的字符串按反序输出。参考答案:

#include “stdio.h” strout(s)char *s; { if(*s!=''){ strout(s+1); /* 递归调用strout函数,字符串首地址前移一个字符 */ putch(*s); /* 输出字符串首地址所指向的字符 */ } else return; /* 遇到字符串结束标志结束递归调用 */ }

16、编写函数,采用递归方法将任一整数转换为二进制形式。参考答案: turn(n,a,k)int n,a[ ],k; { if(n>0){ a[k]=n%2; turn(n/2,a,k-1); } else return; } void main(){ int i,n,a[16]={0};

printf(“nPlease enter n:”); scanf(“%d”,&n); turn(n,a,15);

for(i=0;i<16;i++)printf(“%d”,a[i]); }

17、将一个数的数码倒过来所得到的新数,叫作原数的反序数,如果一个数等于它的反序数,则称它为对称数。编写程序,采用递归算法求不超过1993的最大的二进制的对称数。

参考答案:

smmt(char s[ ])/* 指针s指向字符串的第一个字符 */ { char *p; p=s; while(*p!='')p++;

p--; /* 指针p指向字符串的最后一个字符 */ if(p==s)return(1); /* 两个指针指向同一个字符表示字符串对称 */ else { if(*s!=*p)

return(0); /* 两个指针指向字符不等表示字符串不对称 */ else { *p='';

smmt(s+1); /* 取掉首尾比较过的字符继续比较 */ } } }

18、编写程序,读入一个以符号“.”结束的长度小于20字节的英文句子,检查其是否为回文(即正读和反读都是一样的,不考虑空格和标点符号)。例如:

读入句子:MADAM I'M ADAM.它是回文,所以输出:YES 读入句子:ABCDBA).它不是回文,所以输出:NO 参考答案:

#include “stdio.h” void main(){ char s[21],*p,*q; gets(s); p=s; q=s;

while(*q!='')q++; q-=2;

while(p=q)printf(“YESn”); }

19、编写程序,其中包括一个函数,此函数的功能是:对一个长度为N 的字符串从其第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N、M<=80,K<=N)。例如输入字符串“We are poor students.”,利用此函数进行删除“poor”的处理,输出处理后的字符串是“We are students.”。参考答案: strcut(s,m,k)char s[ ]; int m,k; { char *p; int i;

p=s+m; /* 指针p指向要被删除的字符 */ while((*p=*(p+k))!='')/* p+k指向要前移的字符 */ p++; }

20、编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2。

参考答案: insert(s1,s2,ch)char s1[],s2[],ch; { char *p,*q; p=s1;

while(*p++!=ch); while(*s2!=''){ q=p;

while(*q!='')q++; while(q>=p)*(q+1)=*q--; *++q=*s2++; p++; } }

21、编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。参考答案: strcnb(s1,s2)char s1[],s2[]; { char *p; int i=1; p=s1;

while(*p!='')p++;

while((*p++=*s2++)!=''); /* 将s2接于s1后面 */ p=s1;

while(*p!='')/* 扫描整个字符串 */ { if(*p==' ')/* 当前字符是空格进行移位 */ { while(*(p+i)==' ')i++; /* 寻找当前字符后面的第一个非空格 */ if(*(p+i)!=''){ *p=*(p+i); /* 将非空格移于当前字符处 */ *(p+i)=' '; /* 被移字符处换为空格 */ } else break; /* 寻找非空格时到字符串尾,移位过程结束 */ } p++; } }

22、编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符的数量。如:输入字符串: abcedabcdcd 则输出:a=2 b=2 c=3 d=3 e=1。参考答案:

#include “stdio.h” struct strnum { int i; char ch; } void main(){ char c; int i=0,k=0;

struct strnum s[100]={0,NULL}; while((c=getchar())!='n'){ for(i=0;s[i].i!=0;i++){ if(c==s[i].ch){ s[i].i++; break; } } if(s[i].i==0){ s[k].ch=c; s[k++].i=1; } } i=0;

while(s[i].i>0){ printf(“%c=%d ”,s[i].ch,s[i].i); i++; } }

23、编写程序,读入磁盘上C语言源程序文件“test8.c”,删去程序中的注释后显示。参考答案:

#include “stdio.h” FILE *fp; void main(){ int c, d;

if((fp = fopen(“d: c est8.c”,“r”))== NULL)exit(0); while((c=fgetc(fp))!= EOF)if(c=='/')/* 如果是字符注释的起始字符'/' */ if((d=fgetc(fp))== '*')/* 则判断下一个字符是否为'*' */ in_comment(); /* 调用函数处理(删除)注释 */ else /* 否则原样输出读入的两个字符 */ { putchar(c); putchar(d); } else if(c==''' || c=='“')/* 判断是否是字符'或” */ echo_quote(c); /* 调用函数处理字符'或“包含的字符 */ else putchar(c); } in_comment(){ int c, d; c=fgetc(fp); d=fgetc(fp);

while(c!='*' || d!='/'){ /* 连续的两个字符不是 * 和 / 则继续处理注释 */ c = d;

d = fgetc(fp); } } echo_quote(c)int c; /* c中存放的是定界符'或” */ { int d; putchar(c);

while((d=fgetc(fp))!=c)/* 读入下一个字符判断是否是定界符c */ { putchar(c); /* 当不是定界符c时继续循环 */ if(d=='')/* 若出现转义字符 */ putchar(fgetc(fp)); /* 则下一个字符不论是何均原样输出 */ } putchar(d); } 12

第五篇:《C语言程序设计教程》课后题答案

《C语言程序设计教程》课后题答案

第一章

一选择题

1.A 2.B 3.C 4.D 5.B 6.C 二.填空题 1.程序 2.算法

3.main或主 4.编译 5.编译 6..obj 7.库函数

8.文本或ASCII码

三、编程题

1.参考代码如下: #include void main(){

printf(“金n木n水n火n土n”);} 2.参考代码如下: #include void main(){ int a,b;

scanf(“%d%d”,&a,&b);

printf(“%d+%d=%dn”,a,b,a+b);

printf(“%d-%d=%dn”,a,b,a-b);

printf(“%d*%d=%dn”,a,b,a*b);

printf(“%d/%d=%dn”,a,b,a/b);} 3.参考代码如下: #include void main(){

float a,b,h,s;

scanf(“%f%f%f”,&a,&b,&h);

s=(a+b)*h/2;

printf(“s=%fn”,s);}

第二章

一选择题 答案及分析: 1.B,略

2.A,-8在内存中是以补码(设两个字节)形式存储的 3.A,C语言有32个关键字(参见课本第18页),且C语言标识符是区分大小写字母的 4.A,略

5.D,八进制数据中不能出现数码8 6.B,字符常量应该用单引号括起来,答案D超出了ASCII取值范围(ASCII的取值范围为[0,255])

7.C,该字符串中转义字符有三个:、22和 n,普通字符有三个:a、,和0,所以字符串长度为6 8.C,略

9.D,C语言没有read函数和%D格式符号,且scanf函数第二个形参为地址列表

10.B,根据题意,scanf函数输入数据时分隔符号不应该是逗号,应该是空格或回车符,且输入数据时分一行或几行均可

11.A,scanf函数中不允许出现%8.4,%6.2和%8这样的格式符号

12.C,既要保证5位小数位,还得保证整数位不变,这样数据12345.67800用10列不能完全显示出来,按C语言规定,12345.67800原样输出

13.B,printf函数中格式符号%d,%o,%x表示对应的整型数据分别按十进制,八进制和十六进制输出

14.C,按C语言规定,scanf函数形参双引号中,如果包含非格式符号,在输入数据时要求原样输入 二.填空题 答案及分析:

1.int

float

double(略)

2.65,89,printf函数中如果格式符号是%d,则输出相应字符的ASCII十进制数值

3.a=98,b=765.000000,c=4321.000000,scanf函数中的格式符号%2d%3f%4f,表示将键盘输入的数据9876543210按2,3,4位分割,然后再分别赋给变量a,b,c 4.scanf(“%lf%lf%lf”,&a,&b,&c);double类型的变量对应的格式符号是%lf

三、编程题

1.参考代码如下: #include void main(){

int a=97;

printf(“%cn”,a);

printf(“%dn”,a);

printf(“%on”,a);

printf(“%xn”,a);} 程序分析:通过printf函数中不同的格式符号,即%c(字符),%d(十进制),%o(八进制),%x(十六进制)输出相应的值。2.参考代码如下: #include void main(){

int h,m,minute;

scanf(“%d:%d”,&h,&m);

minute=h*60+m;

printf(“minute=%dn”,minute);} 程序分析:输入形式为10:27,故scanf函数双引号中两个格式符号%d之间必须加入“:”。3.参考代码如下: #include void main(){

float r=6371000,s,v;

s=4*3.1415926*r*r;

v=3.1415926*4/3*r*r*r;

printf(“s=%fnv=%f”,s,v);} 程序分析:C语言中的π不代表3.1415926,可以用各种常量的形式体现出来。4.参考代码如下: #include void main(){

int m100,m50,m20,m10,m5,m1,m;

scanf(“%d”,&m);

m100=m/100;

m50=(m-m100*100)/50;

m20=(m-m100*100-m50*50)/20;

m10=(m-m100*100-m50*50-m20*20)/10;

m5=(m-m100*100-m50*50-m20*20-m10*10)/5;

m1=m-m100*100-m50*50-m20*20-m10*10-m5*5;

printf(“%d元发工资,人名币各票面的张数为:n”,m);

printf(“100元的张数:%dn”,m100);

printf(“50元的张数:%dn”,m50);

printf(“20元的张数:%dn”,m20);

printf(“10元的张数:%dn”,m10);

printf(“5元的张数:%dn”,m5);

printf(“1元的张数:%dn”,m1);} 程序分析:人民币的面值分别为100元,50元,20元,10元,5元和1元,工资4367元除以100后得到的商就为100元张数,余数再除以50,得到的商为50元的张数,余数再除20,„„,以此类推就会得出人民币各面值相应的张数。5.参考代码如下: #include void main(){

float r1,r2,r3,r;

scanf(“%f%f%f”,&r1,&r2,&r3);

r=r1*r2*r3/(r1*r2+r2*r3+r1*r3);

printf(“三个电阻并联后的总电阻为%fn”,r);} 程序分析:首先将计算并联电阻值的公式变换一下;再就是考虑要保留小数位,故变量类型设置为实型,注意格式符号为%f。6.参考代码如下: #include void main(){

int x,a,b,c,d,y;

scanf(“%d”,&x);

a=x%10;

b=x/10%10;

c=x/100%10;

d=x/1000;

y=a*1000+b*100+c*10+d;

printf(“%d逆置各位数后的值为%dn”,x,y);} 程序分析:1234除以10的余数就是4,商再除以10的余数就是3,1234除以100再除以10取余就是2,1234除以1000就是1。也可以用其他的表达式求出各位数值,例如输入数据1234中的4,可以用公式a=x-d*1000-c*100-b*10来计算。7.参考代码如下: #include void main(){

float F,C;

printf(“请输入华氏温度:”);

scanf(“%f”,&F);

C=5.0/9*(F-32);

printf(“华氏温度%f对应的摄氏温度为%fn”,F,C);} 程序分析:5/9的值为0,所以要写成5.0/9,5/9.0或5.0/9.0,还要注意变量类型为实型,且对应的格式符号为%f。8.参考代码如下: #include void main(){

char ch1,ch2,ch3;

printf(“请输入三个数字字符:”);

scanf(“%c%c%c”,&ch1,&ch2,&ch3);

printf(“将数字字符转换为数字%d,%d,%dn”,ch1-'0',ch2-48,ch3-'0');} 程序分析:通过键盘输入三个数字字符时要连续输入,不要加任何分隔符号,例如121等,另外,数字字符输出时遇到格式符号%d将输出相应数字字符的ASCII值,但任何一个数字字符的ASCII值减去字符0的ASCII值,再对应%d格式符号输出时,就是数字字符对应的数字,例如'2'-'0'=2。

9.不能得到指定的输出结果,参考代码如下: void main(){

int a, b, c,x, y;

scanf(“%d%d%d”,&a,&b,&c);

x=a*b;

y=x*c;

printf(“a=%d,b=%d,c=%dn”,a,b,c);

printf(“x=%d,y=%dn”,x,y);}

程序分析:scanf(“%d,%d,%d”,a,b,c);scanf函数第二类形参是地址列表,所以语句改为scanf(“%d,%d,%d”,&a,&b,&c);而这个语句对应的键盘输入形式为2,3,4。为了满足题目要求,scanf语句改为scanf(“%d%d%d”,&a,&b,&c)。另外,printf函数双引号只能出现一对,且双引号中需要在相应的位置上添加a=等这样的字符串才能原样输出;还有整型变量对应格式符号是%d等。

第三章

一选择题

1.A 2.C 3.C 4.D 5.C 6.B 7.C 8.B 9.A 10.A 11.A 12.B 13.D 14.A 15.B 16.C 17.C 18.C 19.C 20.C 21.C 22.B 23.C 24.C 25.A 26.B 27.A 28.A 29.C 30.A 31.C 32.C 二.填空题 1.非零

零 2.passwarm 3.525252 4.fabs(x)>5 5.x%y==0 6.if((1<=x&&x<=10||200<=x&&x<=210)&&x%2==1)printf(“%d”,x);7.k=1 8.Right!1

Right!1 9.$$$ a=0 10.a=2,b=1 11.0

“%f%f”

a=b;13.“%c”,&ch

'A'<=ch&&ch<='Z'

ch 14.死循环 15.345 16.7 3-1 17.x>=0

x

j%3!=0 24.b=i+1 25.8 5 2 26.d=1.0

k++ k<=n

三、编程题

1.参考代码如下: #include void main(void){ float x,y;printf(“Please input the value of x:”);scanf(“%f”,&x);if(x>-5&&x<0)

y=x;else if(x==0)

y=x-1;else if(x>0&&x<10)

y=x+1;printf(“y=%f”,y);} 2.参考代码如下: #include void main(void){

float a,b,c;

printf(“请输入三角形三边的长度:n”);

scanf(“%f%f%f”,&a,&b,&c);

if(a+b>c&&b+c>a&&a+c>b)

if(a==b&&a==c)

printf(“该三角形是等边三角形n”);

else if(a==b&&a!=c)

printf(“该三角形是等腰三角形n”);

else

printf(“该三角形是一般三角形n”);

else

printf(“不能构成三角形n”);} 3.参考代码如下: #include void main(void){

float M,N,menoy;

printf(“请输入购买金额:”);

scanf(“%f”,&M);

if(M<100)

N=0;

else if(M>=100&&M<200)

N=1.5;

else if(M>=200&&M<300)

N=2.5;

else if(M>=300&&M<400)

N=3.5;

else if(M>=400&&M<500)

N=4.5;

else if(M>=500&&M<600)

N=5.5;

else

N=6;

menoy=M*(1-N/100);

printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);} 4.参考代码如下: #include void main(void){

float M,N,menoy;

int in;

printf(“请输入购买金额:”);

scanf(“%f”,&M);

in=M/100;

switch(in)

{

case 0:N=0;break;

case 1:N=1.5;break;

case 2:N=2.5;break;

case 3:N=3.5;break;

case 4:N=4.5;break;

case 5:N=5.5;break;

default :N=6;break;

}

menoy=M*(1-N/100);

printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);} 5.参考代码如下: #include void main(void){

float x,max;

printf(“Enter a number:”);

scanf(“%f”,&x);

max=x;

while(x>0)

{

printf(“Enter a number:”);

scanf(“%f”,&x);

if(x>max)

max=x;

}

if(max>0)

printf(“The largest number entered was %fn”,max);} 6.参考代码如下: #include void main(void){

float M,N,menoy;

printf(“请输入购买金额:”);

scanf(“%f”,&M);

while(M>0)

{

if(M<100)

N=0;

else if(M>=100&&M<200)

N=1.5;

else if(M>=200&&M<300)

N=2.5;

else if(M>=300&&M<400)

N=3.5;

else if(M>=400&&M<500)

N=4.5;

else if(M>=500&&M<600)

N=5.5;

else

N=6;

menoy=M*(1-N/100);

printf(“实际支付金额:%f,返还的金额:%fn”,menoy,M-menoy);

printf(“请输入购买金额:”);

scanf(“%f”,&M);

} } 7.参考代码如下: #include void main(void){

float number,positivesum=0,negativesum=0,total=0;

int i;

for(i=1;i<=10;i++)

{

scanf(“%f”,&number);

if(number>=0)positivesum+=number;

else negativesum+=number;

total+=number;

}

printf(“positive sum %f,negative sum %f,total %fn”,positivesum,negativesum,total);} 8.参考代码如下: #include void main(void){

int i,sum=0,k=1;

for(i=1;i<=101;i+=2)

{

sum=sum+k*i;

k=-k;

}

printf(“1-3+5-7+...-99+101=%dn”,sum);} 9.参考代码如下: #include void main(void){

float i,sum=0,k=1;

for(i=1;k>=1e-4;i++)

{

sum=sum+k;

k=k/i;

}

printf(“e=%fn”,sum);} 10.参考代码如下: #include void main(void){

float i,sum=0,n=2,d=1,temp;

for(i=1;i<=20;i++)

{

sum=sum+n/d;

temp=n;

n=n+d;

d=temp;

}

printf(“sum=%fn”,sum);} 11.参考代码如下: #include #include void main(void){

float apple,watermelon,pear;

for(apple=1;apple<100;apple++)

for(watermelon=1;watermelon<10;watermelon++)

{

pear=100-apple-watermelon;

if(fabs(apple*0.4+watermelon*4+pear*0.2-40.0)<1e-6)

printf(“apple:%.0f,watermelon:%.0f,pear:%.0fn”,apple,watermelon,pear);

} }

12.参考代码如下: #include void main(void){

int i,j,k;

for(i=1;i<10;i++)

for(j=0;j<10;j++)

for(k=0;k<10;k++)

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

printf(“%dn”,i*100+j*10+k);} 或:

#include void main(void){

int a,b,c,i;

for(i=100;i<1000;i++)

{

a=i/100;

b=i/10%10;

c=i%10;

if(i==(a*a*a+b*b*b+c*c*c))

printf(“%dn”,i);

} } 13.参考代码如下: #include void main(void){

int a,b,c,d;

for(a=1;a<10;a++)

for(b=0;b<10;b++)

for(c=0;c<10;c++)

for(d=0;d<10;d++)

if(a*1000+b*100+c*10+d==(a*10+b+c*10+d)*(a*10+b+c*10+d))

printf(“%dn”,a*1000+b*100+c*10+d);} 或:

#include void main(void){

int a,b,c,d,i;

for(i=1000;i<10000;i++)

{

a=i/1000;

b=i/100%10;

c=i/10%10;

d=i%10;

if(i==(a*10+b+c*10+d)*(a*10+b+c*10+d))

printf(“%dn”,i);

} } 14.参考代码如下: #include void main(void){

int i,j;

for(i=1;i<=4;i++)//先控制打印前4行

{

for(j=1;j<=4-i;j++)

printf(“ ”);

for(j=1;j<=2*i-1;j++)

printf(“*”);

printf(“n”);

}

for(i=1;i<=3;i++)//再控制打印后3行

{

for(j=1;j<=i;j++)

printf(“ ”);

for(j=1;j<=2*(4-i)-1;j++)

printf(“*”);

printf(“n”);

} }

第四章

一选择题

1.A,如果没有给s[1]赋值,按C语言规定,s[1]下标变量中的数据是一个随机数

2.C,“China”字符串末尾还有一个,故占6个字节

3.D,scanf函数中格式符号若是%c,则把输入的第一个字符'1'赋给变量c,然后遇到格式符号%d,则把后续的23(遇到空格结束)赋值给变量i,遇到格式符号%s,则把后续的字符串“456”(遇到空格结束)赋值给变量s

4.D,C语言规定,数组在定义时就已经分配好了所占内存空间,所以int x[5]在内容中占的字节数为4*5=20

5.B,内层循环变量j每次都从0开始,使得在外层循环变量i每取一个值时,n[0]和n[1]的值都得重新计算

6.B,这是求十进制数18对应二进制数的程序,将每次18除以2得到的余数依次放到数组a[0]到a[4]中,最后按a[4]到a[0]这样的顺序输出

7.B,第一个for循环给a[0]到a[9]赋值为0到9,第二个for循环给p[0]到p[2]赋值为0,2,6,第三个for循环使k=k+p[0]*2+p[1]*2+p[2]*2=5+4+12=21

8.D,C语言规定,定义二维数组时不能省略第二维下标值,但可以省略第一维下标值

9.B,略

10.A,每行的第4列元素的值都为0

11.C,略

12.D,C语言规定,字符数组不能用s=“abcd”这样的赋值语句赋值

13.C,float类型的变量对应格式符号通常为%f,不是%d

14.A,每行的第3列元素的值均为0

15.D,略

16.C,A这种赋值形式无法放置字符串末尾的,B和D不符合C语言规定,即字符数组不能用s=“good”这样赋值语句赋值

17.A,这是字符数组str初始化的形式,str[0]到str[5]分别为字符s,t,r,i,n,g,str[6]到str[11]的值均为,函数strlen是统计字符串包含字符的个数,遇到(不包括)结束,所以str长度为6

18.C,x数组比y数组多了一个字符

19.A,数组名就是数组第一个元素的地址,所以scanf(“%s”,&s);中得删除数组名前面的& 20.D,puts和putchar函数只有一个参数,printf函数中格式符号%s应该对应的是数组名

21.D,程序功能是输出第2和第3个字符串

22.A,双层循环完成的功能是求s的值,s=(((a[0][0]*10+a[0][2])*10+a[1][0])*10+a[1][2]=(((6*10+3)*10+8)*10+5=6385 二.填空题 1.a=1234 b=5 答案分析:C语言规定,使用scanf函数通过键盘输入数据时,除了格式符号和转义字符,其他符号要原样输入。

2.Hello 答案分析:b[5]=0等于b[5]= '',是因为字符的ASCII值就是0,而printf(“%sn”,b);的功能是输出字符串,但遇到空格或等字符时结束输出,所以答案为Hello。

3.j<3;b[j][i]=a[i][j];i<3 答案分析:通过两个数组下标变量位置的变换来完成程序功能。

4.a[age]++ i=18;i<=25 答案分析:用数组a来存储每个年龄段的人数,并通过a[age]++来实现。5.c[i]=n%base;b[d] 答案分析:十进制整数转换为n进制采用的是除以n取余法,使用变量base存放某个进制的值,c数组存放每次计算的余数。最后一个for循环输出不同进制所对应的数码符号。6.break;i>=8 答案分析:如果找到某个数,则通过break语句终止循环。7.-850,2,0 答案分析:程序功能是查找并输出二维数组中最小值及其下标值。8.a[i]>b[j] i<3 j<5 答案分析:数组a和b的长度可以相等或不等,通过i<3或j<5来看哪个数组的值还没有放进c数组中。

9.a[i][j]

j=0;j<4;j++ j==3 printf(“n”);

答案分析:用数组a最后一列,即第4列来保存每行的和,通过printf(“n”);语句来控制按3行来输出。10.fi

答案分析:略 11.GDABC 答案分析:略 12.s[i++] 答案分析:while(s[i])表示当s[i]中的字符不为时进入循环体,否则退出while循环。

13.ahAMa 答案分析:通过scanf(“%s”,a);给字符数组赋值时遇到空格或回车符号将终止输入。程序功能是将字符串中的字符a,大写变成小写,小写变成大写,其他字符保持不变。14.LBLMNP 答案分析:执行strcat(a,b);语句后,a数组的值为“ABLMNP”,b数组的值为“LMNP”;在执行while(a[j++]!=0)b[j]=a[j];时,b[j]中的j值是前面a[j++]中j++执行后的值,即while循环首先执行b[1]=a[1]= 'B',然后是b[2]=a[2]= ' L',b[3]=a[3]= 'M',„„,b[0]中的字符保持不变,仍是' L'。15.'' i++ 答案分析:因为while(str[i])是通过字符串末尾的来判断字符串是否读取结束,所以字符数组str最后要有一个字符串结束符号。16.b[j]=a[j][0];b[j]=a[j][k]

答案分析:用b数组存储每行中的最大字符,最终b[0]存放第一行字符中的最大字符,b[1] 存放第一行字符中的最大字符,„„。b[j]=a[j][0]的作用是在查找一串字符中最大字符前,先把这串字符第一个字符放到b[j]中,然后通过循环和条件判断来实现最大字符的查找。17.a[k++]=a[j] 答案分析:略

三、编程题

1.参考代码如下: #include void main(void){

int array[31],total=0;

int i,j=1;

for(i=0;i<30;i++)

{

array[i]=2*j;

j++;

total=total+array[i];

}

array[30]=total/30;

for(i=0;i<31;i++)

printf(“%d,”,array[i]);} 答案分析:由于平均值要放在数组array的末尾,所以在定义数组时要多定义一个元素,即array[31]。另,为了保持数组类型一致性,故平均值也只取整数值。2.参考代码如下: #include #include #include void main(){

int i,j,k,a[20],temp;

srand(time(NULL));

for(i=0;i<20;i++)

{

a[i] = rand()% 101;//产生[0,100]之间的随机数,取整后赋给a[i]

printf(“%d ”,a[i]);

}

printf(“n”);

for(i=0;i<19;i++)

{

k=i;

for(j=i+1;j<20;j++)

if(a[j]

if(k!=i)temp=a[i],a[i]=a[k],a[k]=temp;

}

for(i=0;i<20;i++)

printf(“%d ”,a[i]);} 程序分析:略

3.参考代码如下: #include #include #include void main(){

int i,maxi,a[30];

srand(time(NULL));

for(i=0;i<30;i++)

{

a[i] = rand()% 101;

//产生[0,100]之间的随机数,取整后赋给a[i]

printf(“%d ”,a[i]);

}

printf(“n”);

maxi=0;

for(i=1;i<30;i++)

if(a[maxi]

for(i=maxi+1;i<30;i++)//将最大数后边的数据依次前移一个位置

a[i-1]=a[i];

for(i=0;i<29;i++)

printf(“%d ”,a[i]);} 程序分析:略

4.参考代码如下: #include void main(){

int i,n=0,a[30],x;

scanf(“%d”,&x);//输入要转换的数据

do

{

a[n]=x%2;//取余数

n++;

x=x/2;

//整除

}while(x!=0);

for(i=n-1;i>=0;i--)//输出

printf(“%d”,a[i]);} 程序分析:利用十进制数除以2取余数的方法计算对应的二进制数。5.参考代码如下: #include #include void main(){

int right[17]= {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},s=0,i,y;

char num[18],check[11]= {'1','0','X','9','8','7','6','5','4','3','2'};

printf(“请输入身份证号码的前17位:”);

gets(num);

//输入身份证号码

for(i=0;i<17;i++)

//对前17位数字的权求和

s=s+(num[i]-'0')*right[i];

y=s%11;

//计算模

printf(“last number is %cn”,check[y]);} 程序分析:身份证前17位是以字符串的形式输入的,利用表达式num[i]-'0'可以得到每个字符对应的数字;然后算出y值,再将对应的验证码输出即可,例如若y=10,则输出字符2。6.参考代码如下: #include void main(){

int a[20][20]= {0},i,j,n;

scanf(“%d”,&n);

//输入要打印的杨辉三角形的行数

for(i=0;i

//对第一列和对角线元素赋值

a[i][0]=a[i][i]=1;

for(i=2;i

//求对角线以下、第一列右边的元素值

for(j=1;j

a[i][j]=a[i-1][j]+a[i-1][j-1];

for(i=0;i

//打印杨辉三角形

{

for(j=0;j<=i;j++)

printf(“%8d”,a[i][j]);

printf(“n”);

} } 程序分析:杨辉三角形数据矩阵的第一列和对角线上数值均为1,通过for(i=0;i

7.参考代码如下: #include #include #include void main(){

int a[5][6],i,j,max,min;

srand(time(NULL));

for(i=0;i<5;i++)

{

for(j=0;j<6;j++)

{

a[i][j]=rand()%51;产生[0,50]之间的随机数,取整后赋给a[i][j]

printf(“%4d”,a[i][j]);

}

printf(“n”);

}

max=min=a[0][0];

for(i=0;i<5;i++)

for(j=0;j<6;j++)

{

if(max

max=a[i][j];

if(min>a[i][j])

min=a[i][j];

}

printf(“max=%d,min=%dn”,max,min);} 程序分析:先产生30个随机整数放到二维数组a中,然后假设第一个数即是最小数也是最大数,再通过双重循环和条件判断来找到这30个整数的最大值和最小值。8.参考代码如下: #include #include #include void main(){

int a[20][20],i,j,n;

srand(time(NULL));

printf(“请输入n(n*n)的值:”);

scanf(“%d”,&n);

for(i=0;i

for(j=0;j<=i;j++)

{

a[i][j]=rand()%51;产生[0,50]之间的随机数,取整后赋给a[i][j]

a[j][i]=a[i][j];

}

for(i=0;i

{

for(j=0;j

printf(“%4d”,a[i][j]);

printf(“n”);

} } 程序分析:通过for(j=0;j<=i;j++)来控制只遍历数值方阵的下三角数据(包括主对角线上的数据),通过a[j][i]=a[i][j];语句完成与下三角对应位置的上三角数组元素的赋值,从而形成对称矩阵。

9.参考代码如下: #include void main(){

char str[80],c;

int i=0;

while((c=getchar())!='n')//接受从键盘输入的字符,直到遇到回车

{

str[i]=c;

//将接受到的字符存入字符数组中

i++;

}

str[i]='';

puts(str);

//检验以上程序的结果是否正确 } 程序分析:gets函数功能是从键盘输入字符串,遇到回车符号结束输入,所以通过while((c=getchar())!='n')来决定键盘输入的每一个字符是否放在数组str中。最后通过str[i]='';语句来添加字符串的结束标志''。10.参考代码如下: #include void main(){

char str[80],temp;

int i,j;

gets(str);

for(i=0;str[i];i++);

//测试字符串长度

i--;

//i为最后一个字符所在下标

for(j=0;j

//对换对称位置的字符

temp=str[i],str[i]=str[j],str[j]=temp;

puts(str);

//输出处理好的字符串 } 程序分析:略

11.参考代码如下: #include void main(){ char month[12][20]= {“****”,“January”,“February”,“March”,“April”,“May”,“June”,“July”, “August”,“September”,“October”,“November”,“December”};

int a,b,c,d,e,number;

printf(“请输入3位正整数,0或负数结束:”);

scanf(“%d”,&number);

while(number>0)

{

a=number/100;

b=number/10%10;

c=number%10;

d=a+b+c;

e=d%12;

if(e==0)printf(“%d=%d+%d+%d=%d,%d%%%d=%d,%sn”,number,a,b,c,d,d,12,e,month[e]);

else printf(“%d=%d+%d+%d=%d,%d%%%d=%d,%sn”,number,a,b,c,d,d,12,e,month[e]);

scanf(“%d”,&number);

} } 程序分析:按照题意先给month数组赋初值,再通过公式把一个3位整数的每位数值提取出来,计算这三个数的和d,然后d除以12取余数,最后输出余数作为下标的对应month数组的数组元素即可。12.参考代码如下: #include void main(){

char str[80];

int i;

gets(str);

for(i=0;str[i]!='';i++)

;

printf(“字符串的长度为%dn”,i);程序分析:通过for(i=0;str[i]!='';i++);中变量i值的递增来遍历数组,最终i的值就是字符串的长度。

第五章

一.选择题

1-5 DDBCB

6-10 BACAA

11-15DBBCD 二.填空题 1.How does she 2.*(p+i*4+j)

printf(“n”)3.*(++p)4.num+1 q

*q>max

*q

n++

b[n]= ''

三、编程题

1.参考代码如下: #include #include #include void main(){

int i,a[20],b[20],*pa,*pb,temp;

srand(time(NULL));

for(i=0;i<20;i++)

{

a[i] = rand()% 101;

b[i] = rand()% 101;

}

printf(“数组a:”);

for(i=0;i<20;i++)

printf(“%d ”,a[i]);

printf(“n”);

printf(“数组b:”);

for(i=0;i<20;i++)

printf(“%d ”,b[i]);

printf(“n”);

pa=a;

pb=b;

for(i=0;i<20;i++)//对换数组a和数组b相同位置的元素

{

temp=*pa;

*pa=*pb;

*pb=temp;

pa++;

pb++;

}

printf(“对换后n”);

printf(“数组a:”);

for(i=0;i<20;i++)

printf(“%d ”,a[i]);

printf(“n”);

printf(“数组b:”);

for(i=0;i<20;i++)

printf(“%d ”,b[i]);} 2.参考代码如下: #include main(){

char str1[80],str2[80],*p1,*p2;

int j;

printf(“input two kinds of string:n”);

gets(str1);

gets(str2);

for(p1=str1,p2=str2;*p1&&*p2;p1++,p2++)/*比较每一对字符,直到出现'',退出循环 */

{

if(*p1!=*p2)break;

/* 若某一对字符不同,则已分出大小,退出循环*/

}

j= *p1-*p2;

/*j为结束比较时那对字符的ASCII码差值 */

if(j>0)

printf(“%dn”,1);

else if(j<0)

printf(“%dn”,-1);

else

printf(“%dn”,0);} 3.参考代码如下: #include int main(){

int a[4][4],temp;

int(*p)[4];

int i,j;

p=a;

//为行指针p赋初值

printf(“Enter array elements:n”);

for(i=0;i<4;i++)

//输入数组元素的值

for(j=0;j<4;j++)

scanf(“%d”,*(p+i)+j);

for(i=0;i<4;i++)

for(j=0;j

{

temp=*(*(p+i)+j);

*(*(p+i)+j)= *(*(p+j)+i);

*(*(p+j)+i)=temp;

}

//转置矩阵

for(i=0;i<4;i++)

//输出数组元素的值

{

for(j=0;j<4;j++)

printf(“%4d”,p[i][j]);

printf(“n”);

}

return 0;} 4.参考代码如下: #include int main(){

char str[80],*sp;

int count[26]= {0},i,a;

gets(str);

for(sp=str;*sp;sp++)//用指针访问字符串

{

a=*sp-97;

//将a字符的个数统计在数组count下标为0的单元,依次类推

count[a]++;

}

for(i=0;i<26;i++)

if(count[i]!=0)

printf(“%c=%d ”,i+97,count[i]);

return 0;} 5.参考代码如下: #include int main(){

char str[80],*spf,*spr;

int flag=1;

gets(str);

for(spr=str;*spr;spr++)

//让指针spr指到字符串的末尾

;

spr--;

//用指针spr指到字符串最后一个字符

for(spf=str;spf

if(*spf!=*spr)

flag=0;

if(flag)

printf(“YESn”);

else

printf(“NOn”);

return 0;} 6.参考代码如下: #include #include int main(){

char name[5][15];

char *p[5];//定义指针数组

char *temp;

int i,j,k;

printf(“Enter 5 strings:n”);

for(i=0;i<5;i++)

{

gets(name[i]);//读入5个字符串

p[i]=name[i];//指针数组元素指向字符串

}

for(i=0;i<4;i++)//用选择排序法排序

{

k=i;

for(j=i+1;j<5;j++)

if(strcmp(p[j],p[k])<0)k=j;

if(k!=i)

{

temp = p[i];

p[i]=p[k];

p[k]=temp;//改变指针的指向

}

}

printf(“nThe sorted result:n”);

printf(“------------------------n”);

for(i=0;i<5;i++)

puts(p[i]);//按指针指向顺序输出

return 0;}

第六章

一.选择题

1-5 CBCDA

6-10 AADBB

11-15BBDBD

16-20 AABAA 二.填空题 1.四

auto, register, static, extern 2.5 6 3.8,17 4.1 2 6 24 120 5.return 1 return n+sum(n-1)

三、编程题

1.参考代码如下: #include #include int prime(int m){

int i,k;

if(m==1)return 0;

else

{

k=sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)

break;

if(i<=k)return 0;

else return 1;

} } int main(){

int i;

for(i=101;i<200;i+=2)

if(prime(i))

printf(“%d ”,i);} 2.参考代码如下: #include #include float fun(float x){

float y;

if(x>-5&&x<0)

y=x;

else if(x==0)

y=x-1;

else if(x>0&&x<10)

y=x+1;

return y;} void main(){

float x;

printf(“请输入x的值:”);

scanf(“%f”,&x);

printf(“%fn”,fun(x));} 3.参考代码如下: void tran(int x){ int i,s[20]={0};for(i=0;x;i++){

s[i]=x%8;

x/=8;} i--;for(;i>=0;i--)

printf(“%d”,s[i]);printf(“n”);} void main(){

int dec;

printf(“请输入一个十进制数:”);

scanf(“%d”,&dec);

tran(dec);} 4.参考代码如下: #include void swap(int a[],int n){

int *pf,*pr,temp;

for(pf=a,pr=a+n-1;pf

{

temp=*pf;

*pf=*pr;

*pr=temp;

} } void main(){

int array[20],n,i;

printf(“请输入要处理的数据的个数:”);

scanf(“%d”,&n);

printf(“请输入%d个数:”,n);

for(i=0;i

scanf(“%d”,&array[i]);

swap(array,n);

printf(“对换后的数据为:”);

for(i=0;i

printf(“%d ”,array[i]);} 5.参考代码如下: #include void swap2w(int a[][5]){

int i,j,temp;

for(i=0;i<2;i++)

for(j=0;j<5;j++)

{

temp=a[i][j];

a[i][j]=a[5-i-1][j];

a[5-i-1][j]=temp;

} } void main(){

int a[5][5],n,i,j;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

scanf(“%d”,&a[i][j]);

swap2w(a);

printf(“对换后的数据为:n”);

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

printf(“%d ”,a[i][j]);

printf(“n”);

} } 6.参考代码如下: #include int huiwen(char str[]){

char *spf,*spr;

int flag=1;

for(spr=str;*spr;spr++)

//让指针spr指到字符串的末尾

;

spr--;

//用指针spr指到字符串最后一个字符

for(spf=str;spf

if(*spf!=*spr)

flag=0;

return flag;}

int main(){

char str[80];

gets(str);

if(huiwen(str))

printf(“YESn”);

else

printf(“NOn”);

return 0;} 7.参考代码如下: #include int delch(char str[],char ch){

int i,j;

for(i=0;str[i];i++)

if(ch==str[i])

for(j=i+1;str[j];j++)

//删除字符

str[j-1]=str[j];

str[j-1]=str[j];

//移动字符串末尾的'' }

int main(){

char str[80],c;

gets(str);

scanf(“%c”,&c);

delch(str,c);

puts(str);

return 0;} 8.参考代码如下: #include int he(int n){

if(n==1)

return 1;

else

return n+he(n-2);} int main(){

int i,s=0;

for(i=1;i<=19;i+=2)

s=s+he(i);

printf(“%dn”,s);

return 0;} 9.参考代码如下: #include int feb(int n){int f;

if(n==1||n==0)

return 1;

else

{

f=feb(n-1)+feb(n-2);

return f;

} } int main(){

int n;

scanf(“%d”,&n);

printf(“%d”,feb(n));

return 0;}

第七章

一.选择题

1-5BDDCC

6-10 BBDCB

11-15BBDCB

16-18 DBB 二.填空题 1.30

2.ARRAY a,b,c;3.2 3 4.a c 5.p->name &p->post_code

struct communication *

p->post_code

三、编程题

1.参考代码如下: #include #define N 4 /*结构体类型定义*/ struct student {

char no[10];

char name[10];

float score[3];

float total;};//主函数 int main(){

struct student stu[N];//定义结构体数组,存储4个学生信息

struct student temp;

//定义结构体变量,用于交换数据的临时存储空间

int i,j,k;/*从键盘输入学生信息*/

puts(“Enter students' info:”);

for(i=0;i

{

printf(“student #%d:n”,i+1);

gets(stu[i].no);

//输入学号

gets(stu[i].name);

//输入姓名

scanf(“%f%f%f”,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);

//输入3门课的成绩

getchar();

//接收输入缓冲区的字符

stu[i].total=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];//计算总成绩

}

/*用选择排序法,对学生成绩进行排序*/

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(stu[j].total>stu[k].total)k=j;

else if(stu[j].total==stu[k].total)//若总成绩相等,按英语成绩排序

{

if(stu[j].score[2]>stu[k].score[2])

k=j;

}

}

/*交换学生信息*/

if(k!=i)

{

temp=stu[i];

//结构体变量赋值

stu[i]=stu[k];

stu[k]=temp;

}

} //输出排好序的学生信息

printf(“nThe sorted list:n”);printf(“%-12s%-22s%-10s%-10s%-10s%-10sn”,“no”,“name”,“course1”,“course2”,“course3”,“Total”);

for(i=0;i

{

printf(“%-12s%-22s”,stu[i].no,stu[i].name);

printf(“%-10.1f %-10.1f%-10.1f”,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

printf(“%-10.1fn”,stu[i].total);

}

return 0;} 2.参考代码如下: #include #define N 45 /*结构体类型定义*/ struct student {

char no[10];

char name[20];

int age;

float score;};//主函数 int main(){

struct student stu[N];//定义结构体数组,存储45个学生信息

int maxi=0;

//存储成绩最高的学生信息的下标

int i;

/*从键盘输入学生信息*/

puts(“Enter students' info:”);

for(i=0;i

{

printf(“student #%d:n”,i+1);

gets(stu[i].no);

//输入学号

gets(stu[i].name);

//输入姓名

scanf(“%d%f”,&stu[i].age,&stu[i].score);

//输入年龄和一门课的成绩

getchar();

//接收输入缓冲区的字符

if(stu[maxi].score

maxi=i;

} //输出成绩最高的学生信息

printf(“nThe highest score is:n”);

printf(“%-12s%-22s%-10s%-10sn”,“no”,“name”,“age”,“course”);

printf(“%-12s%-22s”,stu[maxi].no,stu[maxi].name);

printf(“%-10d %-10.1f%”,stu[maxi].age,stu[maxi].score);

return 0;} 3.参考代码如下: #include /*共用体类型定义*/ union cch {

unsigned int a;

char b[4];};//主函数 int main(){

union cch x;//定义共用体类型变量

scanf(“%u”,&x.a);

printf(“%cn”,x.b[0]);//低字节

printf(“%cn”,x.b[1]);

printf(“%cn”,x.b[2]);

printf(“%cn”,x.b[3]);

return 0;} //测试数据:1431989597 4.参考代码如下: #include #define N 3 struct person {

char name[15];//姓名

char job[30];//职业

char addr[30];

union

{

float score;//班级编号

char title[10];//职称

} cate;};struct person per[N];//定义结构体数组,存储人员信息 /*人员数据录入函数input()*/ void input(){

int i;

for(i=0;i

{

printf(“Enter name: ”);

gets(per[i].name);

// getchar();

printf(“Enter job,if teacher,first character should be 't',if student,should be 's': ”);

gets(per[i].job);

// getchar();

if(per[i].job[0]=='s')

{

printf(“Enter student's score: ”);

scanf(“%f%*c”,&per[i].cate.score);

}

else if(per[i].job[0]=='t')

{

printf(“Enter teacher's title: ”);

gets(per[i].cate.title);

}

printf(“Enter address: ”);

gets(per[i].addr);

} } /*人员数据打印函数print()*/ void print(){

int i;

printf(“name

job

addr

score/titlen”);

printf(“------------------n”);

for(i=0;i

{

printf(“%-10s”,per[i].name);

printf(“%-15s”,per[i].job);

printf(“%-15s”,per[i].addr);

if(per[i].job[0]=='s')

printf(“%fn”,per[i].cate.score);

else if(per[i].job[0]=='t')

printf(“%sn”,per[i].cate.title);

} } void sort(){

int i,j,k;

struct person temp;

for(i=0;i

{

k=i;

for(j=i+1;j

if(strcmp(per[k].name,per[j].name)>0)

k=j;

if(k!=i)

{

temp=per[i];

per[i]=per[k];

per[k]=temp;

}

} } //主函数 int main(){

input();

sort();

print();}

第八章

一.单选题

1-5 BABAD

6-10 DDDCD

D 二.填空题 1.二进制 文本

2.pf=fopen(“D:zk04data xfile.dat”,“w”)3.二进制 文本

文件结束符 非0值

三、编程题

1.参考代码如下: #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

exit(0);

}

else return fp;} main(){

FILE *fp;

char c;

int digcou=0,capcou=0,smacou=0,othercou=0;

/* 定义整型变量为计数器并初始化为0 */

fp = fopenfun(“file.txt”,“r”);/* 打开文件 */

while((c = fgetc(fp))!=EOF)/* 从文件中读字符 */

{

if(c>='0' && c<='9')

digcou++;

/* 统计数字字符 */

else if(c>='A' && c<='Z')

capcou++;

/* 统计大写字母 */

else if(c>='a' && c<='z')

smacou++;

/* 统计小写字母 */

else

othercou++;

/* 统计其它字符 */

}

printf(“数字字符有%d个n”,digcou);

/* 输出字符个数 */

printf(“大写字母有%d个n”,capcou);

printf(“小写字母有%d个n”,smacou);

printf(“其它字符有%d个n”,othercou);

fclose(fp);/* 关闭文件 */ } 2.参考代码如下: #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

//打开文件出错显示提示信息

exit(0);

//调用exit函数终止程序运行

}

else return fp;} #define SIZE 10 struct student /* 定义结构体*/ {

long num;

char name[10];

int age;

char address[10];} stu[SIZE], out;/* 存盘函数:将学生的信息以数据块形式写入文件 */ void fsave(){

FILE *fp;

int i;

fp=fopenfun(“student.dat”,“wb”);

for(i=0;i

if(fwrite(&stu[i], sizeof(struct student), 1, fp)!= 1)

printf(“File write error.n”);

/* 写过程中的出错处理 */

fclose(fp);

/* 关闭文件 */ } //主函数 main(){

FILE *fp;

int i;

for(i=0;i

/* 从键盘读入学生的信息*/

{

printf(“Input student %d:”, i+1);

scanf(“%ld%s%d%s”,&stu[i].num, stu[i].name, &stu[i].age, stu[i].address);

}

fsave();

/* 调用函数保存学生信息 */

fp = fopenfun(“student.dat”, “rb”);

printf(“ No.Name

Age

Addressn”);

while(fread(&out, sizeof(out), 1, fp))

/*读入数据块*/

printf(“%8ld %-10s %4d %-10sn”, out.num, out.name, out.age, out.address);

fclose(fp);/* 关闭文件 */ } 3.参考代码如下: #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

//打开文件出错显示提示信息

exit(0);

//调用exit函数终止程序运行

}

else return fp;} #define SIZE 5 struct student /* 定义结构体*/ {

long num;

char name[10];

float score[5];

float aver;} stu[SIZE], out;/* 存盘函数:将学生的信息以数据块形式写入文件 */ void fsave(){

FILE *fp;

int i;

fp=fopenfun(“student.dat”,“wb”);

for(i=0;i

if(fwrite(&stu[i], sizeof(struct student), 1, fp)!= 1)

printf(“File write error.n”);

/* 写过程中的出错处理 */

if(fwrite(&out, sizeof(struct student), 1, fp)!= 1)/*写入5门课的平均成绩 */

printf(“File write error.n”);

fclose(fp);

/* 关闭文件 */ } //主函数 main(){

FILE *fp;

float average[5]={0},t;

int i,j;

for(i=0;i

/* 从键盘读入学生的信息*/

{

printf(“Input student %d:”, i+1);

scanf(“%ld%s”,&stu[i].num, stu[i].name);

for(j=0,t=0;j<5;j++)

{scanf(“%f%*c”,&stu[i].score[j]);

t=t+stu[i].score[j];

average[j]+=stu[i].score[j];

}

stu[i].aver=t/5;

}

out.num=0;strcpy(out.name,“5course'ave”);

for(j=0;j<5;j++)

out.score[j]=average[j]/SIZE;

fsave();

/* 调用函数保存学生信息 */

fp = fopenfun(“student.dat”, “rb”);

printf(“ No.Name

course1 course2 course3 course4 course5n”);

while(fread(&out, sizeof(out), 1, fp))

/*读入数据块*/

{printf(“%8ld %-12s”, out.num, out.name);

for(j=0;j<5;j++)

printf(“%8.2f”, out.score[j]);

printf(“n”);

}

fclose(fp);/* 关闭文件 */ } 4.参考代码如下 #include FILE *fopenfun(char *file,char *model){

FILE *fp;

if((fp = fopen(file, model))== NULL)

{

printf(“Cannot open file of %s.n”,file);

//打开文件出错显示提示信息

exit(0);

//调用exit函数终止程序运行

}

else return fp;} #define SIZE 5 struct warehouse /* 定义结构体*/ {

char KNO[10];

int KNOM };//主函数 main(){

FILE *fpr,*fpw;

struct warehouse t;

fpr=fopenfun(“CK.txt”,“r”);

fpw=fopenfun(“XK.txt”,“w”);

while(!feof(fpr))

{

fscanf(fpr,“%s%d”,t.KNO,&t.KNOM);

if(t.KNOM>100)

fprintf(fpw,“%s %dn”,t.KNO,t.KNOM);

}

fclose(fpr);/* 关闭文件 */

fclose(fpw);/* 关闭文件 */ }

第九章

1.(1)30(2)3(3)9(4)29 2.(1)1(2)1(3)1(4)7(5)15(6)6 3.参考代码如下 #include void main(){

char a,b;

a='C';

b=a&0125;

//0125的二进制为01010101

printf(“%dn”,b);} 4.参考代码如下 #include void main(){int i,bit;

/* 定义循环变量i和位1/0标志变量bit */ unsigned int n,mask;

/* 定义欲转换的整数n和屏蔽字变量mask */ mask=0x80000000;

/* 初始屏蔽字,从左边最高位开始检查 */ printf(“Enter a integer of Hexadecimal :”);scanf(“%x”,&n);

/* 输入要转换的整数 */ printf(“binary of %x is:”,n);for(i=0;i<32;i++)

/* 循环检查32位,并输出结果 */ { if(i%8==0&&i!=0)printf(“,”);/*习惯上二进制每8位用“,”分隔以便查看*/

bit=(n&mask)?1:0;

/* n&mask非0,该位为1;否则该位为:0 */

printf(“%1d”,bit);

/* 输出1或0 */

mask=mask>>1;

/* 右移1位得到下一个屏蔽字 */

}

printf(“n”);} 5.参考代码如下 #include void main(){

unsigned int value,res;

int n1,n2;

printf(“请输入一个整数:n”);

scanf(“%u”,&value);

printf(“输入n1、n2:n”);

scanf(“%d”,&n1);

scanf(“%d”,&n2);

if(n1>=n2||n2>32)

printf(“输入有误!n”);

res =((value <<(n1-1))>>(31-n2+n1))<<(32-n2);

//先向左移n1-1位,再将结果向右移n1-1+32-n2,再将结果左移32-n2位。

printf(“%un”,res);}

第十章

编程题

1.参考代码如下: #include #define rem(a,b)(a)%(b)void main(){

int x,y,z;

scanf(“%d%d”,&x,&y);

z=rem(x,y);

printf(“%dn”,z);} 2.参考代码如下: #include #define cube(x)(x)*(x)*(x)#define judge(x,y)(x)*(y)<50?1:0 void main(){

int x,y,z;

scanf(“%d%d”,&x,&y);

z=cube(x);

printf(“%d,%dn”,z,judge(x,y));} 3.参考代码如下: #include #define calc(year)(year)%4==0&&(year)%100!=0||(year)%400==0 #define judge(year)calc(year)?1:0 void main(){

int year;

scanf(“%d”,&year);

if(judge(year))

printf(“%d is leap year!n”,year);

else

printf(“%d is not a leap year!n”,year);} 4.参考代码如下: #include #define judge(a,b,c)a+b>c&&b+c>a&&a+c>b #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))void main(){

float a,b,c;

scanf(“%f%f%f”,&a,&b,&c);

if(judge(a,b,c))

printf(“The triangle area is %f!n”,area(a,b,c));

else

printf(“It's not a triangle!n”);}

第十一章

一.单选题

1-5 CBBDD

D 二.填空题

1.struct link *next;2.①struct student * ②tail->next ③head 3.Answer:3 4.①break ②(struct data *)malloc(struct data)③while(1)④p!=NULL ⑤p=p->link 5.①x ②p ③s

三、编程题

1.参考代码如下:

#include

#include

#include

#define N 3

typedef struct

{

char no[11];

char name[15];

float score[N];

float sum;} studdatatype;typedef struct z1

{

studdatatype studdata;

struct z1 *next;} STUDENT;/*以下是函数原型*/ STUDENT *create();

void print(STUDENT *head);

main(){

STUDENT *head;

head=create();

print(head);

/*I/O函数*/

/*动态内存分配函数及其他函数说明*/

/*字符串函数*/

/*定义常数*/

/*学生数据类型*/

/*定义结点数据类型*/

/*创建链表*/

/* 显示所有记录*/

/*定义链表头指针*/

} /*创建链表*/ STUDENT *create(){

STUDENT *head,*p,*listp;

char no[11];

head=(STUDENT *)malloc(sizeof(STUDENT));//建立头结点

head->next=NULL;

listp=head;//当前指针指到头结点

printf(“输入一个学生信息(学号(* 结束)、姓名,三门课成绩:”);

scanf(“%s”,&no);

while(no[0]!='*')

{

p=(STUDENT *)malloc(sizeof(STUDENT));//建立新结点

strcpy(p->studdata.no,no);

//将输入的数据存储到新结点的数据域

scanf(“%s”,p->studdata.name);scanf(“%f%f%f”,&p->studdata.score[0],&p->studdata.score[1],&p->studdata.score[2]);

p->studdata.sum=p->studdata.score[0]+p->studdata.score[1]+p->studdata.score[2];

p->next=NULL;

//将新结点的指针域置为空

listp->next=p;

//将新结点连接到当前指针的后面

listp=p;

//将新结点作为当前结点

printf(“输入一个学生信息(学号(* 结束)、姓名,三门课成绩:”);

scanf(“%s”,&no);

//输入下一个学生的成绩

}

return head;} /*输出链表中结点信息*/ void print(STUDENT *head){

int i=0;

/* 统计记录条数*/

STUDENT *p;

/*移动指针*/

system(“cls”);

/*清屏*/

p=head->next;

/*初值为第一个结点的指针*/

printf(“nnn*******************************STUDENT********************n”);

printf(“| rec| no

|

name

| sc1| sc2| sc3|

sum |n”);

printf(“|----|----------|---------------|----|----|----|--------|n”);

while(p!=NULL)

{

i++;

printf(“|%4d|%-10s|%-15s|%4.0f|%4.0f|%4.0f|%8.2f|n”,i,p->studdata.no, p->studdata.name,p->studdata.score[0],p->studdata.score[1],p->studdata.score[2],p->studdata.sum);

p=p->next;

}

printf(“********************************end***********************n”);}

2.参考代码如下:

/*查找成绩最高的学生信息*/ void searchmaxscore(STUDENT *h){

STUDENT *p,*pmax;

p=pmax=h->next;

while(p!=NULL)/*当指针不为空时,循环继续*/

{

if(pmax->studdata.sum

studdata.sum)

pmax=p;

p=p->next;

/*移动指针,指向下一结点*/

}

printf(“nnnThe highest total score of the students' information :n”);

printf(“*******************************STUDENT********************n”);

printf(“| no

|

name

| sc1| sc2| sc3|

sum |n”);

printf(“|----------|---------------|----|----|----|--------|n”);

printf(“|%-10s|%-15s|%4.0f|%4.0f|%4.0f|%8.2f|n”, pmax->studdata.no, pmax->studdata.name,pmax->studdata.score[0],pmax->studdata.score[1],pmax->studdata.score[2],pmax->studdata.sum);

printf(“********************************end***********************n”);}

3.参考代码如下:

/*用插入法按由大到小排序函数*/ STUDENT *sort(STUDENT *h){

STUDENT *p,*q,*t,*h1;

/*定义临时指针*/

h1=h->next->next;

/*从原表的第二个学生结点开始处理*/

h->next->next=NULL;

/*将原表的第一个学生结点作为有序表的第一个结点*/

while(h1!=NULL)

/*当还有元素没有插入到有序表时,进行排序*/

{

t=h1;

/*取未排序的第一个结点*/

h1=h1->next;

/*h1指针后移*/

p=h->next;

/*设定移动指针p,从第一个结点开始*/

q=h->next;

/*设定移动指针q做为p的前驱,指向第一个结点*/

while(p!=NULL && t->studdata.sum < p->studdata.sum)/*作总分比较*/

{

q=p;

/*待排序点值小,则有序表指针后移*/

p=p->next;

}

if(p==q)

/*p==q,说明待排序点值大,应排在首位*/

{

t->next=p;

/*待排序点的后继为p*/

h->next=t;

/*新头结点为待排序点*/

}

else

/*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/

{

t->next=p;

/*t的后继是p*/

q->next=t;

/*q的后继是t*/

}

}

printf(“sort sucess!!n”);

return h;

}

/*排序成功*/ /*返回头指针*/

下载C语言程序设计题word格式文档
下载C语言程序设计题.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    经典C语言程序设计例题

    经典C语言程序设计例题 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组......

    第一章 C语言程序设计

    第一章 C语言程序设计 考试形式:试卷(全国统一 4月第二个星期六9月倒数第二个星期六) 笔试: 满分100分60分及格 时间:90分钟内容: 70分 C语言知识30分 公共基础 选择题:60分 前......

    C语言程序设计心得体会

    C语言程序设计心得体会在这为期半个月的时间内,通过我们小组各成员之间的相互讨论和合作,我们完成了学生信息管理系统的程序设计,更值得高兴的是我们的程序得到了大家的喜爱,在......

    语言程序设计练习题 2

    汇编语言程序设计练习题 一、单项选择题:在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一......

    C语言程序设计策划书

    信息工程学院学生会科技部 关于举办信息工程学院C语言程序设计大赛的策划书 一、活动背景: 随着计算机技术的快速发展,计算机程序语言的多样化,C语言已经使用的越来越广泛,C语言......

    《C语言程序设计》教学方法探讨

    《C语言程序设计》教学方法探讨 【摘要】针对目前《C语言程序设计》教学效果不理想的问题,结合教学实际,分析教学过程中存在的问题,针对计算机专业新生的教学方法进行探讨,提出......

    C语言程序设计教案

    C语言程序设计教案 C语言程序设计教案 C 语言程序设计教案 C 语言概述 【教学目的】 1)了解 C 的发展 教学目的】 2)熟悉 C 的特点 教学重点】 【教学重点】 C 语言的特点......

    语言程序设计课程设计指导书

    汇编语言程序设计课程设计指导书 一、 课程设计的目的 本课程设计是《汇编语言程序设计》课程的后继教学环节,其宗旨是使学生通过对一个较大型的、综合性的应用程序进行阅读......