您的位置:

c语言编程测验题绝对经典,c语言前三章测试

本文目录一览:

求助几道C语言编程题

#include "stdio.h"

void fun(int *n)

{while((*n)--);

printf("%d",++(*n));

}

void main()

{

int a=100;

fun(a);

}

结果100~1,(*n)--就是取指针N的前一个地址,因为C语言是从右往左计算的,所以要用(*n),不然就是*(n--)了

#include "stdio.h"

void main()

{

char *p="abcdefgh",*r;

long *q;

q=(long*)p;

q++;

r=(char*)q;

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

}

因为p在前面已经定义了,这里是说明(long *)的属性

#include "stdio.h"

sub(int *a,int n,int k);-这里要在main函数前面声明sub函数,不然会出错因为c是先声明后引用;

void main()

{

int x=0;

sub(x,8,1); 把x的地址传入sub中 符号是取地址,常与指针合用如 int *p,q;p=%q就是把q的地址付给p,p是指向q的指针,改变p的值就是改变q的值

printf("%d\n,x");

}

sub(int *a,int n,int k)

{

if(k=n)

sub(a,n/2,2*k) 这里使用了一个递归函数

*a+=k;

}

收集各类贪心算法(C语言编程)经典题目

举个例子,假如你买东西,老板需要找给你99分钱,他有上面面值分别为25分,10分,5分,1分的硬币(都是假如,不符合实际),他得找你3个25分,2个10分的,4个1分的才为最佳方案!

用贪心算法编写程序实现!

main()

{

int

i,a[5],b[4],c[4];

/*

define

the

type

of

the

money*/

a[1]=25;

a[2]=10;

a[3]=5;

a[4]=1;

printf("please

input

you

money

(fen):\n");

scanf("%d",b[0]);

for

(i=1;i=4;i++)

{

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

/*take

n

25

off

and

money

left*/

c[i]=(b[i-1]-b[i])/a[i];

/*

n

*/

printf("%d

is

%d\n",a[i],c[i]);

}

getch();

}

求C语言编程题

逻辑运算和判断选取控制

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

#includestdio.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();

}

2、试编程判断输入的正整数是否既是5又是7的整数倍数。若是,则输出yes;否则输出no。

#includestdio.h

int main()

{

int a;

printf("input a number:");

scanf("%d",a);

if(a%5==0 a%7==0)

printf("yes");

else

printf("no");

getch();

}

指针

1、编一程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔的输出该串,请用指针完成。

#includestdio.h

int main()

{

char string[]="computer";

char *p=string;

while(*p)

{

printf("%c",*p);

p++;

p++;

}

getch();

}

2、输入一个字符串string,然后在string里面每个字母间加一个空格,请用指针完成。

#includestdio.h

#includeCONIO.H

#includeSTDLIB.H

#define max 100

char * copyString;

void copy(char *,char*);

void insert(char *);

int main()

{

char * string;

string = (char *)malloc(max*sizeof(char));

scanf("%s",string);

insert(string);

printf("%s",string);

getch();

return 0;

}

void copy(char * c,char * s)

{

while(*s!='\0')

{

*c=*s;

s++;

c++;

}

*c='\0';

}

void insert(char * s)

{

copyString = (char*)malloc(2*max*sizeof(char));

copy(copyString,s);

while(*copyString!='\0')

{

*s=*copyString;

s++;

copyString++;

*s=' ';

s++;

}

*s='\0';

}

一.选择:

1.给出以下定义:

char acX[ ]= "abcdefg";

char acY[ ]= {'a','b','c','d','e','f','g'};

则正确的叙述为( )

A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相同

C) 数组acX的长度大于数组acY的长度 D) 数组acX的长度小于数组acY的长度

答案:C

2.

void example(char acHello[])

{

printf("%d", sizeof(acHello));

return;

}

void main()

{

char acHello[] = "hello";

example(acHello);//数组名称作参数,传的是地址,一个地址占四个字节

return;

}

的输出是

A 4 B 5 C 6 D不确定

答案:A

3. 有以下程序段

char acArr[]= "ABCDE";

char *pcPtr;

for(pcPtr = acArr; pcPtr acArr + 5; pcPtr++)

{

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

}

return;

输出结果是( )

A) ABCD B) A C) E D) ABCDE

B D BCDE

C C CDE

D B DE

E A E

答案:D

4.在中断中,不能同步获取信号量,但是可以释放信号量。

A.正确 B.错误

答案:A

5.以下叙述中不正确的是( )

A) 在不同的函数中可以使用相同名字的变量

B) 函数中的形式参数是局部变量

C) 在一个函数内定义的变量只在本函数范围内有效

D) 在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)

答案:D

6.设有如下定义:

unsigned long pulArray[] = {6, 7, 8, 9, 10};

unsigned long *pulPtr;

则下列程序段的输出结果为( )

pulPtr = pulArray;

*(pulPtr + 2) += 2;

printf ("%d,%d\n", *pulPtr, *(pulPtr + 2));

A)8,10 B)6,8 C)7,9 D)6,10

答案:D

7. 定义结构体时有下面几种说法,请指出正确的(多选):______

A、结构体中的每个部分,最好进行四字节对齐;

B、结构体的总长度最好是四字节对齐;

C、结构中成员的存放不用考虑字节对齐情况;

答案:A、B

8.void example()

{

int i;

char acNew[20];

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

{

acNew[i] = '0';

}

printf("%d\n", strlen(acNew));

return;

}

的输出为( )

A 0 B 10 C 11 D不确定

答案:D

9.switch(c)中的c的数据类型可以是char、long、float、unsigned、bool. ( )

A. 正确 B. 错误

答案:B

10. 网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是

大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。

A. 正确 B.错误

答案:A

11. struct stu

{

int num;

char name[10];

int age;

};

void fun(struct stu *p)

{

printf("%s\n", (*p).name);

return;

}

void main()

{

struct stu students[3]={ {9801,"Zhang",20},

{9802,"Wang",19},

{9803,"Zhao",18} };

fun(students + 2);

return;

}

输出结果是( )

A) Zhang B)Zhao C) Wang D) 18

答案:B

12.以下程序运行后,输出结果是( )

void main( )

{

char *szStr = "abcde";

szStr += 2;

printf("%lu \n",szStr);

return;

}

A cde B 字符c的ASCLL码值

C "abcde"这个常串中字符c所在的地址 D 出错

答案:C

13. 在X86下,有下列程序

#include stdio.h

void main()

{

union

{

int k;

char i[2];

}*s,a;

s = a;

s-i[0] = 0x39;

s-i[1] = 0x38;

printf("%x\n", a.k);

}

输出结果是( )

A) 3839 B) 3938 C) 380039 D) 不可预知

答案:D

14. 全局变量可以定义在被多个.C文件包含着的头文件中。

A. 正确 B. 错误

答案:B

15.void example()

{

int i;

char acNew[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

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

{

acNew[i] = '0';

}

printf("%d\n", strlen(acNew));

return;

}

的输出为:

A 0 B 10 C 11 D不确定

答案:B

16.下列定义正确的有(多选):( )

A: char *pcPtr = "abcd";

B: char pc[4]= "abcd";

C: char pc[] = "abcd";

D: char pc[] = 'abcd';

E: char pc[] = {'a','b','c','d','\0'};

F: char pc[] = 'a' 'b' 'c' 'd';

答案:ACE

17.在函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存是在栈内存中,所以在定义函数内部的变量的时候,一定要保证栈不能够溢出。如果临时变量

占用空间较大,应该使用内存申请的方式,这样该变量指向的内存就是在堆内存中了。

A. 正确 B. 错误

答案:A

18.局部变量可以和全局变量重名,编译的时候不会出现错误,但一旦不小心,就可能导致使用错误变量,所以在定时局部变量的时候,不要和全局变量重名。

A. 正确 B. 错误

答案:A

19.设有以下宏定义:

#define N 3

#define Y(n) ((N+1)*n) /*这种定义在编程规范中是严格禁止的*/

则执行语句:z = 2 * (N + Y(5 + 1));后,z的值为( )

A) 出错 B) 42 C) 48 D)54

答案:C

20. int *(*ptr)();

则以下叙述中正确的是( )

A) ptr是指向一维组数的指针变量

B) ptr是指向int型数据的指针变量

C) ptr是指向函数的指针,该函数返回一个int型数据

D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针

答案:D

21. 0x12345678 在采用BigEndian中内存的排列顺序是______,在采用LittleEndian内存中的排列顺序是_______.

(答案从左到右内存地址依次增加)

A.12 34 56 78 B.34 12 78 56

C.78 56 34 12 D.56 78 12 34

答案:A C

二、填空:

1. .struct tagAAA

{

unsigned char ucId:1;

unsigned char ucPara0:2;

unsigned char ucState:6;

unsigned char ucTail:4;

unsigned char ucAvail;

unsigned char ucTail2:4;

unsigned long ulData;

}AAA_S;

问:AAA_S在字节对齐分别为1、4的情况下,占用的空间大小是多少?

答案:9 12

2.typedef struct tagTest

{

UCHAR ucFlag;

ULONG ulLen;

}TEST_S;

TEST_S test[10];

四字节对齐方式时: sizeof(TEST_S) = ______, sizeof(test)________.

答案:8 80

3

char acHello[] = "hello\0world";

char acNew[15] = {0};

strcpy(acNew,acHello);

strlen(acNew) = _____

sizeof(acHello) = ______

答案:5 12

4.#pragma pack(4)/*编译选项,表示4字节对齐*/

int main(int argc, char* argv[])

{

struct tagTest1

{

short a;

char d;

long b;

long c;

};

struct tagTest2

{

long b;

short c;

char d;

long a;

};

struct tagTest3

{

short c;

long b;

char d;

long a;

};

struct tagTest1 stT1;

struct tagTest2 stT2;

struct tagTest3 stT3;

printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));

return 0;

}

#pragma pack()(编译选项结束)

请问输出结果是:_________

答案:12 12 16

5. enum ENUM_A

{

X1,

Y1,

Z1 = 5,

A1,

B1

};

enum ENUM_A enumA = Y1;

enum ENUM_A enumB = B1;

请问 enumA = ____; enumB = ______;

答案:1 7

6.以下程序的输出结果是________.

#include stdio.h

int fun(int x,int y)

{

static int m = 0;8

static int i = 2;3

i += m + 1;12

m = i + x + y;

return m;

}

void main()

{

int j = 4;

int m = 1;

int k;

k = fun(j, m);

printf("%d,", k);

k=fun(j, m);

printf("%d\n", k);

return;

}

答案:8 17

7.以下程序的输出结果为________

#define CIR(r) r*r /*请注意这种定义的缺陷,不允许这么定义*/

void main()

{

int a = 1;

int b = 2;

int t;

t = CIR(a + b);

printf("%d\n", t);

return;

}

答案:5

8.在VRP中,实现了strncpy类似的函数,定义如下:

#define CHAR char

#define ULONG unsigned long

#define VOID void

#define MACRO_COPYWORLDLENGTH 4

CHAR *VOS_strncpy(CHAR *pcDest, const CHAR *szSrc, ULONG ulLength)

{

CHAR *pcPoint = pcDest;

if(( NULL == szSrc ) || ( NULL == pcDest ) ))

{

return NULL;

}

while(ulLength (*pcPoint = *szSrc))/*这里采用了在判断语句中赋值的方式(*pcPoint = *szSrc),建议尽量不使用*/

{

pcPoint++;

szSrc++;

ulLength--;

}

if(!ulLength)

{

*pcPoint = '\0';

}

return pcDest;

}

VOID main(VOID)

{

CHAR szStrBuf[ ] = "1234567890";

CHAR szStrBuf1[ ] = "1234567890";

CHAR *szHelloWorld = "Hello World!";

strncpy(szStrBuf, szHelloWorld, MACRO_COPYWORLDLENGTH);

VOS_strncpy(szStrBuf1, szHelloWorld, MACRO_COPYWORLDLENGTH);

printf("%s %s", szStrBuf, szStrBuf1);

}

程序的输出结果为________

答案:Hell567890 Hell

9.

char acHello[] = "hello\0world";

char acNew[15] = {0};

memcpy(acNew,acHello,12);

strlen(acNew) = _____

sizeof(acHello) = _____

答案:5 12

10. typedef struct Head

{

UCHAR aucSrc[6];

ULONG ulType;

} HEAD_S;

在强制一字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制二字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制四字节对齐情况下,请指出sizeof(HEAD_S) = ________;

答案:10 10 12

11.union tagAAAA

{

struct

{

char ucFirst;

short usSecond;

char ucThird;

}half;

long lI;

}number;

struct tagBBBBB

{

char ucFirst;

short usSecond;

char ucThird;

short usForth;

}half;

struct tagCCCC

{

struct

{

char ucFirst;

short usSecond;

char ucThird;

}half;

long lI;

};

在字节对齐为1下,sizeof(union tagAAAA)、sizeof(struct tagBBBBB)、sizeof(struct tagCCCC)是____ ____ _____

在字节对齐为4下,sizeof(union tagAAAA)、sizeof(struct tagBBBBB)、sizeof(struct tagCCCC)是____ ____ _____

答案:4 6 8

8 8 12

12.struct tagABC

{

char cB;

short sC;

char cD;

long lA;

}*pAbc;

pAbc = 0x100000;

那么pAbc+0x100 = 0x_________; (ULONG)pAbc + 0x100 = 0x_________;(ULONG *)pAbc + 0x100 = 0x_________;(char *)pAbc + 0x100 = 0x_______;

答案:100C00 100100 100400 100100

13.unsigned long FUNC_C ( unsigned long ulAction )

{

unsigned long ulResult = 0 ;

switch ( ulAction )

{

case ACTION_A:

{

ulResult += 1 ;

break ;

}

case ACTION_B:

{

ulResult += 1 ;

}

default:

{

ulResult += 1 ;

}

}

printf( "ulResult = %u", ulResult ) ;

return ulResult ;

}

当输入为ACTION_B时,输出结果为: ulResult = _________;

答案:2(因为此分支没有break分支)

14.下面的代码中,函数Test执行完毕后,打印的结果是 _____。

unsigned long g_ulGlobal = 0;

void GlobalInit(unsigned long ulArg)

{

ulArg = 0x01;

return;

}

void Test()

{

GlobalInit(g_ulGlobal);

printf("%lu", g_ulGlobal);

return;

}

答案:0

15.以下程序的输出的结果是___________

int x = 3;

void incre();

void main()

{ int i;

for (i = 1; i x; i++)

{

incre();

}

return;

}

void incre()

{

static int x = 1;

x *= (x + 1);

printf("%d ",x);

return;

}

答案:2 6

16.以下程序的输出的结果是___________

#pragma pack(4)/*四字节对齐*/

int main(int argc, char* argv[])

{

unsigned char puc[4];

struct tagPIM

{

unsigned char ucPim1;

unsigned char ucData0:1;

unsigned char ucData1:2;

unsigned char ucData2:3;

}*pstPimData;

pstPimData = (struct tagPIM *)puc;

memset(puc, 0, 4);

pstPimData-ucPim1 = 1;

pstPimData-ucData0 = 2;

pstPimData-ucData1 = 3;

pstPimData-ucData2 = 4;

printf("%02X %02X %02X %02X\n", puc[0], puc[1], puc[2], puc[3]);

return 0;

}

#pragma pack()/*恢复缺省对齐方式*/

答案:01 26 00 00

17.

char *pcColor = "blue1" ;

char acColor[] = "blue1" ;

strlen(pcColor) = _____

strlen(acColor) = _____

sizeof(pcColor) = _____

sizeof(acColor) = _____

答案:5 5 4 6

18.

char str[] = "\\\0";

char *p = str;

int n = 1000;

请计算

sizeof (str ) = ____________

sizeof ( p ) = ______________

sizeof ( n ) = ______________

答案:3 4 4

19.UCHAR *pucCharArray[10][10];

typedef union unRec

{

ULONG ulIndex;

USHORT usLevel[6];

UCHAR ucPos;

}REC_S;

REC_S stMax,*pstMax;

四字节对齐方式时: sizeof(pucCharArray) = __指针的数组,每个指针的地址都是4字节____, sizeof(stMax)=_______, sizeof(pstMax)=__地址______,sizeof(*pstMax)=________.

答案:400 12 4 12

20.typedef union unHead

{

UCHAR aucSrc [6];

struct tagContent

{

UCHAR ucFlag[3];

ULONG ulNext;

}Content;

}HEAD_S;

32CPU,VC编译环境下:

在强制一字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制二字节对齐情况下,请指出sizeof(HEAD_S) = ________;

在强制四字节对齐情况下,请指出sizeof(HEAD_S) = ________;

答案:7 8 8

21.

UCHAR *pszTest = "hello";

UCHAR aucTest[] = "hello";

请问 sizeof(pszTest) = _____ , sizeof(*pszTest) = ______, sizeof(aucTest) = ______.

答案:4 1 6

22. struct BBB

{

long lNum;

char *pcName;

short sDate;

char cHa[2];

short sBa[6];

}*p;

p = 0x100000;

p + 0x1 = 0x____

(unsigned long)p + 0x1 = 0x______

(unsigned long *)p + 0x1 = 0x______

(char *)p + 0x1 = 0x______

答案:100018 100001 100004 100001

23.在4字节对齐的情况:

typedef struct tagRec

{

long lA1;

char cA2;

char cA3;

long lA4;

long lA5;

} REC_S;

void main(int argc, char *argv[])

{

REC_S stMax ;

printf("\r\n sizeof(stMax)= %d",sizeof(stMax));

return;

}

输出结果为:

sizeof(stMax)=____

答案:16

24.void main ()

{

unsigned long ulA = 0x11000000;

printf("\r\n%x",*(unsigned char *)ulA);

return;

}

输出结果为:

答案:0

三、指出下列程序中导致不能出现预期结果的唯一错误(不考虑编程规范错误)

1.下面程序用于输出用户输入的字符串。请指出其中的问题

#define OK 0

#define ERR 1

#define ERROR (-1)

#define BUFFER_SIZE 256

int GetMemory(char **ppszBuf, int num)

{

if( NULL == ppszBuf )

{

ASSERT(0);

return ERROR;

}

*ppszBuf = (char *)malloc(num);

if(NULL == *ppszBuf)

{

return ERROR;

}

return OK;

}

void Test(void)

{

char *pcStr = NULL;

if(OK == GetMemory(pcStr, BUFFER_SIZE))

{

scanf("%s",pcStr);/*这里假定BUFFER_SIZE足够大,不会导致越界*/

printf(pcStr);

free(pcStr);

}

return;

}

答案:要采用printf("%s", str)的形式打印,否则如果输入为%s, %d等形式可能会导致不可知现象。

2.此函数实现把32位IP地址(主机序)以字符串的方式打印出来,请找出代码中的错误:

char *IpAddr2Str(unsigned long ulIpAddr)

{

char szIpAddr[32];

(void)VOS_sprintf(szIpAddr, "%d.%d.%d.%d", ulIpAddr 24,

(ulIpAddr 16) 0xff, (ulIpAddr 8) 0xff, ulIpAddr 0xff);

return szIpAddr;

}

答案:函数的局部变量是存放在堆栈中的,此函数返回了堆栈中的地址,函数退出后堆栈中的内容不可用。

3.如下程序用于输出"Welcome Home"。请指出其中的错误:

void Test(void)

{

char pcArray[12];

strcpy(pcArray,"Welcome Home");

printf("%s!", pcArray);

return;

}

答案:数组越界。

4.如下程序用于把"blue"字符串返回,请指出其中的错误:

char *GetBLUE(void)

{

char* pcColor ;

char* pcNewColor;

pcColor = "blue";

pcNewColor = (char*)malloc(strlen(pColor));

if(NULL == pcNewColor)

{

return NULL;

}

strcpy(pcNewColor, pcColor);

return pcNewColor;

}

答案:申请内存空间不足,字符串结尾还有'\0'。

5.下面程序期望输出str = hello world,请指出其中的错误:

char * GetStr(char *p)

{

p = "hello world";

return p;

}

void main()

{

char *str = NULL;

if(NULL != GetStr(str))

{

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

}

return;

}

答案:无法返回字符串,参数使用错误。

求高手解答C语言编程题~~~

#includestdio.h

double get_cos(double x);

double fun(double x,int n);

void main()

{

//cos(x)=1-x2/2!+x4/4!-x6/6!+……

// 要求:X的值由键盘输入(代表弧度),

//运算精度保持到最后一项的绝对值小于10的-6此方为止。

//注明(X4是x的4次方,X6是X的6次方)

printf("%lf\n",get_cos(1.57));

}

double get_cos(double x)

{

double val;

double rtn = 1;

int n = 2;

while (1)

{

val = fun(x,n);

if(n%2)

{

rtn += val;

}

else

{

rtn -= val;

}

n++;

if (val 10e-6)

{

break;

}

}

return rtn;

}

double fun(double x,int n)

{

long val = 1;

for(int i = 1; i n; ++i)

{

x *=x;

val*=i;

}

return (x/val);

}

按你提供的思路写的,没测过。。。

c语言编程100题,有没有大神帮帮忙

您好,c语言经典100题:

【程序1】

题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数

都是多少

1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去

掉不满足条件的排列.

2.程序源代码:

main()

{

int

i,j,k;

printf("\n");

for(i1;i5;i++)

/*以下为三重循环*/

for(j1;j5;j++)

for

(k1;k5;k++)

{

if

(i!ki!jj!k)

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

printf("%d,%d,%d\n",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);

bonus1100000*0.1;bonus2bonus1+100000*0.75;

bonus4bonus2+200000*0.5;

bonus6bonus4+200000*0.3;

bonus10bonus6+400000*0.15;

if(i100000)

bonusi*0.1;

else

if(i200000)

bonusbonus1+(i-100000)*0.075;

else

if(i400000)

bonusbonus2+(i-200000)*0.05;

else

if(i600000)

bonusbonus4+(i-400000)*0.03;

else

if(i1000000)

bonusbonus6+(i-600000)*0.015;

else

bonusbonus10+(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

(i1;i2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++;

printf("it

is

the

%dth

day.",sum);}

【程序4】

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

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

情况,闰年且输入月份大于3时需考虑多加一天。

2.程序源代码:

main()

{

int

day,month,year,sum,leap;

printf("\nplease

input

year,month,day\n");

scanf("%d,%d,%d",year,month,day);

switch(month)/*先计算某月以前月份的总天数*/

{

case

1:sum0;break;

case

2:sum31;break;

case

3:sum59;break;

case

4:sum90;break;

case

5:sum120;break;

case

6:sum151;break;

case

7:sum181;break;

case

8:sum212;break;

case

9:sum243;break;

case

10:sum273;break;

case

11:sum304;break;

case

12:sum334;break;

default:printf("data

error");break;

}

sumsum+day;

/*再加上某天的天数*/

if(year%4000||(year%40year%100!0))/*判断是不是闰年*/

leap1;

else

leap0;

if(leap1month2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++;

printf("It

is

the

%dth

day.",sum);}

【程序5】

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

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,

然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小.

2.程序源代码:

main()

{

int

x,y,z,t;

scanf("%d%d%d",x,y,z);

if

(xy)

{tx;xy;yt;}

/*交换x,y的值*/

if(xz)

{tz;zx;xt;}/*交换x,z的值*/

if(yz)

{ty;yz;zt;}/*交换z,y的值*/

printf("small

to

big:

%d

%d

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

a176,b219;

printf("%c%c%c%c%c\n",b,a,a,a,b);

printf("%c%c%c%c%c\n",a,b,a,b,a);

printf("%c%c%c%c%c\n",a,a,b,a,a);

printf("%c%c%c%c%c\n",a,b,a,b,a);

printf("%c%c%c%c%c\n",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

(i1;i10;i++)

{

for(j1;j10;j++)

{

resulti*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(i0;i8;i++)

{

for(j0;j8;j++)

if((i+j)%20)

printf("%c%c",219,219);

else

printf("

");

printf("\n");

}

}

【程序10】

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

1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j;

printf("\1\1\n");/*输出两个笑脸*/

for(i1;i11;i++)

{

for(j1;ji;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;

f1f21;

for(i1;i20;i++)

{

printf("%12ld

%12ld",f1,f2);

if(i%20)

printf("\n");/*控制输出,每行四个*/

f1f1+f2;

/*前两个月加起来赋值给第三个月*/

f2f1+f2;

/*前两个月加起来赋值给第三个月*/

}

}

【程序12】

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

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数.

2.程序源代码:

#include

"math.h"

main()

{

int

m,i,k,h0,leap1;

printf("\n");

for(m101;m200;m++)

{

ksqrt(m+1);

for(i2;ik;i++)

if(m%i0)

{leap0;break;}

if(leap)

{printf("%-4d",m);h++;

if(h%100)

printf("\n");

}

leap1;

}

printf("\nthe

total

is

%d",h);

}