c语言程序网(C语言程序设计教程)

admin 350 0

大家好,今天小编来为大家解答c语言程序网这个问题,C语言程序设计教程很多人还不知道,现在让我们一起来看看吧!

一、c语言用什么软件编写

1、TurboC是由美国Borland公司开发的一套C语言程序开发工具,Borland公司是一家专门从事软件开发、研制的大公司。该公司相继推出了一套Turbo系列软件,如TurboBASIC、TurboPascal、TurboProlog,这些软件很受用户欢迎。TurboC集成了程序编辑、调试、链接等多种功能。

2、WIN-TC是一个TC2WINDOWS平台开发工具。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。

二、求C语言编程题

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

printf("\n%d",(a*a+b*b)/100);

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

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

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

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

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

while(*copyString!='\0')

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

请问 enumA= ____; enumB= ______;

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

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

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

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

#define MACRO_COPYWORLDLENGTH 4

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

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

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

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

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

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

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

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

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

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

那么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)

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

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

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

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

void GlobalInit(unsigned long ulArg)

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

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

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

pstPimData=(struct tagPIM*)puc;

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

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

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

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

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

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

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

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

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

(unsigned long)p+ 0x1= 0x______

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

答案:100018 100001 100004 100001

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

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

unsigned long ulA= 0x11000000;

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

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

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

int GetMemory(char**ppszBuf, int num)

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

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

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

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

char*IpAddr2Str(unsigned long ulIpAddr)

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

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

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

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

strcpy(pcArray,"Welcome Home");

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

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

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

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

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

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

三、急求C语言的编写程序

(1)为了方便验证减少不必要的重复输入,这里我用了随机数产生成绩,姓名和学号用了默认值(只有前10个,此时超过前10个则会为空),你可以按注释的提示稍加修改,即可以进行人工的输入,输入多少即为多少个了。

建议如果不是手工的输入,而是进行验证程序,开始可输入小于等于10的学生个数

(2)因为验证用了默认的数据,故为了对比输入的数据和排序后的数据的异同,在输入完成和排序完成后进行了两次输出,便于比对。

#include"time.h"//这两个头文件的引入是为了随机数和随机数种子

void av(float student[N+1][b]){//求每个人总成绩并保存入数组

student[i][b-1]+=student[i][j];

void sum(float student[N+1][b]){//求所有人某科总成绩并保存

student[a-1][3]+=student[i][3];

student[a-1][1]+=student[i][1];

student[a-1][2]+=student[i][2];

student[a-1][0]+=student[i][0];

void input(float student[N+1][b]){//输入

/*printf("依次输入第%d个人语、数、外每科成绩:",i+1);*/

student[i][j]=rand()%50+51;//此处为了方便检验程序,用了随机数来代替了手工的输入,想输入只需注释此句,将/**/注释的两句取消注释即可。如果是手工的输入,最好是一个人的不同科成绩用空格分开,输入完一个人的三门成绩后,敲回车继续下一个人的成绩

/*scanf("%d",&student[i][j]);*/

void sort(float student[N+1][b],char name[N][20],char number[N][20]){//最简单的选择排序

for(j=i+1;j<a-1;j++)//每次找出一个最大的值放到合适的位置

if(student[max][b-1]<student[j][b-1])

student[i][j]=student[max][j];

strcpy(number[i],number[max]);

void myprint(float student[N+1][b],char name[N][20],char number[N][20]){//输出结果

printf("次序----学号------姓名------高数------英语-----C语言--三科总成绩--个人平均成绩\n\n");

printf("%10.1f",student[i][j]);

printf("%12.2f",student[i][b-1]/(float)(b-1));

printf("各科平均分对应为:%15.2f%10.2f%10.2f%10.2f\n\n",student[a-1][0]/(float)(a-1),student[a-1][1]/(float)(a-1),student[a-1][2]/(float)(a-1),student[a-1][3]/(float)(a-1));

char name[N][20]={"张三","李四","王五","赵六","刘七","马八","大毛","二毛","三毛","小毛"};

char number[N][20]={"20070201","20070202","20070203","20070204","20070205","20070206","20070207","20070208","20070209","20070210"};

/*printf("请输入学生的学号和姓名:\n");/为了验证方便,所以使用了默认值。如果要自己输入可以去掉int i行和此行到for结束部分注释内容即可输入学生的姓名和学号

printf("\n\n输入的各同学的成绩如下所示:\n\n");

printf("\n\n按降序排序后各同学的成绩如下所示:\n\n");

程序写的较简单,只是加了必要的注释,相信你一定可以看明白的,呵呵

如果你还想了解更多这方面的信息,记得收藏关注本站。