c语言基础题五
1.计算8!+9!+10!
#include<stdio.h>
#include<stdlib.h>
void main() {
int sum = 1;
int i,j,n = 1,m = 1;
for (i = 8; i <= 10; i++) { // 遍历 8 9 10
for (j = i; j > 0; j--) { // 分别计算阶乘
n = m * j ;//
m = n;
}
sum += n;
n=1; m=1;//一个阶层运算完,重置 m 和 n 的值
}
sum = sum-n;//多加了一个 n,也就是多加了一个1
printf("8!+9!+10!= %d \n", sum);
}
2. 给定一个整数n(1≤n≤100000000),要求从个位开始分离出它的每一位数字,从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
while(n>0)
{
printf("%d ",n%10);
n /= 10;
}
}
3.从终端输入一串字符,统计字符串中每个字母出现的次数(用for循环写)。
区分大小写
#include <stdio.h>
#include <stdlib.h>
void main()
{
//声明接收字符串的数组
char str[26];
//声明统计次数的数组
int count[26] = {0};
int count1[26] = {0};
int i,j;
for(i = 0;i < 26;i++)
{
scanf("%c",&str[i]);
}
//for循环统计次数
for(i = 0;i < 26; i++)
{
int number = str[i] - 'a';
//统计字符出现的次数
count[number] += 1;
}
for(i = 0;i < 26;i++)
{
if (count[i] > 0)
{
printf("%c出现了%d次\n", 'a' + i, count[i]);
}
}
for(j = 0;j < 26; j++)
{
int number = 0;//前面用过,现在初始化为 0
number = str[j] - 'A';
//统计字符出现的次数
count1[number] += 1;
}
for(j = 0;j < 26;j++)
{
if (count1[j] > 0)
{
printf("%c出现了%d次\n", 'A' + j, count1[j]);
}
}
}
不区分大小写
#include <stdio.h>
#include <ctype.h>
int main()
{
int num[26]={0};
char ch='1';
int i;
while((ch=getwchar())!='\n'&&0>=(toupper(ch)-'A')<=26)//从键盘获取字符ch,判断字符 ch 是否字母
++num[toupper(ch) - 'A'];//是字母的话,数组num对应的下标元素加一
for(i=0;i<26 ;i++ )//输出,数组num 下标加'A' 就是对应字母,数组下标对应元素num[i]就是字母个数
printf("%c %d\n",i+'A',num[i]);
return 0;
}
4.设 int x=3,y=4,z=5; 下列表达式中值为0的是()
A. !((x<y) && !z || 1)
B. x || y+z && y-z
C. ‘x’ && ‘y’
D. x <= y
分析:根据运算符的优先级和结合性来看
!((x<y)&&!z||1)
先算(x<y)为 true,!z 为 false,
然后(x<y)和 !z 相 &&,结果为 false,
然后刚才的 false 和1相 ||,结果是 true,
整体取反,最终结果是false。
其实不用算,|| 只要有应该条件正确那么就是正确的,显然有个1,必为true,然后取反,是false。
验算
#include<stdio.h>
void main(){
int x=3,y=4,z=5;
if(!((x<y)&&!z||1)) //如果成立就输出1
printf("1");
else
printf("0");
}
5.整蛊游戏:
Doyouloveme1、题目分析:
1)输出Doyouloveme?
2)定义并输入s的值
3)判断s是否不为Y或y
如果成立:
输出Doyouloveme
输入s的值
不成立退出循环
3)输出!loveyoutoo!
while
while(循环条件){ 循环体; 循环变量迭代; }
#include<stdio.h>
void main(){
int i =1;
int s;
int max = 5;//最多5遍,不正确就退出
while(i<=max){
printf("Do you love me?\n");
scanf("%d",&s);
if(s==89 || s==121){
printf("I love you too!");
break;
}
i++;
}
}
do…while
循环变量初始化; do { 循环体; 循环变量迭代;} while( 循环条件);
#include<stdio.h>
void main(){
int i =1;
int s;
int max = 5;//最多5遍,不正确就退出
do{
printf("Do you love me?\n");
scanf("%d",&s);
if(s==89 || s==121){
printf("I love you too!");
break;
}
i++;
}
while(i<=max);
}
最后修改,完成只要条件不符合就无限循环
#include<stdio.h>
int main(){
int i =1;
int s;
while(1){ //条件为真就循环
printf("Do you love me?\n");
scanf("%d",&s);
if(s==89 || s==121){
printf("I love you too!");
break;
}
else{
printf("Do you love me?\n");
scanf("%d",&s);
}
}
return 0;
}