大一c语言期末编程题(精选9篇)
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
is is printf(“nNo,the %ld is not palindrome!n”,num);} 4.求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并并按照一行5个的格式输出。
#include
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
average
6、编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1+1/3+1/5...+1/n #include
7、已知abc+cba=1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有 组合。
#include
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
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
number return sum;}
10、猜数游戏:由用户随机输入一个1位正整数数让人来猜,只能猜5次,如果人猜对了,则在屏幕上显示“You are so clever”,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止或者5次都猜不对给出提示“Game Over”。#include 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 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 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 15、编程求出所有1000到3000之间能被7、11、17同时整除的整数,并求其平均值,并输出结果(结果保留两位小数)。#include printf(“n%d”,sum/k);} 16、编程找出满足下列条件的所有四位数的和并输出:该数第一、三位数字之和为10,第二、四位数字之积为12。 #include 17、求并输出所有满足如下条件的三位正整数:它是某整数的平方,它的三位数码有两位是相同的。(如100是10的平方,它有两个0,225是15的平方,它有两个2)。#include if((a==b||a==c||b==c)&&n==i*i)printf(“%dt”,n);} } 18、输出所有大于1010的4位偶数,且该类偶数的各位数字两两不相同。#include 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 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 很多初学者弄不清指针和数组到底有什么样的关系,为避免混淆不清,下面总结一下指针和数组的特性。 指针是保存数据的地址,任何存入指针变量的数据都会被当作地址来处理,指针变量本身的地址由编译器另外存储,存储在哪里,我们并不知道,间接访问数据,首先取得指针变量的内容,把它作为地址,然后从这个地址读或写入数据。 指针可以用间接访问操作符(_)访问,也可以用以下标的形式访问,指针一般用于动态数据结构。 数组是用来保存数据的,数组名代表的是数组首元素的地址而不是数组的首地址,所以数组p与&p是有区别的,虽然内容相同,但意义却不同,&p才是整个数组的首地址,数组名是整个数组的名字,数组内每个元素并没有名字,不能把数组当一个整体来进行读写操作。 当然数组在初始化时也有例外,如int p[]=“12345”是合法的。 数组可以以指针的形式访问如_(p+i);也可以以下标的形式访问p[i],但其本质都是p所代表的数组首元素的地址加上i_sizeof(类型)个字节作为数据的真正地址来进行访问的。 数组通常用于存储固定数目且数据类型相同的元素。 刚开始的时候我 有点分不清指针数组和数组指针,现在也总结一下,指针数组,首先它是一个数组,数组的每个元素都是指针,可以理解为“存储指针的数组”的简称,数组指针,首先它是一个指针,它指向一个数组,在32位系统下永远只占4个字节,至于它指向的数组有多少个字节,并不知道,可以理解为“指向数组的指针”。 举个例子,int _p1[10]与int (_p2) [10], 要理解这个问题,首先要清楚操作符的优先级,“[]” 的优先级比“_”的优先级高,所以首先p1与“[10]”结合构成一个数组p1[10],int _为修饰数组的内容,所以数组元素是指向int类型的指针,所以这个是指针数组,“”的优先级比“[]”的优先级高,“_”与p2结合构成一个指针变量,int修饰数组的内容,即数组的每个元素,数组这里并没有名字,是个匿名数组,现在清楚了p2是一个指针,它指向一个包含10个int类型数据的数组,即为数组指针。 下面再说说内存管理,内存分为三个部分:静态区、堆、栈。 其实堆栈就是栈,而不是堆。 静态区是保存自动全局变量和static变量。 静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。 堆是由malloc系统函数分配内存的。 其生命周期由free和delete决定。 栈保存局部变量。 栈上的内容只在函数范围内存在,当函数运行结束,这些内容也会自动被销毁。 再说说有关内存需要注意的地方,定义了指针变量,在使用之前一定要初始化使它指向一块合法的内存,不管什么时候,我们在使用指针之前一定要确保指针是有效的。 使用malloc系列函数分配内存,使用完之后应及时释放内存,以防止内存泄露。 1、在底层驱动函数前加static标识符的作用: a:加了static后表示该函数失去了全局可见性,只在该函数所在的文件作用域内可见 b:当函数声明为static以后,编译器在该目标编译单元内只含有该函数的入口地址,没有函数名,其它编译单元便不能通过该函数名来调用该函数,这也是对1的解析与说明 2、底层驱动的封装模板 通常将存储类,显示类,AD-DA类的外设驱动函数封装为以下几个函数: Void Open(void); 此函数用于开启外设,通常函数体中包涵IO和外设的初始化 Void Close(void)此函数用于关闭外设,特别是一些在休眠下功耗很大的外设,可用mos管控制其Vcc的通断,以此达到降低系统功耗的目的 Void Read(unsigned int address,unsigned char *data[],unsigned int count) 此函数用于读取数据,参数分别为:address,地址,*data[],存放数据的数组,count,要读取的字节数 Void Write(unsigned int address,unsigned char *data[],unsigned int count)此函数用于写数据,参数功能与读函数中相似。 Void control(unsigned char cmd,unsigned char data)此函数用于控制外设的工作状态,如休眠,低功耗等等 3、命名规则 A、宏定义全部用大写 如:#define OLED_CS PBout(12)B、驱动函数名称大小写,并且动词放置在末尾如 static long _OLED_Close(void)C、结构体的名称,结构体名大写,变量名小写,“驱动”的首字母大写 如:struct OLED_DEVICE oledDevice; 4、关于外设的数据手册 一、定义 管道是单向的、先进先出的,它将一个程序的输入和另一个程序的输出连接起来。数据被一个进程读出后,将被从管道中删除。分为无名和有名管道两种。前者用于父进程和子进程间的通信,后者用于同一系统的两个进程间通信。 二、无名管道 int pipe(int fd[2]); 其中,fd[0]用于读管道,fd[1]用于写管道。若成功则返回零,否则返回-1,错误原因存于errno中。 三、有名管道:FIFO int mkfifo(const char* pathname,mode_t mode) open时使用O_NONBLOCK,访问要求无法满足则立即出错返回。erron是ENXIO。 例子: fread.c //读文件 #include #include #define FIFO “myfifo” main{ int fd; char buff[100]; if(access(FIFO,F_OK) == -1){ mkfifo(FIFO,0777); } fd=open(FIFO,O_RDONLY|O_NONBLOCK); //设置非阻塞打开,否则当没有输入时,会阻塞在read函数 int num; while(1){ memset(buff,‘ ‘,100); //如不清空最后的字符会出现乱码 if((num=read(fd,buff,100))==0){ printf(“waiting.....n”); sleep(1); continue; } printf(“read %d in fifo , it‘s %s”,num,buff); sleep(1); } } fwrite.c //写文件 #include #include #include #define FIFO “myfifo” main(){ int fd; char buff[100]; memset(buff,‘ ‘,100); scanf(“%s”,buff); if(access(FIFO,F_OK) == -1){ mkfifo(FIFO,0777); } fd=open(FIFO,O_WRONLY); int num; num=write(fd,buff,strlen(buff)); printf(“%d char is written! It‘s %sn”,num,buff); } · 所需具备的背景知识 · 开发所需的基本环境 · 获得帮助的途径 · 通过一个实例了解基本步骤 Prerequisite 先决条件: 在Linux上编写 C 程序,至少要熟悉以下两方面的基础知识: 1. C语言的编程基础,至少要知道一些基本的语法,控制流程等编程常识。 对常用的标准 C 函数库有常识性的了解。 2. 对Linux/UNIX 的操作有常识性的了解,掌握常用的shell 命令,如 ls, cat, cp, mkdir …etc. Environment 所需环境: 1. Linux/ Unix 的操作系统,也可以使用windows下的cygwin。 我们这里讨论的都是通过shell命令行进行操作的。那如果进入了图形界面的Linux 怎么办呢?只要打开一个终端命令,就和命令行环境完全一样了(打开开始菜单可以找到终端命令)。 2. 必备的开发工具: 1) 输入程序需要一个编辑器。常用的有 vi , emacs. 在命令行上输入 vi, emacs, … 就可进入编辑环境 关于 vi 关于 EMACS 2) C语言的编译器。常用的是GNU的c语言编译器 gcc(编译 C 程序), g++(编译 C ++程序)。 关于 gcc / g++ 关于 makefile >>>>用于简化编译过程 这里有一片入门文章 Linux下C语言编程基础知识,可以先看一下 3) 调试程序的常用工具:gdb. 关于 gdb Get help获得帮助: 关于 Linux 的文档是非常丰富的, 最快捷,方便,全面的资料就在你的机器里,不要浪费。 在命令行上输入shell命令 man 或者 info: $man gcc >>>>这个命令可以获得GNU 的C语言编译器的文档。当然,他们是英文的。 关于 man 关于 info 网络上的资源也很多,多得以至于不知道什么才是自己最需要的。关于如何获得有价值的信息 看一下 loveunix 上的相关资源 >>>> Basic steps 基本步骤: 1. 输入源代码 2. 编译,链接,运行 3. 调试程序 我们从最基本的 hello world 程序开始,实际操作一下: 1. 输入源代码 引用 $ emacs hello.c >>>>进入emacs 编辑器环境#include >>>如果你看不懂这个函数,就去好好的看c语言的书int main(){printf(“Hello World. ”); >>>>Emacs环境下,按下 Tab 键,有自动缩进功能exit(0);} 完成输入后,按住CTRL 键,按下 x, 再按下 c , 最后松开 CTRL。 >>>>程序保留并退出emacs 环境。 2. 编译,链接,运行 引用 $ gcc –o hello hello.c$ ./hello >>>>./ 指明了所执行程序的路径Hello World.$ 一个linux平台上的c程序开发已经完成咯 3. 调试 如果要使用 gdb 调试程序,那么在上一步编译的时候,记得加上 –g 选项 引用 $ gcc –g –o hello hello.c$ gdb hello >>>>进入 gdb 调试环境 void INT0()interrupt 0 using 1 {.........} interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; using 0 是第0组寄存器; using 1 是第1组寄存器; using 2 是第2组寄存器; using 3 是第3组寄存器; 例如: /*----------------- 外部中断程序-----------------*/ void ISR_Key(void)interrupt 0 using 1 { P1=~P1; //s3按下触发一次,P1取反一次 } /*----------------- 串口中断程序-----------------*/ void UART_SER(void)interrupt 4 //串行中断服务程序 { unsigned char Temp; //定义临时变量 if(RI) //判断是接收中断产生 { RI=0; //标志位清零 Temp=SBUF; //读入缓冲区的值 P1=Temp; //把值输出到P1口,用于观察 SBUF=Temp; //把接收到的值再发回电脑端 } if(TI) //如果是发送标志位,清零 struct node { int data; struct node *front,*next; }; 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除 BOOL DeteleNode(Node *pHeader, DataType Value) { if (pHeader == NULL) return; BOOL bRet = FALSE; Node *pNode = pHead; while (pNode != NULL) { if (pNode->data == Value) { if (pNode->front == NULL) { pHeader = pNode->next; pHeader->front = NULL; } else { if (pNode->next != NULL) { pNode->next->front = pNode->front; } pNode->front->next = pNode->next; } Node *pNextNode = pNode->next; delete pNode; pNode = pNextNode; bRet = TRUE; //不要break或return, 删除所有 } else { pNode = pNode->next; } } return bRet; } void DE(Node *pHeadA, Node *pHeadB) { if (pHeadA == NULL || pHeadB == NULL) { return; } Node *pNode = pHeadA; while (pNode != NULL) { if (DeteleNode(pHeadB, pNode->data)) { if (pNode->front == NULL) { pHeadA = pNode->next; pHeadA->front = NULL; } else { pNode->front->next = pNode->next; if (pNode->next != NULL) { pNode->next->front = pNode->front; } } Node *pNextNode = pNode->next; delete pNode; pNode = pNextNode; } else { pNode = pNode->next; } } } 2. 编程实现:找出两个字符串中最大公共子字符串,如“abccade”,“dgcadde”的最大子串为“cad” int GetCommon(char *s1, char *s2, char **r1, char **r2) { int len1 = strlen(s1); int len2 = strlen(s2); int maxlen = 0; for(int i = 0; i < len1; i++) { for(int j = 0; j < len2; j++) { if(s1[i] == s2[j]) { int as = i, bs = j, count = 1; while(as + 1 < len1 && bs + 1 < len2 && s1[++as] == s2[++bs]) count++; if(count >maxlen) { maxlen = count; *r1 = s1 + i; *r2 = s2 + j; } } } } 3. 编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数 char* test3(long num) { char* buffer = (char*)malloc(11); buffer[0] = “0”; buffer[1] = “x”; buffer[10] = “�”; char* temp = buffer + 2; for (int i=0; i < 8; i++) { temp[i] = (char)(num<<4*i>>28); temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16; temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55; } return buffer; } 输入N, 打印 N*N 矩阵 比如 N = 3,打印: 1 2 3 8 9 4 7 6 5 N = 4,打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 解答: 1 #define N 15 int s[N][N]; void main { int k = 0, i = 0, j = 0; int a = 1; for( ; k < (N+1)/2; k++ ) { while( j < N-k ) s[i][j++] = a++; i++; j--; while( i < N-k ) s[i++][j] = a++; i--; j--; while( j >k-1 ) s[i][j--] = a++; i--; j++; while( i >k ) s[i--][j] = a++; i++; j++; } for( i = 0; i < N; i++ ) { for( j = 0; j < N; j++ ) cout << s[i][j] << “ ”; cout << endl; } } 2 define MAX_N 100 int matrix[MAX_N][MAX_N]; /* *(x,y):第一个元素的坐标 * start:第一个元素的值 * n:矩阵的大小 */ void SetMatrix(int x, int y, int start, int n) { int i, j; if (n <= 0) //递归结束条件 return; if (n == 1) { //矩阵大小为1时 matrix[x][y] = start; return; } for (i = x; i < x + n-1; i++) //矩阵上部 matrix[y][i] = start++; for (j = y; j < y + n-1; j++) //右部 matrix[j][x+n-1] = start++; for (i = x+n-1; i >x; i--) //底部 matrix[y+n-1][i] = start++; for (j = y+n-1; j >y; j--) //左部 matrix[j][x] = start++; SetMatrix(x+1, y+1, start, n-2); //递归 } void main() { int i, j; int n; scanf(“%d”, &n); SetMatrix(0, 0, 1, n); //打印螺旋矩阵 for(i = 0; i < n; i++) { for (j = 0; j < n; j++) printf(“%4d”, matrix[i][j]); printf(“”); } } 斐波拉契数列递归实现的方法如下: int Funct( int n ) { if(n==0) return 1; if(n==1) return 1; retrurn Funct(n-1) + Funct(n-2); } 请问,如何不使用递归,来实现上述函数? 请教各位高手! 解答:int Funct( int n ) // n 为非负整数 { int a=0; int b=1; int c; if(n==0) c=1; else if(n==1) c=1; else for(int i=2;i<=n;i++) //应该n从2开始算起 { c=a+b; a=b; b=c; } return c; } 解答: 现在大多数系统都是将低字位放在前面,而结构体中位域的申明一般是先声明高位, C语言面试题大汇总13 , 100 的二进制是 001 100 100 低位在前 高位在后 001----s3 100----s2 100----s1 所以结果应该是 1 如果先申明的在低位则: 001----s1 100----s2 100----s3 结果是 4 1、原题跟little-endian,big-endian没有关系 2、原题跟位域的存储空间分配有关,到底是从低字节分配还是从高字节分配,从Dev C++和VC7.1上看,都是从低字节开始分配,并且连续分配,中间不空,不像谭的书那样会留空位 3、原题跟编译器有关,编译器在未用堆栈空间的默认值分配上有所不同,Dev C++未用空间分配为 01110111b,VC7.1下为11001100b,所以在Dev C++下的结果为5,在VC7.1下为1。 注:PC一般采用little-endian,即高高低低,但在网络传输上,一般采用big-endian,即高低低高,华为是做网络的,所以可能考虑big-endian模式,这样输出结果可能为4 判断一个字符串是不是回文 int IsReverseStr(char *aStr) { int i,j; int found=1; if(aStr==NULL) return -1; j=strlen(aStr); for(i=0;i if(*(aStr+i)!=*(aStr+j-i-1)) { found=0; break; } return found; } Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 数组实现: #include #include int Josephu(int n, int m) { int flag, i, j = 0; int *arr = (int *)malloc(n * sizeof(int)); for (i = 0; i < n; ++i) arr[i] = 1; for (i = 1; i < n; ++i) { flag = 0; while (flag < m) { if (j == n) j = 0; if (arr[j]) ++flag; ++j; } arr[j - 1] = 0; printf(“第%4d个出局的人是:%4d号”, i, j); } free(arr); return j; } int main() { int n, m; scanf(“%d%d”, &n, &m); printf(“最后胜利的是%d号!”, Josephu(n, m)); system(“pause”); return 0; } 链表实现: #include #include typedef struct Node { int index; struct Node *next; }JosephuNode; int Josephu(int n, int m) { int i, j; JosephuNode *head, *tail; head = tail = (JosephuNode *)malloc(sizeof(JosephuNode)); for (i = 1; i < n; ++i) { tail->index = i; tail->next = (JosephuNode *)malloc(sizeof(JosephuNode)); tail = tail->next; } tail->index = i; tail->next = head; for (i = 1; tail != head; ++i) { for (j = 1; j < m; ++j) { tail = head; head = head->next; } tail->next = head->next; printf(“第%4d个出局的人是:%4d号”, i, head->index); free(head); head = tail->next; } i = head->index; free(head); return i; } int main() { int n, m; scanf(“%d%d”, &n, &m); printf(“最后胜利的是%d号!”, Josephu(n, m)); system(“pause”); return 0; } 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((strDest==NULL)||(strSrc==NULL)) file://[/1] throw “Invalid argument(s)”; //[2] char * strDestCopy=strDest; file://[/3] while ((*strDest++=*strSrc++)!=“�”); file://[/4] return strDestCopy; } 错误的做法: [1] (A)不检查指针的有效性,说明答题者不注重代码的健壮性。 (B) 检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。在本例中char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false 三个关键字以提供更安全的条件表达式。 (C)检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。 [2] (A)return new string(“Invalid argument(s)”);,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。 (B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。 [3] (A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。 [4] (A)循环写成while (*strDest++=*strSrc++);,[1](B)。 一、单项选择题(每小题3分,共30分) 1、选出下列标识符中不是合法的标识符的是()。 A.hot_do B.cat1 C._pri D.2ab 2、为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与()组成配对关系。 A.缩排位置相同的if B.在其之前未配对的if C.在其之前未配对的最近的if D.同一行上的if 3、以下程序的输出结果是()。main(){ int a=5,b=6;printf(“%d %dn”, a--,++b);} A.5 6 B.5 7 C.4 6 D.4 7 4、设有如下定义: int x=10,y=3,z;则语句printf(“%dn”,z=(x%y,x/y));的输出结果是(A.4 B.3 C.1 D.0 5、设整型变量a为5,使b不为2的表达式是()。 A.b=a/2 B.b=6-(--a)C.b=a%2 D.b=a>3?2:1 6、以下程序段的输出结果是()。 int a=5;float x=3.14;a*=x*(‘E’-‘A’); printf(“%fn”,(float)a); A.62.000000 B.62.800000 C.63.000000 D.62 7、以下程序的输出结果是()。 main(){ int a=0,i;for(i=0;i<4;i++){ switch(i){ case 0: case 1: a+=3;break;case 2: a+=2;default: a+=5;} } printf(“%dn”,a);} A.18 B.17 C.16 D.12 8、若有定义:int a=5,b=2,c;,执行语句c=a/b+0.5;后,c的值为()A.2 B.2.0 C.2.5 D.3 9、以下程序执行后输出结果是() main(){ int i=1,j=1,k=2;if((j++‖k++)&&i++)printf(“%d,%d,%dn”,i,j,k); } A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 10、以下对二维数组a进行正确初始化的是() A.int a[2][3]={{1,2},{3,4},{5,6}};B.int a[ ][3]={1,2,3,4,5,6};C.int a[2][ ]={1,2,3,4,5,6};D.int a[2][ ]={{1,2},{3,4}}; 二、读程序写结果题(每小题4分,共计20分) 1、float f=3.1415927;printf(“%f,%3.3f”,f,f); 则输出结果是(1)。 。) 2、int x=6, y=7;printf(“%d,”,x++);printf(“%dn”,++y);输出结果是(2)。 3、a=3;a+=(a<1)?a:1;printf(“%d”,a);输出结果是(3)。 4、for(a=1,b=1;a<=100;a++){ if(b>=20)break;if(b%3==1){ b+=3;continue;} b-=5;} 程序的输出结果a的值为(4) 5、int y=1, x, *p, a[ ]={2,4,6,8,10};p=&a[1];for(x=0;x<3;x++)y + = *(p + x);printf(“%dn”,y);程序的输出结果y的值是(5) 三、程序填空题(每空3分,共15分) 1、从键盘上输入10个数,求其平均值。main(){ int i;float f,sum;for(i=1,sum=0.0;i<11;i++){(1);(2);}printf(“average=%fn”,sum/10);} 2、以下程序的功能是:从键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入.main(){ float x,amax,amin;scanf(“%f”,&x);amax=x;amin=x;while((3)){ if(x>amax)amax=x;(4)amin=x;scanf(“%f”,(5));}printf(“namax=%fnamin=%fn”,amax,amin);} 四、编程题(共35分) #include < stdio. h>void main{ int i,j; for(i =1;i <=9;i ++) { for(j =1;j <=9;j ++) printf( “%d*%d=%2d ”,i,j,i* j); printf( “n”); } return 0;} 这个题主要是想用两个for循环嵌套使用,要注意之间的关系,printf( “%d*%d=%2d ”,i,j,i* j);这个语句可以使得运行结果右对齐,排版好看, 面试题 用C语言实现乘法口诀表 【大一c语言期末编程题】推荐阅读: c语言实践编程题03-28 C语言编程期末试题答案10-08 c语言编程心得07-22 c语言高效编程的几招12-10 c语言概念题09-22 c语言试题 判断题11-27 华为c语言经典面试题09-24 c语言程序设计基础题10-28 c语言程序设计补充题11-17 c语言程序设计题集12-13大一c语言数组实验心得 篇2
C语言面向对象编程学习笔记 篇3
大一c语言期末编程题 篇4
大一c语言期末编程题 篇5
大一c语言期末编程题 篇6
C语言面试题大13 篇7
c语言中期考核试题3 篇8
面试题 用C语言实现乘法口诀表 篇9