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相关推荐

  1. c语言嵌入式系统编程软件,C语言嵌入式系统编程软件设计研究论文

    C语言嵌入式系统编程软件设计研究论文 摘要:近年来,C语言编程在嵌入式系统越来越受到广大技术人员的青睐.介绍了C语言系统软件的编程思路,阐述了嵌入式系统编程软件架构的基本知识,包括模块划分.分层架构. ...

  2. C语言嵌入式系统编程修炼之道——性能优化篇

    C语言嵌入式系统编程修炼之道--性能优化篇 作者:宋宝华  e-mail:[email]21cnbao@21cn.com[/email] 1.使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌 ...

  3. C语言嵌入式系统编程修炼之(六)性能优化

    C语言嵌入式系统编程修炼之性能优化 使用宏定义 在C语言中,宏是产生内嵌代码的唯一方法.对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法. 写一个"标准"宏MI ...

  4. 编写书籍《C语言嵌入式系统编程修炼之道》序言

    序言        目前,嵌入式系统已经无处不在,遍布于世界的每一个角落.智能家电.手机.PDA.汽车.通信电台等几乎所有的电力.电器与电子产品都包含一个或多个嵌入式系统.有人的地方就有江湖,有电的地 ...

  5. c语言二级编程题库,二级C语言题库-编程题.doc

    二级C语言题库-编程题 第 PAGE \* Arabic \* MERGEFORMAT 27 页第 PAGE \* Arabic \* MERGEFORMAT 27 页 1.请编写函数fun,其功能是 ...

  6. extern quot;Cquot; 的含义:实现C++与C及其他语言的混合编程

    C++中extern "C"的设立动机是实现C++与C及其他语言的混合编程. C++为了支持函数的重载.C++对全局函数的处理方式与C有明显的不同. 对于函数void foo( i ...

  7. C语言嵌入式系统编程修炼

    C语言嵌入式系统编程修炼之内存操作篇 数据指针 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力.在嵌入式 ...

  8. Go语言TCP Socket编程

    2019独角兽企业重金招聘Python工程师标准>>> Go语言TCP Socket编程 Golang的 主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不 ...

  9. 在C语言中以编程的方式获取函数名

    在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...

最新文章

  1. 2021年大数据Spark(十三):Spark Core的RDD创建
  2. Spring MVC 相关资料整理
  3. arrays中copyof_为什么阿里巴巴开发手册明确说明 Arrays.asList() 不能使用其修改方法?...
  4. 【javascript 变量和作用域】
  5. 字典排序 python3_一步一步学Python3(小学生也适用) 第十二篇: 元组tuple类型
  6. iOS自定义组与组之间的距离以及视图
  7. 大数据Hadoop集群中常用的任务调度框架
  8. linux .bashrc文件修改和生效
  9. dvbbs 7.1版块图标感应渐变效果 From www.jfeng.cn
  10. Boost升压电路调试
  11. Linux命令大全(超详细版)
  12. BT656视频传输标准
  13. 远程服务器下载百度网盘中的内容
  14. Security Trimming Secrets
  15. android接口调试工具
  16. 天池大数据众智平台笔记SQL(一)
  17. 苹果蓝牙日志如何获取
  18. 【socket】socket编程总目录
  19. 损失函数,mse,cee
  20. Leetcode刷题总结和心得(5)

热门文章

  1. pod的调度策略、定向调度、亲和性调度、污点、容忍污点
  2. retrofit设置单个请求的超时
  3. 申请注册公司需要什么材料
  4. Java Swing实现仿win7计算器
  5. 97-things-every-programmer-should-know-1: 谨慎行事
  6. 事件驱动架构引领产业技术升级:事件驱动联盟(中国)成立
  7. Java中的建造者模式
  8. Tushare的使用感受
  9. 自然语言处理NLP(10)——语义分析
  10. T(n)=25T(n/5)+n*n的时间复杂度