C语言习题_经典习题_C语言教程
学了这么多语言,发现有好多习题在每种语言的学习中都会有,这些题不仅常考,实践中也经常用到,希望刚学习语言的各位学弟学妹能够熟练掌握。以后我们可以来这里讨论一些更深入的编程技巧,那才是编程快乐的源泉。
举几个例子,难免挂一漏万,请各位前辈指教。
了解语言面貌
helloworld
判断的使用
求一元二次方程的根
判断闰年
输入三个整数,把这三个数由小到大输出
循环的使用
判断素数
找出1000以内的水仙花数
找出1000以内的所有完数
求两个数的最大公约数和最小公倍数(用辗转相除法或辗转相减法)
分解质因数
输出9*9口诀
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
猜数游戏(计算机给出随机数,由用户来猜。)
字符的处理
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
文件的处理
将两个文本文件合并成一个新的文本文件
/*helloworld*/
#include
void main()
{
printf(hello world!);
}
/*功能:求一元二次方程的解。*/
#include math.h
main()
{float a,b,c,disc,x1,x2,p,q;
scanf(“%f,%f,%f”, &a, &b, &c);
disc=b*b-4*a*c;
if (fabs(disc)<=1e-6) /*fabs():求绝对值库函数*/
printf(“x1=x2=%7.2f\n”, -b/(2*a)); /*输出两个相等的实根*/
else
{ if (disc>1e-6)
{x1=(-b+sqrt(disc))/(2*a); /*求出两个不相等的实根*/
x2=(-b-sqrt(disc))/(2*a);
printf(x1=%7.2f,x2=%7.2f\n, x1, x2);
}
else
{p=-b/(2*a); /*求出两个共轭复根*/
q=sqrt(fabs(disc))/(2*a);
printf(“x1=%7.2f + %7.2f i\n“, p, q); /*输出两个共轭复根*/
printf(”x2=%7.2f - %7.2f i\n“, p, q);
}
}
}
/*功能:判断闰年*/
main()
{int year,leap=0; /* leap=0:预置为非闰年*/
printf(Please input the year:);
scanf(%d,&year);
if (year % 4==0) {if (year % 100 != 0) leap=1;}
else {if (year%400==0) leap=1; }
if (leap) printf(%d is a leap year.\n,year);
else printf(%d is not a leap year.\n,year);
}
利用逻辑运算能描述复杂条件的特点,可将上述程序优化如下:
main()
{int year;
printf(Please input the year:);
scanf(%d,&year);
if ((year%4==0 && year%100!=0)||(year%400==0))
printf(%d is a leap year.\n,year);
else
printf(%d is not a leap year.\n,year);
}
/*功能: 输入任意三个整数num1、num2、num3,求三个数中的最大值。*/
main()
{int num1,num2,num3,max;
printf(Please input three numbers:);
scanf(%d,%d,%d,&num1,&num2,&num3);
if (num1>num2)
max=num1;
else
max=num2;
if (num3>max)
max=num3;
printf(The three numbers are:%d,%d,%d\n,num1,num2,num3);
printf(max=%d\n,max);
}
main()
{ int i=11, j, counter=0;
for( ; i<=100; i+=2) /*外循环:为内循环提供一个整数i*/
{ for(j=2; j<=i-1; j++) /*内循环:判断整数i是否是素数*/
if(i%j= =0) /*i不是素数*/
break; /*强行结束内循环,执行下面的if语句*/
if(counter%10= =0) /*每输出10个数换一行*/
printf(“\n”);
if( j >= i ) /*整数i是素数:输出,计数器加1*/
{ printf(“%6d”,i);
counter++;
}
}}
将两个文本文件合并成一个新的文本文件
这倒有个现成的(十年历史以上):
/*
** ATTACH.C
**
** 将第一个文件(虱子)加放在第二个文件(狗)的尾后。
** 若然第二个文件不存在,就自行起个新的。
** wing1978@sohu.com
*/
#define ATTACH_BUFFER_SIZE 32768 // 64KB 以下
/*--------------------------------- Includes --------------------------------*/
#include
#include
#include
/*----------------------------- Global Variables ----------------------------*/
FILE *Flea, *Dog; // 将虱子放在狗身上
unsigned int BlockSize;
unsigned int ReadSize;
int Quiet = 0; // 没人反对便开口说话
char DogMode[3] = {'a', 'b', '\0'}; // 没指示便加长文件
unsigned char p[ATTACH_BUFFER_SIZE];
/*------------------------ Local function prototypes ------------------------*/
static void Exit (int);
/*------------------------------ Main Function ------------------------------*/
int main (int ArgC, char *ArgV[])
{
char Option;
if (ArgC < 3) {
printf( \n\n用法 : %s 虱子 狗儿 [q/Q]\n, *ArgV[0]);
printf( \n我们是要将虱子放在狗儿身上。\n);
printf( q/Q 不动声息地\n);
printf( o/O 不作声还把狗儿也去掉,只剩下虱子。\n);
return 1;
}
if (ArgC > 3) {
Option = (char)toupper( *ArgV[3]);
if ('Q' == Option)
Quiet = 1;
else if ('O' == Option) {
Quiet = 1;
DogMode[0] = 'w';
}
}
if (NULL == (Flea = fopen( ArgV[1], rb)))
Exit( 2);
if (NULL == (Dog = fopen( ArgV[2], DogMode)))
Exit( 3);
BlockSize = ATTACH_BUFFER_SIZE;
if (!Quiet) {
printf( 缓冲区大少是 %u bytes.\n, BlockSize);
printf( ... %s 狗儿跑得还不慢呢 ..., ArgV[2]);
}
while (0 < (ReadSize = fread( p, 1, BlockSize, Flea))) {
fwrite( p, ReadSize, 1, Dog);
}
fclose( Flea);
fclose( Dog );
if (!Quiet ) {
printf( 叮上了。\n);
}
Exit( 0);
return 0; // make ANSI checker happy
} // main ()
/*
** Exit()
*/
static void Exit (int Rc)
{
if (!Quiet) {
switch (Rc) {
case 2:
printf( \n虱子太小 (第一份文件开不成)\n);
break;
case 3:
printf( \n狗儿太快 (第二份文件开不成)\n);
break;
case 4:
printf( \n狗儿没毛 (malloc 说没内存了)\n);
break;
}
}
exit( Rc);
} // Exit()
我想看C语言视频教程
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |