C语言-思路与编程1
1、根据输入字符的ASCII码来判别字符的类别。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)由ASCII码表可知ASCII值小于32的为控制字符,在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。 1)先从键盘接收一个字符。2)根据ASCII码表判断字符的类别。3)输出字符的类别。
(2)代码如下:
#include <stdio.h>
#include <string.h>int main() {char c;printf("Input a character:\n");fflush(stdout);c = getchar();if (c < 32) {printf("This is a control character\n");} else {if (c >= '0' && c <= '9') {printf("This is a digit\n");} else {if (c >= 'A' && c <= 'Z') {printf("This is a capital letter\n");} else {if (c >= 'a' && c <= 'z') {printf("This is a small letter\n");} else {printf("This is an other character\n");}}}}return 0;
}
2、利用指针变量自增的方式输出一维数组中的所有元素。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义一个一维数组b,指针变量p,并初始化一维数组b。2)利用for循环实现指针变量自增的方式输出一维数组中的所有元素。
(2)代码如下:
#include <stdio.h>#define SIZE 3 // 定义了一个宏SIZE,代表字符3int main() {int i, b[] = {1, 2, 3}; // 定义整型变量i,整型数组b,并进行了初始化int *p; // 定义了整型指针变量pfor (p = b; p < b + SIZE; p++) {printf("*p=%d\n", *p); // 利用只恨变量自增的方式依次打印数组元素}return 0;
}
3、输入一个八进制数并转换为十进制数。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)八进制转换为十进制数的方法是按权相加,即将八进制每位上的数乘以位权,然后相加之和即是十进制数,利用数组存放八进制数的各位数码。1)先从键盘接收一个八进制数。2)将八进制数转化为十进制数。3)输出对应的十进制数。
(2)代码如下:
#include <stdio.h>#define N 6 // 定义了一个宏N,代表字符6int main() {int n, temp;char s[N], *p = s;printf("请输入八进制数:");fflush(stdout);gets(p);for (n = 0; (*p) != '\0'; p++) { // 判断p所指向的字符是不是空字符temp = *p - '0';n = n * 8 + temp; // 八进制数转十进制数}printf("对应的十进制数:%d\n", n);return 0;
}
4、键盘输入一整数,显示与之对应的星期值,当输入-1时结束。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义枚举类型,用枚举常量来对应星期值。2)从键盘接收一个整数,利用do-while循环和switch语句来实现:当用户输入1~7时,对应mon,tue, wed, thu, fri, sta, sun,即输出对应的星期值;当用户输入-1时,结束循环;当用户输入其他时,提示用户输入错误。
(2)代码如下:
#include <stdio.h>int main() {enum week_type { // 定义枚举类型week_type,枚举常量对应星期值mon = 1, tue, wed, thu, fri, sta, sun} workday; // 定义枚举变量workdayint i;do {printf("Please input integer(end:-1)\n");fflush(stdout);scanf("%d", &i); // 从键盘接收一个整型值workday = (enum week_type) i; // 把i赋值给枚举变量workdayswitch (workday) {case sun:printf("Sunday\n");break;case mon:printf("Monday\n");break;case tue:printf("Tuesday\n");break;case wed:printf("Wednesday\n");break;case thu:printf("Thursday\n");break;case fri:printf("Friday\n");break;case sta:printf("Saturday\n");break;default:printf("Input error\n");break;case -1:printf("Goodbye!\n");}} while (i != -1);return 0;
}
5、请设计一个程序,完成从屏幕上输入日期(年、月、日),计算其为该年的第几天的功能。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)将年月日定义成一个结构体类型;2)从键盘接收日期;3)统计天数,如果是闰年,天数要多一天;4)输出日期对应的天数。
(2)代码如下:
#include <stdio.h>struct date_type { // 定义一个结构体类型int year; // 年int month; // 月int day; // 日
};int main() {int days = 0, i;struct date_type date; // 定义结构体变量dateint mon_day[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 定义整型数组,对应每个月的天数printf("请输入日期(年 月 日):\n");scanf("%d%d%d", &date.year, &date.month, &date.day);for (i = 1; i < date.month; i++) {days = mon_day[i - 1] + days;}days = days + date.day;// 判断是不是闰年,如果是闰年,则天数要多加1天if (((date.year % 4 == 0) && (date.year % 100 != 0) || (date.year % 400 == 0) && (date.month >= 3))) {days = days + 1;}printf("请输入日期是该年第%d天\n", days);return 0;
}
6、定义一个矩阵a,计算矩阵上三角阵(不包括对角线元素)各元素之和,并8行2列输出矩阵 a。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义二维数组a,并初始化;2)利用两层for循环判断二维数组中元素是否为矩阵上三角阵(不包括对角线元素)的元素,如果是则进行累加,并赋值到t;3)8行2列输出矩阵a。
(2)代码如下:
#include <stdio.h>int main() {int a[4][4] = {{2, 3, 4},{5, 6, 7},{8, 9, 1}};int i, j, t = 0;for (i = 0; i < 4; i++) { // 判断二维数组的某一行for (j = i + 1; j < 4; j++) { // 判断是不是上三角元素t += a[i][j];}}printf("矩阵上三角阵(不包括对角线元素)各元素之和t=%d\n", t);// 8行2列打印数组for (i = 0; i < 4; i++) {for (j = 0; j < 4; j++) {printf("%3d", a[i][j]);if ((j + 1) % 2 == 0) {printf("\n");}}}return 0;
}
7、现将已输入的字符串中的非数字字符剔除,并将数字字符在屏幕上显示(如输入“ab*12cx_3Y”,输出“123”) 。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义一个字符数组s,存入从键盘接收到的字符串;2)用for循环字符串中的数字记录下来;3)将已输入的字符串中的数字字符输出。
(2)代码如下:
#include <stdio.h>
#include <string.h>int main() {char s[100];int i, j;gets(s);for (j = i = 0; s[i]; i++)if (s[i] >= '0' && s[i] <= '9')s[j++] = s[i];s[j] = '\0';printf("%s\n", s);return 0;
}
8、甲学院获a项,乙学院获b项。从键盘上分别给变量a、b输入甲乙奖励数,在计算机交换a、b变量值,在屏幕上输出较大值。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义整型变量a,b,从键盘中接收a,b的值;2)用C语言中的三目运算符判断a,b的中的较大值;3)在屏幕上输出较大值。
(2)代码如下:
#include <stdio.h>int main() {int a,b;scanf("a=%d,b=%d",&a,&b);printf("a,b中的较大值是:%d\n",(a>b) ? a: b);return 0;
}
9、从终端上接收 C语言源程序,删去程序中的注释(/*…*/)后再输出。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义一个子函数in_comment(),通过getchar()从键盘接收字符,如果不是/*…*/就把d赋值给c;2)主函数中,通过getchar从键盘接收一个字符,首先判断是不是结束符,如果不是就判断是不是为'/’,如果不是就输出;如果是‘/’,就判断下一个是不是‘*’,是就调用子函数in_comment(),如果不是‘*’,就输出。
(2)代码如下:
#include <stdio.h>void in_comment() {int c, d; // 定义整型变量c,dc = getchar(); // 通过getchar()函数,从键盘接收一个字符cd = getchar(); // 通过getchar()函数,从键盘接收一个字符dwhile (c != '*' || d != '/') {c = d;d = getchar();}
}int main() {char c, d;while ((c = getchar()) != EOF) { // 通过getchar()函数,从键盘接收一个字符c,并判断是不是结束符if (c == '/') { // 判断是不是'/'字符if ((d = getchar()) == '*') {in_comment();} else { // 如果接下来没有'*'字符就输出putchar(c);putchar(d);}} else { // 如果不是'/'字符就输出putchar(c);}}return 0;
}
10、将两个升序数组合并。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义数组三个数组分别为a,b,c,对数组a,b进行初始化为升序数组,数组c用于存放a,b数组合并后的元素;2)定义三个整型变量i,j,k用于实现将a,b升序数组合并到数组c。
(2)代码如下:
#include <stdio.h>int main() {int a[10] = {2, 4, 5, 7, 9, 10, 14, 16, 18, 19};int i, j, k, c[15], b[5] = {1, 5, 11, 17, 21};i = 0;j = 0;k = 0;while (i < 10 && j < 5) {if (a[i] > b[j]) {c[k++] = b[j++];} else {c[k++] = a[j++];}}// 判断b中是否还有元素没有插入c中while (j < 5) { c[k++] = b[j++]; }// 判断a中是否还有元素没有插入c中while (i < 10) { c[k++] = a[i++]; }// 打印输出数组cfor (i = 0; i < k; i++)printf("%4d", c[i]);printf("\n");return 0;
}
11、输出Fibonaci数列的前20项:1,1,2,3,5,8,…。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义整型变量i,a,b,c,n,并给n初始化为20,因为要输出Fibonaci数列的前20项;2)先给a,b赋值为1,并输出;3)利用for循环,从第3项开始,到第20项结束,将a+b赋值给c,并输出,接着将b赋值给a,将c赋值给b,每10个数输出为一行。
(2)代码如下:
#include <stdio.h>int main() {int i, a, b, c, n = 20;a = 1;b = 1;printf("%6d%6d", a, b);for (i = 3; i <= n; i++) {c = a + b;printf("%6d", c);if (i % 10 == 0) {printf("\n");}a = b;b = c;}return 0;
}
12、删除一行文字中的某个字符,文字及字符由键盘输入。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义长度都为100的字符数组str1,str2,字符变量ch,整型变量i,k,并将i和k初始化为0;2)提示用户从键盘输入一行文字,在while条件表达式中,通过getchar()从键盘接收字符存入数组str1中,接收完毕后,把str1中有效字符后的数组元素置为字符串结束符'\0';3)提示用户从键盘输入待删除的字符,并用for循环遍历str1,如果不是待删除字符,就拷贝到str2中,如果是待删除字符,就用变量k累计被删除字符的个数。4)最后输出已删除指定字符的文字及字符。
(2)代码如下:
#include <stdio.h>int main() {char str1[100], str2[100], ch;int i = 0, k = 0;printf("Please input a phase:\n");while ((str1[i] = getchar()) != '\n') {i++;}str1[i] = '\0';printf("Delete?");fflush(stdout);scanf("%1s", &ch);for (i = 0; str1[i] != '\0'; i++) {if (str1[i] != ch) {str2[i - k] = str1[i];} else {k = k + 1;}}str2[i - k] = '\0';printf("\n%s\n", str2);return 0;
}
13、从键盘输入 4名学生学号、姓名、成绩,通过指针方法找出成绩最高的学生。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)将学生学号、姓名、成绩定义为一个结构体类型;2)定义一个指向结构体类型的指针变量p;3)用for循环将指针变量p指向学生数组的首地址,从键盘接收4名学生学号、姓名、成绩;4)通过指针方法找出成绩最高的学生,把对应的下标i记录下来,并让p指向它的地址,最后用指针变量、指向运算符、成员将其学号、姓名、成绩输出。
(2)代码如下:
#include <stdio.h>struct student {int num;char name[20];float score;
};int main() {struct student stu[4];struct student *p;int i, temp = 0;float max;for (p = stu; p < stu + 4; p++) {scanf("%d%s%f", &p->num, p->name, &p->score);}for (max = stu[0].score, i = 1; i < 4; i++) {if (stu[i].score > max) {max = stu[i].score;temp = i;}}temp = i;p = stu + temp;printf("\nThe maximum score:\n");printf("No.%d\nname:%s\nScore:%4.1f\n", p->num, p->name, p->score);return 0;
}
14、输入 n个国家名,按字母先后顺序排列并输出。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义一个长度为30的字符数组str,二维数组name[20][30],整型变量i,j,k,n,n;2)从键盘接收待输入国家名的数量n,再通过for循环和gets()函数接收国家名,并放入二维数组name中;3)用三层for循环,先比较每个国家名的首字符,如果小于,说明已经排好序,就退出循环;如果大于,说明还没排好序,就用strcpy()函数进行交换;4)用for循环打印输出按字母先后顺序排列国家名。
(2)代码如下:
#include <stdio.h>
#include "string.h"int main() {char str[30], name[20][30];int i, j, k, n = 10;scanf("%d", &n);for (i = 0; i < n; i++) {gets(name[i]);}for (i = 0; i < n; i++) {for (j = i + 1; j < n; j++) {if (name[i][k] < name[j][k]) {break;} else {if (name[i][k] > name[j][k]) {strcpy(str, name[j]);strcpy(name[j], name[i]);strcpy(name[i], str);break;}}}}for (i = 0; i < n; i++) {printf("\n%s", name[i]);}return 0;
}
15、编写程序,把560分钟换算成用小时和分钟表示,然后输出。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)
(2)代码如下:
#include "stdio.h" void main() {int a=560,b=60,c,d; c=a/b; d=a%b; printf("560分钟=%d小时%d分钟",c,d);
}
16、编写程序,输入两个整数:1500和350,求出它们的商和余数并进行输出。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)
(2)代码如下:
#include "stdio.h" void main() {int a,b,c,d; printf("Input two numbers:"); scanf("%d%d",&a,&b); c=a/b; d=a%b; printf("c=%d,d=%d\n",c,d);
}
17、编写程序,读入三个双精度数,求出它们的平均值并保留此平均值小数点后一位数,对小数点后的第二位数进行四舍五入,最后输出结果。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)
(2)代码如下:
#include "stdio.h" void main() {double a,b,c,ave; printf("Enter three numbers:"); scanf("%lf%lf%lf",&a,&b,&c); ave=(a+b+c)/3; printf("(1)ave=%f\n",ave); ave=(int)(ave*10+0.5)/10.0; printf("(2)ave=%f\n",ave);
}
18、编写程序,读入三个整数给a、b、c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把c中原来的值给a,然后输出a、b、c。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)
(2)代码如下:
#include "stdio.h" void main() {int a,b,c,m,n,t; printf("Enter three numbers:"); scanf("%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); m=a;n=b;t=c; b=m;c=n;a=t; printf("a=%d,b=%d,c=%d",a,b,c);
}
19、编写程序,输入一位学生的生日(年:y0、月:m0、日:d0),并输入当前的日期(年:y1、月:m1、日:d1),输出该生的实际年龄。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)
(2)代码如下:
#include "stdio.h" void main() {int y0,m0,d0,y1,m1,d1,age; printf("请输入该学生的生日:"); scanf("%d%d%d",&y0,&m0,&d0); printf("该学生的生日是%d年%d月%d日\n",y0,m0,d0); printf("请输入当前日期:"); scanf("%d%d%d",&y1,&m1,&d1); printf("当前日期是%d年%d月%d日\n",y1,m1,d1); age=y1-y0; if(m1<m0||m1==m0 && d1<d0) age--; printf("该学生实际年龄为%d岁\n",age);
}
20、编写程序,输入一个整数,打印出它是奇数还是偶数。
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)
(2)代码如下:
#include "stdio.h" void main() {int a; printf("Input a number:"); scanf("%d",&a); if(a%2==0) printf("a是偶数\n"); else printf("a是奇数\n");
}
C语言-思路与编程1相关推荐
- c语言嵌入式系统编程软件,C语言嵌入式系统编程软件设计研究论文
C语言嵌入式系统编程软件设计研究论文 摘要:近年来,C语言编程在嵌入式系统越来越受到广大技术人员的青睐.介绍了C语言系统软件的编程思路,阐述了嵌入式系统编程软件架构的基本知识,包括模块划分.分层架构. ...
- C语言嵌入式系统编程修炼之道——性能优化篇
C语言嵌入式系统编程修炼之道--性能优化篇 作者:宋宝华 e-mail:[email]21cnbao@21cn.com[/email] 1.使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌 ...
- C语言嵌入式系统编程修炼之(六)性能优化
C语言嵌入式系统编程修炼之性能优化 使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法. 写一个"标准"宏MI ...
- 编写书籍《C语言嵌入式系统编程修炼之道》序言
序言 目前,嵌入式系统已经无处不在,遍布于世界的每一个角落.智能家电.手机.PDA.汽车.通信电台等几乎所有的电力.电器与电子产品都包含一个或多个嵌入式系统.有人的地方就有江湖,有电的地 ...
- c语言二级编程题库,二级C语言题库-编程题.doc
二级C语言题库-编程题 第 PAGE \* Arabic \* MERGEFORMAT 27 页第 PAGE \* Arabic \* MERGEFORMAT 27 页 1.请编写函数fun,其功能是 ...
- extern quot;Cquot; 的含义:实现C++与C及其他语言的混合编程
C++中extern "C"的设立动机是实现C++与C及其他语言的混合编程. C++为了支持函数的重载.C++对全局函数的处理方式与C有明显的不同. 对于函数void foo( i ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼之内存操作篇 数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力.在嵌入式 ...
- Go语言TCP Socket编程
2019独角兽企业重金招聘Python工程师标准>>> Go语言TCP Socket编程 Golang的 主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不 ...
- 在C语言中以编程的方式获取函数名
在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...
最新文章
- 2021年大数据Spark(十三):Spark Core的RDD创建
- Spring MVC 相关资料整理
- arrays中copyof_为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法?...
- 【javascript 变量和作用域】
- 字典排序 python3_一步一步学Python3(小学生也适用) 第十二篇: 元组tuple类型
- iOS自定义组与组之间的距离以及视图
- 大数据Hadoop集群中常用的任务调度框架
- linux .bashrc文件修改和生效
- dvbbs 7.1版块图标感应渐变效果 From www.jfeng.cn
- Boost升压电路调试
- Linux命令大全(超详细版)
- BT656视频传输标准
- 远程服务器下载百度网盘中的内容
- Security Trimming Secrets
- android接口调试工具
- 天池大数据众智平台笔记SQL(一)
- 苹果蓝牙日志如何获取
- 【socket】socket编程总目录
- 损失函数,mse,cee
- Leetcode刷题总结和心得(5)