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

时间:2019-05-12 18:33:20下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《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语言经典编程题

题目01:在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同的单词。

[cpp] view plain copy print?

1.2.3.4.5.6.7.8.9.int main(){

// 用数组定义一个字符串

char array[50] = “zha junju zhamengjun z mengjun”;

char *str = array;// 定义指针变量str,指向数组array

int len = 0;// 定义变量len,用于计数

int max = 0;// 定义变量max,存放最长单词的长度

char *p = 0;// 定义指针变量p,指向最长单词的首字符

10.11.// 判断指针当前指向的字符是不是''

12.while(*str!= '')13.{

14.if(*str!= ' ')// 判断字符是不是空格 15.{

16.len++;// 计数加1 17.18.// 判断最大长度跟len长度的大小

19.if(max < len){

20.max = len;// 如果max小于len,将len赋值给max

21.p = str1];

46.} 47.else

48.{

49.sumDaysOfMonth += pingYear[monthDay;// 定义整型变量days,存储一个月内相隔的天数

54.int sumDays = 0;// 定义整型变量sumDays,存储两个时间点相隔的总天数

55.56.// 得到两个时间点相隔的总天数

57.sumDays = sumDaysOfYear + sumDaysOfMonth + days;58.59.printf(“两个时间点相隔%d天n”, sumDays);60.61.// 根据相隔的天数,判断小明遇到的人

62.if((sumDays % 2 == 0)&&(sumDays % 3 == 0))63.{

64.printf(“小明既结识了帅哥又结识了美女!n”);65.}

66.else if(sumDays % 2 == 0)67.{

68.printf(“小明结识了帅哥!n”);69.}

70.else if(sumDays % 3 == 0)71.{

72.printf(“小明结识了美女!n”);73.} 74.else

75.{

76.printf(“小明没有结识帅哥和美女n”);77.} 78.}

心得体会:(1)利用for循环遍历,if条件来判断是平年还是闰年,求出相隔年数的累加的天数(2)同理,利用第一步的方法,求出相隔月数的累加的天数,只是要注意每月的天数,根据平年和闰年的不同分别保存在两个不同的数组中,以便利于累加

(3)将输入的日减1,计算出当月相隔的天数,最后求出两个日期相隔的总天数。(4)根据总天数取余2和3,判断出小明当天结识的是美女还是帅哥。

题目05:提示用户输入一个正整数n,利用while循环计算并输出:1-2+3-4+5-6+7…+n的和。

[cpp] view plain copy print?

1.2.3.4.5.6.7.8.9.int main(){

// 1.定义变量存储用户输入的整数

int n = 0;

// 2.判断n是否为正整数

while(n <= 0){

// 2.1 提示输入

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

10.11.// 2.2 让用户输入

12.scanf(“%d”, &n);13.} 14.15.// 3.计算阶乘

16.int sum = 0;// 存储计算结果

17.int current = 0;// 当前要累加的数值

18.while(current < n){ 19.current++;20.21.// 如果是偶数,就减

22.if(current % 2 == 0){ 23.sum-= current;24.} else { // 如果是奇数,就加

25.sum += current;26.} 27.} 28.29.// 4.输出结果 30.printf(“%dn”, sum);31.32.return 0;33.}

心得体会:

(1)确保从键盘上输入的是一个整数(用while来判断);(2)用while循环来遍历从1到n的值;

(3)通过奇偶性判断所要累加数值的正负性,奇数就累加,偶数就累减。

题目06:提示用户输入一个正整数n,计算并输出n的阶乘结果:1*2*3*…*n。

[cpp] view plain copy print?

1.2.3.4.5.6.7.8.9.int main(){

// 1.定义变量存储用户输入的整数

int n = 0;

// 2.判断n是否为正整数

while(n <= 0){

// 2.1 提示输入

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

10.11.// 2.2 让用户输入

12.scanf(“%d”, &n);13.} 14.15.// 3.计算阶乘

16.int result = 1;// 存储计算结果

17.int current = 1;// 当前的乘数

18.while(current <= n){

19.result *= current;// 累乘每次的乘数

20.current++;// 乘完一次就++

21.} 22.23.// 4.输出阶乘结果

24.printf(“%d!= %dn”, n, result);25.26.return 0;27.}

心得体会:

(1)可以利用for循环或者while循环进行遍历,利用累乘即可求出值。(2)还可以利用递归来做,更简单。

题目07:编写一个函数,判断某个字符串是否为回文。回文就是从左边开始读 和 从右边开始读 都是一样的,比如“abcba” [cpp] view plain copy print?

1.2.3.4.5.6.7.8.9.int main(){

printf(“%dn”, isHuiwen(“a”));

return 0;}

/*

返回1代表是回文

返回0代表不是回文

10.*/ 11.int isHuiwen(char *str)

12.{

13.// 1.定义一个指向变量left指向字符串的首字符

14.char *left = str;

15.// 2.定义一个指向变量right指向字符串的末字符

16.char *right = str + strlen(str)1)+ count(n);// 求出每一个阶乘的累加和

58.} 59.60.// 定义和求出一个累加和

61.int count(int n)

62.{

63.if(n == 1)64.return 1;

65.return count(n1;22.23.// 如果左边元素的下标 < 右边元素的下标

24.while(left < right)25.{

26.// 利用中间变量交换两个元素的值

27.int temp = array[left];28.array[left] = array[right];29.array[right] = temp;30.31.// 交换一次后,左边元素下标增加,右边元素下标减小

32.33.left++;34.right--;35.} 36.}

心得体会:

(1)首先要明白一点,为什么不能通过sizeof(array)/ sizeof(int)来求出数组元素的个数?因为当数组作为参数传递的时候,函数的参数array实际上当做变量来存储传来的数组首元素的地址。而每一个指针变量占用8个字节。

(2)分别拿出数组首元素和数组尾元素,然后利用中间变量交换两个元素的值。(3)利用while循环,遍历数组元素,并使left< right保证循环到中间即可,否则每个元素又进行一次交换,结果值没有改变。

(4)函数reverse不需要返回值,因为改变了形参数组也就改变了外面的实参数组,因为数组是按址传递的。

第三篇:C语言编程100题

经典C语言程序设计100例

【程序1】

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去

掉不满足条件的排列。

2.程序源代码: main(){ int i,j,k;printf(“n”);for(i=1;i<5;i++)

/*以下为三重循环*/

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

for(k=1;k<5;k++)

{

if(i!=k&&i!=j&&j!=k)

/*确保i、j、k三位互不相同*/

printf(“%d,%d,%dn”,i,j,k);

} }

【程序2】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高

于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提

成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于

40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于

100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

2.程序源代码: main(){ long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld”,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;

if(i<=100000)

bonus=i*0.1;

else if(i<=200000)

bonus=bonus1+(i-100000)*0.075;else if(i<=400000)

bonus=bonus2+(i-200000)*0.05;

else if(i<=600000)

bonus=bonus4+(i-400000)*0.03;

else if(i<=1000000)

bonus=bonus6+(i-600000)*0.015;

else

bonus=bonus10+(i-1000000)*0.01;printf(“bonus=%d”,bonus);}

---------------【程序3】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后

的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码: #include “math.h” main(){ long int i,x,y,z;for(i=1;i<100000;i++)

{ x=sqrt(i+100);

/*x为加上100后开方后的结果*/

y=sqrt(i+268);

/*y为再加上168后开方后的结果*/

if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/

printf(“n%ldn”,i);

} }---------------【程序4】

题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊

情况,闰年且输入月份大于3时需考虑多加一天。2.程序源代码: main(){ int day,month,year,sum,leap;printf(“nplease input year,month,dayn”);scanf(“%d,%d,%d”,&year,&month,&day);switch(month)/*先计算某月以前月份的总天数*/ {

case 1:sum=0;break;

case 2:sum=31;break;

case 3:sum=59;break;

case 4:sum=90;break;

case 5:sum=120;break;

case 6:sum=151;break;

case 7:sum=181;break;

case 8:sum=212;break;

case 9:sum=243;break;

case 10:sum=273;break;

case 11:sum=304;break;

case 12:sum=334;break;

default:printf(“data error”);break;} sum=sum+day;/*再加上某天的天数*/

if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/

leap=1;

else

leap=0;if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++;printf(“It is the %dth day.”,sum);} #include int main(){ int year,month,date,leap,days=0;scanf(“%d%d%d”,&year,&month,&date);leap=(year%4==0&&year%100!=0||year%400==0);switch(month){ case 12:days+=30;case 11:days+=31;case 10:days+=30;case 9:days+=31;case 8:days+=31;case 7:days+=30;case 6:days+=31;case 5:days+=30;case 4:days+=31;case 3:days+=28+leap;case 2:days+=31;case 1:days+=date;break;} printf(“%4d年%2d月%2d日是这一年的第%d天。n”,year,month,date,days);return 0;}

---------------【程序5】

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

2.程序源代码: main(){ int x,y,z,t;scanf(“%d%d%d”,&x,&y,&z);if(x>y){t=x;x=y;y=t;} /*交换x,y的值*/ if(x>z){t=z;z=x;x=t;}/*交换x,z的值*/ if(y>z){t=y;y=z;z=t;}/*交换z,y的值*/ printf(“small to big: %d %d %dn”,x,y,z);}---------------【程序6】

题目:用*号输出字母C的图案。

1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。2.程序源代码: #include “stdio.h” main(){ printf(“Hello C-world!n”);printf(“ ****n”);printf(“ *n”);printf(“ * n”);printf(“ ****n”);}---------------【程序7】

题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!1.程序分析:字符共有256个。不同字符,图形不一样。

2.程序源代码: #include “stdio.h” main(){ char a=176,b=219;printf(“%c%c%c%c%cn”,b,a,a,a,b);printf(“%c%c%c%c%cn”,a,b,a,b,a);printf(“%c%c%c%c%cn”,a,a,b,a,a);printf(“%c%c%c%c%cn”,a,b,a,b,a);printf(“%c%c%c%c%cn”,b,a,a,a,b);}---------------【程序8】

题目:输出9*9口诀。

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。2.程序源代码: #include “stdio.h” main(){

int i,j,result;

printf(“n”);

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

{ for(j=1;j<10;j++)

{

result=i*j;

printf(“%d*%d=%-3d”,i,j,result);/*-3d表示左对齐,占3位*/

}

printf(“n”);/*每一行后换行*/

} }---------------【程序9】

题目:要求输出国际象棋棋盘。

1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。2.程序源代码: #include “stdio.h” main(){ int i,j;for(i=0;i<8;i++)

{

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

if((i+j)%2==0)

printf(“%c%c”,219,219);

else

printf(“ ”);

printf(“n”);

} }---------------【程序10】

题目:打印楼梯,同时在楼梯上方打印两个笑脸。

1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。2.程序源代码: #include “stdio.h” main(){ int i,j;printf(“11n”);/*输出两个笑脸*/ for(i=1;i<11;i++)

{

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

printf(“%c%c”,219,219);

printf(“n”);

} }

【程序11】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....2.程序源代码: main(){ long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++)

{ printf(“%12ld %12ld”,f1,f2);

if(i%2==0)printf(“n”);/*控制输出,每行四个*/

f1=f1+f2;/*前两个月加起来赋值给第三个月*/

f2=f1+f2;/*前两个月加起来赋值给第三个月*/

} }---------------【程序12】

题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

2.程序源代码: #include “math.h” main(){

int m,i,k,h=0,leap=1;

printf(“n”);

for(m=101;m<=200;m++)

{ k=sqrt(m+1);

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

if(m%i==0)

{leap=0;break;}

if(leap){printf(“%-4d”,m);h++;

if(h%10==0)

printf(“n”);

}

leap=1;

}

printf(“nThe total is %d”,h);}---------------【程序13】

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数

本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2.程序源代码: main(){ int i,j,k,n;printf(“'water flower'number is:”);

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

{

i=n/100;/*分解出百位*/

j=n/10%10;/*分解出十位*/

k=n%10;/*分解出个位*/

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

{

printf(“%-5d”,n);

}

} printf(“n”);}---------------【程序14】

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。2.程序源代码:

/* zheng int is divided yinshu*/ main(){ int n,i;printf(“nplease input a number:n”);scanf(“%d”,&n);printf(“%d=”,n);for(i=2;i<=n;i++)

{

while(n!=i)

{

if(n%i==0){ printf(“%d*”,i);

n=n/i;}

else

break;

} } printf(“%d”,n);}---------------【程序15】

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

1.程序分析:(a>b)?a:b这是条件运算符的基本例子。2.程序源代码: main(){

int score;

char grade;

printf(“please input a scoren”);

scanf(“%d”,&score);

grade=score>=90?'A':(score>=60?'B':'C');

printf(“%d belongs to %c”,score,grade);}---------------【程序16】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1.程序分析:利用辗除法。2.程序源代码: main(){

int a,b,num1,num2,temp;

printf(“please input two numbers:n”);

scanf(“%d,%d”,&num1,&num2);

if(num1

{ temp=num1;

num1=num2;

num2=temp;

} a=num1;b=num2;while(b!=0)/*利用辗除法,直到b为0为止*/

{

temp=a%b;

a=b;

b=temp;

} printf(“gongyueshu:%dn”,a);printf(“gongbeishu:%dn”,num1*num2/a);}---------------【程序17】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。1.程序分析:利用while语句,条件为输入的字符不为'n'.2.程序源代码: #include “stdio.h” main(){char c;

int letters=0,space=0,digit=0,others=0;

printf(“please input some charactersn”);

while((c=getchar())!='n')

{

if(c>='a'&&c<='z'||c>='A'&&c<='Z')

letters++;

else if(c==' ')

space++;

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

digit++;

else

others++;} printf(“all in all:char=%d space=%d digit=%d others=%dn”,letters, space,digit,others);}---------------【程序18】

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时

共有5个数相加),几个数相加有键盘控制。1.程序分析:关键是计算出每一项的值。2.程序源代码: main(){

int a,n,count=1;

long int sn=0,tn=0;

printf(“please input a and nn”);

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

printf(“a=%d,n=%dn”,a,n);while(count<=n){

tn=tn+a;

sn=sn+tn;

a=a*10;

++count;

} printf(“a+aa+...=%ldn”,sn);}---------------【程序19】

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程

找出1000以内的所有完数。

1.程序分析:请参照程序<--上页程序14.2.程序源代码: main(){ static int k[10];int i,j,n,s;for(j=2;j<1000;j++)

{

n=-1;

s=j;

for(i=1;i

if((j%i)==0)

{ n++;

s=s-i;

k[n]=i;

}

}

if(s==0)

{

printf(“%d is a wanshu”,j);

for(i=0;i

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

printf(“%dn”,k[n]);

} } }---------------【程序20】

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? 1.程序分析:见下面注释 2.程序源代码: main(){ float sn=100.0,hn=sn/2;int n;for(n=2;n<=10;n++)

{

sn=sn+2*hn;/*第n次落地时共经过的米数*/

hn=hn/2;/*第n次反跳高度*/

} printf(“the total of road is %fn”,sn);printf(“the tenth is %f metern”,hn);} 【程序21】

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思维的方法,从后往前推断。2.程序源代码: main(){ int day,x1,x2;day=9;x2=1;while(day>0)

{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/

x2=x1;

day--;

} printf(“the total is %dn”,x1);}---------------【程序22】

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定

比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出

三队赛手的名单。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

2.程序源代码: main(){ char i,j,k;/*i是a的对手,j是b的对手,k是c的对手*/ for(i='x';i<='z';i++)

for(j='x';j<='z';j++)

{

if(i!=j)

for(k='x';k<='z';k++)

{ if(i!=k&&j!=k)

{ if(i!='x'&&k!='x'&&k!='z')

printf(“order is a--%ctb--%ctc--%cn”,i,j,k);

}

}

} }---------------【程序23】

题目:打印出如下图案(菱形)* *** ****** ******** ****** *** * 1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重

for循环,第一层控制行,第二层控制列。

2.程序源代码: main(){ int i,j,k;for(i=0;i<=3;i++)

{

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

printf(“ ”);

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

printf(“*”);

printf(“n”);

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

{

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

printf(“ ”);

for(k=0;k<=4-2*i;k++)

printf(“*”);printf(“n”);} }---------------【程序24】

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。1.程序分析:请抓住分子与分母的变化规律。

2.程序源代码: main(){ int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++)

{

s=s+a/b;

t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/

} printf(“sum is %9.6fn”,s);}---------------【程序25】 题目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加变成了累乘。

2.程序源代码: main(){ float n,s=0,t=1;for(n=1;n<=20;n++)

{

t*=n;

s+=t;

} printf(“1+2!+3!...+20!=%en”,s);}---------------【程序26】

题目:利用递归方法求5!。1.程序分析:递归公式:fn=fn_1*4!2.程序源代码: #include “stdio.h” main(){ int i;int fact();for(i=0;i<5;i++)

printf(“40:%d!=%dn”,i,fact(i));} int fact(j)int j;{ int sum;if(j==0)

sum=1;else

sum=j*fact(j-1);return sum;}---------------【程序27】

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。1.程序分析: 2.程序源代码: #include “stdio.h” main(){ int i=5;void palin(int n);printf(“40:”);palin(i);printf(“n”);} void palin(n)int n;{ char next;if(n<=1)

{

next=getchar();

printf(“n:”);

putchar(next);

} else

{

next=getchar();

palin(n-1);

putchar(next);

} }---------------【程序28】

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第

3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后

问第一个人,他说是10岁。请问第五个人多大?

1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道

第四人的岁数,依次类推,推到第一人(10岁),再往回推。2.程序源代码: age(n)int n;{ int c;if(n==1)c=10;else c=age(n-1)+2;return(c);} main(){ printf(“%d”,age(5));}---------------【程序29】

题目:给一个不多于5位的正整数,要求:

一、求它是几位数,二、逆序打印出各位数字。1.程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)

2.程序源代码: main(){ long a,b,c,d,e,x;scanf(“%ld”,&x);a=x/10000;/*分解出万位*/ b=x%10000/1000;/*分解出千位*/ c=x%1000/100;/*分解出百位*/ d=x%100/10;/*分解出十位*/ e=x%10;/*分解出个位*/ if(a!=0)printf(“there are 5, %ld %ld %ld %ld %ldn”,e,d,c,b,a);else if(b!=0)printf(“there are 4, %ld %ld %ld %ldn”,e,d,c,b);

else if(c!=0)printf(“ there are 3,%ld %ld %ldn”,e,d,c);

else if(d!=0)printf(“there are 2, %ld %ldn”,e,d);

else if(e!=0)printf(“ there are 1,%ldn”,e);}---------------【程序30】

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

1.程序分析:同29例 2.程序源代码: main(){ long ge,shi,qian,wan,x;scanf(“%ld”,&x);wan=x/10000;qian=x%10000/1000;shi=x%100/10;ge=x%10;if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/

printf(“this number is a huiwenn”);else

printf(“this number is not a huiwenn”);} 经典C语言程序设计100例31-40 【程序31】

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续

判断第二个字母。

1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。2.程序源代码: #include void main(){ char letter;printf(“please input the first letter of somedayn”);while((letter=getch())!='Y')/*当所按字母为Y时才结束*/ { switch(letter){case 'S':printf(“please input second lettern”);

if((letter=getch())=='a')

printf(“saturdayn”);

else if((letter=getch())=='u')

printf(“sundayn”);

else printf(“data errorn”);

break;case 'F':printf(“fridayn”);break;case 'M':printf(“mondayn”);break;case 'T':printf(“please input second lettern”);

if((letter=getch())=='u')

printf(“tuesdayn”);else if((letter=getch())=='h')

printf(“thursdayn”);

else printf(“data errorn”);

break;case 'W':printf(“wednesdayn”);break;default: printf(“data errorn”);

}

} }---------------【程序32】

题目:Press any key to change color, do you want to try it.Please hurry up!1.程序分析:

2.程序源代码: #include void main(void){ int color;for(color = 0;color < 8;color++)

{

textbackground(color);/*设置文本的背景颜色*/

cprintf(“This is color %drn”, color);

cprintf(“Press any key to continuern”);

getch();/*输入字符看不见*/

} }---------------【程序33】

题目:学习gotoxy()与clrscr()函数

1.程序分析: 2.程序源代码: #include void main(void){ clrscr();/*清屏函数*/ textbackground(2);gotoxy(1, 5);/*定位函数*/ cprintf(“Output at row 5 column 1n”);textbackground(3);gotoxy(20, 10);cprintf(“Output at row 10 column 20n”);}---------------【程序34】

题目:练习函数调用 1.程序分析:

2.程序源代码: #include void hello_world(void){ printf(“Hello, world!n”);} void three_hellos(void){ int counter;for(counter = 1;counter <= 3;counter++)hello_world();/*调用此函数*/ } void main(void){ three_hellos();/*调用此函数*/ }---------------【程序35】

题目:文本颜色设置 1.程序分析: 2.程序源代码: #include void main(void){ int color;for(color = 1;color < 16;color++)

{

textcolor(color);/*设置文本颜色*/

cprintf(“This is color %drn”, color);

} textcolor(128 + 15);cprintf(“This is blinkingrn”);}---------------【程序36】

题目:求100之内的素数

1.程序分析: 2.程序源代码: #include #include “math.h” #define N 101 main(){ int i,j,line,a[N];for(i=2;i

for(j=i+1;j

{

if(a[i]!=0&&a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;} printf(“n”);for(i=2,line=0;i

if(a[i]!=0)

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

line++;}

if(line==10)

{printf(“n”);line=0;} } }---------------【程序37】

题目:对10个数进行排序 1.程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

2.程序源代码: #define N 10 main(){int i,j,min,tem,a[N];/*input data*/ printf(“please input ten num:n”);for(i=0;ia[j])min=j;tem=a[i];a[i]=a[min];a[min]=tem;} /*output data*/ printf(“After sorted n”);for(i=0;i

题目:求一个3*3矩阵对角线元素之和

1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。2.程序源代码: main(){ float a[3][3],sum=0;int i,j;printf(“please input rectangle element:n”);for(i=0;i<3;i++)

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

scanf(“%f”,&a[i][j]);for(i=0;i<3;i++)

sum=sum+a[i][i];printf(“duijiaoxian he is %6.2f”,sum);}---------------【程序39】

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。1.程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后

此元素之后的数,依次后移一个位置。

2.程序源代码: main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};int temp1,temp2,number,end,i,j;printf(“original array is:n”);for(i=0;i<10;i++)

printf(“%5d”,a[i]);printf(“n”);printf(“insert a new number:”);scanf(“%d”,&number);end=a[9];if(number>end)

a[10]=number;else

{for(i=0;i<10;i++)

{ if(a[i]>number)

{temp1=a[i];

a[i]=number;

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

{temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

} } for(i=0;i<11;i++)

printf(“%6d”,a[i]);}---------------【程序40】 题目:将一个数组逆序输出。

1.程序分析:用第一个与最后一个交换。2.程序源代码: #define N 5 main(){ int a[N]={9,6,5,4,1},i,temp;

printf(“n original array:n”);

for(i=0;i

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

for(i=0;i

{temp=a[i];

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

a[N-i-1]=temp;

} printf(“n sorted array:n”);for(i=0;i

printf(“%4d”,a[i]);} 【程序61】

题目:打印出杨辉三角形(要求打印出10行如下图)

1.程序分析: 1 2 1

3

4 1

510 5 1

2.程序源代码: main(){int i,j;int a[10][10];printf(“n”);for(i=0;i<10;i++)

{a[i][0]=1;

a[i][i]=1;} for(i=2;i<10;i++)

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<10;i++)

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

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

printf(“n”);

} } 【程序66】

题目:输入3个数a,b,c,按大小顺序输出。

1.程序分析:利用指针方法。2.程序源代码: /*pointer*/ main(){ int n1,n2,n3;int *pointer1,*pointer2,*pointer3;printf(“please input 3 number:n1,n2,n3:”);scanf(“%d,%d,%d”,&n1,&n2,&n3);pointer1=&n1;pointer2=&n2;pointer3=&n3;if(n1>n2)swap(pointer1,pointer2);if(n1>n3)swap(pointer1,pointer3);if(n2>n3)swap(pointer2,pointer3);printf(“the sorted numbers are:%d,%d,%dn”,n1,n2,n3);} swap(p1,p2)int *p1,*p2;{int p;p=*p1;*p1=*p2;*p2=p;}---------------【程序67】

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。1.程序分析:谭浩强的书中答案有问题。

2.程序源代码: main(){ int number[10];input(number);max_min(number);output(number);} input(number)int number[10];{int i;for(i=0;i<9;i++)

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

scanf(“%d”,&number[9]);} max_min(array)int array[10];{int *max,*min,k,l;int *p,*arr_end;arr_end=array+10;max=min=array;for(p=array+1;p

if(*p>*max)max=p;

else if(*p<*min)min=p;

k=*max;

l=*min;

*p=array[0];array[0]=l;l=*p;

*p=array[9];array[9]=k;k=*p;

return;} output(array)int array[10];{ int *p;for(p=array;p

printf(“%d,”,*p);printf(“%dn”,array[9]);}---------------【程序68】

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 1.程序分析: 2.程序源代码: main(){ int number[20],n,m,i;printf(“the total numbers is:”);scanf(“%d”,&n);printf(“back m:”);scanf(“%d”,&m);for(i=0;i

scanf(“%d,”,&number[i]);scanf(“%d”,&number[n-1]);move(number,n,m);for(i=0;i

printf(“%d,”,number[i]);printf(“%d”,number[n-1]);} move(array,n,m)int n,m,array[20];{ int *p,array_end;array_end=*(array+n-1);for(p=array+n-1;p>array;p--)

*p=*(p-1);

*array=array_end;

m--;

if(m>0)move(array,n,m);}---------------【程序69】

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出

圈子,问最后留下的是原来第几号的那位。1.程序分析: 2.程序源代码: #define nmax 50 main(){ int i,k,m,n,num[nmax],*p;printf(“please input the total of numbers:”);scanf(“%d”,&n);p=num;for(i=0;i

*(p+i)=i+1;

i=0;

k=0;

m=0;

while(m

{

if(*(p+i)!=0)k++;

if(k==3)

{ *(p+i)=0;

k=0;

m++;

} i++;if(i==n)i=0;} while(*p==0)p++;printf(“%d is leftn”,*p);} 【程序81】

题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。1.程序分析:

2.程序源代码: output(long b,long i){ printf(“n%ld/%ld=809*%ld+%ld”,b,i,i,b%i);} main(){long int a,b,i;a=809;for(i=10;i<100;i++){b=i*a+1;if(b>=1000&&b<=10000&&8*i<100&&9*i>=100)output(b,i);} }---------------【程序82】

题目:八进制转换为十进制

1.程序分析:

2.程序源代码: main(){ char *p,s[6];int n;p=s;gets(p);n=0;while(*(p)!=''){n=n*8+*p-'0';p++;} printf(“%d”,n);}---------------【程序83】

题目:求0—7所能组成的奇数个数。1.程序分析: 2.程序源代码: main(){ long sum=4,s=4;int j;for(j=2;j<=8;j++)/*j is place of number*/ { printf(“n%ld”,sum);if(j<=2)s*=7;else s*=8;sum+=s;} printf(“nsum=%ld”,sum);}---------------【程序84】

题目:一个偶数总能表示为两个素数之和。1.程序分析: 2.程序源代码: #include “stdio.h” #include “math.h” main(){ int a,b,c,d;scanf(“%d”,&a);for(b=3;b<=a/2;b+=2){ for(c=2;c<=sqrt(b);c++)if(b%c==0)break;if(c>sqrt(b))d=a-b;else break;for(c=2;c<=sqrt(d);c++)if(d%c==0)break;if(c>sqrt(d))printf(“%d=%d+%dn”,a,b,d);} }---------------【程序85】

题目:判断一个素数能被几个9整除 1.程序分析: 2.程序源代码: main(){ long int m9=9,sum=9;int zi,n1=1,c9=1;scanf(“%d”,&zi);while(n1!=0){ if(!(sum%zi))n1=0;else {m9=m9*10;sum=sum+m9;c9++;} } printf(“%ld,can be divided by %d ”9“",sum,c9);}---------------【程序86】

题目:两个字符串连接程序 1.程序分析: 2.程序源代码: #include ”stdio.h“ main(){char a[]=”acegikm“;char b[]=”bdfhjlnpq“;char c[80],*p;int i=0,j=0,k=0;while(a[i]!=''&&b[j]!=''){if(a[i]

题目:回答结果(结构体变量传递)1.程序分析:

2.程序源代码: #include ”stdio.h“ struct student { int x;char c;} a;main(){a.x=3;a.c='a';f(a);printf(”%d,%c“,a.x,a.c);} f(struct student b){ b.x=20;b.c='y';}---------------【程序88】

题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。1.程序分析: 2.程序源代码: main(){int i,a,n=1;while(n<=7){ do {

scanf(”%d“,&a);

}while(a<1||a>50);for(i=1;i<=a;i++)

printf(”*“);printf(”n“);n++;} getch();}---------------【程序89】

题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:

每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。1.程序分析: 2.程序源代码: main(){int a,i,aa[4],t;scanf(”%d“,&a);aa[0]=a%10;aa[1]=a%100/10;aa[2]=a%1000/100;aa[3]=a/1000;for(i=0;i<=3;i++)

{aa[i]+=5;

aa[i]%=10;

} for(i=0;i<=3/2;i++)

{t=aa[i];

aa[i]=aa[3-i];

aa[3-i]=t;

} for(i=3;i>=0;i--)printf(”%d“,aa[i]);}---------------【程序90】

题目:专升本一题,读结果。1.程序分析: 2.程序源代码: #include ”stdio.h“ #define M 5 main(){int a[M]={1,2,3,4,5};int i,j,t;i=0;j=M-1;while(i

{t=*(a+i);*(a+i)=*(a+j);*(a+j)=t;i++;j--;} for(i=0;i

printf(”%d“,*(a+i));} 题目:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出

平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件”stud“中。1.程序分析: 2.程序源代码: #include ”stdio.h“ struct student { char num[6];char name[8];int score[3];float avr;} stu[5];main(){int i,j,sum;FILE *fp;/*input*/ for(i=0;i<5;i++){ printf(”n please input No.%d score:n“,i);printf(”stuNo:“);scanf(”%s“,stu[i].num);printf(”name:“);scanf(”%s“,stu[i].name);sum=0;for(j=0;j<3;j++){ printf(”score %d.“,j+1);scanf(”%d“,&stu[i].score[j]);sum+=stu[i].score[j];} stu[i].avr=sum/3.0;} fp=fopen(”stud“,”w“);for(i=0;i<5;i++)if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)printf(”file write errorn");fclose(fp);}

第四篇: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语言程序设计(2011版)课后编程题答案

第三章顺序结构

3.30 编写程序,把560分钟换算成用小时和分钟表示,然后进行输出。※程序如下※

main(){

int hour,minute;hour=560/60;minute=560%60;

printf(“hour=%d,minute=%d”,hour,minute);}

3.31 编写程序,输入两个整数:1500和350,求出它们的商数和余数并进行输出。※程序如下※

#include main(){

int num1,num2,i,j;/* 定义变量 i-商,j-余数 */ printf(“input num1 and num2:n”);scanf(“%d%d”,&num1,&num2);i=n }

3.32 编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。

※程序如下※

main(){

double a,b,c,average=0;

printf(“input a,b,c(double):n”);scanf(“%lf%lf%lf”,&a,&b,&c);average=(a+b+c)/3;average=average*10;average=average+0.5;average=(int)average;average=average/10;

printf(“average=%lf”,average);} 3.33 编写程序,读入三个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中的值给a。※程序如下※

main(){

int a,b,c,t=0;

printf(“input a b c:n”);

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

printf(“a=%d b=%d c=%d”,a,b,c);} 第四章选择结构

4.21 当a>0时,请将以下语句改写成switch语句。if(a<30)m=1;else if(a<40)m=2;else if(a<50)m=3;else if(a<60)m=4;else m=5;

※程序如下※

main(){ int a;

printf(“Enter a:n”);scanf(“%d”,&a);switch(a/10){

case 0: case 1:

case 2: printf(“m=1”);break;case 3: printf(“m=2”);break;case 4: printf(“m=3”);break;case 5: printf(“m=4”);break;default: printf(“m=5”);} }

4.22 编写程序,输入一位学生的生日(年:y0、月:m0、日:d0);并输入当前的日

期(年:y1、月:m1、日:d1);输出该生的实足年龄。

※程序如下※ 这道题仅做参考!!系统不一样无法运行!

main(){

int y0,y1,m0,m1,d0,d1,age=0;printf(“Your Birthday(yyyy-mm-dd):n”);scanf(“%d-%d-%d”,&y0,&m0,&d0);printf(“Current Date(yyyy-mm-dd):n”);scanf(“%d-%d-%d”,&y1,&m1,&d1);if(d1

printf(“nAge=%d”,age);}

4.23 编写程序,输入一个整数,打印出它是奇数还是偶数。

※程序如下※

main(){ int i;

printf(“input a integer:n”);scanf(“%d”,&i);

if(i%2==0)/*条件判断*/ printf(“%d is a even”,i);else

printf(“%d is a odd”,i);}

—————————————————————————————————— 4.24 编写程序,输入a、b、c三个数,打印出最大者。

※程序如下※

main(){

int a,b,c,max = 0;

printf(“input(int)a b and c:n”);scanf(“%d%d%d”,&a,&b,&c);max = a;

if(max

—————————————————————————————————— 4.25 有一函数:

编写一程序,要求输入x的值,输出y的值。分别

(1)不嵌套的if语句(2)嵌套的if语句

(3)if_else语句(4)switch语句 ※程序如下※

源程序一:(1)不嵌套的if语句

main(){

float x;

printf(“input x:n”);scanf(“%f”,&x);if(x>-5&&x<0)printf(“y=%f”,x);if(x==0)

printf(“y=%f”,x-1);if(x>0&&x<10)printf(“y=%f”,x+1);if(x<=-5||x>=10)printf(“input error”);}

源程序二:(2)嵌套的if语句

main(){

float x;

printf(“input x:n”);scanf(“%f”,&x);if(x>-5&&x<10){

if(x==0)printf(“y=%f”,x-1);if(x<0)printf(“y=%f”,x);if(x>0)printf(“y=%f”,x+1);}

if(x<=-5||x>=10)printf(“input error”);}

源程序三:(3)if_else语句

main(){

float x;

printf(“input x:n”);scanf(“%f”,&x);if(x>-5&&x<10)if(x<0)

printf(“y=%f”,x-1);else if(x==0)printf(“y=%f”,x);else

printf(“y=%f”,x+1);else

printf(“input error”);}

源程序四:(4)switch语句 */ main(){

int flag;float x;

printf(“Enter x:n”);scanf(“%f”,&x);

if(x>-5 &&x<0)flag=-1;if(x==0)flag=0;

if(x>0 &&x<10)flag=1;switch(flag){

case-1: printf(“y=%f”,x);break;case 0: printf(“y=%f”,x-1);break;case 1: printf(“y=%f”,x+1);break;} }/* 第五章循环结构

三、编程题

5.17 编写程序,求1-3+5-7+...-99+101的值。※程序如下※ main(){

int i,sum=0,s=1;

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

sum=sum+i*s;

s=-s;/*控制符号交替变换*/ }

printf(“sum=%d”,sum);}

5.18 编写程序,求e的值,e=1+1/1!+1/2!+1/3!+1/4!+...+1/n!(1)用for循环,计算前50项(2)用while循环,要求直至最后一项的值小于1e-4。※程序如下※ 源程序一:(1)用for循环实现 main(){

int i,n;

double sum=1,t=1;printf(“input n:n”);scanf(“%d”,&n);for(i=1;i<=n;i++){

t=t*i;/* 实现阶乘*/ sum=sum+1/t;}

printf(“e=%lf”,sum);}

源程序二:(2)用while循环实现 #include main(){ int i;

doubel sum=1,t=1;

while(fabs(1.0/t)>1e-4)/* fabs求浮点型数据的绝对值 */ { t=t*i;

sum=sum+1/t;i++;}

printf(“e=%lf”,sum);}

5.19 编写程序,输出从公元1000年至2000年所有闰年的年号 每输出3个年号换一行。

判断公元年是否闰年的条件是:

(1)公元年数如能被4整除,而不能被100整除,则是闰年。(2)公元年数能被400整除也是闰年。※程序如下※ main(){

int i,j=0;

for(i=1000;i<=2000;i++){

if((i%4==0)&&(i%100!=0)||(i%400==0))/* 判断是否是闰年的条件 */ {

printf(“&d ”,i);j++;

if(j%3==0)/* 控制换行 */ printf(“n”);} } }

5.20 编写程序,打印以下图形: * *** ***** ******* ***** *** * ※程序如下※ #include main(){

int i,j;

for(i=1;i<=7;i++)/*控制行数*/ {

for(j=1;j<=7;j++)/*控制星数*/ {

if((j<=fabs(4-i))||(j>7-fabs(4-i)))printf(“ ”);else

printf(“*”)}

printf(“n”);} } #include #include main(){ int i,j,k;

for(i=-3;i<=abs(i);i++)

{for(j=0;j<=abs(i);j++)printf(“ ”);

for(k=0;k<=7-abs(i);k++)printf(“*”);printf(“n”);} } 第六章字符型数据

6.21 请编写程序,输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII代码值,每行输出三队.※程序如下※

#include main(){

int i=0;char ch;

while((ch=getchar())!='n'){

printf(“%4c%4d”,ch,ch);i++;

if(i%3==0)printf(“n”);} } 6.21 请编写程序,输入一行数字字符(用EOF结束),每个数字字符的前后都有空格。

请编程,把这一行中的数字转换成一个整数。例如,若输入: 2 4 8 3 代表Enter键)

则输出整数:2483

※程序如下※

#include main(){

char ch;

while((ch=getchar())!=EOF){

if(ch==' ')continue;else

printf(“%c”,ch);} }

6.22 请编写程序统计输入的行数,输入用EOF结束输入。※程序如下※

#include main(){

char ch;int i=0;

while((ch=getchar())!=EOF){

if(ch=='n')i++;}

printf(“%d”,i);}

6.23 请编写程序统计输入的一行中小写字母的个数。

※程序如下※

#include main(){

int i=0;char ch;

while((ch=getchar())!='n'){

if((ch>='a')&&(ch<='z'))i++;}

printf(“%d”,i);}

6.24 请编写输出以下图案的程序,图案的行数由输入的值确定。A BBB CCCCC DDDDDDD EEEEEEEEE

※程序如下※

#include main(){

int i,j,k,n;

printf(“Enter n(integer):n”);scanf(“%d”,&n);for(i=1;i<=n;i++){

for(j=n;j>i;j--)printf(“ ”);

for(k=1;k<=2*i-1;k++)printf(“%c”,64+i);printf(“n”);} } 第七章函数

7.14 以下fun函数用以判断n是否是素数,fun函数中有逻辑错,请调试改正。fun(int n){

int k,yes;

for(k=2;k<=n/2;k++)if(n%k==0)return yes=0;return yes=1;}

※正确答案是:

fun(int n){

int k,yes=1;

for(k=2;k<=n/2;k++)if(n%k==0)return yes=0;return yes;}

main(){

int n,yes;

printf(“Enter n(int):n”);scanf(“%d”,&n);yes=fun(n);

if(yes==1)printf(“%d is a prime”,n);else printf(“%d is not a prime”,n);}

7.15 编写函数 int mymod(int a, int b)用以求a被b除之后的余数。

※程序如下※

#include int mymod(int a, int b){

int remainder;remainder=a%b;return remainder;}

main(){

int a,b;

printf(“Enter a b(int):n”);scanf(“%d%d”,&a,&b);

printf(“余数=%d”,mymod(a,b));}

7.16 编写程序求:1-1/2+1/3-1/4+1/5-1/6+1/7-...1/n

※程序如下※

main(){ int n;float a;

float sum(int n);scanf(“%d”,&n);a=sum(n);

printf(“%10.5f”,a);}

float sum(int n){

float s=0;int i,t=1;

for(i=1;i

s=s+1/i*t;t=-t;}

return s;}

7.17 编写函数,根据整型形参m的值,计算如下公式的值。t=1-1/(2 x 2)-1/(3 x 3)-...-1/(m x m)

例如:若m=5,则应输出0.536389。

※程序如下※

main(){

float t=1;float f2(int);int i,m;

scanf(“%d”,&m);for(i=2;i<=m;i++)t=t-f2(i);

printf(“t=%f”,t);}

float f2(int m){

float s;

s=1.0/(m*m);return s;}

7.18 编写函数用以求表达式x2-5x+4,x作为参数传给函数,调用此函数求: y1=22-5*2+4

y2=(x+15)2-5*(x+15)+4 y3=sin2x-5*sinx+4

※程序如下※

#include #include float fun(float x){

float y;

y=pow(x,2)-5*x+4;return y;}

main(){

float x,y1,y2,y3;clrscr();

printf(“Enter x:n”);scanf(“%f”,&x);

y1=fun(2);

y2=fun((x+15));y3=fun(sin(x));

printf(“y1=%fny2=%fny3=%fn”,y1,y2,y3);} 第八章地址和指针

8.17 请编写函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传

送回调用函数。

※程序如下※

#include sum_sub(float a,float b,float *sum, float *sub){

*sum=a+b;*sub=a-b;}

main(){

float a,b,sum,sub;/*定义变量sum求和,变量sub求差*/ printf(“Enter a b(float):n”);scanf(“%f%f”,&a,&b);

sum_sub(a,b,&sum,&sub);

printf(“sum=%f,sub=%f”,sum,sub);}

8.18 请编写函数,对传送过来的三个数选出最大和最小数,并通过形参传回调用函数。

※程序如下※

#include max_min(double a,double b,double c,double *max,double *min){

*max = a;/* 假定a的值为最大,把a值赋给指针变量*max */ if(*max

*min = a;/* 假定a的值为最小,把a值赋给指针变量*min */ if(*min>b)*min = b;if(*min>c)*min = c;}

main(){

double a,b,c,max,min;

printf(“Enter a b c(double):n”);scanf(“%lf%lf%lf”,&a,&b,&c);max_min(a,b,c,&max,&min);

printf(“max=%lf,min=%lf”,max,min);} 第九章函数

9.27 输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数.用下标为 0元素统计字符“1”的个数,下标为1的元素统计字符“2”的个数,...※程序如下※

#include void count(int a[]){ int i;char ch;

while((ch=getchar())!='n')for(i=0;i<10;i++)if(i==ch-'0')if(i==0)a[9]++;else a[i-1]++;}

main(){

int i,a[10]={0};count(a);

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

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

9.28 编写函数,对具有10个整数的数组进行如下操作:从第n个元素开始直到最后一个元

素,依次向前移动一个位置.输出移动后的结果.※程序如下※ fun(int a[],int n){ int i;

for(i=n;i<9;i++)a=a[i+1];}

main(){

int a[10]={0,1,2,3,4,5,6,7,8,9},n,i;scanf(“%d”,&n);fun(a,n);

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

9.29 编写函数把数组中所有奇数放在另一个数组中返回.※程序如下※

#include #include int fun(int a[],int b[]){

int i,j=0;for(i=0;i<10;i++)if(a%2==1)b[j++]=a;return(j);}

main(){

int i,j,a[10],b[10];clrscr();

printf(“n****Enter 10 integer number:****n”);for(i=0;i<10;i++)scanf(“%d”,&a);j=fun(a,b);

printf(“****Output the odd arrage***:n”);for(i=0;i

9.30 编写函数对字符数组中的输入字母,按由大到小的字母顺序进行排序。

※程序如下※

#include void alpha_sort(char a[],int n);void alpha_rout(char a[],int n);main(){

char a[20];int n;clrscr();

printf(“****The original alphabetic is****:n”);gets(a);n=strlen(a);alpha_sort(a,n);alpha_rout(a,n);}

void alpha_sort(char a[],int n){

int i,j,p,t;

for(j=0;j

for(i=j+1;i

t=a[j];a[j]=a[p];a[p]=t;} } }

void alpha_rout(char a[],int n){ int i;

printf(“n****The alphabetic of sorting is****:n”);for(i=0;i

9.31 输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对以下三种情况运行你的程序,以便验证你的程序是否

正确。

(1)插在最前(2)插在最后(3)插在中间

※程序如下※

#include #define M 10

void sort(int a[M],int b[M+1],int n){ int i;

for(i=0;i

if(a[0]>a[M-1]){

if(n

else { if(n>a)b=a;else { b=n;break;} } }

if(i

for(;i

main(){

int i,n,a[M],b[M+1];clrscr();

printf(“Enter ten integer number(be sorted):n”);for(i=0;i

printf(“Enter a numbern”);scanf(“%d”,&n);sort(a,b,n);

printf(“Result of insertn”);for(i=0;i<=M;i++)printf(“%d ”,b);}

9.32 编写函数把任意十进制整数转换成二进制数.提示:把十进制数不断除2除,余数放

在一个一维数组中,直到商数为零.在主函数中进行输出,要求不得按逆序输出.※程序如下※

#include int dec_bin(int a[],int decimal)/*变量decimal表示十进制数*/ {

int i=0,remainder;while(decimal>0){

remainder=decimal%2;decimal=decimal/2;a[i++]=remainder;if(decimal<2){

a=decimal;break;} }

return(i);}

main(){

int i,j,decimal,a[64];

printf(“Enter decimal number:n”);scanf(“%d”,&decimal);j=dec_bin(a,decimal);for(i=j;i>=0;i--)printf(“%d”,a);}

9.33 编写函数调用随机函数产生0到19之间的随机数,在数组中存入15个互不重复的整

数。要求在主函数中输出结果。若已定义x为int类型,调用随机函数步骤如下:

#include “stdio.h”

.x=rand()%20 /*产生0到19的随机数*/

※程序如下※

#include void rand1(int a[]){

int i=0,j,x,flag;while(i<15){

flag=1;

x=rand()%20;for(j=0;j

if(flag==1)a=x;i++;} }

main(){

int i,a[15];clrscr();rand1(a);

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

9.34 求任意方阵每行、每列、两对角线上元素之和。

※程序如下※

#include #define M 3

void line_sum(int a[M][M],int a1[]){

int i,j,k;

for(i=0,k=0;i

a1[k]=0;

for(j=0;j

void column_sum(int a[M][M],int a2[]){

int i,j,k;

for(i=0,k=0;i

a2[k]=0;

for(j=0;j

void diagonal_sum(int a[M][M],int a3[]){

int i,j;

for(i=0;i

a3[0]+=a[j];if(i+j==M-1)a3[1]+=a[j];} }

main(){

int i,j,a[M][M],a1[M],a2[M],a3[2]={0};clrscr();i=M;

printf(“****Enter %d x %d phalanx****n”,i,i);for(i=0;i

printf(“line%d=%dn”,i,a1);for(i=0;i

printf(“column%d=%dn”,i,a2);for(i=0;i<2;i++)

printf(“diagonal%d=%dn”,i,a3);}

9.35 求两个矩阵的和

#include #define M 4

void add(int a[M][M],int b[M][M],int c[M][M]){

int i,j;

for(i=0;i

for(j=0;j

main(){

int i,j,k,a[M][M],b[M][M],c[M][M]={0};i=M;printf(“****Enter NO.1 Matrix(%d x %d)****n”,i,i);for(i=0;i

printf(“****Enter NO.2 Matrix(%d x %d)****n”,i,i);for(i=0;i

printf(“****Output result Matrix(%d x %d)****n”,i,i);for(i=0;i

for(j=0;j

9.36 编写函数打印出以下形式的乘法九九表。** A MULTIPLICATION TABLE **(1)(2)(3)(4)(5)(6)(7)(8)(9)

---------------------------(1)1 2 3 4 5 6 7 8 9

(2)2 4 6 8 10 12 14 16 18(3)3 6 9 12 15 18 21 24 27(4)4 8 12 16 20 24 28 32 36(5)5 10 15 20 25 30 35 40 45(6)6 12 18 24 30 36 42 48 54(7)7 14 21 28 35 42 49 56 63(8)8 16 24 32 50 48 56 64 72(9)9 18 27 36 45 54 63 72 81

---------------------------

※程序如下※

#include main(){

int i,j;clrscr();

printf(“** A MULTIPLICATION TABLE **n”);printf(“(1)(2)(3)(4)(5)(6)(7)(8)(9)n”);

printf(“---------------------------n”);for(i=1;i<=9;i++){

printf(“t(%d)”,i);for(j=1;j<=9;j++)printf(“%4d”,i*j);printf(“n”);}

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

9.37 调用随机函数为5 x 4的矩阵置100以内的整数,输出该矩阵,求出每行元素之和

并把和值最大的那一行与第一行上的元素对调。若已定义x为int类型,调用随机

函数步骤如下:

#include “stdio.h”

.x=rand()%100 /*产生0到100的随机数*/

※程序如下※ #include #include void rand1(int *p){

int i,j;

for(i=0;i<5;i++)for(j=0;j<4;j++,p++)*p=rand()%100;}

void exchange(int a[5][4]){

int i,j,max,temp,b[5]={0};for(i=0;i<5;i++)for(j=0;j<4;j++)b+=a[j];

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

if(b

temp=a[j];a[j]=a[max][j];a[max][j]=temp;} }

main(){ int i,j,a[5][4];clrscr();rand1(a);

printf(“****The origient Matrix****n”);for(i=0;i<5;i++){

for(j=0;j<4;j++)printf(“%5d”,a[j]);printf(“n”);}

exchange(a);

printf(“****The exchange Matrix****n”);for(i=0;i<5;i++){

for(j=0;j<4;j++)printf(“%5d”,a[j]);printf(“n”);} }

9.38 调用随机函数为5 x 5 的矩阵置100以内的整数,输出该矩阵,然后逆置该矩阵。

即将第一列的元素放在第一行上、第二列的元素放在第二行上、其它依次类推。

※程序如下※

#include #include void Rand1(int *p){

int i,j;

for(i=0;i<5;i++)for(j=0;j<5;j++,p++)*p=rand()%100;}

void Reverse_Matrix(int a[5][5]){

int i,j,temp;for(i=0;i<5;i++)for(j=0;j

temp=a[j];a[j]=a[j];a[j]=temp;} }

main(){

int i,j,a[5][5];clrscr();Rand1(a);

printf(“****The Result of rand()Function()****n”);for(i=0;i<5;i++){

for(j=0;j<5;j++)printf(“%5d”,a[j]);printf(“n”);}

Reverse_Matrix(a);

printf(“****The Result of Reverse Matrix Function()****n”);for(i=0;i<5;i++){

for(j=0;j<5;j++)printf(“%5d”,a[j]);printf(“n”);} } 第十章字符串

10.19 请编写函数mygets和myputs,其功能分别与gets和puts相同,函数中用getchar

和putchar读入和输出字符。

※程序如下※

#include void mygets(char *p){

char ch;

while((ch=getchar())!='n')*(p++)=ch;p[0]=0;}

void myputs(char *p){

char ch;

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

main(){

char *s;clrscr();mygets(s);myputs(s);}

10.20 请编写函数,判断一字符串是否是回文。若是回文函数返回值为1;否则返回值

为0。回文是顺读和倒读都一样的字符串。

※程序如下※ #include main(){

char a[200],*p;int i,j,flag=1;clrscr();

scanf(“%s”,a);p=a;

j=strlen(a);

for(i=0;i<=j/2;i++,j--)if(*(p+i)!=*(p+j-1)){

flag=0;break;}

if(flag)

printf(“Yes”);else

printf(“No”);}

10.21 请编写函数,删除字符串中指定位置上的字符。删除成功函数返回被删字符;否

则返回空值。

※程序如下※

#include #include del(char *p,int n){ int i;char ch;

if(n<=strlen(p))ch=*(p+n-1);else ch='0';

for(i=n-1;i

main(){ int n;char *s;clrscr();

printf(“****The string is ****n”);gets(s);

printf(“Enter n(0--%d)n”,strlen(s));scanf(“%d”,&n);

printf(“****The deleted char is****n”);printf(“%c”,del(s,n));getch();} 第十一章对函数的进一步讨论

11.11 编写程序outch,程序读入一行字符,根据命令行中的参数进行不同的输出。若

有以下命令行: outch-2

程序对读入的一行字符输出最后两个字符。若有以下命令行: outch +6

程序对所读入的一行字符输出开头6个字符。若命令行中没有参数,则隐含规定 输出最后10个字符。为简单起见,命令行中的参数中只包含一位数字。

※程序如下※ #include #include main(int argc,char *argv[]){ int i;

char s[64];

printf(“Enter a string:n”);gets(s);

while(argc>0){

if(argc==1){

for(i=strlen(s)-10;i

if(argv[1][0]=='-'){

for(i=strlen(s)-(argv[1][1]-'0');i

if(argv[1][0]=='+'){

for(i=0;i<(argv[1][1]-'0');i++)printf(“%c”,s);break;} } }

11.12 请写递归函数,把输入的一个整数转换成二进制数输出。

※程序如下※

#include dec_bin(int n,int a[]){

static int i=0;if(n==0||n==1){ a=n;return i;} else {

a[i++]=n%2;

return dec_bin(n/2,a);} }

main(){

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

printf(“Enter n(integer)n”);scanf(“%d”,&n);j=dec_bin(n,a);for(i=j;i>=0;i--)printf(“%d”,a);}

11.13 请用递归算法,求1+2+3+...n,n由键盘输入。

※程序如下※

fun(int n){

int sum;if(n==1)return 1;else {

sum=n+fun(n-1);return sum;} }

main(){

int n,sum;clrscr();

printf(“Enter n(1+2+3+...+n):n”);scanf(“%d”,&n);sum=fun(n);

printf(“sum=%d”,sum);}

11.14 请用递归函数,求裴波拉契级数,求n阶裴波拉契级数的公式如下。

※程序如下※ #include fac(int n){

long t;

if(n==0||n==1)return 1;else {

t=fac(n-1)+fac(n-2);return t;} }

main(){ int n;

printf(“Enter n :n”);scanf(“%d”,&n);printf(“%ld”,fac(n));} 第十三章编译预处理和动态存储分配

13.10 编写出一个宏定义MYALPHA(C),用以判断C是否是字母字符,若是得1,否则得0。

※程序如下※

#include #include #define MYALPHA(C)isalpha(C)?1:0 main(){

char ch;clrscr();

ch=getchar();if(MYALPHA(ch))

printf(“%c is a alpha”,ch);else

printf(“%c is not a alpha”,ch);}

13.11 请写出一个宏定义swap(t,x,y)用以交换t类型的两个参数。提示:用复合语句的形式。

※程序如下※

#include #define swap(t,x,y){t=x;x=y;y=t;}

main(){

int a,b,t;clrscr();

printf(“Enter a and b:n”);scanf(“%d%d”,&a,&b);swap(t,a,b);

printf(“a=%dnb=%d”,a,b);}

13.12 请编写程序,利用malloc函数开辟动态存储单元,存放输入的三个整数。然后按

从小到大的顺序输出这三个数。

※程序如下※

#include #include

void main(){

int *pData =(int*)malloc(sizeof(int)*3);int t;

printf(“Please input three integral numbern”);scanf(“%d%d%d”,pData,pData+1,pData+2);

for(int i=0;i<2;i++)for(int j=i+1;j<3;j++)

if(*(pData+i)> *(pData+j)){

t = *(pData+j);

*(pData+j)= *(pData+i);*(pData+i)= t;}

printf(“%dt%dt%dn”,*pData,*(pData+1),*(pData+2));} 第十四章结构体、共用体和用户定义类型 14.12 设有以下结构类型说明:struct stud {

char num[5],name[10];int s[4];double ave;};

请编写:

(1)函数readrec把30名学生的学号、姓名、四项成绩以及平均分放在一个结构

体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算平均分放

在结构体对应的域中。

(2)函数writerec输出30名学生的记录。

(3)main函数调用readrec函数和writerec函数,实现全部程序功能(注:不允

许使用全局变量,函数之间的数据全部使用参数传递)。

※程序如下※

#include #define STUDNUM 30 struct stud { char num[5],name[10];int s[4];double ave;};

void readrec(struct stud *pStud, int num){ int i;

printf(“tNumtNametS1tS2tS3tS4n”);

for(i=0;i

printf(“%d:t”,i);

scanf(“%s%s%d%d%d%d”,pStud->num,pStud->name,&(pStud->s[0]), &(pStud->s[1]),&(pStud->s[2]),&(pStud->s[3]));

pStud->ave=(pStud->s[0]+pStud->s[1]+pStud->s[2]+pStud->s[3])/4.0;

pStud++;} }

void writerec(struct stud *pStud, int num){ int i;

printf(“tNumtNametS1tS2tS3tS4n”);

for(i=0;i

printf(“%d:”,i);

printf(“t%st%st%dt%dt%dt%dt%lfn”,pStud->num,pStud->name, pStud->s[0],pStud->s[1],pStud->s[2],pStud->s[3],pStud->ave);

pStud++;} }

void main(){

struct stud student[STUDNUM];readrec(student,STUDNUM);writerec(student,STUDNUM);}

14.13 已知head指向一个带头节点的单向链表,链表中每个节点包含数据区域(data)

和指针域(next),数据域为整型。请分别编写函数,在链表中查找数据域值 最大的节点。

※程序如下※

#include #include

struct node {

int data;

struct node *next;};

struct node *SearchMax(struct node *head){

int max;

struct node *pMaxNode,*pNode;

pNode = head;pMaxNode = NULL;while(pNode!= NULL){

if(pNode->data > max || pMaxNode == NULL){

max = pNode->data;pMaxNode = pNode;}

pNode = pNode->next;}

return pMaxNode;}

void main(){

struct node *head,*tail,*pNode;int data;

printf(“Please input datanEnter 'Exit' to quit.n”);

head = tail = NULL;

while(scanf(“%d”,&data)> 0){

pNode =(struct node*)malloc(sizeof(struct node));pNode->data = data;pNode->next = NULL;

if(head == NULL)head = tail = pNode;else {

tail->next = pNode;tail = pNode;} }

if(head!= NULL)

printf(“Maxnimum data is %dn”, SearchMax(head)->data);

while(head!= NULL){

pNode = head;head = head->next;free(pNode);} }*/

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

文档为doc格式


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

相关范文推荐

    c语言第8章书后习题_编程题(5篇)

    第8章函数 三、编程题 8.17请编写函数,其功能是对传送过来的两个浮点数求出和值和差值,并通过形参传送回调用函数。 #include void fun(float a, float b, float *add, float......

    山科大 C语言程序设计编程精选44例

    问题 1: 三个数比较大小 题目描述 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。 输入 输入只有一行,为三个整数。 输出 按从小到大输出这三个数。 样例输入 15 10 20......

    c语言编程题答案

    六、编程题参考答案 1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。 #include "stdio.h" #define N 50 void main() { float x; unsigned int s1,......

    c语言编程题(精选五篇)

    实验2 数据类型和标准输入与输出 (1)编写程序,输入摄氏温度,转换为华氏温度。转换公式如下: 华氏度 = 32 + 摄氏度 × 1.8 #include "stdio.h" void main { int s; double h;......

    C语言期末考试编程题范文

    1.打印出所有的“水仙花数”,并按照一行5个的格式输出。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1*1*1+5*5*5+3*3*3......

    《C语言程序设计》课后习题参考答案

    高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案 ――武汉大学出版社习题1参考答案 一、选择题 1. A 2. D 二、填空题 1. BASIC、FORTRAN、AL_GOL60和CO......

    《C语言程序设计教程》习题参考答案

    《C语言程序设计教程》习题参考答案 默认分类 2007-09-10 12:38:44 阅读6618 评论13 字号:大中小 订阅【习题1】 一、简答题(在课本中寻找答案,略) 1.1 C程序的基本结构包括......

    C语言程序设计上机指导及习题选解 实验二编程五篇范文

    C语言程序设计上机指导及习题选解 实验2顺序结构程序设计 二、 6.实现两个数的对调: #include void main { int a,b,t; scanf("%d%d",&a,&b); printf("a=%d b=%dn",a,b......