(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)由ASCII码表可知ASCII值小于32的为控制字符,在“0”和“9”之间的为数字,在“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。 1)先从键盘接收一个字符。2)根据ASCII码表判断字符的类别。3)输出字符的类别。
(2)代码如下:
#include
#include
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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义一个一维数组b,指针变量p,并初始化一维数组b。2)利用for循环实现指针变量自增的方式输出一维数组中的所有元素。
(2)代码如下:
#include
#define SIZE 3 // 定义了一个宏SIZE,代表字符3
int main() {
int i, b[] = {1, 2, 3}; // 定义整型变量i,整型数组b,并进行了初始化
int *p; // 定义了整型指针变量p
for (p = b; p < b + SIZE; p++) {
printf("*p=%d\n", *p); // 利用只恨变量自增的方式依次打印数组元素
}
return 0;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)八进制转换为十进制数的方法是按权相加,即将八进制每位上的数乘以位权,然后相加之和即是十进制数,利用数组存放八进制数的各位数码。1)先从键盘接收一个八进制数。2)将八进制数转化为十进制数。3)输出对应的十进制数。
(2)代码如下:
#include
#define N 6 // 定义了一个宏N,代表字符6
int 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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义枚举类型,用枚举常量来对应星期值。2)从键盘接收一个整数,利用do-while循环和switch语句来实现:当用户输入1~7时,对应mon,tue, wed, thu, fri, sta, sun,即输出对应的星期值;当用户输入-1时,结束循环;当用户输入其他时,提示用户输入错误。
(2)代码如下:
#include
int main() {
enum week_type { // 定义枚举类型week_type,枚举常量对应星期值
mon = 1, tue, wed, thu, fri, sta, sun
} workday; // 定义枚举变量workday
int i;
do {
printf("Please input integer(end:-1)\n");
fflush(stdout);
scanf("%d", &i); // 从键盘接收一个整型值
workday = (enum week_type) i; // 把i赋值给枚举变量workday
switch (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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)将年月日定义成一个结构体类型;2)从键盘接收日期;3)统计天数,如果是闰年,天数要多一天;4)输出日期对应的天数。
(2)代码如下:
#include
struct date_type { // 定义一个结构体类型
int year; // 年
int month; // 月
int day; // 日
};
int main() {
int days = 0, i;
struct date_type date; // 定义结构体变量date
int 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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义二维数组a,并初始化;2)利用两层for循环判断二维数组中元素是否为矩阵上三角阵(不包括对角线元素)的元素,如果是则进行累加,并赋值到t;3)8行2列输出矩阵a。
(2)代码如下:
#include
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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
答:
(1)1)定义一个字符数组s,存入从键盘接收到的字符串;2)用for循环字符串中的数字记录下来;3)将已输入的字符串中的数字字符输出。
(2)代码如下:
#include
#include
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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义整型变量a,b,从键盘中接收a,b的值;2)用C语言中的三目运算符判断a,b的中的较大值;3)在屏幕上输出较大值。
(2)代码如下:
#include
int main() {
int a,b;
scanf("a=%d,b=%d",&a,&b);
printf("a,b中的较大值是:%d\n",(a>b) ? a: b);
return 0;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义一个子函数in_comment(),通过getchar()从键盘接收字符,如果不是/*…*/就把d赋值给c;2)主函数中,通过getchar从键盘接收一个字符,首先判断是不是结束符,如果不是就判断是不是为'/’,如果不是就输出;如果是‘/’,就判断下一个是不是‘*’,是就调用子函数in_comment(),如果不是‘*’,就输出。
(2)代码如下:
#include
void in_comment() {
int c, d; // 定义整型变量c,d
c = getchar(); // 通过getchar()函数,从键盘接收一个字符c
d = getchar(); // 通过getchar()函数,从键盘接收一个字符d
while (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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)定义数组三个数组分别为a,b,c,对数组a,b进行初始化为升序数组,数组c用于存放a,b数组合并后的元素;2)定义三个整型变量i,j,k用于实现将a,b升序数组合并到数组c。
(2)代码如下:
#include
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++]; }
// 打印输出数组c
for (i = 0; i < k; i++)printf("%4d", c[i]);
printf("\n");
return 0;
}
(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
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;
}
(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
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;
}
(1)写出上述编程思路。
(2)根据(1)思路编程序。
(1)1)将学生学号、姓名、成绩定义为一个结构体类型;2)定义一个指向结构体类型的指针变量p;3)用for循环将指针变量p指向学生数组的首地址,从键盘接收4名学生学号、姓名、成绩;4)通过指针方法找出成绩最高的学生,把对应的下标i记录下来,并让p指向它的地址,最后用指针变量、指向运算符、成员将其学号、姓名、成绩输出。
(2)代码如下:
#include
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;
}
(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
#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;
}
(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);
}
(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);
}
(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);
}
(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);
}
(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
(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");
}