*对输入的行和字符进行计数。在计算机中,一行是以一个回车符\n作为行结束标记的,这样在程序中可以通过搜索\n对行进行计数。在UNIX操作系统中,一般有ctrl+d作为文件结束标记,其字符码为-1.当输入ctrl+d时表示文件输入结束,停止计数。在C语言中,以EOF(End Of File)作为文件结束标志
**输出格式要求:"chars=%d, lines=%d\n"
#include <stdio.h>
#include <string.h>
void main(){
char a;
int cn=0,ln=0;
while((a=getchar())!=EOF){
cn++;
if(a == '\n'){
ln++;
}
}
printf("chars=%d, lines=%d\n",cn,ln);
}
Q499.(10分数, 语言: C)实现验证输入的必须全部是数字0~9构成的字符串,利用函数checkNumber验证输入的字符串中的每个字符是否全为数字0~9之一,如果是则返回1,否则返回0。然后利用函数getNumberString容错地读取一个全由数字0~9组成的数字字符串。要求编写完整的程序测试运行你所写的函数。
输入语句为:"请输入一个全为数字的字符串:\n“
输出语句为:"你输入的正确的数字串为:%s\n"
程序的运行示例如下:
请输入一个全为数字的字符串: abc
请输入一个全为数字的字符串:a123
请输入一个全为数字的字符串:1a23
请输入一个全为数字的字符串:123
你输入的正确的数字串为:123
#include <stdio.h>
#define N 30
int checkNumber(char a[]);
void getNumberString(char a[]);
void main(){
char a[N];
getNumberString(a);
printf("你输入的正确的数字串为:%s\n",a);
}
int checkNumber(char a[]){
for(int i=0;a[i]!='\0';i++){
if(!(a[i]>='0'&&a[i]<='9')){
return 0;
}
}
return 1;
}
void getNumberString(char a[]){
do{
printf("请输入一个全为数字的字符串:\n");
gets(a);
}while(checkNumber(a)!=1);
}
Q402.(10分数, 语言: C)矩阵乘法。编写一个C函数实现M行K列矩阵与K行N列的矩阵的乘积。设A为M行K列的矩阵,B为K行N列的矩阵,则C=A×B的积为M行N列的矩阵。
矩阵乘法的规则是:设A[m,k],B[k,n],则C[m,n]=A[m,k]×B[k,n],其中:
\(C[i,j]=\sum_{l=1}^k A[i,l] \times B[l,j]\), (i=1,2,…,m j=1,2,…,n)
**输出格式要求:"\t%d" "array A=\n" "array B=\n" "array C=\n"
程序运行示例如下:
array A=
1 2 3
4 5 6
array B=
1 1
0 2
2 0
array C=
7 5
16 14
#include <stdio.h>
void main(){
static int a[2][3]={1,2,3,4,5,6};
static int b[3][2]={1,1,0,2,2,0};
int c[2][2]={0};
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
for(int k=0;k<3;k++){
c[i][j] += a[i][k] * b [k][j];
}
}
}
printf("array A=\n");
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
printf("\t%d",a[i][j]);
}
printf("\n");
}
printf("array B=\n");
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
printf("\t%d",b[i][j]);
}
printf("\n");
}
printf("array C=\n");
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
printf("\t%d",c[i][j]);
}
printf("\n");
}
}
Q429.(10分数, 语言: C)满足特异条件的数列。输入m和n(20≥m≥n≥0),求出满足以下方程式的正整数数列i1,i2,…,in,使得i1+i2+…+in=m,且i1≥i2≥…≥in。例如:
当n=4,m=8时,将得到如下5个数列:
5 1 1 1 4 2 1 1 3 3 1 1 3 2 2 1 2 2 2 2
**输入格式要求:"%d" 提示信息:"Please enter requried terms (<=10):"
" their sum:"
**输出格式要求:"There are following possible series:\n" "[%d]:" "%d"
程序运行示例1:
Please enter requried terms (<=10): 4 8
their sum:There are following possible series:
[1]:5111
[2]:4211
[3]:3311
[4]:3221
[5]:2222
程序运行示例2:
Please enter requried terms (<=10):4 10
their sum:There are following possible series:
[1]:7 1 1 1
[2]:6 2 1 1
[3]:5 3 1 1
[4]:4 4 1 1
[5]:5 2 2 1
[6]:4 3 2 1
[7]:3 3 3 1
[8]:4 2 2 2
[9]:3 3 2 2
#include <stdio.h>
#define NUM 10 //允许分解的最大元素数量
int i[NUM];//记录分解出的数值的数组
void main(){
int n,total,flag,count=0;
int sum=0;//记录从后向前k个元素的和
int k=n;//从后向前正在处理的元素的下标
i[n]=1;//将最后一个元素的值置为1作为初始值
printf("Please enter requried terms (<=10):");
scanf("%d %d",&n,&total);
printf(" their sum:");
printf("There are following possible series:\n");
while(1){
if(sum+i[k] < total){//后k位的和小于total
if(k<=1){//计算第一个元素并标记
i[1] = total -sum;
flag=1;
}else{//置第k位的值为k+1
sum = sum + i[k];
k--;
i[k] = i[k+1];
continue;
}
}else if(sum + i[k] > total || k!=1)//若和已超过total或者不是第一个元素
{ k++;//k向后回退一个元素
sum-=i[k];//减去回退的值
flag=0;
}else{
flag = 1;
}
if(flag){
printf("[%d]:",++count);
for(flag=1;flag<=n;++flag){
printf("%d",i[flag]);
}
printf("\n");
}
if(++k>n){//k向后回退一个元素后判断是否已经退出最后一个元素
break;
}
sum -=i[k];
i[k]++;//试验下一个分解
}
printf("%d");
}