题目26-30
26、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
#include<stdio.h>
void reserve(n){
char next;
if (n<=1) {
next=getchar();
printf("\n:");
putchar(next);
}
else {
next=getchar();
reserve(n-1);
putchar(next);
}
}
int main(){
void reserve(int n);
int i=5;
printf("请输入字符:\n");
reserve(i);
printf("\n");
return 0;
}
运行结果:
注意:getchar()是stdio.h中的库函数,它的返回值是用户输入的第一个字符的ASCII码,如出错返回-1。它从stdin流中读入一个字符,如果stdin中有数据的话不用输入它就可以直接读取,但是没有数据的话,第一次getchar()时,需要人工输入且将输入的字符回显到屏幕。如用户在按回车(回车也算一个字符)之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。
#include "stdio.h"
int n;
int main()
{
char a,b;
printf("键盘输入值:");
a=getchar();
printf("直接读取:\n");
b=getchar();
printf("a的值:");
putchar(a);
printf("\nb的值:");
putchar(b);
}
运行结果:
C语言中经常看见单独的getchar()为一行,是为了清除缓冲区的字符,例如运行下面的程序
int main(){
char a,str[10];
a=getchar();
gets(str);
printf("%s",str);
}
输入1,结果空白的(回车),即str等于回车,是因为gets()会把缓冲区的回车读入到str中
int main(){
char a,str[10];
a=getchar();
getchar();
gets(str);
printf("%s",str);
}
输入1,再输入1234,结果为1234,第二个getchar()起到清除缓冲区的作用,因此gets(str)时缓冲区没有字符,重新进行输入。
27、请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
#include "stdio.h"
int main()
{
char letter,letter1;
printf("请输入第一个字母:\n");
/*当所按字母为Y时才结束*/
while ((letter=getchar())!='Y') {
switch (letter){
case 'S':{
printf("请输入第二个字母:\n");
letter=getchar(); //去掉回车符
letter=getchar();//重新输入
if(letter=='a'){
printf("saturday\n");
}
else if (letter=='u'){
printf("sunday\n");
}
else {
printf("1data error\n");
}
break;
}
case 'F':{
printf("friday\n");
break;
}
case 'M':{
printf("monday\n");
break;
}
case 'T':{
printf("请输入第二个字母:\n");
letter=getchar(); //去掉回车符
letter=getchar();//重新输入
if(letter=='u'){
printf("tuesday\n");
}
else if (letter=='h'){
printf("thursday\n");
}
else printf("2data error\n");
break;
}
case 'W':{
printf("wednesday\n");
break;
}
default:printf("error\n"); break;
}
letter=getchar();
}
}
运行结果:
28、练习函数调用
#include "stdio.h"
int main()
{
void Hello();
void three(void);
three();
}
void Hello(){
printf("Hello World!\n");
}
void three(void){
int counter;
for (counter = 1; counter <= 3; counter++){
Hello();/*调用此函数*/
}
}
运行结果:
29、求100之内的素数.
#include "stdio.h"
# include "math.h"
int main()
{
for (int i=2; i<100; i++) {
int flag=1;
for (int j=2; j<sqrt(i)&&flag==1; j++) {
if (i%j==0&&i!=2) {
flag=0;
}
}
if (flag) {
//printf("%d是素数\n",i);
printf("%d ",i);
}
}
}
运行结果:
30、求一个3*3矩阵对角线元素之和。
#include "stdio.h"
# include "math.h"
int main()
{
int array[3][3],sum=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
scanf("%d",&array[i][j]);
}
}
for (int i=0; i<3; i++) {
sum+=array[i][i];
}
printf("求一个3*3矩阵对角线元素之和为:%d",sum);
}
运行结果: