c语言——试题库编程题_[经典例题——60道]

目录:

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

2.(10分)编写函数fun(),它的功能是:计算和输出下列级数的和。

3.(10分)某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

4.(5分)下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。

5.(10分)判断一个素数能被几个9整除

6.(10分)将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

7.(5分)打印出如下图案

8.(10分)请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

9.(10分)古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

10.(5分)写程序,实现矩阵(3行3列)的转置(即行列互换)。

11.(10分)要求程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。

12.(10分)编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字母的大小写按不同字符处理。

13.(5分)试编程判断输入的正整数是否既是3又是5的整数倍数。若是,则输出yes;否则输出no。

14.(10分)有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

15.(10分)输入三个整数x,y,z,请把这三个数由小到大输出。

16.(5分)一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

17.(10分)将一个数组逆序输出。

18.(10分)求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

19.(10分)求1+2!+3!+...+20!的和

20.(10分)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

21.(10分)对10个数进行排序

22.(5分)一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   

23.(10分)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

24.(10分)从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。

25.(5分)以下程序的功能是输出如下形式的方阵:

26.(10分)请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。

27.(10分)请编写一个unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n>=2)位的整数,函数求出w的后n-1位的数作为函数值返回。

28.(5分)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出,所谓回文即正向与反向的拼写都一样,例如:adgda。请填空。

29.(10分)编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。

30.(10分)请编写函数fun,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa。

31.(5分)以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。

32.(10分)请编一函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。

33.(10分)请编写一个函数int fun(int x),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。

34.(5分)  以下sum函数的功能是计算下列级数之和。

35.(10分) 请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。

36.(10分)请编写函数fun,函数的功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

37.(10分)以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。

38.(10分) 请编写函数fun,经的功能是:求出1到1000之内能被7或11整除 但不能同时补7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

39.(10分)m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回。

40.(10分)  函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下

41.(10分)程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),函数的功能是:使数组右上半三角元素中的值全部置成0。

42.(10分)下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。

43.(10分)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

44.(10分)从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。

45.(5分)求1+2!+3!+...+20!的和

46.(10分)题目:打印出如下图案(菱形)

47.(10分)一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

48.(5分)编制程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数字之和。

49.(10分)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

50.(10分)输入两个正整数m和n,求其最大公约数和最小公倍数。

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

52.(10分)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

53.(10分)某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:

54.(5分)题目:有1、2、3个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

55.(10分)题目:判断101-200之间有多少个素数,并输出所有素数。

56.(5分)输出9*9口诀。

57. (10分)求一个3*3矩阵对角线元素之和  

58.(10分)将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5


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

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

2.程序源代码:

main()

{

int score;

char grade;

printf("please input a score\n");

scanf("%d",&score);

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

printf("%d belongs to %c",score,grade);

}

 

2.(10分)编写函数fun(),它的功能是:计算和输出下列级数的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,当n=10时,函数值为0.909091。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

double fun(int n)

{

  int i=1,j=2,k;

  double sum=0.0;

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

  {

    sum+=1.0/(i*j);

i++;

j++;

 }

  return sum;

}

main()

{

clrscr();

  printf("%f\n",fun(10));

}

 

3.(10分)某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上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]);

}

 

4.(5分)下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。

#include
main()
{ int i, j;
for(i=0; i<=9或i<10或9>=i或10>i; i++)
{ j=i*10+6;
if(j%3!=0或j%3 ) continue;
printf("%d",j);
}
}

 

5.(10分)判断一个素数能被几个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);

}

 

6.(10分)将一个正整数分解质因数。例如:输入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的值,重复执行第一步。

程序源代码:

/* 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);}

 

7.(5分)打印出如下图案


*

***

******

********

 程序源代码:

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");

}

}

 

8.(10分)请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入17,5,则应输出:19,23,29,31,37。

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写

的若干语句。

试题程序。

#include <conio.h>

#include <stdio.h>

/*本题中的for()循环用来判断一个数是否为素数,由于个数只能是k个所以用do-while循环来控制。*/

void fun(int m, int k, int xx[])

{ int i,j=0,p=m+1;

do

{for( i=2; i<p; i++)

if(p%i==0) break;

if(i>=p) xx[j++]=p;

p++;

} while(j<k);

}

main()

{ int m,n,zz[1000];

printf("\n please enter two integers: ");

scanf("%d%d",&m,&n);

fun( m,n,zz);

for(m=0; m<n; m++)

printf("%d ", zz[m]);

printf("\n");

}

 

9.(10分)古典问题:有一对兔子,从出生后第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; /*前两个月加起来赋值给第四个月*/

}

}

 

10.(5分)写程序,实现矩阵(3行3列)的转置(即行列互换)。

试题程序:

#include <stdio.h>

#include <conio.h>

int fun(int array[3][3])

{ int i,j,t;

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

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

{t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}

}

main()

{ int i,j;

int array[3][3]={{100,200,300},{400,500,600},{700,800,900}};

clrscr();

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

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

printf("%7d",array[i][j]);

printf("\n");

}

fun(array);

printf("Converted array:\n");

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

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

printf("%7d",array[i][j]);

printf("\n");

}

}

 

11.(10分)要求程序的功能是:把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。

试题程序。

#include <stdio.h>

#include <conio.h>

#define VSIZE 20

int vector[VSIZE];

/*注:该题的算法是用一个变量(j)来存储最小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较(if(list[i]<list[j]),如发现更小的则让j重新拥有最小值元素的下标(j=i)。*/

int fun(int list[],int size)

{ int i,j=0;

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

if(list[i]<list[j])

j=i;

return j;

}



main()

{

int i;

clrscr();

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

{

vector[i]=rand();

printf("Vector[%d]=%6d\n",i,vector[i]);

}

i=fun(vector,VSIZE);

printf("\nMininum:vector[%d]=%6d\n",i,vector[i]);

}

 

12.(10分)编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字母的大小写按不同字符处理。

若程序执行时,输入字符串为:turbo c and Borland c++

从键盘上输入字符:n,则输出后变为:turbo c ad borlad c++

如果输入的字符串不存在,则字符串照原样输出。

试题程序。

#include <stdio.h>

#include <conio.h>

/*注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果s[i]不是要删的字符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的方法。*/

int fun(char s[],int c)

{int i,k=0;

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

if(s[i]!=c) s[k++]=s[i];

s[k]='\0';

}



main()

{ static char str[]="turbo c and borland c++";

char ch;

clrscr();

printf(" :%s\n",str);

printf(" :");

scanf("%c",&ch);

fun(str,ch);

printf("str[]=%s\n",str);

}

 

13.(5分)试编程判断输入的正整数是否既是3又是5的整数倍数。若是,则输出yes;否则输出no。

#include<stdio.h>
int main()
{
 int a;
 printf("input a number:");
 scanf("%d",&a);
 if(a%3==0 && a%5==0)
  printf("yes");
 else
  printf("no");
  getch();
}

 

14.(10分)有一分数序列: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.6f\n",s);

}

 

15.(10分)输入三个整数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 %d\n",x,y,z);

}

 

16.(5分)一球从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 %f\n",sn);

printf("the tenth is %f meter\n",hn);

}

 

17.(10分)将一个数组逆序输出。

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]);

}

 

18.(10分)求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 n\n");

scanf("%d,%d",&a,&n);

printf("a=%d,n=%d\n",a,n);

while(count<=n)

{

tn=tn+a;

sn=sn+tn;

a=a*10;

++count;

}

printf("a+aa+...=%ld\n",sn);

}

 

19.(10分)求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!=%e\n",s);

}

 

20.(10分)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.程序分析:利用while语句,条件为输入的字符不为'\n'.

2.程序源代码:

#i nclude "stdio.h"

main()

{char c;

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

printf("please input some characters\n");

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=%d\n",letters,

space,digit,others);

}

 

21.(10分)对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;i<=n;i++) 

printf("a[%d]=",i);

scanf("%d",&a[i]);}

printf("\n");

for(i=0;iprintf("%5d",a[i]);

printf("\n");

/*sort ten num*/

for(i=0;i{min=i;

for(j=i+1;jif(a[min]>a[j]) min=j;

tem=a[i];

a[i]=a[min];

a[min]=tem;

}

/*output data*/

printf("After sorted \n");

for(i=0;i<=n;i++,printf("%5d",a[i]));

}

 

22.(5分)一个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 huiwen\n");

else

printf("this number is not a huiwen\n");

}

 

23.(10分)猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第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 %d\n",x1);

}

 

24.(10分)从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个#为止。

1.程序分析:     

2.程序源代码:

#include "stdio.h"

main()

{ FILE *fp;

char ch,filename[10];

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{printf("cannot open file\n");

exit(0);}

ch=getchar();

ch=getchar();

while(ch!='#')

{fputc(ch,fp);putchar(ch);

ch=getchar();

}

fclose(fp);

}

 

25.(5分)以下程序的功能是输出如下形式的方阵:

13 14 15 16
9 10 11 12
5 6 7 8
1 2 3 4


请填空。


main()
{ int i,j,x;
for(j=4; j >0 j--) 
{ for(i=1; i<=4; i++)
{ x=(j-1)*4 + 6 
printf("%4d",x);
}
printf("\n");
}
}

 

26.(10分)请编一个函数float fun(double h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如:h值为8.32433,则函数返回8.32;h值为8.32533,则函数返回8.33。

试题程序。

#include <stdio.h>

#include <conio.h>

/*注:h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底变成0 。*/

float fun(float h)

{ long t;

h=h*1000;

t=(h+5)/10;

return (float)t/100;

}

main()

{

float a;

clrscr();

printf("Enter a:"); scanf("%f",&a);

printf("The original data is:");

printf("%f\n\n",a);

printf("The result :%6.2f\n",fun(a));

}

 

27.(10分)请编写一个unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n>=2)位的整数,函数求出w的后n-1位的数作为函数值返回。

例如:w值为5923,则函数返回923;w值为923则函数返回23。

试题程序。

#include <conio.h>

#include <stdio.h>

/* 注:由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if()语句。 */

unsigned fun( unsigned w )

{ if(w>=10000) return w%10000;

if(w>=1000) return w%1000;

if(w>=100) return w%100;

return w%10;

}

main()

{ unsigned x;

printf( "enter a unsigned integer number :" );

scanf( "%u",&x);

if(x<10) printf("data error!");

else printf ("the result :%u\n", fun(x));

}

 

28.(5分)以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!,并在主函数中输出,所谓回文即正向与反向的拼写都一样,例如:adgda。请填空。

#include
char *huiwen(char *str)
{ char *p1,*p2; int i,t=0;
p1=str;p2= str+strlen(str)-1 
for(i=0;i<=strlen(str)/2;i++)
if(*p1++!=*p2--){t=1;break;}
if(t==0或!t ) return("yes!");
else return("no!");}
main()
{ char str[50];
printf("Input:"); scanf("%s",str);
printf("%s\n", huiwen(str) );}

 

29.(10分)编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。

试题程序。

#include <stdio.h>

#include <conio.h>

#define MAX 100

{ int i,j=0,k;

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

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

if( !(k%i)) break;

if( i>=k) aa[j++]=k;}

return j;}

main()

{ int limit,i,sum;

int aa[MAX];

printf("\n input a integer number:");

scanf(" %d",&limit);

sum=fun(limit,aa);

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

{ if(i%10==0&&i!=0)

printf("\n");

printf("%5d", aa[i]);}}

 

30.(10分)请编写函数fun,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa。

试题程序。

#include <string.h>

#include <conio.h>

#include <stdio.h>

int fun(char *s,int num)

{ int i,j,t;

for(i=1;i<num-2;i++)

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

if(s[i]<s[j])

{ t=s[i];

s[i]=s[j];

s[j]=t;

}

}

main()

{ char s[10];

clrscr();

printf("输入7个字符的字符串:");

gets(s);

fun(s,7);

printf("\n%s",s);}

 

31.(5分)以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。请填空。

main()
{ int i,a[20],sun,count;
suum=count=0;
for(i=0;i<20;i++) scanf("%d", __ &a __ );
fro(i=0;i<20;i++)
{ if(a>0)
{ count++;
sum+= ___ a ___
}
}
printf("sum=%d,count=%d\n",sum,count);
}

 

32.(10分)请编一函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。

试题程序。

#include "conio.h"

#include "stdio.h"

#define M 3

#define N 4

/*注:该题用for(i=0;i<N;i++)来控制一列一列地找,而内嵌循环for(j=0;j<M;j++)用于控制同列内元素的比较。多重循环的嵌套总是最里层循环变化最快,即外层循环改变一个值,内层循环就要循环完一次, */

void fun(int tt[M][N],int pp[N])

{ int i, j;

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

{ pp=tt[0][i];

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

if(tt[j][i]<pp[i]) pp[i]=tt[j][i];

}

}

main()

{ int t[M][N]={ {22,45,56,30},

{19,33,45,38},

{20,22,66,40}};

int p[N],i,j,k;

clrscr();

printf("the original data is:\n");

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

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

printf("%6d",t[i][j]);

printf("\n");

}

fun(t,p);

printf("\nthe result is:\n");

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

printf("%4d",p[k]);

printf("\n");

}

 

33.(10分)请编写一个函数int fun(int x),它的功能是:判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。

例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。x的值由主函数从健盘读入,要求不大于100。

试题程序。

#include "conio.h"

#include "stdio.h"

/*注:由“同构数”的定义可得只要求出平方数或平方数的最后一位或平方数的最后两位然后与x进行判断即可,分别求余后即得出平方数的右边。*/

int fun (int x)

{ int xx=x * x;

if(xx==x//xx%10==x//xx%100==x) return 1;

else return 0;

}

main()

{ int x,y;

clrscr();

printf("\n please enter a integer numbers: ");

scanf("%d",&x);

if(x>100){printf("data eror!\n");exit(0);}

y=fun(x);

if(y) printf("%d yes\n",x);

else printf ("%d no!\n",x);

}

 

34.(5分)  以下sum函数的功能是计算下列级数之和。

            S=1+x+x2/2!+x3/3!+........+xn/n!
            请给函数中的各变量正确赋初值。
            double  sum(  double  x, int  n )
            {  int i;  double  a,b,s;
               a=1.0;b=1.0;s=1.0;

               for( i=1;i<=n;i++)
               {  a=a*x;   b=b*i;    s=s+a/b; }
               return  s;
            }

 

35.(10分) 请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。

例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。

注意:部分源程序给出如下。

#include <stdio.h>

/*注:该题用while()循环来控制原字符串从头走到尾,在走动过程中判断是当前字符是否是数字,若是则在新串中先连一个'$'然后再连原字符,否则直接连原字符。一定要注意指针和下标的变化。最后要把新串拷贝到s所指的地址中,注意不能用s=a;若用了,则实参数组还是原字符串。*/

void fun( char *s)

{char a[100];

int i=0;

while(*s)

if(*s>='0'&&*s<='9') {a[i++]='$';a[i++]=*s++;}

else a[i++]=*s++;

a='\0';

strcpy(s,a);

}



main()

{ char s[80];

printf("enter a string:");

scanf("%s", s);

fun(s);

printf("the result: %s\n", s);

}

 

36.(10分)请编写函数fun,函数的功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,若输入:17,则应输出:9和4 6 8 9 10 12 14 15 16。

试题程序。

#include <conio.h>

#include <stdio.h>

/* 注:内嵌的for()循环用于判断是否是素数,在j<i的情况下,只要j对i求余,余数为0则表示i不是素数,则将i存入xx数组中。break;语句只是让它提前结束循环。不用亦可。*/

void fun( int m, int *k, int xx[] )

{ int i,j;

*k=0;

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

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

if( i%j==0)

{ xx[(*k)++]=i; break;}

}

main()

{ int m, n,zz[100];

printf("\n please enter an integer number between 10 and 100: "

);

scanf( "%d",&n);

fun(n,&m,zz);

printf("\n\n there are %d non-prime numbers less than %d: ", m,

n);

for(n=0; n<m; n++)

printf("\n %4d",zz[n]);

}

 

37.(10分)以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。

# define N 4
void rotate(int a[][N], int b[][N])
{ int i, j;
for (i=0; i
{ b[N-1] = a[0]   b[0] = a[N-1]; }
}

 

38.(10分) 请编写函数fun,经的功能是:求出1到1000之内能被7或11整除 但不能同时补7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写

的若干语句。

试题程序。

#include <conio.h>

#include <stdio.h>

/*该题关键就是如何表示能被7或11整除,但不能同时被7和11整除。用(i%7==

0)//(i%11==0)来表示能被7或11整除,用 !((i%7==0)&&(i%11==0))来表示不能同时被7和11整除。

void fun(int *a,int *n)

{ int i,m=0;

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

if(((i%7==0)//(i%11==0))&&!((i%7==0)&&(i%11==0)))

{a[m]=i;m+=1;}

*n=m;

}

main()

{ int aa[1000],n,k;

clrscr();

fun(aa,&n);

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

if((k+1)%10==0) printf("\n");

else printf("%d,",aa[k]);

}

 

39.(10分)m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回。

例如,当score 数组中的数据为:10 20 30 40 50 60 70 80 90 时,函数返回的人数应该是4,below中的数据应为:10 20 30 40。

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序。

#include <string.h>

#include <conio.h>

#include <stdio.h>

/*第一个for()循环用来计算score数组中分数的总和,然后用aver/=m求出平均值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要注意j的递增方式。*/

int fun(int score[],int m, int below[])

{ int i,j=0,aver=0;

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

aver+=score[i];

aver/=m;

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

if(score[i]<aver)

below[j++]=score[i];

return j;

}

main()

{ int i,n,below[9];

int score[9]={10,20,30,40,50,60,70,80,90};

clrscr();

n=fun(score,9,below);

printf("\nBelow the average score are :");

for(i=0;i<n;i++) printf("%4d",below[i]);

}

 

  1. 以下函数的功能是:求x的y次方,请填空。
  2. double fun( double x, int y)
    { int i;
    double z;
    for(i=1, z=x; i
    return z;
    }

     

40.(10分)  函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下

1
1 1
1 2 1

1 3 3 1
1 4 6 4 1


  其构成规律是:
第0列元素和主对角线无素均为1
其余元素为其左上方和正上方元素之和
数据的个数每行递增1
请将程序补充完整。

#defint  N 6
void YangHui(int *[N][N])
{ int i,j;
 x[0][0]=1
 for(i=1;i<N;i++)
 { x[0]=  x和x[i-1][j-1]+x[i-1][j] =1;
  for(j=1;j<i;j++)
   x[j]=  !(s>='0'&&s<='9')和'\0' 
 }
}

 

41.(10分)程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),函数的功能是:使数组右上半三角元素中的值全部置成0。

例如:a数组中的值为

,则返回主程序后a数组中的值应为

注意:部分源程序给出如下。

请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写的若干语句。

试题程序。

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 5

/*:该题的关键亦是在如何表示右上半角,当从上往下到第i行时要从第i列(所以内嵌for()的j从i开始循环)开始替换直到最后一列,本题用外层for()来控制行,而用内嵌的for()来控制在每一行内右边元素置0。

int fun(int a[][N])

{ int i,j;

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

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

a[i][j]=0;

}

main()

{ int a[N][N],i,j;

clrscr();

printf("***** The array *****\n");

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

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

{a[i][j]=rand()%20; printf("%4d",a[i][j]);}

printf("\n");

}



fun(a);

{printf("THE RESULT\n");

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

{for(j=0;j<N;j++) printf("%4d",a[i][j]);

printf("\n");

}

}

 

42.(10分)下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。

#include
main()
{ int i, j;
for(i=0; i<=9或i<10或9>=i或10>i; i++)
{ j=i*10+6;
if(j%3!=0或j%3 ) continue;
printf("%d",j);
}
}

 

43.(10分)一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如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("%d\n",k[n]);

}

}

}

 

44.(10分)从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以!结束。

1.程序分析:

2.程序源代码:

#include "stdio.h"

main()

{FILE *fp;

char str[100],filename[10];

int i=0;

if((fp=fopen("test","w"))==NULL)

{ printf("cannot open the file\n");

exit(0);}

printf("please input 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);

fp=fopen("test","r");

fgets(str,strlen(str)+1,fp);

printf("%s\n",str);

fclose(fp);

}

 

45.(5分)求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!=%e\n",s);

}

 

46.(10分)题目:打印出如下图案(菱形)

*

***

******

********

******

***

*

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");

}

}

 

47.(10分)一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

2.程序源代码:

#i nclude "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%ld\n",i);

}

}

 

48.(5分)编制程序要求输入整数a和b,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数字之和。

#include<stdio.h>
int main()
{
 int a,b;
 printf("input two number:");
 scanf("%d %d",&a,&b);
 if((a*a+b*b)>=100)
  printf("\n %d",(a*a+b*b)/100);
 else
  printf("\n %d",a+b);
  getch();
}

 

49.(10分)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

1.程序分析:利用while语句,条件为输入的字符不为'\n'.

2.程序源代码:

#i nclude "stdio.h"

main()

{char c;

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

printf("please input some characters\n");

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=%d\n",letters,

space,digit,others);

}

 

50.(10分)输入两个正整数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:%d\n",a);

printf("gongbeishu:%d\n",num1*num2/a);

}

 

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

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

2.程序源代码:

main()

{

int score;

char grade;

printf("please input a score\n");

scanf("%d",&score);

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

printf("%d belongs to %c",score,grade);

}

 

52.(10分)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如: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");

}

 

53.(10分)某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:

   每位数字都加上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]);

}

 

54.(5分)题目:有1、2、3个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

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,%d\n",i,j,k);

}

}

 

55.(10分)题目:判断101-200之间有多少个素数,并输出所有素数。

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

2.程序源代码:

#i nclude "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);

 

56.(5分)输出9*9口诀。

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

2.程序源代码:

#i nclude "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");/*每一行后换行*/

}

}

 

57. (10分)求一个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);

}

 

58.(10分)将一个正整数分解质因数。例如:输入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);}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘鑫磊up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值