C语言编程100题

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

第一篇: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.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。#include “stdio.h” #define N 50 void main(){ float x;unsigned int s1,s2,s3,i;s1=s2=s3=0;for(i=1;i<=N;i++){ scanf(“%f”,&x);if(x<0)s1++;else if(x==0)s2++;else s3++;} printf(“负数%u个,零%u个,正数%u个n”,s1,s2,s3);}

2.编程,计算并输出方程 X2+Y2=1989 的所有整数解。#include “stdio.h” void main(){ int x,y;for(x=-45;x<=45;x++){ y=-45;while(y<=45){ if(x*x+y*y==1989)printf(“%d*%d+%d*%d=%dn”,x,x,y,y,1989);y++;} } }

3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。#include “stdio.h” void main(){ unsigned int x;printf(“请输入一个十进制正整数:”);scanf(“%u”,&x);printf(“%d=八进制数 %o=十六进制数%xn”,x,x,x);}

4.编程,找出1000以内的所有完数,并输出其因子。#include “stdio.h” void main(){ int i,j,s=1;for(i=1;i<=1000;i++,s=1){ for(j=2;j<=i/2;j++)if(i%j==0)s+=j;// 求 i的因子和

if(s==i){ printf(“%d=1”,i);// 如果i 是完数则输出其各因子

for(j=2;j<=i/2;j++)if(i%j==0)printf(“+%d”,j);printf(“n”);} } }

5.输入一个正整数,输出它的所有质数因子。#include “stdio.h” void main(){ int m,i=2;printf(“请输入一个整数:”);scanf(“%d”,&m);while(m!=1)if(m%i==0){ printf(“%d ”,i);m/=i;} else i++;printf(“n”);}

6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。#include “stdio.h” #define N 20 void main(){ int a[N],i,j;for(i=0;i

7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i

8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i

9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。#include “stdio.h” void main(){ char s1[20],s2[]=“Good morning!”;int i=0;while((s1[i++]=s2[i])!='');printf(“%sn”,s1);}

10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。#include #define f(year)year%4==0&&year%100!=0||year%400==0 void main(){ int y;printf(“请输入年份:”);scanf(“%d”,&y);if(f(y))printf(“%d 年为闰年n”,y);else printf(“%d 年不是闰年n”,y);}

11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。#include #define MAX 80 #define SWITCH 1 void main(){ char str[MAX];int i=0;printf(“请输入文本行:n”);scanf(“%s”,str);#if(SWITCH)while(str[i]!='')if(str[i]>='a'&&str[i]<='z')if(str[i]=='z')str[i]='a';else str[i]++;i++;#endif printf(“%sn”,str);}

12.编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。

#include “stdio.h” #include “math.h” void div(float** a,int n){ int i,j;float x;for(i=0;ifabs(x))x=*(*(a+i)+j);for(j=0;j

{ float b[3][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;float* c[3];for(i=0;i<3;i++)c[i]=b[i];div(c,3);for(i=0;i<3;i++){ for(j=0;j<3;j++)printf(“%f ”,b[i][j]);printf(“n”);} }

13.编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。#include “stdio.h” float f1(float* a,float x,int n){ int i;float t=1,y=0;for(i=0;i

14.设计一个函数,使给出一个数的原码,能得到该数的补码。

#include // 假定sizeof(int)为2;

unsigned int getbit(unsigned int value)//第1位为0表示数的原码,{ if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value else return value;//右移15位后为1,表示value是负数的原码,负数

} //的补码为原码按位取反(第1位不变)后加1。

void main(){ unsigned int y=0x800c,k;k=getbit(y);printf(“%xn”,k);}

15.编写函数,求m行、n列的二维数组全体元素中负数的个数。#include int sum(float **a,int m,int n){ int i,j;int y=0;for(i=0;i

{ float b[2][3]={{-1,2,-3},{4,-5,-6}};int i;float* c[2];for(i=0;i<2;i++)c[i]=b[i];printf(“%dn”,sum(c,2,3));} 16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。#include void fun(float *a,int n,int *k,float *x){ int i,j,y;*k=0;for(i=0;i*k){ *k=y;*x=*(a+i);} } return;} void main()// 函数引用示例

{ float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;int m;fun(c,10,&m,&t);// 若说明float *t;int *m;printf(“元素%f出现次数为%dn”,t,m);// 引用为 fun(c,10,m,t)将

} // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。

17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。#include void main(){ char *month_name[12]={“January”,“February”,“March”,“April”, “May”, “June”,“July”,“August”,“September”,“October”, “Novenber”,“December”};int n;printf(“请输入月份号:”);scanf(“%d”,&n);if(n<1||n>12)printf(“月份号输入错误!n”);else printf(“%d月的英文表示是%sn”,n,month_name[n-1]);}

18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。#include void pline(){ char ch;if((ch=getchar())!='?'){ pline();putchar(ch);} return;} void main()// 函数引用示例 { pline();printf(“n”);}

19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。#include int num(float *x,int n){ int i,k=0;for(i=1;i*(x+i-1)&&*(x+i)>*(x+i+1))k++;return k;} void main()// 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8};printf(“%dn”,num(a,10));}

20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。

#include void num(float *b,int n,float *max,float *min){ *max=*b;*min=*b;for(int i=1;i*max)*max=*(b+i);if(*(b+i)<*min)*min=*(b+i);} return;} void main()// 函数引用示例

{ float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;num(a,10,&x,&y);printf(“最大值为%f,最小值为%f。n”,x,y);}

21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并

返回统计结果。

#include void sub(float** a,int m,int n,int *fs,int *lin,int *zs){ int i,j;*fs=*lin=*zs=0;for(i=0;i

{ float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5];int i,k1,k2,k3;for(i=0;i<5;i++)c[i]=b[i];sub(c,5,3,&k1,&k2,&k3);printf(“负数%d个,零%d个,正数%d个。n”,k1,k2,k3);}

22.编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。#include void find(char *str){ char *p1,*p2,*p3;int k1=0,k2=0;// k1为最长串的长度,初值为0。

p1=p2=p3=str;// p3指向最长串首字符,p1指向当前处理串首字符,while(*p2!='.')// p2为移动指针,*p2为空格表示查找到单词尾部。

if(*p2!=' '){ k2++;p2++;} else if(k2>k1){ p3=p1;p1=++p2;k1=k2;k2=0;} else { k2=0;p1=++p2;} for(k2=0;k2<=k1;k2++)printf(“%c”,*(p3+k2));printf(“n”);return;} void main()// 函数引用示例 { char a[40];int i=0;while((a[i++]=getchar())!='.');find(a);}

23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。#include struct student { char num[7],name[9];int score[3];};// 尾部分号不得遗漏

void print(struct student* s,int n){ int i;// 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i

printf(“%s %s %4d%4d%4dn”,(*(s+i)).num,(*(s+i)).name,(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);return;} void main(){ struct student t[4];int i;for(i=0;i<4;i++)

scanf(“%s%s%d%d%d”,&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]);print(t,4);} 24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。

#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)if(ch!=' ')fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。

#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF){ if(ch>='A'&&ch<='Z')ch=ch+32;fprintf(fpd2,“%c”,ch);} fclose(fpd1);fclose(fpd2);}

27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。#include void main(){ FILE *fpd1,*fpd2;char ch;fpd1=fopen(“d1.dat”,“r”);fpd2=fopen(“d2.dat”,“w”);while(fscanf(fpd1,“%c”,&ch)!=EOF)

if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'))fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);}

28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。

#include #include void main(){ FILE *fp;int i,j,k=2;fp=fopen(“su.dat”,“w”);fprintf(fp,“%4d%4d”,2,3);for(i=5;i<100;i=i+2){ for(j=3;j<=sqrt(i);j=j+2)if(i%j==0)break;if(j>sqrt(i)){ fprintf(fp,“%4d”,i);k++;if(k%10==0)fprintf(fp,“n”);} } fclose(fp);}

29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。#include #include void main(){ FILE *fp1,*fp2,*fp3;int i,j,k;char c1,c2;fp1=fopen(“a1”,“r”);fp2=fopen(“a2”,“r”);// 首先从文件a1、a2中各读入一个字符分别送入变量c1、c2,下面将作

// 循环比较,直到读到文件尾标志为止。

fp3=fopen(“a3”,“w”);c1=fgetc(fp1);c2=fgetc(fp2);do { if(c1

30.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。#include #include void main(){ FILE *fp1,*fp2;char s[9];int x,zrs=0,pjcj=0,jgrs=0;fp1=fopen(“c.dat”,“r”);fp2=fopen(“a:score60.dat”,“w”);fscanf(fp1,“%s%d”,s,&x);do { zrs++;pjcj+=x;if(x>=60){ jgrs++;fprintf(fp2,“%s %dn”,s,x);} fscanf(fp1,“%s%d”,s,&x);} while(!feof(fp1));printf(“总人数:%d平均成绩:%d 及格人数:%dn”,zrs,pjcj/zrs,jgrs);fclose(fp1);fclose(fp2);} 31.程序清单:

typedef int datatype;typedef struct node {datatype data;struct node *next;}linklist;„„

INVERT(linklist *head){linklisk *p,*q;p=head->next;if(p!=NULL){head->next=NULL;do {q=p->next;p->next=head->next;head->next=p;p=q;} while(p!=NULL);} } 32.程序清单:

PURGE(linklist *head){linklist *p,*q;q=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){q=p->next;free(p);p=q->next;} else {q=p;p=p->next;} }

33、程序清单: #include main(){static char x[]=”computer”;char *p;for(p=x;p

34、#include #include main(){int m;char str[80],str2[80];printf(“input a string:n”);gets(str2);printf(“intput m:n);scanf(“%d”,&m);if(strlen(str2)

35、程序清单:

float search(float(pointer)[4],int n){float *pt;pt=*(pointer+n);return(pt);}

36、Main(){int score[][4]={{60,76,80,90},{45,86,57,90},{58,95,80,71},{78,50,60,85}};int(*p)[4],j,k,flag;p=score;for(j=0,j<4;j++)if(*(*(p+j)+k)<60)flag=1;if(flag==1){printf(“NO.%dis fail,svoreare:n”,j);for(k=0,;k<4;k++)printf(“%5d”, *(*(p+j)+k);

printf(“n”);} }

37、程序清单: main(){int b[16],x,k,r,I;printf(“enter a integer :n”): scanf(“%d”,&x);

printf(%6d’s binary number is:n”,x);k=-1;do {r=x%2;k++;*(b+k;x/=2;}while(x!=0 for(I=k;I>=0;I--)printf(“%d”,*(b+i)printf(“n”);} 38、float p(int n,int x){flaot t,t1,t2;if(n==0)return(1);else if(n==1)return(x);else {t1=(2*n-1)*x*(p((n-1),x));t2=(n-1)*p((n-2),x);t=(t1-t2)/n);return(t);}}

39、main(){int a[5][5],I,j,k=0,m,n;m=n/2+1;for(I=0,I=I;j--){k++;a[n-I-1][j]=k;} for(j=n-2-I;j>=I+1;j--){k++;a[I][j];}} for(I=0;I main(){int m[16],n,I,t,count=0;long a,k;printf(“result is:n”);for(n=10;n<200;n++){k=0;t=1;a=n*n;for(I=1;a!=0;I++){m[I]=a%10;a/=10;} for(;I>1;I--){k+=m[I-1]*t;t=t*10;} if(k==n*n)printf(“%2d:%10d%10dn”,++count,n,N*n);}}

41、void convert(char *a,int n){int I;if((I=n/10)!=0)convert(a+1,i);*a=n%10+’0’;}

42、#include main(){FILE *fp;char str[100],fikename[10];int I=0;if((fp=fopen(“upper.txt”,”w”))==NULL){printf(“can not open filen”);exit(0);} printf(“enter a string:n”);gets(str);while(str[I]!=’!’)

{if(str[I]>=’a’&&str[I]<=’z’)str[I]=str[I]-32;fputc(str[I],fp);I++;} fclose(fp);}

43、#include “stdio.h” FILE *fp;main(){int p=0,n=0,z=0,temp;fp=fopen(“number.dat”,”r”);if(fp==NULL)printf(“file not foundn”);else {while(!feof(fp)){fscanf(fp,”%d”,&temp);if(temp>0)p++;else if(temp<0)n++;else z++;} fclose(fp);printf(“posive:%3d,negtive:%3d,zero:%3dn:,p,n,z);} }

44、main(){unsigned rightrot(unsigned a,int n)

unsigned int m,b;

int n;

printf(“enter mand n:”);

scanf(%x,%d”,&m,&n);

printf(“m=%x,n=%dn”,m,n);

b=rightrot(m,n);

printf(“b=%xn”,b);} unsigned rightrot(unsigned a,int n){int rb;while(n0){rb=(a&1)<<(16-1);a=a>>1;a=a|rb;} return a;}

45、解:PX(X,N)=X-X2+X3-X4+„„+(-1)N-1XN =X*(1-X-X2+X3-X4+„„+(-1)N-1XN-1 =X*(1-PX(X,N-1)程序清单:

double px(double x,int n){if(n==1)return x;else return(x*(1-px(x,n-1));}

46、程序清单:

double opwer1(double x,int n){if(n==0)return 1;else return(x*power1(x,n-1);}

47、Printfn(int n){if(n=0&&n<=9)printf(“%d”,n);else {printf(“%d”,x%10);printn(x/10);} }

48、程序清单: t(int n){int m;printf(“%d”,x%10);m=x/10;if(m>0)r(m);}

49、程序清单:

int ack(int m,int n){if(m==0)return(n+1);else if(n==0)return(ack(m-1,1);else return(ack(m-1,ack(m,n-1)));} 50、Void intobin(int x){if(x/2>0)intobin(x/2);printf(“%d”,x%2);}

51、Void intobin(int x){if(x/8>0)intobin(x/8);printf(“%d”,x%8);}

52、Void intobin(int x){ if(x/16>0)intobin(x/16);printf(“%c”,(x%16>=9)?x%16+55:x%16+48);}

53、Main(){int x;printf(“enter a number:n”);

scanf(“%d”,&x);if(x!=0){if(x>0){ x=x%2;if(x)printf(“this number is a plus odd numbern”);else printf(“this number is a plus even numbern”);} else { x=x%2;if(x)printf(“this number is a plus odd numbern”);else printf(“this number is a plus even numbern”);} else printf(“this number is zeron”);}

54、Main(){int x,y,max;printf(“please input two number:n”);

scanf(“%d,%d”,&x,&y);if(a>b)max=a;else max=b;printf(“max=%d”,max);}

55、Main(){int j;for(j=999;j>=100;j--)if(555555%j==0)break;printf(“%d”,j);}

56、Main(){int I,count,j,sum;sum=count=0;for(I=0;I<10;I++){printf(“input ingter:n);scanf(“%d”,&j);if(j<0)continue;count++;sum=sum+j;} if(count)printf(“plus number:%d,average value :%.2f”,count,1.0*sum/count);else printf(“plus number:0,average value :0”);}

57、Main(){int year;printf(“%d”,&year);if(year<0)printf(“year is not a yaern”): else if((year%4==0&&year%100!=0)||year%400==0)printf(“year is leap year!n”);else printf(“year is not leap year!n”);}

58、main(){int n,j,k;printf(“input n:n”);

scanf(“%d”,&n);for(j=0;j

printf(“n”);} }

59、main(){int n,I,j,k;printf(“input n:n”);

scanf(“%d”,&n);for(I=0;I

printf(“n”);} } 60、Main(){ int I;float sum=1;for(I=2;I<=1000;I++)sum=sum+1.0/I;printf(“%f”,sum);} 61、Mypower(float x,int n){int I;float po=1;for(I=1,I<=n;I++)po=po*x;printf(“%f”,po);} 62、Main(){int I,j,max;int a[3][4]={};max=a[0][0];for(I=0;I<3;I++)for(j=0;j<4;j++)if(max char *strcat(char *str1,char *str2){}连接后字符串的头指针为str1。#include char *strcat(char *str1,char *str2){char *str1;while(*p!=’’)p++;while(*p++=*str2++);return(str1);} 64、#include char *revstr(char *s){} #include char *revstr(char *s){char *p=s,c;while(*p)p++;p--;while(s

8、略 69、略

70、#include #include main(){char str[80];printf(“input a string :n”);gets(str);insert(str);printf(“result is :%s”,str);} insert(char *s){int I;for(I=strlen(s);I>0;I--){*(s+2*I)=*(s+I);*(s+2*I-1)=’’;} } 71、Main(){int x;scanf(“%d”,&x);if(x%5==0&&x%7==0)printf(“yes”);else printf(“no”);} 72、#include main(){int day=0,buy=2;float sum=0,ave;do { sum=sum+buy*0.8;day++;buy=buy*2;}while(buy<=100);ave=sum/day;printf(“%f”,ave);} 73、#include main(){int I;for(I=1;I<100;I++)if(I*I==I||I*I%100==I)printf(%3d”,I);} 74、#include main(){char s[80]=””;int I,j;for(I=j=0;s[I]!=’’;I++)

if(c[I]!=’c’)s[j++]=s[I];

s[j]=’’;puts(s);} 79、main(){ int a[10];int i,j,m,f,h;int n,s;for(i=0;i<10;i++)a[i]=0;a[9]=1;printf(“please input n:n”);scanf(“%d”,&n);for(i=2;i<=n;i++){m=0;for(j=9;j>=0;j--){if(!(a[j]==0)){ f=a[j];h=(f*i%10+m)/10;a[j]=(f*i%10+m)%10;

m=f*i/10+h;} else { a[j]=a[j]+m;m=0;} } } i=0;while(a[i]==0)i++;printf(“%d!= ”,n);for(j=i;j<10;j++)printf(“%d”,a[j]);printf(“n”);} 80、#include #define N 100 main(){int a,j,jinwei,temp;int num1[N],num2[N];int i;printf(“PLEASE INPUT ONE NUMBER:n”);i=2;while(1){scanf(“%d”,&a);if(a==-1)break;num1[i++]=a;} num1[0]=i-1;i=2;printf(“PLEASE INPUT OTHER NUMBER:n”);while(1){scanf(“%d”,&a);if(a==-1)break;num2[i++]=a;} num2[0]=i-1;for(i=2;i<=num1[0];i++)printf(“%d”,num1[i]);printf(“+”);for(i=2;i<=num2[0];i++)printf(“%d”,num2[i]);printf(“=”);jinwei=0;if(num1[0]>num2[0]){j=num2[0];for(i=num1[0];i>=2;i--){ if(j>=2){ temp=jinwei;jinwei=(num1[i]+num2[j]+jinwei)/10;num1[i]=(num1[i]+num2[j]+temp)%10;

j--;} else { temp=jinwei;jinwei=(num1[i]+jinwei)/10;num1[i]=(num1[i]+temp)%10;

} } num1[1]=jinwei;for(i=1;i<=num1[0];i++)printf(“%d”,num1[i]);} else { j=num1[0];for(i=num2[0];i>=2;i--){ if(j>=2){temp=jinwei;jinwei=(num1[j]+num2[i]+jinwei)/10;num2[i]=(num1[j]+num2[i]+temp)%10;j--;} else {temp=jinwei;jinwei=(num2[i]+jinwei)/10;num2[i]=(num2[i]+temp)%10;} }

num2[1]=jinwei;for(i=1;i<=num2[0];i++)printf(“%d”,num2[i]);} } 81、include #define N 10 main(){int a,j,jinwei,temp;int num1[N],num2[N];int ji[2*N];int i;int k,k1,k2;int jinwei1,jiashu;for(i=0;i<2*N;i++)ji[i]=0;printf(“PLEASE INPUT ONE NUMBER:n”);i=1;while(1){scanf(“%d”,&a);if(a==-1)break;num1[i++]=a;} num1[0]=i-1;

printf(“PLEASE INPUT OTHER NUMBER:n”);i=1;while(1){scanf(“%d”,&a);if(a==-1)break;num2[i++]=a;} num2[0]=i-1;jinwei=0;k=2*N;for(i=num1[0];i>=1;i--){k1=k;k--;k2=k;jinwei=0;for(j=num2[0];j>=1;j--){ k1--;jiashu=(num1[i]*num2[j]+jinwei)%10;jinwei=(num1[i]*num2[j]+jinwei)/10;jinwei1=0;k2=k1;while(1){temp=jinwei1;jinwei1=(ji[k2]+jiashu+temp)/10;ji[k2]=(ji[k2]+temp+jiashu)%10;if(jinwei1==0)break;else {k2--;jiashu=0;} }

} k1--;temp=jinwei;jinwei=(temp+ji[k1])/10;ji[k1]=(temp+ji[k1])%10;if(jinwei!=0)ji[--k1]= jinwei;} printf(“nn”);for(i=1;i<=num1[0];i++)printf(“%d”,num1[i]);printf(“*”);

for(i=1;i<=num2[0];i++)printf(“%d”,num2[i]);printf(“=”);for(i=k1;i<2*N;i++)printf(“%d”,ji[i]);} 82、int count;int perm(char as[],char tem1[],int k,int num,int curr,int m){ int i,t;if(curr==0){if(num==0){printf(“{}”);count++;} else { count++;printf(“{”);for(i=0;i

第三篇:C语言期末考试编程题范文

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

int a,b,c,s,i=0;

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

{

c=s%10;

b=s/10%10;

a=s/100;

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

{

printf(“%dt”,s);

++i;

if(i%5==0)

printf(“n”);

}

} } 2.求1+2!+3!+...+20!的和 #include void main(){ double fact=1.0,sum=0.0;int i,j;for(i=1;i<=20;i++){ for(j=1;j<=i;j++)fact*=j;sum+=fact;fact=1;} printf(“%.0fn”,sum);} 3.输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。#include #include void main(){ long num;int a,b,c,d;printf(“Please input the number:”);scanf(“%d”,&num);if(num<=9999||num>=100000){ printf(“%The number error!n”);exit(0);} a=num/10000;b=num/1000%10;c=num/10%10;d=num%10;if(a==d&&b==c)printf(“nYes,the %ld palindrome!n”,num);else

is is printf(“nNo,the %ld is not palindrome!n”,num);} 4.求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并并按照一行5个的格式输出。

#include void main(){ int num,i=0;for(num=1;num<=1000;num++)

if(((num%7||num%11)==1)&&((num%7&&num%11)==0)){ printf(“%dt”,num);++i;if(i%5==0)printf(“n”);} } 5.编程列出200以内所有的素数,按照一行10个的格式输出,并求出所有素数的平均值,#include #include void main(){ int i,j,k=0,sum=0,avg=0;for(i=2;i<200;i++){ for(j=2;j<=sqrt(i);j++)if(i%j==0)break;if(j>sqrt(i)){ printf(“%dt”,i);++k;sum+=i;if(k%10==0)printf(“n”);} } avg=sum/k;printf(“nThe is %dn”,avg);}

average

6、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1+1/3+1/5...+1/n #include void main(){ void odd(int n);void even(int n);int n;printf(“Please input the number:”);scanf(“%d”,&n);if(n%2)odd(n);else even(n);} void odd(int n){ float sum=0.0;float j;int i;for(i=1;i<=n;i+=2){ j=1.0/i;sum+=j;} printf(“%fn”,sum);} void even(int n){ float sum=0.0;int i;float j;if(n==0)printf(“%fn”,sum);else { for(i=2;i<=n;i+=2){ j=1.0/i;sum+=j;} printf(“%fn”,sum);} }

7、已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有 组合。

#include void main(){ int a,b,c;for(a=1;a<=9;a++)for(b=0;b<=9;b++)for(c=1;c<=9;c++)

if((100*a+10*b+c+100*c+10*b+a)==1333)

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

8、用户输入12个0-100之间的整数,统计出小于60,60到79,80到100三个范围的整数各有多少个? #include #include void main(){ int i,j,k,n,num;i=j=k=0;printf(“Please input the 12 numbers with 0~100:”);for(n=1;n<=12;n++){ scanf(“%d”,&num);if(!(num>=0&&num<=100))exit(0);if(num<60)++i;else if(num<80)++j;else ++k;} printf(“nThere

are

%d numbers less than 60,%d numbers between 60 and 79,%d numbers between 80 and 100.n”,i,j,k);}

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

即: abc = a!+ b!+ c!#include void main(){ int a,b,c,num;int s(int);for(num=100;num<1000;num++){ a=num/100;b=num/10%10;c=num%10;if(num==s(a)+s(b)+s(c)){ printf(“The is %dn”,num);break;} } } s(int n){ int i,sum=1;for(i=1;i<=n;i++)sum*=i;

number return sum;}

10、猜数游戏:由用户随机输入一个1位正整数数让人来猜,只能猜5次,如果人猜对了,则在屏幕上显示“You are so clever”,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止或者5次都猜不对给出提示“Game Over”。#include #include void main(){ int num,i,n;printf(“Please input the number with 0~9 for guessing:”);scanf(“%d”,&num);system(“cls”);if(num<0||num>9)exit(0);for(i=1;i<=5;i++){ printf(“nPlease input the number you guess:”);scanf(“%d”,&n);if(num==n){ printf(“nYou are so clever!n”);break;} else if(n

have

%d

times left!n”,5-i);continue;} else { printf(“nThe number you input is large,go on please!You

have

%d

times left!n”,5-i);continue;} } if(i>5)Over!n“);}

11、设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),求N的值。#include void main(){ int n,k,a,b,c,d;for(n=1000;n<=9999;n++){ a=n/1000;

printf(”Game b=n/100%10;c=n/10%10;d=n%10;k=1000*d+100*c+10*b+a;if(k==9*n)printf(“N=%dn”,n);} } 12、100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。试编写程序计算大、中、小马的数目。#include void main(){ int h1,h2,h3;for(h1=0;h1<=100;h1++)for(h2=0;h2<=100;h2++)for(h3=0;h3<=100;h3+=2){

if(h1+h2+h3==100&&3*h1+2*h2+1/2*h3==100)printf(“The horse has has

%d,middle

old horse horse

%d,young has %dn”,h1,h2,h3);} }

13、一位司机酒驾撞人逃跑。现场三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙是位数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。(车号为4位数)#include #include void main(){ int n,a,b,c,d,i;for(n=1000;n<=9999;n++){ a=n/1000;b=n/100%10;c=n/10%10;d=n%10;i=sqrt(n);if(a==b&&c==d&&i*i==n)printf(“%dn”,n);} } 14、求S=1/(1*2)+1/(2*3)+1/(3*4)+……前50项之和并输出结果。#include void main(){ float i;float s=0;for(i=1;i<51;i++)s+=1.0/(i*(i+1));printf(“%f”,s);}

15、编程求出所有1000到3000之间能被7、11、17同时整除的整数,并求其平均值,并输出结果(结果保留两位小数)。#include void main(){ int i,k=0,sum=0;for(i=1000;i<=3000;i++)if(i%7==0&&i%11==0&&i%17==0){ sum+=i;++k;printf(“%dt”,i);}

printf(“n%d”,sum/k);}

16、编程找出满足下列条件的所有四位数的和并输出:该数第一、三位数字之和为10,第二、四位数字之积为12。

#include #include int main(void){ int i,j,x,y,z,m;for(i = 1000;i< 10000;i++){ x = i/1000;y =(i/100)%10;z =(i/10)%10;m = i%10;if((x + z)==10&&(y+ m)==12){ printf(“%dt”,i);} } printf(“n”);return 0;}

17、求并输出所有满足如下条件的三位正整数:它是某整数的平方,它的三位数码有两位是相同的。(如100是10的平方,它有两个0,225是15的平方,它有两个2)。#include #include void main(){ int n,i,a,b,c;for(n=100;n<=999;n++){ a=n/100;b=n/10%10;c=n%10;i=sqrt(n);

if((a==b||a==c||b==c)&&n==i*i)printf(“%dt”,n);} }

18、输出所有大于1010的4位偶数,且该类偶数的各位数字两两不相同。#include void main(){ int num,a,b,c,d;

for(num=1012;num<=9999;num+=2){ a=num/1000;b=num/100%10;c=num/10%10;d=num%10;if(a!=b&&b!=c&&c!=d)printf(“%dt”,num);} }

19、编制程序要求输入整数a和b,若a+b大于100,则输出a+b百位以上的数字,否则输出两数字之和。#include 2

222void main(){ int a,b,s;printf(“Please input a and b:”);scanf(“%d%d”,&a,&b);s=a*a+b*b;if(s>100)printf(“n%dn”,s/100);else printf(“n%dn”,a+b);} 20、编写一个程序实现如下功能:计算1~100之间所有包含4或者包含5的数字,并显示其累加之和 #include void main(){ int a,b,i,sum=0;for(i=1;i<=99;i++){ a=i/10;b=i%10;

if(a==4||a==5||b==4||b==5){ sum+=i;printf(“%dt”,i);} } printf(“n%dn”,sum);}

第四篇:c语言编程题

实验2 数据类型和标准输入与输出

(1)编写程序,输入摄氏温度,转换为华氏温度。转换公式如下: 华氏度 = 32 + 摄氏度 × 1.8 #include “stdio.h” void main(){ int s;

double h;printf(“请输入摄氏度”);scanf(“%d”,&s);h=32+s*1.8;printf(“%lf”,h);}

(2)编写一个程序,输入大写字符,转换成对应的小写后输出。

#include “stdio.h” void main(){ char a,b;printf(“请输入一个大写字母”);scanf(“%c”,&b);a=b+32;printf(“%c”,a);}

升级版:

#include “stdio.h” void main(){ char a,b;printf(“请输入一个大写字母”);scanf(“%c”,&b);if(b>'Z')printf(“请重新输入”);else a=b+32;printf(“%c”,a);} 升级版:

#include “stdio.h” void main(){

char a,b1;

printf(“请输入一个字母”);scanf(“%c”,&b1);if('a'<=b1&&b1<='z');a=b1-32;if('A'<=b1&&b1<='Z')a=b1+32;

printf(“%c”,a);

}

(3)输入一元二次方程的三个系数,计算该方程的根。

/* Note:Your choice is C IDE */ #include “stdio.h” #include void main(){ double a,b,x1,x2,d,c;printf(“请输入一元二次方程的三个系数a,b,c”);scanf(“%lf,%lf,%lf”,&a,&b,&c);d=b*b-4*a*c;x1=(-b+sqrt(d))/(2*a);x2=(-b+sqrt(d))/(2*a);printf(“第一个根是%lf,第二个根是%lf”,x1,x2);}

加强版:

#include “stdio.h” #include void main(){ double a,b,x1,x2,d,c;printf(“请输入一元二次方程的三个系数a,b,cn”);scanf(“%lf,%lf,%lf”,&a,&b,&c);

d=b*b-4*a*c;if(d<0)printf(“你输入的方程没有根”);

else { x1=(-b+sqrt(d))/(2*a);x2=(-b+sqrt(d))/(2*a);printf(“第一个根是%lf,第二个根是%lf”,x1,x2);} }

(4)请编一程序,用赋初值的方法使c1、c2、c3、c4、c5 五个变量的值分别 为’c’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5 分别变为’G’、’l’、’m’、’r’、’e’,并输出,分析是否符合要求。

源代码:

/* Note:Your choice is C IDE */ #include “stdio.h” void main(){ char c1,c2,c3,c4,c5;c1='c';c2='h';c3='i';c4='n';c5='a';printf(“%c%c%c%c%c” ,c1,c2,c3,c4,c5);c1=c1-28;c2=c2-28;c3=c3+4;c4=c4+4;c5=c5+4;printf(“%cn”,c1);printf(“%cn”,c2);printf(“%cn”,c3);printf(“%cn”,c4);printf(“%cn”,c5);

实验3-5 选择结构程序设计

}

3、编程判断从键盘上输入的正整数是否既是5又是7的倍数,若是,则输出yes,否则输出no

#include “stdio.h” void main(){

} int a,b;printf(“请输入一个正整数”);scanf(“%d”,&a);if(a%5==0&&a%7==0)printf(“yes”);else printf(“no”);

4、输入一个年份,判断是否是闰年?

闰年的条件

能被4整除,但不能被100整除。能被4整除,又能被400整除 #include void main(){

int a;

printf(“请输入一个年份”);

scanf(“%d”,&a);

if((a%4==0&&a%100!=0)||(a%4==0&&a%400==0))

printf(“是闰年”);

else

printf(“不是闰年”);}

5、编写一个程序,从键盘输入三个数a,b,c,编程输出最大的数和最小的数。

#include void main(){ int a,b,c,max;printf(“请输入三个数字”);scanf(“%d%d%d”,&a,&b,&c);max=(a>b?a:b);max=(max>c?max:c);printf(“%d”,max);

用?表达式计算四级成绩是否通过,大于425分则输出通过,否则输出不通过。源代码:

#include void main(){ int a;printf(“请输入四级成绩”);scanf(“%d”,&a);printf(“%s”,a>425?“通过”:“不通过”);}

2、用?表达式对输入的一个字母进行判断,如果是大写则转换为小写,如果是小写则转换为大写输出。

#include “stdio.h” void main(){ char a,b;printf(“请输入一个字母”);scanf(“%c”,&a);if(64

{b=(a<97?a+32:a-32);printf(“%c”,b);}

else printf(“请重新输入”);}

3、从键盘上输入x的值,按下式计算y的值。(要求用两种if结构实现,一种是串行if结构,无论什么数都必须比较三次;一种是多分枝if结构,可以减少比较次数)

x x<1y2x1 1x<10 3x11 x10

#include “stdio.h” void main(){ double x,y;printf(“请输入一个x”);scanf(“%lf”,&x);if(x<1)y=x;if(1<=x&&x<10);y=2*x-1;if(x>=10)y=3*x-11;printf(“%lf”,y);}

第二种结构

#include “stdio.h” void main(){ double x,y;printf(“请输入一个x”);scanf(“%lf”,&x);if(x<1)y=x;else if(1<=x&&x<10)y=2*x-1;else if(x>=10)y=3*x-11;printf(“%lf”,y);}

4、编写程序,给出一个百分制成绩,要求输出相应的等级A、B、C、D、E。90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。(要求用多分枝if结构实现)

#include “stdio.h” void main(){ int x;char y;printf(“请输入你的成绩”);scanf(“%d”,&x);if(x>90)y='A';

if(x>80&&x<90)y='B';

if(x>70&&x<80)y='C';if(x>60&&x<70)y='D';if(x<60)y='E';printf(“你的成绩是%c”,y);

5、输入三个数,如果能构成三角形,则输出三角形的类型(钝角、锐角、直角),否则输出不能构成三角形。

#include “stdio.h” void main(){ double a,b,c;printf(“请输入三角形的三个边”);scanf(“%lf%lf%lf”,&a,&b,&c);if(a>b+c||b>a+c||c>a+c)printf(“不是三角形”);else if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==b*b+a*a)printf(“是直角三角形”);else if(a*a>b*b+c*c||b*b>a*a+c*c||c*c>b*b+c*c)printf(“是钝角三角形”);else if(a*a

printf(“是锐角三角形”);}

6、输入三个数a,b,c,要求按由小到大的顺序输出。

#include “stdio.h” void main(){

int a,b,c,t;printf(“请输入三个数”);scanf(“%d%d%d”,&a,&b,&c);

if(a>b)

{

t=a;

a=b;

b=t;

} if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf(“%d %d %d”,a,b,c);

1、运输公司对用户计算运费。

路程(s)越远,每公里运费越低。标准如下:

s<250km

没有折扣

250≤s<500

2%折扣

500≤s<1000

5%折扣

1000≤s<2000

8%折扣

2000≤s<3000

10%折扣

3000≤s

15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为: f=p*w*s*(1-d)

要求分别用if else if多分支选择结构和switch多分支结构实现。

#include “stdio.h” void main(){ int p,w,s;double f;printf(“请由此输入基本运费为p,货物重为w,距离为s”);scanf(“%d %d %d”, &p,&w,&s);if(s<250)f=p*w*s;else if(s<500)f=p*w*s*(1-0.02);else if(s<1000)f=p*w*s*(1-0.05);else if(s<2000)f=p*w*s*(1-0.08);else if(s<3000)f=p*w*s*(1-0.10);else if(s>3000)f=p*w*s*(1-0.15);

printf(“%f”,f);} 方法2

#include “stdio.h” void main(){ double p,w,d,f;int s;scanf(“%lf%lf%d”,&p,&w,&s);switch(s/250){ case 0:d=0;break;case 1:d=0.02;break;case 2: case 3:d=0.05;break;case 4: case 5: case 6: case 7:d=0.08;break;case 8: case 9: case 10: case 11:d=0.1;break;default:d=0.15;} f=p*w*s*(1-d);printf(“总运费=%f”,f);}

2、编写程序,判断一个学生成绩的R 优、良、中、差R : 假如从键盘输入的字母是‟ A‟,输出评语”You are Excellent!”;如果输入 „B‟,输出评语”You are well!”;如 果输入‟ C‟,输出评语”You are passing!”;如果输入‘ D’,输出评语“You are notpassing!“。如果输入的不是这四个字母,则出现提示“Input error!” 请编写一个程序,实现该判断功能。要求必须使用switch-case 结构实现。

#include “stdio.h” void main(){ char a;int b;printf(“请输入你成绩的等级”);scanf(“%c”,&a);

switch(a){ case 'A': printf(“You are Excellent!”);

break;case 'B': printf(“You are well!”);break;case 'C': printf(“You are passing!”);

break;case 'D': printf(“You are notpassing!”);break;default: printf(“Input error!”);break;

} }

3、编写一个简单计算器程序,输入格式为:data1 op data2。其中data1 和data2 是参加运算的两个数,op 为运算符,它的取值只能是+、-、*、/。要求必须使用switch-case 语句实现。

4、用while 完成计算自然数1-N之间的和。要求N从键盘输入,并输出结果。

#include “stdio.h” void main(){ double s=0;int n,i=0;printf(“请输入一个整数”);scanf(“%d”,&n);while(i<=n)

{s=i+s;i++;} printf(“%f”,s);}

实验6-7 循环结构程序设计

1、分别用while,do while 和for完成计算n!。要求N从键盘输入,并输出结果。

#include “stdio.h” void main(){ double s=1;int n,i=1;printf(“请输入一个整数”);scanf(“%d”,&n);while(i<=n)

{s=i*s;i++;} printf(“%f”,s);}

2、输入一个正整数n,统计不大于n值的所有偶数的和。(要求必须用do while实现)

#include “stdio.h” void main(){ int n,i=1;double s=0;printf(“请输入一个正整数”);scanf(“%d”,&n);do { s=2*i+s;i=i+2;}

while(2*i<=n);printf(“偶数项和%lf”,s);}

3、计算 s=1-1/3 + 1/5-1/7+„1/(2n-1)的值并输出,(必须使用do while实现)

#include “stdio.h” void main(){ int n,i=1,t=1;double s=0;printf(“请输入一个正整数”);scanf(“%d”,&n);do { s=t*(1.0/i)+s;t=-1;i=i+2;

}

while(i<=(2*n-1));printf(“和为%lf”,s);}

4、从键盘输入10个实型数,求其倒数的和并输出。

#include “stdio.h” void main(){ int i;double s=0,a;printf(“请输入10个正整数”);for(i=0;i<10;i++){ scanf(“%lf”,&a);s=1/a+s;}

printf(“和为%lf”,s);}

5、编写程序,求S=1/(1*2)+1/(2*3)+1/(3*4)+„前50 项之和。要求必须 使用for 语句实现。

#include “stdio.h” void main(){ int i;double s=0;

for(i=1;i<=50;i++){ s=(1.0)/(i*(i+1))+s;} printf(“S=1/(1*2)+1/(2*3)+1/(3*4)+…前50 项之和为%f”,s);}

6、输入10 个整数,统计同时能被3 和7 整除的个数,结果存放在变量nCount 中,将nCount 输出。要求必须使用do-while 语句实现。do While源码:

#include “stdio.h” void main(){

int i=1,nCount=0,n;printf(“请输入10个整数”);do { scanf(“%d”,&n);if(n%3==0&&n%7==0)nCount=nCount+1;i++;} while(i<=10);printf(“能被3和7整除的个数是%d”,nCount);}

1、打印出所有的“水仙花数”,所谓“水仙花数”是指一个3 位数,其各位数字立方和等于该数本身。例如:153 是一水仙花数,因为153=1^3+5^3+3^3.#include “stdio.h” void main(){

int i,g,s,b,n=0;for(i=100;i<999;i++){ b=i/100;s=i/10-(10*b);g=i-100*b-10*s;if(i==b*b*b+s*s*s+g*g*g){ n=n+1;printf(“水仙花数是%dn”,i);} } }

2、从键盘任意输入一个整数,判断它是否为素数。

#include “stdio.h” void main(){

int i,n,k=0;printf(“请输入一个整数”);scanf(“%d”,&n);for(i=2;i

printf(“%d是素数”,n);}

}

方法2;

#include “stdio.h” void main(){ int i,m;scanf(“%d”,&m);for(i=2;i

3、用循环结构程序设计方法,输出一个九九乘法表.源码:#include “stdio.h” void main(){ int i,j,s;for(i=1;i<9;i++){ for(j=1;j<9;j++){ s=i*j;printf(“%d*%d=%d ”,i,j,s);} printf(“%d*%d=%dn”,i,j,s);} }

4、从键盘输入10 个整数,统计其中正数、负数和零的个数,并在屏幕上依次输出。要求必须使用while 语句。#include “stdio.h” void main(){ int i=1,j=0,s=0,n=0,m;while(i<=10){ scanf(“%d”,&m);if(m>0)j=j+1;else if(m<0)s=s+1;else n=n+1;i++;} printf(“%d,%d,%d”,j,s,n);}

5、编程求1+(1+2)+..+(1+2+..+n),n 的值由键盘输入。要求使用for 语句实现

源码:

#include “stdio.h” void main(){ int i,s,t,n;s=0;t=0;scanf(“%d”,&n);for(i=1;i<=n;i++){ s=s+i;t=t+s;} printf(“%d”,t);}

实验8-9 数组的应用

(一)1、从键盘输入10 学生的成绩至数组中,将最低分和最高分的成绩输出,并输出所有成绩。

源码:

#include “stdio.h” void main(){ int i,n[10],max,min;printf(“请输入10个整数”);for(i=0;i<10;i++)scanf(“%d”,&n[i]);max=n[0];min=n[0];for(i=0;i<10;i++)if(maxn[i])min=n[i];for(i=0;i<10;i++){ printf(“n[%d]=%dn”,i,n[i]);} printf(“max=%d,min=%dn”,max,min);}

2、定义含有300 个元素的数组x,x[i]=10* tan((3.0+I*I)/ 5)(i=0,1,2..299),计算该一维数组的平均值,并求出此数组中大于平均值的数据之和,最后输出此数组的平均值及大于平均值的数据之和。

#include “stdio.h” #include “math.h” void main(){ int i;double s,n,a,x[300];for(i=0;i<300;i++){x[i]=10*tan((3.0+i*i)/5);} s=0;for(i=0;i<300;i++){ s=s+x[i];a=s/300;} n=0;for(i=0;i<300;i++){if(x[i]>a)n=n+x[i];} printf(“a=%f,n=%f”,a,n);}

3、定义含有300 个元素的数组y,y[i]=10* cos((3.0+i*i)/ 5)(i=0,1,2,…,299),计算一维数组的最大值及其所在位置(即下标),并输出此数组的最大值及其所在位置。

#include “stdio.h” #include “math.h” void main(){ int i,max_i;double y[300],max;for(i=0;i<300;i++){y[i]=10*cos((3.0+i*i)/5);}/*由于数据类型原因3必须写成3.0*/ max=0;for(i=0;i<300;i++){ if(max

4、编写程序求出555555 的约数中最大的三位数是多少。要求必须使用do-while 语句实现。

源码:

#include “stdio.h” #include “math.h” void main(){ int n=555555,i=999;do { if(n%i==0)break;else i--;} while(i>=100);printf(“555555的最大三位数的公约数是i=%d”,i);}}

5、输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出54321。注:1 不得使用数组;2 必须使用while 语句实现。

#include “stdio.h” void main(){ int n,k;printf(“请输入整数”);scanf(“%d”,&n);while(n){ k=n%10;printf(“%d”,k);n=n/10;} }

1、从键盘输入10个整数,用起泡法进行排序。

源码:

#include “stdio.h” void main(){ int a[10],i,j,t;for(i=0;i<10;i++){ scanf(“%d”,&a[i]);} for(j=0;j<9;j++)for(i=0;i<9-j;i++)if(a[i]>a[i+1]){ t=a[i];a[i]=a[i+1];a[i+1]=t;} for(i=0;i<10;i++)printf(“%d,”,a[i]);printf(“n”);}

2、有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。二维数组如下:

4 34 5 37 3 12 6 5 6 5 7 源码:

#include “stdio.h” void main(){ int max,i,j,im,jm;int a[3][4]={{4,4,34,5},{37,3,12,6},{5,6,5,7}};max=a[0][0];im=0;jm=0;for(i=0;i<3;i++)for(j=0;j<4;j++){ if(max

3、将一个二维数组行和列元素互换,存到另一个二维数组中并输出这两个矩阵。

原始矩阵如下:

0

源码:

#include “stdio.h” void main(){ int a[3][4]={{1,4,5,6},{3,2,7,8},{7,9,0,3}};int i,j,b[4][3];for(i=0;i<3;i++)for(j=0;j<4;j++)b[j][i]=a[i][j];

for(i=0;i<3;i++){ for(j=0;j<4;j++)printf(“%d ”,b[j][i]);

printf(“n”);} }

4、从键盘输入一个整数,把转换得到的二进制位存放在一维数组中并输出。

源码:

#include “stdio.h” void main(){ int n,i,j,a[100],t;scanf(“%d”,&n);t=n;i=0;while(t){ a[i]=t%2;t=t/2;i++;} for(j=i-1;j>=0;j--){ printf(“%d”,a[j]);} }

5、把200以内的所有素数存放到一维数组中并输出。

源码:

#include “stdio.h” void main(){ int i,m,j,k;int a[200];k=0;for(m=199;m>1;m--){ for(i=2;i

if(m%i==0)break;} if(i>=m)

a[k++]=m;} for(j=k-1;j>=0;j--)

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

1、从键盘输入长方形的长和宽,计算长方形的面积并输出用*表示的长方形图形。要求面积计算和图形输出分别用函数实现。

源码:

/* Note:Your choice is C IDE */ #include “stdio.h” int mianji(int w,int l)//此处的int与return有关,需要携带一个整数返回 { //形参的作用相当于定制式客户提供的尺寸等信息 int area;//函数体内部可以自由使用形参 area=w*l;return area;}

//函数的定义只是一个静态功能,此时不会做任何工作,具体使用要看调用者的函数调用

void printstar(int w,int l){ //void表示函数执行完毕不需要带任何结果回来,不能出现在等号后面,只能单独一条调用语句

int i,j;for(i=1;i<=w;i++){ for(j=1;j<=l;j++){printf(“*”);} printf(“n”);} }

void main(){int len,wid,area;scanf(“%d%d”,&wid,&len);//mianji(wid,len);//函数名(实参1,实参2)的方式使用函数,就叫函数调用,此时形参分配空间;

//实参的值拷贝给形参;执行函数体语句;最后用return携带结果返回。area=mianji(wid,len);//把return返回的结果赋值给area变量。只要函数有返回结果,它可以当作表达式来使用, //可以出现在等号后面任何相容的表达式中。printf(“area=%d”,area);printf(“n”);printstar(wid,len);//单独一条调用语句,void函数的标准使用格式 }

2、从键盘输入长方体的长和宽和高,计算长方体的表面积和体积,并在main函数中输出。要求面积计算和体积计算分别用函数实现。

源码:

#include “stdio.h” int bmj(int w,int l,int h)//此处的int与return有关,需要携带一个整数返回

{

//形参的作用相当于定制式客户提供的尺寸等信息 int area;//函数体内部可以自由使用形参 area=(w*l+w*h+l*h)*2;return area;}

int tj(int w,int l,int h)

{//形参中的每个变量要分别进行类型定义

int tj=w*l*h;return tj;}

void main(){int len,wid,high,area,vol;scanf(“%d%d%d”,&wid,&len,&high);area=bmj(wid,len,high);vol=tj(wid,len,high);printf(“area=%d,vol=%d”,area,vol);}

3、编写一个具有两个整形形参的函数max,返回较大值。在main函数中接受从键盘输入的两个整数,输出较大者。

源码:

#include “stdio.h” int maxli(int x,int y){ int max;if(x>y)max=x;else max=y;return max;

} void main(){ int max=1,a,b;printf(“请输入两个整数”);scanf(“%d%d”,&a,&b);max=maxli(a,b);printf(“最大数为%d”,max);}

4、编写一个无参且无返回值的函数,用来打印出所有的“水仙花数”,在、main函数中调用该函数。

所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如:153是一水仙花数,因为153=1^3+5^3+3^3.源码:#include “stdio.h” void shuixian(){

int i,g,s,b,n=0;for(i=100;i<999;i++){ b=i/100;s=i/10-(10*b);g=i-100*b-10*s;if(i==b*b*b+s*s*s+g*g*g){ n=n+1;printf(“水仙花数是%dn”,i);} } } void main(){ shuixian();

}

5、通过调用自定义函数来完成求圆柱体的体积(v=3.14*r2*h),要求圆柱体的高和底半径在主函数中做输入,圆柱体的体积在主函数中做输出。

源码:

#include “stdio.h” double yuanzhutiji(int r,int h){ double v;

v=3.14*r*r*h;return v;

} void main(){ int r,h;double v;printf(“请输入圆柱体的半径和高”);scanf(“%d%d”,&r,&h);v=yuanzhutiji(r,h);printf(“圆柱的体积是%f”,v);

}

6、通过函数调用求华氏温度,要求在主函数中输入摄氏温度,在主函数中输出华氏温度。(公式f=5/9*c+32)

源码:

#include “stdio.h” double huashidu(int c)

{

double h;h=32+c*1.8;return h;} void main(){ int c;double h;printf(“请输入摄氏度”);scanf(“%d”,&c);h=huashidu(c);printf(“%d摄氏度变成华氏度是%f”,c,h);}

4、有两个数组a和b,各有10个元素,将它们对应地逐个相比(即a[0]与b[0]比,a[1]与b[1]比……)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中相应元素的数目(例如,a[i]>b[i]6次,b[i]>a[i]3次,其中i每次为不同的值),则认为a数组大于b数组,并分别统计出两个数组相应元素大于、等于、小于的次数。要求用函数实现比较并返回结果。源码:

#include “stdio.h” int great(int a,int b){ int f;if(a>b)f=1;else if(a==b)f=0;else f=-1;return f;} void main(){ int a[10],b[10],i,j=0,k=0,m=0;printf(“请输入第一个数组10个元素n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“请输入第二个数组10个元素n”);for(i=0;i<10;i++)scanf(“%d”,&b[i]);for(i=0;i<10;i++){ if(great(a[i],b[i])==1)j++;else if(great(a[i],b[i])==0)k++;else if(great(a[i],b[i])==-1)m++;} printf(“a[i]大于b[i]的元素为%dn”,j);printf(“a[i]等于b[i]的元素为%dn”,k);printf(“a[i]小于b[i]的元素为%dn”,m);if(j>m)printf(“数组a大于数组b”);else printf(“数组b大于数组a”);}

界面截图:

5、用选择法对数组中10个整数按由小到大排序。要求主函数输入10个元素存入数组,调用排序函数实现数组元素的排序。

源码:

#include void main(){ int s[10];for(i=0;i<10;i++)scanf(“%d”,&s[i]);printf(“函数调用前数组元素值”);for(i=0;i<10;i++)

printf(“%d,s[i]”);sort(s);printf(“函数调用后数组元素值”); for(i=0;i<10;i++)printf(“%d,s[i]”);}

void sort(int a[10])

{int i,j,t,b;

for(i=0;i<9;i++){b=i;for(j=i+1;j<10;j++)

{if(a[n]>a[j])b=j;}} t=a[i];a[i]=a[b];a[b]=t;

}

1、编一函数,统计一维整数组小于数组元素平均值的元素的个数;主函数定义x[50],x[i]=600*cos(i*0.35), 调用函数,输出小于数组元素平均值的元素的个数。(注:此程序不允许使用全局变量,不允许在avernum函数中输出)

源码:

#include “stdio.h” #include “math.h” void main(){int avernum(double a[],int n);double x[50];int i,num;for(i=0;i<50;i++)x[i]=600*cos(i*0.35);num=avernum(x,50);printf(“小于平均值元素的个数为%d”,num);}

int avernum(double a[],int n){int i,count;double sum,ave;sum=0;for(i=0;i

源码:

#include “stdio.h” #include “math.h” void main(){ double qmin(double a[],int n);

double y[50],min;

int j;

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

y[j]=600*sin(j*0.16);

min=qmin(y,50);

printf(“最小值为%f”,min);}

double qmin(double a[],int n){int i;double min;min=a[0];for(i=0;ia[i])min=a[i];} return min;}

3、求一维整型数组中正数的和。要求:主函数定义数组a[10],从键盘输入十个数,调用自定义函数求出正数的和,然后在主函数中输出结果

源码:

#include “stdio.h” #include “math.h” void main(){ double qsum(double a[],int n);

double a[10],sum;

int j;

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

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

sum=qsum(a,10);

printf(“正整数之和是%f”,sum);}

double qsum(double a[],int n){ int i;

double sum;

sum=0;

for(i=0;i

{ if(a[i]>0)sum+=a[i];

} return sum;}

4、编写程序求下式的值:S=2^1*1!+2^2*2!+……+2^n*n!(n<10)(^表示乘方),要求不使用数学函数而采用如下方法:先编写两个函数分别求解2^n 和n!,再编写求解S的函数,求解过程中调用前两个函数。最后在主函数中输入n,调用求解S的函数完成任务。

源码:

5、编程验证歌德巴赫猜想:一个大于等于4的偶数都是两个素数之和,要求用函数实现(选作)

源码:

界面截图:

6、用户从键盘输入一个1—99999之间的数,编写一个函数判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都是回文数。(选作)

源码:

1、编一通用函数avermax,计算含有n个数据的一维数组的平均值,并求出此数组中大于平均值的数据之和;主函数中定义含有300个元素的数组x,x[I]=10* cos((3.0+I*I)/ 5)(I=0,1,2……299),调用上述函数,输出此数组的平均值及大于平均值的数据之和。

(注:此程序不允许使用全局变量,不允许在avermax函数中输出)源码:

#include #include double avermax(double a[],int n,double *m){ int i;double s,aver;aver=0;for(i=0;iaver)s+=a[i];} *m=s;return aver;} void main(){ double x[300],s,a;int i;for(i=0;i<300;i++)x[i]=10*cos((3.0+i*i)/5);a=avermax(x,300,&s);printf(“平均值是%fn”,a);printf(“大于平均值的和是%f”,s);} 界面截图:

2、编一通用函数avernum,计算含有n个数据的一维数组的平均值,并统计此数组中大于平均值的数据的个数;

主函数中定义含有100个元素的数组x,x[I]=200*cos(I*0.875)(I=0,1,2……99),调用上述函数,输出此数组的平均值及大于平均值的数据的个数。

(注:此程序不允许使用全局变量,不允许在avernum函数中输出)源码:

#include #include double avernum(double a[],int n,double *m){ int i;double s,aver;aver=0;for(i=0;iaver)s=s+1;} *m=s;return aver;} void main(){ double x[100],s,a;int i;for(i=0;i<100;i++)x[i]=200*cos(i*0.875);a=avernum(x,100,&s);printf(“平均值是%fn”,a);printf(“大于平均值的和是%f”,s);} 界面截图:

3、编一通用函数maxsub,求出含有n个数据的一维数组的最大值及其所在位置(即下标);主函数中定义含有300个元素的数组x,x[I]=10* cos((3.0+I*I)/ 5)(I=0,1,2……299),调用上述函数,输出此数组的最大值及其所在位置。

(注:此程序不允许使用全局变量,不允许在avermax函数中输出)源码:

#include #include double maxsub(double a[],int n,double *m){ int i,t,max=a[0];for(i=0;imax){max=a[i];t=i;} } *m=t;return max;} void main(){ double x[300],s,a;int i;for(i=0;i<300;i++)x[i]=10*cos((3.0+i*i)/5);a=maxsub(x,300,&s);printf(“最大值%fn”,a);printf(“位置%f”,s);} 界面截图:

4、编写函数,实现任何整形数组元素的逆置。在主函数调用该函数,完成10个数组元素的逆置。

源码:#include “stdio.h” void inverse(int a[],int n){ int i,j,m,t;j=n-1;m=(n-1)/2;for(i=0;i<=m;i++,j--){ t=a[i];a[i]=a[j];a[j]=t };} void main(){ int b[10];int *q,i;q=b;for(i=0;i<10;i++)scanf(“%d”,(q+i));inverse(b,10);for(i=0;i<10;i++)printf(“%d ”,*(q+i));}

界面截图:

5、编写程序求下式的值:S=2^1*1!+2^2*2!+……+2^n*n!(n<10)(^表示乘方),要求不使用数学函数而采用如下方法:先编写两个函数分别求解2^n 和n!,再编写求解S的函数,求解过程中调用前两个函数。最后在主函数中输入n,调用求解S的函数完成任务。

源码:

#include “stdio.h” int nj(int n){ int i=1,s=1;while(i<=n){ s=s*i;i++;} return s;} int nf(int n){ int i,s=1;for(i=1;i<=n;i++){s=s*2;} return s;} void main(){ int i,s=0,n;scanf(“%d”,&n);for(i=1;i<=n;i++){s=s+nj(i)*nf(i);} printf(“s=%d”,s);}

界面截图:

1、复制下面的程序并运行,观察程序运行的结果,并分析原因(注意程序第2行中有些单引号之间是空格)。

/*

c8-1.c

字符数组的输出*/ #include “stdio.h” void main(){ char a[10]={ ’I’, ’ ’, ’a’, ’m’, ’ ’, ’a’, ’ ’, ’b’, ’o’, ’y’};printf(“%sn”,a);} 将字符数组a的大小改为11,再运行程序,并将结果与修改前的结果进行比较,分析原因。

界面截图:

结果不一致的原因:%s只针对字符串有效,以’’结束的串或字符数组

2、用gets函数从键盘接收一行字符串,自定义函数strlength计算字符串的长度。源码: #include #include int strlength(char t[]);void main(){

char s[80];

int len;

gets(s);

len=strlength(s);

printf(“len=%d”,len);} int strlength(char t[]){ int i;i=0;while(t[i]!=''){i++;}

return i;

}

界面截图:

调用字符串库函数完成同样的功能。源码:

#include #include void main(){

char s[80];

int len;

gets(s);

len=strleng(s);

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

界面截图:

3、按照要求编写程序:有一行文字,不超过80个字符,分别统计出其中英文大写字母、小写字母、数字、空格、及其它字符的个数。源码:

#include #include void count(char *t);void main(){

char s[80];

gets(s);

count(s);}

void count(char *t){

int u,l,b,d,q;

u=l=b=d=q=0;

while(*t!='')

{

if(*t>='A'&&*t<='Z')u++;

else if(*t>='a'&&*t<='z')l++;

else if(*t>='0'&&*t<='9')d++;

else if(*t==' ')b++;

else q++;

t++;

}

printf(“大写字母个数是%dn”, u);

printf(“小写字母个数是%dn”,l);

printf(“数字个数是%dn”, d);

printf(“空格个数是%dn”, b);

printf(“其他个数是%dn”,q);}

4、自己定义一个函数strconnect,实现字符串的连接。在主函数中进行测试。

源码:

#include #include void stringcopy(char *s,char *t);void main(){

char s[80],t[40];

gets(s);

gets(t);

stringcopy(s,t);

printf(“链接后的字符串为%s”,s);}

void stringcopy(char *s,char *t){

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

s--;

while(*t='/0')

*s++=*t++;

*s='';}

5、编写一个函数,把字符串的所有小写字符转换成大写字符。并在主函数中测试。源码:

界面截图:

6、自己定义一个函数stringcopy,实现字符串的复制。在主函数中进行测试。源码:

界面截图:

调用字符串库函数完成同样的功能。

源码:

界面截图:

1、用结构体数组建立一张班级成绩单,包括每个学生的姓名、英语、数学、语文三门课程的成绩。用函数编程实现下列功能:

(1)输入每个学生的各项信息。

函数源码:

#include #include typedef struct grade {char name[20];int yw;int sx;int yy;} student;void input(student s[],int n){ int i;for(i=0;i

}

void print(student s[],int n){ int i;printf(“t姓名t语文t数学t英语n”);for(i=0;i

printf(“please input sx”);

printf(“please input yy”);printf(“n”);scanf(“%d”,&s[i].yw);scanf(“%d”,&s[i].sx);scanf(“%d”,&s[i].yy);}

void main(){

界面截图:

(2)输出每个学生的各项信息。函数源码:

界面截图:

(3)修改指定学生的指定数据项的内容。函数源码:

界面截图:

(4)统计每个同学的平均成绩(保留2位小数)。函数源码:

界面截图:

(5)输出各位同学的学号、姓名、三门课程的总成绩和平均成绩。函数源码:

界面截图:

student stu[5];int i;input(stu,5);print(stu,5);

第五篇: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题word格式文档
下载C语言编程100题.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


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

相关范文推荐

    c语言上机实习编程题

    班级:姓名:学号: 第一题 一、题目要求(11题) #include #include #defineN16 typedefstruct {charnum[10];ints; } STREC; STRECfun( STREC*a, char *b ) { int i; STREC str={"......

    计算机系C语言编程50题(含答案)

    1、输入1~10之间的一个数字,输出它对应的英文单词。 #include "stdio.h" main { int x; printf("please input x(1-10):n"); scanf("%d",&x); switch(x) { case 1:p......

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

    C语言程序设计习题(编程类) 1、从键盘输入任意的字符,按下列规则进行分类计数。第一类 '0','1','2','3','4','5','6','7','8','9' 第二类 '+','-','*','/','%�......

    编程语言学习心得

    程序语言学习的总结 通过两年的学习,我们基本上掌握了C语言,C++和C#三个编程课程。对于程序设计语言的学习,分为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须......

    C语言编程

    #include(stdio.h) main() { int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0}; char again='y'; while(again=='y') { srand((int)time(0)); while(i4) {......

    编程题总结

    大家必须掌握每种类型的1-3题。题号考点要求48、 将两个两位数的整数合并成一个整数 65、 两个正整数合并成一个整数 71、 两个正整数合并成一个整数 77、 两个正整数合并成......

    改错编程题

    实验二 VC++流程控制语句(一) 二 程序设计题 1、编写程序,输入一个不多于5位的整数,求出它是几位数,并分别打印出每一位数字,再按逆序打印出各位数字。 2、编写程序,输入三角形三边......

    vb语言编程教案

    课题:vb语言编程概述 课 时:2课时 授课时间:2011.09.05 课堂类型:讲授 教学目的:1.熟悉VB界面和VB集成开发环境; 2.在实际操作中学会编简单的VB应用程序; 教学要求:1. 掌握VB基础知......